在Unity中,着色器通道是由物体或三角形绘制的



在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中)都是按照以下方式完成的:

  1. 设置渲染参数(着色,矩阵,缓冲,纹理等);
  2. 绘制一组原语(这叫做绘制调用);
  3. 对所有需要渲染的图形重复这些步骤。

下面的启发式规则是适用的:在场景中调用的draw调用越少越好(对于性能)。因此,为了实现这一规则(不减少您绘制的原语数量),您希望在每个原语中使用更少数量的绘制调用。这反过来也说明了为什么Unity会选择你第一个问题的第二个变体。这也解释了为什么Unity按材质分组(因为它最小化了绘制调用次数)。

相关内容

  • 没有找到相关文章

最新更新