在Unity中,当我们编写带有多个通道的自定义着色器时,它们是否执行:
For each triangle do:
For each pass do:
Draw the pass
或:
For each Pass do:
For each triangle do:
Draw the pass
如果我在网格中有多个材料,是否按材料分组绘制面?
问题1
第二个变体:在Unity中,当我们编写带有多个通道的自定义着色器时,它们是否执行:
For each Pass do:
For each triangle do:
Draw the pass
<标题>问题2 h1> p>如果我在网格中有多个材料,是否按材料分组绘制面? 是的。<标题>
基本上,所有的渲染(在OpenGL和Direct3D中)都是按照以下方式完成的:
- 设置渲染参数(着色,矩阵,缓冲,纹理等);
- 绘制一组原语(这叫做绘制调用);
- 对所有需要渲染的图形重复这些步骤。
下面的启发式规则是适用的:在场景中调用的draw调用越少越好(对于性能)。因此,为了实现这一规则(不减少您绘制的原语数量),您希望在每个原语中使用更少数量的绘制调用。这反过来也说明了为什么Unity会选择你第一个问题的第二个变体。这也解释了为什么Unity按材质分组(因为它最小化了绘制调用次数)。
标题>标题>