Shader 与渲染管线 · source map
← 回到对应自由实验状态 ShaderLab 不只是贴一段代码:代码定位
这里显示课程实际引用的代码片段。先看每段在说人话,再回到实验验证它对画面的影响。
Properties、SubShader 和 Pass 是材质对管线的最小契约。
src/lib/lab/rendering-effects/effects-source.ts · section shaderlab
当前起点查看这段精确实现
// SECTION:shaderlab
Shader "TA/Learning/NormalMapped" {
Properties { _NormalMap("Normal", 2D) = "bump" {} }
SubShader {
Pass { HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
ENDHLSL }
}
}
渲染路径会改变一次绘制如何消耗灯光和 G-buffer。
src/lib/lab/rendering-effects/effects-source.ts · section forward-deferred
按需展开查看这段精确实现
// SECTION:forward-deferred
// Forward: light work follows each visible material.
// Deferred: write G-buffer, then light screen-space pixels.
float lightingCost = renderPath == FORWARD
? visiblePixels * lightCount
: gbufferBandwidth + visiblePixels;
把异常输出染出来,避免编译成功后黑屏却无从解释。
src/lib/lab/rendering-effects/effects-source.ts · section overflow
按需展开查看这段精确实现
// SECTION:overflow
float3 safeRadiance = clampHdr ? min(radiance, maxHdr) : radiance;
debugColor = any(isnan(safeRadiance)) || max(safeRadiance) > maxHdr
? float3(1.0, 0.1, 0.1)
: safeRadiance;