简介
在模型中可以有很多网格,一个模型可以由很多个网格构成。因此在Unity3D中一个Mesh网格的构成可以由多个子Mesh组成也就是今天的主角SubMesh,即一个Mesh里面可以有多个SubMesh。 引擎在渲染的时候,每个SubMesh都需要对应一个Material材质球来匹配做渲染,说白了一个SubMesh就是普通的模型,它拥有很多个三角形构成也需要材质球支持以达成渲染。与Mesh类似,SubMesh一样可以拥有动画,另外它还能针对不同部分的Mesh选择有个性化的材质来表现效果,从功能上来看比单个Mesh要灵活的多。
列举需要拆分Mesh为SubMesh的几种情况
- 3D模型制作人员在制作模型的时候,希望一个模型中一部分Mesh用一种材质来表现效果,另外一部分Mesh用另外一种材质来表现效果,这时就需要将模型拆分开来。因为一个Mesh只能对应一个材质球做渲染,一个材质球只能表现一种效果,当他们需要表现两种完全不同的效果时就需要拆分。
- 模型中的某部分的贴图,在众多模型中共同使用的频率比较高,为了不重复制作以及减少重复劳动,那就会让原本可以以整体的模型单独拆分出来一部分公共材质的部分让它们都使用同一个材质球。
- 在制作动画时,由于动画过于复杂,如果使用同一个模型去表现的话,会导致骨骼数量成倍增加。为了更好的节省骨骼的使用量,拆分出一部分模型让他们成为模型的一部分,单独表现动画。
缺点
SubMesh虽然功能很强大,但对性能的开销也需要着重注意,由于每个SubMesh都多出了一个材质球Mesh拆分的SubMesh越多,增加的Drawcall也就越多。Mesh中存在多个SubMesh,在动作和拆分材质球渲染上确实有很好的优势,但是无法与Mesh合并,导致优化的一个重要环节被阻断。
总结
SubMesh虽然功能强大,但对性能的开销也需要注意,需要我们在项目的开发过程中慎重选择,或者选择另一种完全拆分Mesh为其它形式的Mesh来代替SubMesh,这样我们在合并Mesh时就有更多的选择了,下一节我们将来聊聊合并Mesh的几种方法。
|