Blinn-Phong 半程向量(Halfway Vector)可视化
图1: 半程向量的几何意义
L (光线方向)
V (视线方向)
H (半程向量)
N (法线)
R (反射向量)
核心观察:
H 是 L 和 V 的角平分线。当 N 接近 H 时,说明反射光 R 接近视线 V,应该看到高光。
拖动鼠标
改变视线方向 V,观察 H 如何变化。
法线角度 (N):
0°
光线角度 (L):
-45°
图2: Phong vs Blinn-Phong 对比
左侧:Phong
- 计算 R·V (反射向量与视线的夹角)
右侧:Blinn-Phong
- 计算 N·H (法线与半程向量的夹角)
两者在数学上近似等价,但 Blinn-Phong 计算更简单、更稳定。
Phong 模型
specular = (R·V)^α
R = reflect(-L, N)
需要计算反射向量 R
R = 2(N·L)N - L
约 8 个 ALU 操作
R·V 可能为负值
Blinn-Phong 模型
specular = (N·H)^α'
H = normalize(L + V)
计算半程向量 H
只需向量加法 + 归一化
约 6 个 ALU 操作
N·H 总是非负
性能提升 20-30%
图3: 高光强度对比
Shininess:
32
红色:Phong (shininess = α)
蓝色:Blinn-Phong (shininess = 4α)
要达到相似的视觉效果,Blinn-Phong 需要约 4 倍的 shininess 值。