v4v*_*eta 3 graphics phong gouraud shading
据我了解,Gouraud着色计算每个顶点的光颜色并对该颜色进行插值,而Phong着色对每个像素的法线进行插值并根据该插值计算光颜色。
然而,当我尝试以数学方式导出光颜色时,我最终得到了两种方法相同的公式!

(其中n1和n2是两个顶点的法线,t是插值系数,L是光线方向,顶部的平面和虚线表示屏幕和像素。)
两种方法的光颜色推导如下:
古罗:L = t*dot(n1,L) + (1-t)*dot(n2,L)
冯:L = dot(t*n1+(1-t)*n2,L)
结果是一样的。
谁能告诉我我的推导有什么问题吗?
在Gouraud 着色中,光线是按顶点计算的(顶点着色器),而在Phong 着色中,光线是按片段计算的(片段着色器)。
\n因此,Gouraud 着色会计算图元顶点(角点)的光线,并为图元覆盖的片段插入光线。
\n使用 Phong 着色,每个片段的光线都会单独计算。
一般来说,光是通过双向反射分布函数计算的。该函数计算表面上光的反射率,并取决于入射光的矢量、视角和表面的法线矢量。
\n在Gouraud 着色中,对顶点颜色(反射率)进行插值,在Phong 着色中,对 3 个向量进行插值。如果函数c = brdf(l, v, n)是线性的,其中c是颜色,l是光线方向,v是视图向量,n是法向量(例如朗伯向量),那么这不会有任何区别反射率)。但如果光照模型不是线性的(例如Blinn\xe2\x80\x93Phong),则 Gouraud 着色的线性插值会导致不同的结果。
比较Gouraud 着色和Phong 着色
\n

另请参阅:
\n GLSL 固定功能片段程序替换
\n Phong 和Gouraud 着色
\n Gouraud 着色/Phong 着色
| 归档时间: |
|
| 查看次数: |
10736 次 |
| 最近记录: |