
阴影
Tutorial
intermediate
+0XP
5 mins
(8)
Unity Technologies

在本教程中,我们将讨论实现和优化阴影的替代方法。
1. 实现伪阴影
真实阴影的渲染计算成本很高。我们建议在动态对象上实现伪阴影,而不要使用动态光照。
实时阴影通常通过阴影贴图技术生成。渲染到阴影贴图的场景几何体的成本与绘制到其上的顶点数量相当。考虑到成本,限制场景中的阴影投射几何体数量以及实时阴影投射光照的数量非常重要。
下面是实现伪阴影的一些方法:
- 使用放置在角色下方的 3D 网格、平面或四边形,并对其应用模糊的纹理。
- 编写自定义着色器以创建更复杂的模糊阴影。
下面的屏幕截图显示了使用阴影网格的阴影实现。
将光照信息直接绘制到纹理上不失为一个好方法。这样做可减少实时光照所需的额外计算。当在场景中烘焙光照时,绘制的光照还可以节省内存,因为场景需要较少的纹理存储光照贴图。
尽可能使用着色器或材质模拟光照。可以使用自定义材质模拟不同类型的光照效果。例如,你可能希望角色具有边缘光照,以提高其可见性和视觉效果。对于这种情况,可以使用着色器营造光照错觉,而不是使用光源创造这种效果。
着色器可用于创建各种有用的视觉效果和风格。有关着色器和材质的更多信息,请参阅本课程的上一个项目。
2. 网格渲染器(Mesh Renderer)组件设置
不管场景使用何种光照,都必须确保正确设置网格渲染器。
一个良好的原则是关闭一切不打算使用的设置。例如,Cast Shadows 等设置可能会增加渲染场景的成本,即使对象没有光照也是如此。下面的屏幕截图显示了一个网格渲染器设置的示例:
屏幕截图中显示的选项设置为通过混合最近探针的光照信息来接收光照,但不接收反射。我们使用的是 Blob 方法,因而关闭了 Cast Shadows。场景是烘焙的,没有任何对象投射实时阴影,因此也没有选中 Receive Shadows。
3. 总结
阴影可以为 3D 环境增加真实感,但在运行时的计算成本很高。在移动设备上,最好尝试使用着色器、纹理或其他不依赖阴影投射光照的方法伪造阴影。在下一个教程中,我们将深入剖析一个光照演示,以展示烘焙光源可能带来的性能提升。