《Unity着色器和屏幕特效开发秘笈(原书第2版)》——1.3 从Unity 4向Unity 5迁移

简介:

本节书摘来自华章计算机《Unity着色器和屏幕特效开发秘笈(原书第2版)》一书中的第1章,第1.3节,作者 [英]艾伦朱科尼(Alan Zucconi)[美]肯尼斯拉默斯(Kenneth Lammers),译 占红来,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3 从Unity 4向Unity 5迁移

不可否认,电子游戏中的图像技术在过去的10年中发生了翻天覆地的变化。每一个包含前沿技术的新游戏的面世,带给我们的都是无与伦比的实时超现实体验。同样,在Unity中着色器及其相关技术也是日新月异,这种不断的更新换代很多时候也是大家产生迷惑的根源之一。在Unity 5之前,主要有两种着色器被采用:漫反射和高光着色器。顾名思义,这两种着色器分别用在无光和高光材料上。如果你已经用了Unity 5,可以跳过这一部分,这部分内容主要解释如何使用Unity 5重现这些之前的特效。

1.3.1 准备工作

开始这一部分之前,我们需要准备一个Unity 4的环境。在Unity 4中同样有一些预先提供好的内建着色器。如果你是开始开发一个新游戏,毫无疑问你会使用最新版本的Unity,但是如果是个遗留项目,很有可能之前使用的就是一些低版本的Unity。在做版本迁移的时候一定要格外小心。在Unity引擎中,很多东西都发生了变化。而且就算是某些内建着色器能正常工作,脚本也可能变了。如果你准备迁移整个工作空间,首要的是要做好备份。很重要的一点是:要记住仅仅保存资源和场景文件是远远不够的,Unity中大量的配置文件保存在其元数据中。做迁移备份时最安全的方式是将包含项目的整个文件夹拷贝一份。最好的方式是从资源管理器(Windows)或者Finder(Mac)中将整个文件夹物理拷贝一份。

1.3.2 操作步骤

如果你想将之前做好的着色器迁移到Unity 5,有两种方式:自动升级项目或统一切换到标准着色器。

自动升级

这是最简单的一种办法。Unity可以导入之前版本的项目并对其进行升级。你会发现,升级转换完之后,就不能用Unity 4了,哪怕你的资源文件一个都没有改动。原因是Unity的元数据已经做过转换了。自动升级的步骤是打开Unity 5,单击OPEN OTHER来选择老版本项目所在的文件夹。Unity会询问你是否需要进行转换。单击Upgrade按钮开始转换。Unity会重新导入你的所有资源文件,重新编译脚本。如果你的项目很大的话,这个过程可能持续数小时。转换完成之后,你就会发现一些改变。例如材质的Inspector栏中可能会从Bumped Diffuse变成了Legacy Shader/Bumped Diffuse。

 即使Unity 4中的诸如漫反射、镜面反射等着色器都已经废弃了,Untiy 5还是保持了良好的向下兼容性。你可以在材质的下拉菜单中的Legacy Shaders目录下找到这些遗留着色器。

使用标准着色器

如果不想继续使用遗留的着色器,可以使用Unity 5中新的标准着色器来取而代之。在替换之前,需要记住一点:这两者是基于不同的光照模型来构建的,因此肯定会影响材质本身的外观。Unity 4中有超过80种不同的内建着色器,总共分为6个大类(普通、透明、透明剪切、自照明和反射类等)。在Unity 5中,全都被标准着色器取代。不幸的是,并没有什么魔法可以将你的着色器直接转换成标准着色器,但是你可以通过下面这个表格来理解如何配置Unity 5中的标准着色器来模拟Unity 4中那些遗留的着色器:

image

可以使用Inspector中的Shader下拉菜单来让老的材质使用这些着色器,只需要选择合适的标准着色器即可。如果你的老着色器使用了纹理、颜色和法线映射,这些属性会自动应用在新的标准着色器中。你可能还是需要配置一些标准着色器的参数来让它跟之前的光照模型保持一致。下图展示的是一个斯坦福兔子在旧的漫反射着色器(右图)、转换成标准着色器(左图)和光滑度(Smoothness)调为0的标准着色器(中图)中的显示效果:

image

迁移自定义着色器

如果你在Unity 4中写过自定义着色器,大部分情况下在Unity 5中可以直接使用这些代码。除此之外,Unity 5中对着色器的工作方式做了些微调,因此可能会引起一些错误或者矛盾。最重要的一点修改是光的亮度。Unity 5中的光亮度是Unity 4 中的两倍。所有老的着色器在重写的时候都考虑到了这一点。如果你升级一些内建着色器,或者切换到标准着色器,不会发现任何问题。但是如果你重写过自己的光照模型,需要注意新环境下光亮度不再需要乘以2倍了。下面这段代码可以确保这一点:

