材质插槽
中级 美术人员 程序员
模型可以使用多个材质。你可以在模型的**材质插槽(Material slot)**中设置材质。

例如,此模型中的第二个材质插槽指定了面罩以及肩甲和胸甲条纹的材质。通过更改此插槽中的材质,我们就更换了模型这些部位使用的材质。

材质插槽本身(数量和位置)是在模型源文件(如 .fbx、.obj 等)中定义的。你不能在 Game Studio 中编辑材质插槽,只能更改每个插槽中使用的材质。
在模型上设置材质
你可以在两个位置更改模型使用的材质:
在模型本身的 Materials 属性下:

Note
这会影响该模型的每个实例。
在实体或预制件的模型组件中:

这只会影响这一个实例或预制件。
网格与材质插槽
从建模软件导入的模型可以包含网格(Mesh)。网格可以通过材质插槽共享材质。

网格与材质插槽之间的关联是在模型源文件中定义的。你不能在 Game Studio 中更改这些关联,但可以在运行时通过代码更改。
要更改网格与材质之间的关联,请使用:
MyModelComponent.Model.Meshes[submeshIndex].MaterialIndex = materialIndex;
要更改材质列表中的材质或向列表中添加材质,请使用:
MyModelComponent.Materials[ExistingOrNewMaterialIndex] = myMaterial;
合并网格
Stride 绘制包含网格的模型时,会对每个网格执行一次 GPU 绘制调用。为了提高性能,默认情况下,Stride 在构建时会合并共享材质的网格。

在上面的示例中,有五个网格和五次绘制调用。合并后,剩下三个网格和三次绘制调用。
Note
Stride 合并网格时,会合并顶点缓冲区和索引缓冲区。这意味着你不能在运行时分别绘制这些网格,也不能更改原始网格的变换(变换矩阵)。这些网格会变成一个具有单一材质和单一变换矩阵(相对于模型)的网格。
Note
Stride 合并网格时,会改变元素的绘制顺序。对于透明材质,这可能产生不同的结果。
Note
当你从模型创建物理碰撞体时,Stride 会为模型中的每个网格分别构建凸包。如果网格被合并,则每种材质只剩一个网格,因此凸包也是从合并后的网格构建的。
禁用网格合并
如果你想要执行以下操作,可能需要禁用网格合并:
为网格制作动画
在运行时更改网格的材质
要在模型上禁用网格合并:
选中要禁用网格合并的模型。
在属性网格中,禁用 Merge meshes。

针对特定网格禁用合并
要只针对特定网格禁用合并,请启用其对应的节点。
选中包含这些网格的模型。
在属性网格的 Skeleton 下,确保该模型关联了骨骼。

有关骨骼的更多信息,请参阅动画。
在资产视图中,选中该骨骼。

在属性网格的 Nodes 下,选择对应于不想合并的网格的节点。

Tip
要查看哪个节点对应哪个网格,可以在 Maya 等建模应用中打开模型源文件。
Note
请确保不要禁用在运行时会被制作动画的节点。