[转载]在Unity中制作高质量的光照效果(下)

发布于 2019-07-03  151 次阅读


本专家指南将介绍在Unity中制作高质量光照效果的多种高级方法,其中使用了2D和立方体贴图的光线遮罩,并且利用了Unity高清渲染管线HDRP中的高级着色器。

在Unity中制作高质量的光照效果(上)
在Unity中制作高质量的光照效果(中)

本文为Unity中制作高质量的光照效果系列最后一篇,我们将分享如何设置材质。你也可以合鲍健运老师的直播课程《运用光线遮罩制作高质量光照效果》来进行学习。

材质设置

我们观察下图中红色吊灯上灯罩的材质设置。根据表面类型,外观和实现的性能,有不同方法来仿制此材质。
下文中的示例都使用了HDRP中高度灵活的Lit着色器。

[转载]在Unity中制作高质量的光照效果(下)插图
[转载]在Unity中制作高质量的光照效果(下)插图1

发射率

模拟光线穿过灯罩的性能最低,最简单的方法是,使用不透明表面类型和发光纹理。

[转载]在Unity中制作高质量的光照效果(下)插图2

这样可以实现更多的艺术性控制,因为我们可以绘制特定细节到发光纹理中,以强调阴影的某些特性。
我们特别推荐这种方法用于不能执行带有复杂指令着色器的低端硬件,并且应该避免半透明效果。

[转载]在Unity中制作高质量的光照效果(下)插图3

半透明表面

模拟透明玻璃的常用方法是使用透明的表面类型和标准材质类型。我们可以通过Base Color中Alpha值或自定义纹理来控制透明度。但这不总会得到逼真的玻璃效果,因为缺少折射此产生的变形。
我们应该把透明部分分离为唯一的游戏对象,以确保它们的正确分类。这意味着每个玻璃灯罩都需要作为单独游戏对象使用。否则,如果玻璃的多个图层都属于相同游戏对象,会产生潜在的视觉问题。
HDRP的透明(Transparent)表面类型提供了修复这些伪影的渲染技巧,例如:Enable back then front(启用从后向前的渲染顺序),它会先渲染背景的透明游戏对象。Transparent Sort Priority(透明分类优先级)可以手动控制分类。在处理固定或预定义摄像机位置时,Transparent Sort Priority选项特别实用。
灯罩元素的单面网格和材质的Double Sided属性,有时也可以避免分类的问题。

[转载]在Unity中制作高质量的光照效果(下)插图4

半透明度

仿制非常厚的磨砂玻璃或半透明材质有一个不错的方法,就是使用较简单的不透明(Opaque)表面类型和半透明(Translucent)材质类型。
我们可以创建Diffusion配置文件来调整半透明度。如果整体的半透明效果感觉像平面,厚度图(Thickness map)可以为半透明灯罩产生更为逼真的渐变效果。

[转载]在Unity中制作高质量的光照效果(下)插图5

为了正确的表现半透明效果,每个阴影都需要有自己的点光源。这些光源应该足够小,以避免对环境其它部分产生不必要影响。
这五个额外光源的好处是,它们可以产生额外的自反射效果,因为它们提供来自光照设备上每个灯泡的更多镜面高光。需要注意,这种方法会提高Draw calls的次数,使着色过程更加耗费资源。

[转载]在Unity中制作高质量的光照效果(下)插图6

带折射的透明表面

其中一种更高级的解决方法是使用透明度,折射率和透光度来实现逼真的磨砂玻璃效果。这些效果消耗的资源相对较高,因此应该仅在高端平台运行的应用中使用这种材质设置。
由于透明度的限制依旧存在,因为我们需要把灯罩分离城独立的游戏对象,以减少多数分类问题。

[转载]在Unity中制作高质量的光照效果(下)插图7

几何镜面的抗锯齿

使用传统抗锯齿方法难以解决的一个问题,是由高频光滑表面产生的镜面抗锯齿效果,例如下面示例中吊灯的金色支撑柱。
高清晰渲染管线HDRP提供根据材质而定的镜面抗锯齿功能,旨在解决高细节几何体的这类问题。

[转载]在Unity中制作高质量的光照效果(下)插图8

屏幕空间差异(Screen space variance)可以减少屏幕上的锯齿现象。我们需要在锯齿效果和模糊效果间找到视觉上的折中办法。
如下图所示,从左至右,屏幕空间差异(Screen space variance)依次为:0.0、0.05、0.1、0.2。

