Phong底纹和Gouraud底纹有什么区别?

时间:2020-09-18 15:22:50

标签: graphics phong shading gouraud

据我所知, Gouraud 阴影为每个顶点计算光色并对该颜色进行插值,而 Phong 阴影为每个像素插值法线并计算光色基于该插值。

但是,当我尝试数学推导浅色时,两种方法都得出了相同的公式!

figure i draw for that

(其中 n1 n2 是两个顶点的法线, t 是插值系数, L 是光的方向,顶部和虚线处的平面表示屏幕和像素。

这两种方法的浅色推导为:

  • Gouraud:L = t*dot(n1,L) + (1-t)*dot(n2,L)

  • Phong:L = dot(t*n1+(1-t)*n2,L)

与结果相同。

有人可以告诉我我的推导有什么问题吗?

1 个答案:

答案 0 :(得分:2)

Gouraud shading处,每个顶点的光照是计算(顶点着色器),在Phong shading处,每个片段的光照是计算(片段着色器)。
因此,Gouraud着色为基元的顶点(角)计算光,并为基元覆盖的片段内插光。
使用Phong阴影,可以分别计算每个片段的光。

通常,光是由Bidirectional reflectance distribution function计算的。该函数计算表面上的光的反射率,并取决于入射光的向量,视点和表面的法线向量。
Gouraud shading处插入顶点颜色(反射率),在Phong shading处插入3个矢量。如果函数 c = brdf(l,v,n)是线性的,则其中没有任何区别,其中 c 是颜色, l 是光方向, v 是视图矢量, n 是法向矢量(例如Lambertian reflectance)。但是,如果光源模型不是线性的(例如Blinn–Phong),则Gouraud阴影的线性插值会导致不同的结果。

比较Gouraud shadingPhong shading


另请参阅:
GLSL fixed function fragment program replacement
Phong and Gouraud Shading
Gouraud shading / Phong shading