
一、3DMax创建多维子材质
创建球体

材质面板创建多维子材质

创建第一个子材质


同样的方法创建第二个子材质

变为可编辑多边形,F正视图,面层级,选择一半的面,材质ID设置为1.再用同样的办法把另外一面设置为2.

模型层级,在材质面板把多维子材质赋予给模型,就可以看到一个模型有了两种材质表现。

导出选定对象。
二、导入Unity并制作相关测试环境
进行Camera设置,去除高级特性,Clear Flags设置为Solid Color

去掉天空盒,平行光设置为No Shadows。创建两个材质,使用Unlit/Color这个shader,颜色设置一下。

三、渲染分析
Statistics面板方面:
可以看到Batches是2,说明在unity中对于多维子材质是按照两个模型去渲染的,相当于两个draw call。

Frame Debug方面:
从两张图可以进一步证实我们的想法,可以注意到中间的Preview处,每次渲染时提交的mesh是一个半球。顺便一提,在第二张图中有提示为何两个渲染批次,因为这两个模型使用的材质是不同的。


四、在工程上的应用
从程序角度上来讲肯定是希望任何一个模型都不使用多维子材质,且最好是一个整个的模型,例如一个茶壶,最好是整个茶壶是一个模型,UV都展在一张图上,shader使用统一的shader,材质球只使用一个。这样能有效减少draw call,提高性能。
而从美术角度上来讲,复用性也十分必要,例如有AB两个人,现在想拼出来第三个人,如果使用多维子材质或者干脆人体本身就是由多个模型组成的,那么在3dmax中,很容易就可以把A的上身抽出来,把B的下身抽出来,然后一组合,就出了第三个人C。而且这样的方式能让每一个小部分使用单独的贴图,能有效降低内存压力。还是以上面的例子举例,ABC三个人实际上使用的贴图数量跟只有AB两个人时是一样的,而如果ABC每个人都是单独的一套材质球,那需要的贴图数就会提高,内存压力就会增加。