2011-05-30 79 views
2

使用多个渲染目标有没有意义?在清除目标并再次使用它之前,不能只绘制一个渲染目标并将其存储到纹理中吗?指向多个渲染目标

回答

1

当您想渲染一个几何体并将不同的输出收集到单独的渲染目标中时,会使用多个渲染目标。

今天,这项技术主要用于实现延期着色。在延迟着色中,多个渲染目标存储照明信息,例如表面法线,镜面颜色和镜面指数,以及深度和漫反射颜色信息。该组合的渲染目标被称为G缓冲区。对于延期着色和G缓冲区的引物,参见6800 Leagues Under the Sea (Hargreaves & Harris 2004)

4

了解MRT的关键在于,您并未向所有渲染目标绘制完全相同的数据。

像素着色器只能输出4个浮点值,通常您会使用这4个值在给定点处生成颜色。但是,您可能想要输出深度数据或普通数据,因此您可以使用这4个浮点值来表示其他可能需要的信息。

与MRT相比,您只需绘制场景一次并输出到各个渲染目标,因此在一个渲染过程中,您可以输出到一个渲染目标,它将接收漫反射颜色数据,另一个渲染目标将会收到正常数据和第三个渲染目标会收到深度数据。请参阅下文,更好地了解我的意思:

enter image description here

这是真的RGBA值成为其他东西的情况下,例如RGB,因为X,Y,正常的多边形之中的ž画。

有一些使用MRT的渔获物,比如所有的渲染目标必须具有相同的位深度,并且你开始用它来推动你的GPU纹理填充率,但总的来说优点超过了这些陷阱。