outputStruct
outputStruct
一个用于结构化定义和管理多个着色器输出的节点,是实现多渲染目标(MRT)和延迟渲染等高级技术的关键。
核心优势
通过将颜色、法线、材质属性等多个输出打包成一个清晰的结构体,原生支持 MRT,极大地提升了代码的可读性和可维护性,同时封装了底层 GLSL 的复杂性,降低了高级渲染技术的实现门槛。
常见用途
为延迟渲染(Deferred Rendering)定义 G-Buffer 的数据结构
导出用于对象拾取(Picking)或运动模糊的自定义数据通道
为高级后处理(如 SSAO)生成多层数据输入
如何调整
调整方式是改变赋给结构体各成员的输入节点。例如,将 `normal` 成员的输入从 `normalWorld` 切换为 `normalView`,会改变输出法线纹理的坐标系,以适配不同的光照算法。增加一个 `depth` 新成员并为其赋值,则能为景深(DoF)或 SSAO 等效果创建一个全新的深度输出通道。
代码示例
1
2// 1. 定义一个包含颜色和法线的 G-Buffer 结构体“类型”
3const GBufferStruct = outputStruct(
4 vec4().name( 'color' ),
5 vec3().name( 'normal' )
6);
7
8// 2. 在着色器逻辑中,创建实例并填充数据
9const gBuffer = GBufferStruct.create();
10gBuffer.color = material.color;
11gBuffer.normal = normalWorld;
12