【问题标题】:What is the difference between Phong Shading and Gouraud Shading?Phong 着色和 Gouraud 着色有什么区别?
【发布时间】:2021-01-05 13:21:56
【问题描述】:

据我了解,Gouraud 着色计算每个顶点的光色并对该颜色进行插值,而 Phong 着色对每个像素进行法线插值并计算光色基于该插值。

但是,当我尝试从数学上推导出光色时,我最终得到了两种方式的相同公式!

(其中n1n2是两个顶点的法线,t是插值的系数,L em>是光的方向,上面的平面和虚线表示屏幕和一个像素。)

两种方法的浅色导出为:

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

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

结果是一样的。

谁能告诉我我的推导有什么问题?

【问题讨论】:

  • 您没有更正插值表面法线的长度
  • 谢谢,有帮助

标签: graphics phong shading gouraud


【解决方案1】:

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 shading的线性插值会导致不同的结果。

比较Gouraud shadingPhong shading


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

【讨论】:

  • 但是为什么 gouraud shading 会导致马赫带效应,它也会插入颜色
  • 那么 Gouraud 着色和 Phong 着色之间的插值是在不同的坐标中吗? Gouraud 着色导致不连续的原因是颜色在视图空间中是线性的,而不是在屏幕空间中,phong 着色生成连续表面,因为颜色是在屏幕空间中插值的?
  • 顺便说一句,您说“Phong 着色不会“插值””,实际上我并不是说 Phong 着色中有插值,我的意思是对发送到片段着色器的法线进行插值(通过硬件)。
  • @v4vendeta 我试图在答案中澄清这一点。
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 2014-04-20
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 2011-06-09
相关资源
最近更新 更多