mrt
mrt
一个“终端”节点,用于实现多渲染目标(Multiple Render Targets)。它允许片元着色器在单次渲染传递中,将颜色、法线、深度等多种完全不同的数据并行写入到多个独立的纹理中。
核心优势
通过一次绘制调用生成 G-Buffer(包含颜色、法线、材质属性等的多组纹理),大幅减少 Draw Call 数量,是实现延迟着色(Deferred Shading)技术和高效复杂后期处理的核心基石,能显著提升渲染性能。
常见用途
为延迟着色(Deferred Shading)生成 G-Buffer
为复杂的后期处理特效(如辉光、运动模糊)生成多层数据
在开发调试时,同时输出并可视化法线、UV、深度等多种数据
如何调整
调整方式是修改传递给 `mrt` 的对象。通过增删键值对来改变输出目标的数量和种类,例如增加一个 `velocity` 输出用于运动模糊。通过替换键所对应的值(TSL 节点)来改变该输出通道的数据内容,例如将 `normalWorld`(世界空间法线)替换为 `normalView`(视图空间法线),以适配不同的后续渲染算法。
代码示例
1
2mrt({
3 // 输出 0: 传统的着色结果 (颜色)
4 color: material.colorNode,
5
6 // 输出 1: 世界空间法线 (映射到 0-1 范围)
7 normal: normalWorld.remap( { from: new Vector3( -1, -1, -1 ), to: new Vector3( 0, 0, 0 ) } ),
8
9 // 输出 2: 深度值
10 depth: depth( { from: 0, to: 1 } ),
11
12 // 输出 3: 材质的粗糙度值
13 roughness: roughness
14})
15