Version: 6000.3
语言: 中文
光照贴图UV
生成光照贴图UV

光照贴图UV简介

实时全局光照 一组对直接和间接光照进行建模以提供逼真的光照结果的技术。
请参阅术语表
系统和烘焙全局光照系统使用光照贴图,因此需要lightmap:预渲染的纹理,包含光源对场景中静态对象的效果。光照贴图覆盖在场景几何体之上,以创建光照效果。更多信息
请参阅术语表
乌布苏。

Unity 为实时全局光照系统和烘焙全局光照系统使用单独的光照贴图 UV 集。这有两个原因:

  • 实时光照贴图和烘焙光照贴图之间的实例分组没有直接对应关系;位于同一实时光照贴图中的实例可能位于两个不同的烘焙光照贴图中,反之亦然。
  • 以不同比例显示的网格体在烘焙光照贴图中共享光照贴图UV,但在实时光照贴图中不共享UV。

烘焙光照贴图UV

烘焙的光照贴图UV是每个网格的:所有实例都是相同的网格Unity 的主要图形基元。网格构成了 3D 世界的很大一部分。Unity 支持三角或四边形多边形网格。Nurbs、Nurms、Subdiv 表面必须转换为多边形。更多信息
请参阅术语表
共享相同的烘焙光照贴图UV。Unity 可以在导入模型时计算烘焙光照贴图的 UV,或者您可以提供自己的数据。

Unity 将烘焙的光照贴图 UV 存储在 Mesh.uv2 通道的网格中。此通道映射到TEXCOORD1着色器在 GPU 上运行的程序。更多信息
请参阅术语表
语义,通常称为“UV1”。

如果启用了 Baked Global Illumination,并且给定的 MeshRenderer 从光照贴图接收其全局光照,则 Unity 会使用 Mesh.uv2 通道中的数据将烘焙的光照贴图正确映射到网格体。

注意:如果要在给定网格体中将 Mesh.uv2 用于其他目的,则必须确保使用网格体的所有 MeshRenderer 组件都接收来自光源探针光探针存储有关光线如何穿过场景中空间的信息。在给定空间中排列的光源探针集合可以改善移动对象的光照和该空间内的静态LOD场景。更多信息
请参阅术语表
而不是光照贴图。使用网格渲染器组件 InspectorMeshRenderer.receiveGI API 更改此设置。

有关更多信息,请参阅生成光照贴图UV

实时光照贴图UV

实时光照贴图UV是每个网格体渲染器:同一网格体的所有实例共享相同的输入数据,但网格体渲染器(Mesh Renderers一个网格体组件,它从网格体过滤器中获取几何体,并在对象的变换组件定义的位置渲染它。更多信息
请参阅术语表
可以在运行时使用不同的实时光照贴图UV。Unity 在预计算阶段计算实时全局光照系统的 UV。此计算将每个网格体的UV作为其输入,并使用该数据创建每个网格体渲染器UV。Unity 可以在导入模型时生成每个网格的输入 UV,也可以提供自己的数据。

其工作原理如下:

  • Unity 可以使用 Mesh.uv3 通道中的数据作为实时光照贴图 UV 计算的输入。Mesh.uv3映射到TEXCOORD2着色器语义,通常称为“UV2”。
  • 如果中没有数据Mesh.uv3但是 Mesh.uv2 中有数据,Unity 回退到使用Mesh.uv2作为实时光照贴图UV计算的输入。Mesh.uv2用于烘焙光照贴图UV。通常使用烘焙的光照贴图UV作为实时光照贴图UV的输入数据。
  • 计算结果按 MeshRenderer 存储在 MeshRenderer.enlightenVertexStream 中。如果启用了实时全局光照,并且给定的 MeshRenderer 组件为全局光照做出贡献,并从光照贴图接收其全局光照,则 Unity 会自动将数据传入MeshRenderer.enlightenVertexStreamTEXCOORD2着色器中,而不是 Mesh.uv3 中的数据。

注意:如果要在使用实时全局光照的网格体中将 Mesh.uv3 用于其他目的,则必须确保使用网格体的所有网格体渲染器组件都接收来自光照探针的全局光照,而不是光照贴图。使用网格渲染器组件 InspectorMeshRenderer.receiveGI API 更改此设置。

有关更多信息,请参阅生成光照贴图UV

Unity 如何计算实时光照贴图 UV

当 Unity 获取每个网格体的输入 UV 并将它们处理为每个网格体渲染器输出 UV 时,就会发生这种情况。

包装

Unity 重新打包实时光照贴图 UV,以确保每个图表的边界在各个方向上都落在纹素中心,然后在每个图表的边界周围添加半纹素填充。这可确保所有图表之间都有完整的空间纹素。

这是因为实时光照贴图的分辨率故意较低,以便实时更新它们。低分辨率不会影响图形质量,因为这些光照贴图仅存储低频间接光照,但当图表共享纹素时,可能会导致渗色。重新打包可确保图表永远不会共享纹素。它避免了这个问题,还允许 Unity 有效地将图表打包在一起。

实时光照贴图UV打包
实时光照贴图UV打包

注意:这种打包技术意味着计算出的UV取决于实例的比例和光照贴图分辨率,这就是实时光照贴图UV是每个网格体渲染器的原因;但是,Unity 会尽可能自动优化这一点,并且使用具有相同比例和光照贴图分辨率的相同网格体的网格体渲染器共享相同的 UV。

合并

或者,您可以指示 Unity 在此过程中尽可能合并 UV 图表。这减小了光照贴图的大小,并可以提高运行时内存使用率和性能。

您可以在任何游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
使用网格渲染器组件。在网格体渲染器检查器中,导航到 光照贴图(Lightmapping) 分段并优化实时UV。

注意:此功能有时会在原始 UV 映射中出现不连续性错误。例如,故意锋利的边缘可能会被误解为连续的表面。如果发生这种情况,请禁用此功能。

光照贴图UV
生成光照贴图UV