纹理颜色(Texture Color) 模式会将颜色绘制到网格体上,而绘制内容将被写入到一个名为 网格体绘制纹理 的特殊纹理中。该纹理存储在正在绘制的网格体实例上。这类似于顶点颜色模式的绘制内容的存储方式,即绘制内容存储在正在进行绘制的网格体实例的额外顶点缓冲区中。将颜色绘制到网格体绘制纹理,而不是绘制到网格体的顶点,这样做的优点是,选择纹理大小时不受顶点密度影响。如果你的网格体不需要如此高的绘制分辨率,这可能很有用,但对于一些帧预算较小的平台,这可能会受到限制。
Nanite网格体不支持为每个实例进行顶点颜色绘制。只能选择使用纹理颜色绘制。
网格体纹理颜色绘制的必要设置
为了让项目和网格体能够使用 纹理颜色(Texture Color) 模式,必须执行以下几个步骤。即:
- 为项目启用虚拟纹理。
- 使用纹理颜色模式将网格体绘制纹理添加到选定的网格体实例中。
- 设置材质以使用网格体绘制纹理。
- 为网格体绘制设置网格体的UV分配。
向静态网格体中添加网格体绘制纹理
按照以下步骤将网格体绘制纹理添加到你的静态网格体中:
- 使用 模式(Modes) 下拉菜单,在关卡视口中启用 网格体绘制模式(Mesh Paint Mode) 。
- 在网格体绘制(Mesh Paint)面板中,选择 纹理颜色(Texture Color) 选项卡。
-
在纹理颜色(Texture Color)工具栏中,点击 添加(Add) 工具。
如果 添加(Add) 工具显示为灰色,请检查你的项目是否已启用虚拟纹理(Virtual Textures)。
这将创建一个空白的虚拟纹理资产,并将其分配给 网格体绘制纹理 。你可以在网格体组件的细节(Details)面板中的"网格体绘制(Mesh Painting)"类别下检查此纹理。
网格体绘制虚拟纹理材质表达式
你需要设置一个可以引用纹理对象进行绘制的材质,才可以使用已创建并已分配给网格体组件的网格体绘制纹理。
你需要使用 MeshPaintTextureObject 材质表达式和一个Texture Sample节点,将网格体绘制纹理的引用传递给此材质。如果此材质所分配的网格体存在网格绘制纹理,则在纹理颜色(Texture Color)绘制模式下,你将能够在网格体上进行绘制。
在Texture Sample节点上, Tex 输入接收MeshPaintTextureObject节点的数据,且UV必须设置为静态网格体用于绘制的UV坐标(请参阅下面的"静态网格体UV和坐标")。
有时,你可能希望多个网格体共享一个材质,而不希望它仅用于使用网格纹理绘制的网格体。在这些情况下,你需要使用 MeshPaintTextureReplace 材质表达式。它是一个"回退"选项,用于根据是否有有效的网格体绘制纹理可供取样来切换输入。
要使用此节点,当此材质所分配的网格体上没有有效的网格体绘制纹理时,将使用 默认(Default) 路径。此路径可以是一个简单的颜色或纹理节点,也可以是更复杂的内容。当此材质所分配的网格体上有有效的网格体绘制纹理时,将使用 MeshPaintTexture 路径。
如需网格体绘制纹理的设置和使用指南,请参阅为纹理颜色绘制设置材质和网格体。
静态网格体UV和坐标
为了有效地在网格体上使用纹理颜色模式进行绘制,你的网格体必须具有 合适的 UV参数化。理想情况下,这意味着UV在整个网格体上是唯一的,没有重叠图表、重复UV或平铺UV。有些网格体可能已经这样设置了,但有些可能并非如此。当UV的设置不适合进行网格体绘制时,网格体工具仍然可以工作,但可能会得到意外的结果,例如在网格体的一个部分上进行绘制时,也会在其他部分上进行绘制。
以下面的立方体为例。左边的立方体具有重叠UV,其中每个面都使用了整个0,1 UV空间。右边的网格体具有唯一的UV,没有重叠、重复或平铺。
![]() |
![]() |
| 具有重叠UV图表的静态网格体 | 具有唯一UV图表的静态网格体 |
如果你查看每个网格体的UV图表及其布局方式,就会明白为什么会出现这种情况。
![]() |
![]() |
| 具有重叠UV图表的静态网格体 | 具有唯一UV图表的静态网格体 |
虽然对于应用的材质而言,重叠的UV坐标能带来好处,但对于应用于网格体本身的颜色数据绘制而言,这并不理想。如果你的网格体需要一个将所有UV图表展平且每个图表都有唯一ID的UV,你可以在静态网格体编辑器中使用 生成光照贴图UV(Generate Lightmap UVs) 属性为此网格体创建一个。
如需详细了解如何使用唯一UV图表设置UV通道,请参阅为纹理颜色绘制设置材质和网格体。
在网格体上进行纹理颜色绘制
当你开始使用纹理颜色模式在网格体上进行绘制时,需要注意一些设置。
按网格体和按实例设置支持
有时,你需要防止在不必要的情况下创建网格体绘制纹理,因此在场景中筛选掉某些网格体或特定网格体实例非常有用。
你可以在静态网格体编辑器中将"常规设置(General Settings)"类别下的 支持纹理颜色网格体绘制(Support Texture Color Mesh Painting) 设置更改为以下选项之一,从而 按网格体 禁用网格体纹理绘制:
| 选择选项 | 说明 |
|---|---|
| 默认(Default) | 网格体使用项目设置的"引擎 - 渲染"部分中的"网格体绘制默认静态网格体支持"设置。 |
| 启用(Enabled) | 网格体已启用纹理颜色绘制。 |
| 禁用(Disabled) | 网格体已禁用纹理颜色绘制。 |
或者,你也可以 按实例 禁用静态网格体组件上的绘制。使用 细节(Details) 面板,取消勾选"网格体绘制(Mesh Painting)"类别下 启用纹理颜色网格体绘制(Enable Texture Color Mesh Painting) 旁边的复选框。
当禁用网格体资产或网格体实例上的纹理颜色绘制时,并不会删除现有的纹理数据。这只会阻止网格体绘制纹理的创建或修改。
网格体绘制纹理分辨率
当使用纹理颜色绘制时,网格体绘制纹理具有默认的大小启发法。但你可以明确设置网格体绘制纹理的大小,以满足项目需求。这可以在网格体资产上设置,也可以按实例重载。默认情况下,网格体绘制纹理分辨率设置为0,此时使用默认启发法,并基于(非Nanite)LOD0网格体中的顶点数量。网格体绘制纹理分辨率始终四舍五入到最接近的2的幂次方值(如果不是2的幂次方)。
你可以使用项目设置 每个顶点的网格体绘制纹素(Mesh paint texels per vertex) 为默认启发法配置纹素与顶点的默认比率,这将创建一个网格体绘制纹理,满足以下条件:
最小纹素数 = (每个顶点的网格体绘制纹素)×(LOD 0网格体中的顶点数量)
纹理大小是第一个大于该最小纹素数的2的幂次方值。
要在静态网格体资产上设置特定的网格体绘制纹理分辨率,请在"常规设置(General Settings)"类别下为 网格体绘制纹理分辨率(Mesh Paint Texture Resolution) 输入一个值。
或者,你可以在网格体的细节(Details)面板中输入 重载网格体绘制纹理分辨率(Override Mesh Paint Texture Resolution) 的值,重载每个网格体实例的网格体绘制纹理分辨率。
更改任何影响网格体绘制纹理分辨率的设置,都不会影响现有的网格体绘制纹理。这些设置仅适用于在所选网格体上使用 添加(Add) 工具时创建的网格体绘制纹理。但你可以使用 修复(Fix) 工具应用这些设置,以调整大小并保留你的工作。
虚拟纹理网格体绘制项目设置
网格体绘制纹理资产始终是虚拟纹理,并且必须为项目启用此功能。这将允许它们按需流送,并使用项目设置中的虚拟纹理池配置来限制其内存使用。
项目设置中的虚拟纹理设置包括可配置的网格体绘制设置,以满足项目的需求。例如, 网格体绘制图块大小(Mesh paint tile size) 独立于通用流式虚拟纹理的 图块大小(Tile Size) 。对于网格体绘制,你通常希望使用较小的图块大小,因为网格体绘制纹理的分辨率通常较低。
所有网格体绘制纹理共享同一个纹理格式。默认使用压缩格式,相比于未压缩格式,所需的GPU内存更少。如果有损压缩导致视觉瑕疵,你可以取消勾选 网格体绘制使用压缩纹理(Mesh paint use compressed textures) 复选框,从而禁用压缩。
虚拟纹理项目设置位于 引擎 - 渲染(Engine - Rendering) 下的"虚拟纹理(Virtual Texture)"类别中。
如需详细了解项目设置中的其他虚拟纹理网格体绘制设置,请参阅网格体绘制模式工具和设置。



