Unity中是否通过对象或三角形绘制着色器?

时间:2014-06-05 10:01:20

标签: unity3d shader multipass

在Unity中,当我们编写一个包含多个传递的自定义着色器时,它们是否已执行:

For each triangle do:
    For each pass do:
        Draw the pass

或者:

For each Pass do:
    For each triangle do:
        Draw the pass

如果我在网格中有多个材质,那么面部是按材质分组的吗?

1 个答案:

答案 0 :(得分:0)

问题1

第二种变体: 在Unity中,当我们编写具有多个传递的自定义着色器时,它们是否已执行:

For each Pass do:
    For each triangle do:
        Draw the pass

问题2

  

如果我在网格中有多个材质,那么面部是按材质分组的吗?

解释

基本上,所有渲染(在OpenGL和Direct3D中)都是按照以下方式完成的:

  1. 设置渲染参数(着色器,矩阵,缓冲区,纹理等);
  2. 绘制一组基元(这称为绘制调用);
  3. 对需要渲染的所有图形重复这些步骤。
  4. 以下启发式规则适用:在场景中调用的绘制调用越少(性能)。因此,为了满足此规则(不减少您绘制的图元数量),您希望每个图形中具有较大数量的图元的绘图调用数较少。这反过来说明Unity为什么选择第一个问题的第二个变体。并且还解释了为什么Unity组面对材料(因为它最小化了绘制调用次数)。