原标题:【程序猿】Unity5 光照指导手册
点击上方蓝字“Gad-腾讯游戏开发者平台”一起学习
翻译:王成林(麦克斯韦的麦斯威尔)
审校:黄秀美(厚德载物)
这是一篇关于Unity 5光照处理的实用笔记。
标准实时光照
标准实时光照包括环境光、环境反射以及实时的光照和阴影。它不需要任何GI,也不需要预先计算任何东西。我们在光照->场景中禁用预先计算的实时GI和已烘焙的GI这两个选项。
0 1
环境光
平等地影响所有的对象。
环境光源(天空盒,梯度,颜色)和强度
0 2
环境反射
随相机角度改变的反射路径。独立于环境光进行作用。还会影响菲涅尔效果。
如果我们使用反射探头(Reflection Probe),它们会成为受它们影响的对象的反射源和反射强度,所以全局反射设置对这些对象不起作用。反射跳跃(Reflection Bounce)定义了反射可以在反射探头之间跳跃(也就是说,一个探头在另一探头的影响下捕获对象)的次数。
反射源(天空盒,立方图(Cubemap)),分辨率和反射强度
反射探头对该对象造成影响,所以全局环境反射源对该网格物体不会造成影响
0 3
标准光照
场景中所有的标准实时光照对对象采取直接光照并会产生阴影。
默认情况下太阳光是场景中的第一个定向光。默认天空盒根据太阳的水平倾斜度调整它的强度和颜色。或者可以选择一个特定的定向光作为太阳光对默认天空盒产生影响:
预先计算的实时光照
预先计算的实时光照加入了实时的光照跳跃、颜色溢出(color bleeding)以及自发光材料。一切都会动态改变(光照的颜色和强度,材料颜色,材料自发光度等),且光照也会进行相应的实时更新。
开启光照->场景->预计算实时GI,禁用已烘焙GI。
0 4
光照跳跃
每个光照都被设置为在对象之间进行跳跃并会彼此影响。
0 5
自发光材料
标记为静态的对象包含一个自发光材料,并会根据它们的几何形状进行发光。
预先计算的实时光照会在场景中被标记为静态的物体上进行计算。每当任意被标记为静态的对象的转换(Transform)被修改时,或者当静态标识其本身发生变化时,预计算阶段都会被触发。
光照->场景->预计算实时GI->实时分辨率参数直接影响了数据预计算所需要的时间。在编辑器中使用0.01-0.5范围内的较低数值可以快速完成原型构造。
CPU占用量影响了运行阶段中对于动态光照的改变而引起的反应。它不会影响编辑器中用于烘焙预计算数据的CPU。
光照跳跃和材料自发光只影响静态对象。预计算的效果必须使用光照探头(lighting probe)才能作用于动态对象。
预计算实时光照中的环境光
环境光影响了静态几何体中的光照可以“从外部”接触到的那部分。背面也算。例如,在一个由静态几何体定义外壳的封闭空间内,环境光对其中任何静态网格物体都不会产生影响。任何可以从静态几何体外部接触到的“空隙”,或者部分,都会相应受到环境光的影响。
已烘焙的光照贴图
环境光、标准光照(烘焙的或混合的)、光照跳跃和自发光材料都被烘焙到光照贴图材质中。只有环境反射可以在运行时改变。
开启光照->场景->已烘焙的GI。禁用预计算实时GI。
标准光照应该被设置为“烘焙”或者“混合”,以便在“仅烘焙”和“仅实时”GI模式之间进行无缝切换。
此参数:光照->场景->烘焙的GI->烘焙的分辨率直接影响了光照贴图的生成时间。在编辑器中使用1-4范围内的较低数值可以快速完成原型构造。
调整光照(环境光,标准光,光照跳跃,自发光材料)中的任意参数或者修改任意静态对象会触发光照贴图一个新的计算阶段。
基本GI设置
非直接光照(Indirect Light)是环境光、光照跳跃以及自发光材料(指对周边对象的效果,不是对自发光对象本身)的光照效果,但是不包括环境反射。场景窗口->辐射照度(Irradiance)会显示场景中的非直接光照:
这些设置在实时模式和烘焙模式中都会影响非直接光照:
·非直接光照强度:调整了非直接光照(环境光+跳跃+自发光)的大小
·跳跃强度:光从一个平面跳跃到另一平面的强度。跳跃的光照乘以该设置增强的曲面的albedo值。
这些设置只会影响烘焙GI模式
·定向模式(DirectionalMode):是否将定向光和高光信息存储在烘焙GI模式中的光照贴图中
·图集大小(Atlas Size):烘焙GI模式中光照贴图的大小
综合不同的光照方法
如果你想要深度了解Unity 5中的全球光照(GI),你一定要读一读Uniy 5 – Lighting andRendering教程。这里引用了该教程中的一段话。
预计算的实时光照+已烘焙的光照贴图
这样做并不好,即使两者默认都为开启状态:
尽管我们可以同时使用已烘焙的GI光照和预先计算的实时GI,请注意同时渲染这两套系统所需要的性能成本是每一个系统所需性能成本的总和。我们不仅需要将两套光照贴图储存在显存中,还需要在着色器中承担这两者解码所需的性能成本。
你需要根据你的项目需求以及期望的目标平台来决定使用哪一种方法。记住当将一系列不同的硬件作为目标时,通常拥有最低性能的硬件将决定你需要使用哪种方法。
标准实时光照+已烘焙的光照贴图
这是处理在相同恒定光照条件下的静态对象和动态对象的一个简便方法:
选择“混合”烘焙模式[在光照组件中],被标记为静态的游戏对象(GameObject)仍会在它们的已烘焙的GI光照贴图中包含该光照。然而,和被标记为“已烘焙”的光照不同的是,混合光仍会对你场景内的非静态游戏对象产生实时的定向光。如果你想在你的静态环境中使用光照贴图但你仍想要角色使用这些光对光照贴图的几何体投射实时阴影的话,你可以采用这种方法。
生成光照贴图文件
默认情况下每次当光照贴图计算阶段被触发(例如移动静态元素)时会生成光照贴图文件并将其存储在内部。
通过禁用光照选项窗口中的Auto选项然后点击编译按钮我们可以手动计算光照贴图。生成的文件保存在和它们所属场景名称相同的文件夹中。烘焙的数据包括光照贴图和反射探头。
基本GI设置部分中的定向模式和图集大小参数影响光照贴图文件的类型和数目。
评论区留言:
问:我们可以同时开启预计算GI和烘焙GI两个选项?这样的话对于最终结果的性能/画质有何主要影响?还是说开启这二者只会浪费资源?
答:我做了一些测试但是结果具有不确定性,也许是因为Unity早期的GI整合的原因。当开启预计算和烘焙GI时,光照的表现应该取决于它们具体的设置(实时,烘焙,混合)。
问:假设我有一个场景,其中只含一个定向烘焙光、一些静态的和可移动的对象并且开启了烘焙GI选项。那么可移动对象会受到定向光的实时照射,即使该光被标记为已烘焙吗?可移动对象会对静态几何体产生阴影吗?另外我认为当一个可移动对象在被烘焙的阴影中行走它不会接收到阴影,对吗?
答:如果希望可移动对象接收到定向光且可以对静态几何体产生阴影那么定向光必须被标记为混合。
被烘焙的阴影不会影响移动对象。没错,光照探头有助于减弱影响。你应该将它们放置在阴影体积的边界上:一些探头在阴影体积的内部,一些在外部。因此,可移动对象在进入阴影体积后很快会被阴影完全覆盖。否则,效果会显得“平滑”,“渐进”。
问:在中等级别的安卓设备上,关于非真实感场景(non photo-realistic scene)的烘焙分辨率、烘焙边距(baked padding)和间接分辨率的数值大概多少为好呢?
答:首先,你使用LOD了吗?我认为中等级别的智能机性能有限,所以通常你需要使用LOD才能得到不错的画质和性能。
你应该认识到Unity当前的光照烘焙作用于LOD时会有很多bug,当你解决完光照烘焙+LOD的问题后,你需要开始考虑你的计算机需要花费多长时间生成光照贴图了。
我会试试禁用间接光照,并且我会使用默认烘焙分辨率的1/2或1/4,这样会缩短生成时间。我觉得这样设置的话对于像智能手机的小屏幕会比较好。
点击一下
立即阅读近期热文
……
添加小编微信,发送“程序”,可享双重福利
1.加入GAD程序猿交流基地
获取行业干货资讯
观看大牛分享直播
2.直接领取60G独家程序资料库
内含
腾讯内部分享、文章教程、视频教程等
全套资料
↓长按添加小编GAD-沫沫↓返回搜狐,查看更多
责任编辑: