指向多个渲染目标

时间:2011-05-30 19:51:24

标签: xna clear xna-4.0 rendertarget

使用多个渲染目标有什么意义吗?在清除目标并再次使用它之前,是否只能绘制一个渲染目标并将其存储在纹理中?

2 个答案:

答案 0 :(得分:4)

了解MRT的关键是你没有将完全相同的数据绘制到所有渲染目标。

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

优点是MRT你只需要绘制一次场景并输出到各种渲染目标,所以在一个渲染过程中你可以输出到一个渲染目标,它将接收漫反射颜色数据,另一个渲染目标将接收到正常数据,第三个渲染目标将接收深度数据。请参阅下文以更好地理解我的意思:

enter image description here

这确实是RGBA值变成其他东西的情况,例如RGB,因为正在绘制多边形法线的X,Y,Z。

有一些使用MRT的捕获,例如你的所有渲染目标必须具有相同的位深度,并且你开始用它来推动你的GPU纹理填充,但总体而言,这些优势远远超出了陷阱。

答案 1 :(得分:1)

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

今天,该技术主要用于实现延迟着色。在延迟着色中,多个渲染目标存储光照信息,例如表面法线,镜面反射颜色和镜面反射指数,以及深度和漫反射颜色信息。组合渲染目标的集合称为G缓冲区。

有关延迟着色和G缓冲的初级读数,请参阅6800 Leagues Under the Sea (Hargreaves & Harris 2004)