IMR渲染与TBR渲染在片源着色前的全流程

Number of views 5

(一)IMR渲染

image1765437186275.png

在图元组装和几何裁剪之间,还存在一个可选的阶段:

  • 几何着色器 (Geometry Shader): 它可以接收一个完整的图元作为输入(例如一个三角形),并可以生成零个、一个或多个新的图元作为输出。它在现代管线中不是必须的,但提供额外的几何处理能力。

(二)TBR渲染

image1765437655636.png

在 TBDR 中,光栅化操作并没有紧随视口变换之后立即进行。 流程在这里被中断,所有图元的几何信息被存储起来。

image1765437925877.png

不过,有许多情况会影响硬件延迟片元着色的顺利进行:

  • 半透明:会打断HSR,会强行渲染出当前所有最近片元,以便于混合。混合完后,如果紧接着又是不透明物体,则继续进行HSR。所以优化方案为:把半透明物体放最后画
  • Alpha Test/Discard:会先将它当作不透明物体经过HSR,如果未通过深度测试无事发生;如果通过深度测试那就运行片元着色器,若最终被discard,那么就会回过头更新HSR。

TBDR 的流程可以总结为:

  1. 分块存储 (Phase A $\rightarrow$ Storage): 完成几何体处理后,将数据存储在 Tile 列表中,不立即光栅化。
  2. 延迟光栅化 (Deferred Rasterization): 光栅化和着色被推迟到逐 Tile 渲染阶段。
  3. 批量写入 (Batch Write): 最终的颜色数据只在 Tile 渲染完成后才写入主存。

TBDR 和 IMR 在 “光栅化” 之后的部分有着本质的区别,这也是 TBDR 功耗低、效率高的原因。

0 Answers