image

如果你没写过着色器也不用害怕。光照模型相关内容会在第3章中详细解释。

 相比于Unity 4,Unity 5在着色器的处理方式上还有一些其他方面的改动。你可以在http://docs.unity3d.com/Manual/Upgrade Guide5-Shaders.html的Shaders in Unity 5.0中找到更详细的改动说明。

1.3.3 工作原理

制作着色器始终要考虑性价比。拟实效果好的着色器需要占用大量的计算资源,在某些设备上可能会引起延时。一般而言特效最好应用在一些非常重要、缺之不可的地方。如果某种材质并不需要高光反射,那么就没有必要专门用一个着色器来计算高光效果。这也是Unity 4中引入了如此多不同的着色器的原因之一。Unity 5中的标准着色器理论上可以替代之前的所有着色器,因为标准着色器集合了法线映射、透明和反射功能。但是在Unity 5中进行了某些合理的优化,以确保只计算那些真正必需的特效。如果你的标准材质并没有反射效果,那么Unity 5是不会计算这一部分的。

除此之外,标准着色器主要是为拟实材质而设计的。相对而言,老的漫反射和高光着色器并不是为拟实材质而设计的。这也是从老的着色器迁移到标准着色器时,需要对物体的渲染方式做一些修改的原因之一。

1.3.4 参考

  • 第3章深入讲解了漫反射着色器和高光着色器是如何工作的。即使在Unity 5 中这些着色器已经废弃了,理解它们的原理对于你设计新的光照模型也是大有裨益的。
  • 第4章将会向你展示如何释放Unity 5中的标准着色器的更多潜力。
相关文章
|
4月前
|
算法 vr&ar C#
使用Unity进行虚拟现实开发:深入探索与实践
【8月更文挑战第24天】使用Unity进行虚拟现实开发是一个充满挑战和机遇的过程。通过掌握Unity的VR开发技术,你可以创造出令人惊叹的VR体验,为用户带来前所未有的沉浸感和乐趣。随着技术的不断进步和应用场景的不断拓展,VR开发的未来充满了无限可能。希望本文能为你提供有用的指导和启发!
|
3月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
264 0
|
3月前
|
图形学 iOS开发 Android开发
从Unity开发到移动平台制胜攻略:全面解析iOS与Android应用发布流程,助你轻松掌握跨平台发布技巧,打造爆款手游不是梦——性能优化、广告集成与内购设置全包含
【8月更文挑战第31天】本书详细介绍了如何在Unity中设置项目以适应移动设备,涵盖性能优化、集成广告及内购功能等关键步骤。通过具体示例和代码片段,指导读者完成iOS和Android应用的打包与发布,确保应用顺利上线并获得成功。无论是性能调整还是平台特定的操作,本书均提供了全面的解决方案。
156 0
|
4月前
|
vr&ar 图形学 开发者
步入未来科技前沿:全方位解读Unity在VR/AR开发中的应用技巧,带你轻松打造震撼人心的沉浸式虚拟现实与增强现实体验——附详细示例代码与实战指南
【8月更文挑战第31天】虚拟现实(VR)和增强现实(AR)技术正深刻改变生活,从教育、娱乐到医疗、工业,应用广泛。Unity作为强大的游戏开发引擎,适用于构建高质量的VR/AR应用,支持Oculus Rift、HTC Vive、Microsoft HoloLens、ARKit和ARCore等平台。本文将介绍如何使用Unity创建沉浸式虚拟体验,包括设置项目、添加相机、处理用户输入等,并通过具体示例代码展示实现过程。无论是完全沉浸式的VR体验,还是将数字内容叠加到现实世界的AR应用,Unity均提供了所需的一切工具。
153 0
|
6月前
|
C# 图形学 C++
使用vscode开发C#+unity没有代码提示问题
使用vscode开发C#+unity没有代码提示问题
91 0
使用vscode开发C#+unity没有代码提示问题
|
6月前
|
图形学
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)
92 0
|
6月前
|
图形学
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏3(附项目源码)
100 0
|
6月前
|
图形学 索引
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)
【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)
147 0
|
7月前
|
图形学
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
【Unity C#_菜单Window开发系列_Inspector Component UnityEditor开发】
|
7月前
|
算法 安全 图形学
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)
Unity Hololens2开发|(十一)MRTK3 Solver(求解器)