
透明材质
Tutorial
intermediate
+0XP
15 mins
(7)
Unity Technologies

在本教程中,我们将讨论在 3D 移动应用程序中使用透明度的回报和后果。
1. 使用透明材质
使用透明材质设置时,必须考虑性能影响。较好的做法是尽可能使用不透明材质,特别是对于移动平台。
与渲染不透明对象相比,渲染具有透明度的对象总是会使用更多的 GPU 资源。在移动平台上使用很多透明对象会影响性能,特别是多次渲染相互重叠的透明对象时,该过程称为过度绘制。
在下面的屏幕截图中,蓝色光线本来可以具有透明效果,但使用不透明材质时看起来也不错:
2. 比较透明度实现
有多种方法可以在着色器中实现透明度;每种方法有各自的优缺点。
最常用的透明度实现是 Alpha 测试和 Alpha 混合。Alpha 测试使材质看起来完全不透明或完全透明。你可以设置遮罩的镂空阈值。在 Unity 中,这称为镂空。
Alpha 测试会禁用 GPU 中的某些优化功能,因此在不必要时,最好避免使用 Alpha 测试。当使用 Alpha 测试/镂空时,强烈建议你在目标移动平台上进行测试。此外,不要忘记进行性能分析,以比较该透明度实现与 Alpha 混合是否存在任何性能差异。
Alpha 混合使材质具有一定范围的透明度,让对象看起来部分透明。Unity 将该混合模式称为透明。
对于移动平台,Unity 建议使用 Alpha 混合,而不是 Alpha 测试。与 Alpha 测试实现一样,你应该进行性能分析,以比较 Alpha 测试与 Alpha 混合的性能。每个用例都是内容相关的,因此需要进行测量。如果需要使用 Alpha 混合,尽量让混合区域小一些。
Alpha 混合可实现部分透明,而 Alpha 测试可产生边界分明的镂空。下图对 Alpha 混合和 Alpha 测试进行了比较:
3. 用例:树叶
在树叶的静态视图中,与 Alpha 测试产生的锐利切口相比,Alpha 混合产生的边缘较为柔和,视觉效果更好。
但是,当树叶运动时,Alpha 混合看起来不正确。叶子没有以真实的顺序渲染,因为部分透明会在树叶彼此遮挡和分开时产生类似鬼影的效果。
Alpha 测试可以更好地处理叶子在运动时的透明度和顺序,让每片叶子都完全渲染或模糊不清,而不是部分透明。但是,与 Alpha 混合相比,其边缘更粗糙或有锯齿。
通常,Alpha 测试的视觉质量是可以接受的,因为锯齿边缘在运动中不那么明显。而使用 Alpha 混合时,一旦叶子和树枝开始来回跳动,视错觉就被打破了。
4. 总结
为避免过度绘制,在移动应用程序中实现任何类型的透明度之前,必须仔细评估需求。选择使用哪种类型的透明度并不总是明确的,但有疑问时,对应用程序进行性能分析可提供更多数据帮助你做出决定。在下一个教程中,我们将介绍适用于 3D 移动应用程序的更多材质和着色器最佳实践。