Note that this guide was originally created for use with the Built-in Render Pipeline in Unity 2017.3. For information on adapting this guide for use with the Universal Render Pipeline (URP) and the High Definition Render Pipeline (HDRP), see Update: believable visuals in URP and HDRP.
在建模之前提前制定计划非常重要。快速制作的模型在预产期间或用于粗制空间时都表现良好,但在需要最终确定资源来制作适当场景时,请注意以下几点:
尽管现代硬件比以往任何时候都更强大,但在场景中使用简单几何体总是有好处的。对于实时设置而言,不必要的曲面细分和复杂几何体是很难管理的,并可能会影响性能和使用不必要的内存。以下示例演示了玩家从未见过的几何体如何浪费光照贴图和过度绘制等资源并导致漏光:
如果要将烘焙光照或实时 GI(全局光照)与光照探针结合使用,则需要确定游戏对象对场景中的光照有影响,还是仅接收场景中的间接/烘焙光照。
要设置游戏对象来影响光照,请确保在 Inspector 窗口中选中 Contribute GI。这样可以提供更简单和更平滑的表面区域,而由于在光照贴图纹理的空间使用效率方面的优势,这些区域将带来更好的间接反弹/烘焙光照。请注意:
有时,在实时 GI 中,您可以简化网格的 UV 以使几何体显著减少使用的资源,并获得最佳效果和更少瑕疵。
当游戏对象仅接收来自实时光照和光照探针的光照时,几何体没有光照贴图 UV 限制。如果几何体很大,仍然需要特别注意几何体,因为单个光照探针可能无法正确照亮几何体,可能需要光照探针代理体 (Light Probe Proxy Volume) 组件将多个探针光照定义拼接到一起。
并非总是需要使用光照贴图或使用实时 GI 来处理非移动的游戏对象。如果游戏对象很小,或者不存在会反射大量光的表面,则可能不需要将其包含在光照贴图中。下面显示的长椅和栏杆就是很好的例子:
UV 布局有助于在使用相同大小的内存进行法线贴图烘焙(通常为 UV1)、光照贴图烘焙 (UV2) 和实时光照贴图 (UV3) 时提高视觉品质,尤其适合具有不可平铺纹理的几何体。
以下是制定 UV 布局策略时需要注意的一些提示:
对于实时 GI (UV3),应为大型区域(表示模型中的大型表面)的 UV 空间设定高优先级,以便减少内存使用量并避免接缝。在许多情况下,模型中的自动 UV 设置确实可以帮助优化图表。有关实时 GI 的图表优化的深入信息,请参阅 Unity 提供的优化 Unity 的自动展开教程。
对于不需要光照贴图的游戏对象,除非自定义着色器需要,否则不要创作其他 UV 以免浪费内存和时间。
真实世界的游戏对象具有高度细节化特点。要创建实时几何体,您需要确定要在几何体中添加的细节,以及要在法线贴图和纹理中添加的细节。在为实时场景开发资源时,将复杂多边形烘焙到简单多边形法线贴图是很正常的。
需要记住的一个重要细节是游戏对象上的边缘获得高光的方式。在现实生活中很难找到具有非常锋利边缘、具有非倾斜边缘或没有详细边缘定义的物体。复制逼真的边缘效果可提高场景的可信度。
您可以使用适当的平滑组来提高模型和法线贴图的效率。以下是使用平滑组的一些提示:
具有良好法线贴图的平滑多边形可节省顶点数,相当于渲染更高效的几何体。下面一个简单示例比较了以下设置:
具有拆分平滑组的单个平面(等于 36 个顶点)。
位于 1 个平滑组内的简单 18 三角平面(等于 16 个顶点)。
单个平面和三角平面顶点数比较
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.