[attr] //该段用于描述该材质最终会需要那些数据 vec3 BaseColor; vec3 Normal; float Metallic; float Roughness; [framebuffer] //该段用于描述当前shader会输出到几个Framebuffer上 //如果是前向渲染,一般只有一个Framebuffer vec4 FinalColor; //如果是延迟渲染,则代表GBuffer,可能存在多个framebuffer vec4 gb_color_metallic; vec4 gb_normal_roughness; [attr_to_fb] //该段用于描述attr如何转换到framebuffer上 //如果是UI之类直接上色的,那会比较颜色 FinalColor=vec4(BaseColor,1.0); //如果是前向渲染 FinalColor=BRDF(BaseColor,Normal,Metallic,Roughness); //如果是延迟渲染 gb_color_metallic =vec4(BaseColor,Metallic); gb_normal_roughness =vec4(Normal, Roughness); [gb_to_attr] //该段为延迟渲染独有,用于表示如何从gbuffer分解成独立数据 vec4 gb_cm=texture(gb_color_metallic,FragmentPosition); vec4 gb_nr=texture(gb_normal_roughness,FragmentPosition); BaseColor =gb_cm.rgb; Metallic =gb_cm.a; Normal =gb_nr.rgb; Roughness =gb_nr.a; gl_FragColor=BRDF(BaseColor,Normal,Metallic,Roughness);