在 Unity 中,当我们编写具有多个通道的自定义着色器时,它们是否会执行:
For each triangle do:
For each pass do:
Draw the pass
或者:
For each Pass do:
For each triangle do:
Draw the pass
如果网格中有多种材质,绘制的面是否按材质分组?
第二种变体:在 Unity 中,当我们编写具有多个通道的自定义着色器时,它们是否会执行:
For each Pass do:
For each triangle do:
Draw the pass
如果网格中有多种材质,绘制的面是否按材质分组?
是的。
基本上,所有渲染(在 OpenGL 和 Direct3D 中)都是通过以下方式完成的:
并且以下启发式规则是适用的:场景中调用的绘制调用越少越好(对于性能)。因此,为了满足此规则(不减少绘制的图元数量),您希望在每个绘制调用中拥有更多数量的图元。这反过来又使 Unity 与您的第一个问题的第二个变体一起使用变得显而易见。并且还解释了为什么 Unity 按材质对面进行分组(因为它最大限度地减少了绘制调用次数)。