跳到主要内容
shaderlab-pipeline · 代码
查看代码目录
Shader 与渲染管线 · source map

ShaderLab 不只是贴一段代码:代码定位

这里显示课程实际引用的代码片段。先看每段在说人话,再回到实验验证它对画面的影响。

← 回到对应自由实验状态
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 }
  }
}
Forward/Deferred 阶段对照

渲染路径会改变一次绘制如何消耗灯光和 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;
Debug 输出

把异常输出染出来,避免编译成功后黑屏却无从解释。

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;