[转载]在Unity中制作高质量的光照效果(下)插图9

较大的Screen space variance值也可以大大改变特定材质的观感。这个示例中,当Screen space variance值大于合理值时,金色柱子会失去金属效果。

焦散

焦散效果会给遮罩带来最后的修饰,它们可以极大改进光照的逼真程度,并且破坏非常平坦干净的表面,例如:墙体和天花板。

[转载]在Unity中制作高质量的光照效果(下)插图10
[转载]在Unity中制作高质量的光照效果(下)插图11
[转载]在Unity中制作高质量的光照效果(下)插图12

Arnold渲染器在渲染清晰焦散时并不高效,而Unity的渐进式光照贴图无法生成焦散效果,因此请使用V-Ray或Corona等其它渲染器。V-Ray的速度很快,可以非常高效地生成“仅有焦散”的渲染结果。
通过实验,我们发现在把光源放到几何体内,或灯泡用作网格光源时,这些渲染器都无法得到很好的效果。
当我们在对象的一段距离外放置小而强烈的光源时,它们只能提供可以接受的结果。因此,我们把V-Ray平面灯光对准具有不同折射率的随机形状半透明物体,创建出通用焦散立方体贴图的大型库。
结果可能不符合预期,我们需要多次实验,细微的细分差异和光线位置调整可能产生区别很大的焦散效果,这在构建大型焦散库时会很方便。

[转载]在Unity中制作高质量的光照效果(下)插图13

我们可以把这些焦散立方体贴图混合在光线遮罩纹理上,或把它们指定给单独的光源。使用特别的“焦散光源”会提高光照的资源消耗量。
当涉及焦散的强度时,它会提供很大的灵活性,我们可以大大提高对应光线的强度,不必重新校准光照设备的遮罩。
当在光照设备的遮罩混合焦散效果时,我们可以测试不同的混合模式,例如:Overlay(叠加)和Soft Light(柔和光线),这确保了遮罩的整体亮度不会发生根本变化。

[转载]在Unity中制作高质量的光照效果(下)插图14

我们也可以从现实照片中提取焦散,并使用Photoshop或Substance Painter在立方体贴图的面上手动标记焦散。我们也可以向2D遮罩添加更简单的焦散,并将其投影到带有聚光灯的场景中。

示例1:吊灯

我们可以在吊灯的立方体贴图使用焦散,模拟出从金色中心结构反射的光线。
此示例使用了特别的焦散点光源,因为焦散需要非常高的光强度。如下图所示,左侧无焦散,右侧则使用了特别的焦散光。

[转载]在Unity中制作高质量的光照效果(下)插图15

示例2:壁灯

我们可以使用波状和噪声较大的焦散立方体贴图,模拟出灯罩的金色边缘产生的内部反射效果,以及玻璃瑕疵和子像素划痕。
如下图所示,左侧是无焦散,右侧是混合焦散效果。

[转载]在Unity中制作高质量的光照效果(下)插图16

示例3:日光灯灯管

我们可以复制二个玻璃灯管之间的内部反射效果,以及光滑反射板的清晰高光,以降低日光灯灯管的平面感。具有长条纹的通用焦散立方体贴图是最好的选择。
如下图所示,左侧是无焦散,右侧是混合焦散效果。

[转载]在Unity中制作高质量的光照效果(下)插图17

结语

高清渲染管线HDRP及其基于物理的光照模型和着色器,可以实时提供近乎CG质量的光照效果。我们可以模拟逼真的可折射半透明表面。较早的内置渲染管线也可以利用光线遮罩,制作出带有光线跟踪质量阴影的光线道具。
这样仅需小部分实时阴影要求的资源,这意味着我们可以在无法运行高清晰渲染管线HDRP的老式移动设备上制作高质量阴影。
我们仍然需要一种艺术方法强调光照的特定元素,例如:阴影、焦散和色温。光照依旧是一种难以掌握的艺术形式,特别是在处理需要技术知识和艺术感知力的复杂系统时。你可以把这些方法应用于任何艺术风格,包括从高端逼真模拟效果,到移动平台的风格化角色扮演游戏。
希望你能通过这篇文章学习到许多知识,学会烘焙出逼真光线遮罩,并提高Unity场景的视觉效果。


版权所有:Unity China 原文地址:在Unity中制作高质量的光照效果(下)