Advanced Lighting · 在完整渲染管线中的位置
CPU / Draw光源 / 相机 uniform
→
Vertex InputPosition / Normal
→
Vertex Shader世界位置 / 法线
→
Primitive Assembly组装图元
→
Geometry Shader可选
→
Rasterization插值 Fragment 输入
→
Fragment ShaderPhong / Blinn-Phong
→
Per-SampleDepth / Blend
→
Framebuffer最终颜色

这一节只改镜面高光的几何关系

Ambient 和 Diffuse 不变。区别集中在 Fragment Shader:Phong 比较 V 与反射方向 R;Blinn-Phong 构造 H = normalize(L + V),比较 N 与 H。

Phong

R = reflect(-L, N)
spec = pow(max(dot(V, R), 0), s)
N ↑ L ↘ │ ↗ R •────→ V 看 V 是否接近 R

Blinn-Phong

H = normalize(L + V)
spec = pow(max(dot(N, H), 0), s)
N ↑ H ↑ L ↘ • ↗ V 看 H 是否接近 N