欢迎光临散文网 会员登陆 & 注册

图形学学习笔记(二)Phong光照模型(上)

2023-03-06 23:15 作者:Tokitama  | 我要投稿

什么是Phong模型?

    Phong光照模型是20世纪70年代被提出的一种渲染逼真图像的方法,模型的提出者是越南出生的计算机图形学研究员Bui Tuong Phong(1942-1975),他提出的近似方法实现了较逼真的图像。

Bui Tuong Phong(1942-1975)


    Phong模型在当今硬件性能下已显得无法满足高质量真实图像的要求,由于其渲染高性价比,今天被广泛应用于一些非真实感的渲染。

    在Phong模型中,我们希望达到以下三个目标:

  1. 实时显示三维对象的动态彩色图片。实时显示系统能够以每秒至少30帧的速率生成图片。

  2. 光滑曲面制成的物体的表示。

  3. 消除或衰减数字采样技术的影响。

隐藏曲面算法

    曲面对于着色有巨大的影响,在着色中,一般采用以下两种方法描述我们的对象:

  1. 使用数学方程定义曲面。

  2. 平面多边形的曲面逼近。

    在当时的硬件条件下,数学方程即使只考虑二次曲面,使用这种模型的实时显示系统的实现也过于昂贵与复杂。因此我们采用第二种方法,使用平面多边形来逼近曲面。而第二个方法又带来了两个新的问题:轮廓边缘问题与多边形真实着色问题。

    本文主要讨论后者,主要提及了画家算法和深度缓冲算法

画家算法

    画家算法就是首先绘制距离较远的场景,然后用绘制距离较近的场景覆盖较远的部分。

画家算法首先将场景中的多边形根据深度进行排序,然后按照深度从大到小顺序进行描绘。

比如下面的场景,深度顺序背景、山、草地、数目,所以先绘制背景,再绘制山,然后绘制草地,最后绘制数目。然而,在描述以下的图形位置关系时,会失效。


画家不能正确的表达其位置关系


深度缓冲算法

    

深度缓冲的算法过程如下:


1.首先分配一个数组buffer,数组的大小为像素的个数,数据中的每个数据都表示深度,初始深度值为无穷大

2. 随后遍历每个三角形上的每个像素点[x,y],如果该像素点的深度值z<zbuffer[x,y]中的值,则更新zbuffer[x,y]值为该点深度值z,并更新该像素点[x,y]的颜色为该三角形上像素点上的颜色。



Z-buffer算法


多边形着色

    当平面多边形用于对象建模时,通常通过使用多边形的法向量对对象进行着色。多边形上每个点的阴影是多边形的阴影系数与多边形法线与入射光方向之间的角度余弦的乘积。C_%7Bp%7D材料相对于入射波长的反射系数,i是入射角。

    S_%7Bp%7D%20%3DC_%7Bp%7Dcos(i)

此着色仅提供真实物理效果的非常粗略的近似值。它不允许材质的任何镜面反射,即材质通过其外表面的反射生成高光的能力,以及观察者的位置,这一点被忽略。然而,这种方法的一个更严重的缺点是,使用它显示平滑曲面时效果不佳。余弦定律规则适用于用平面正确建模的对象,例如长方体、建筑物等,但不适用于平滑曲面,例如汽车车身。

未优化的粗糙着色模型

该论文使用如下几种措施对真实感进行弥补

  • Warnock提出,随着光源和物体之间的距离,反射光的的强度降低来恢复深度感觉,同时将着色函数拆分成为两个函数的总和,一项为正常的余弦定律,另一项用于镜面反射光,例如,在空间中不同位置的相同平行面将以不同的强度进行着色,直接面向光源的面比稍微远离入射光的相邻面更亮。

  • Newell和Sancha提出了一些关于创建透明度和亮点的想法。通过在现实世界中的观察,他们发现高光不仅由入射光源产生,而且由场景中其他对象的反射光产生;这在由高反射或透明材料制成的物体的情况下尤其如此。在Newell-Sancha模型中,曲面近似于平面多边形。不幸的是,由于无法在任何单个多边形的表面上改变光强度,生成高光的能力受到严重限制。

Newell和Sancha改良方法
  • Gouraud开发了一种阴影曲面的算法。使用他的算法,由面片表示的曲面由多边形平面面近似。Gouraud计算这些面中每个面的每个顶点处的曲面曲率信息。根据曲率计算并保留阴影强度。例如,可以使用余弦定律等式计算每个顶点的阴影强度,其中i是入射光与该顶点处表面法线之间的角度。显示曲面时,此着色强度沿对象相邻顶点对之间的边线性插值。

Gouraud改良方法

表面上某一点处的阴影也是沿着扫描线的阴影的线性插值,该扫描线位于边缘的中间部分之间,平面穿过扫描线。这种非常简单的方法在整个表面上提供了连续的阴影渐变,这在大多数情况下可以恢复平滑的外观。

当使用扫描线算法时,先计算出P点和D点的着色强度,想要得到R点和Q点的着色强度时直接进行线性插值即可

然而,问题仍然存在,其中之一是多边形边缘之间的明显不连续性。在具有高镜面反射分量的表面上,高光的形状通常不合适,因为它们取决于用于接近曲面的多边形的配置和形状,而不取决于对象曲面本身的曲率。由于描述表面的多边形的方向改变,运动中的表面(在计算机生成的电影中)的着色具有令人讨厌的帧间不连续性。此外,着色算法在旋转下不是不变的。

边缘的曲率是明显不连续的

计算机生成的胶片中阴影的帧到帧不连续性如下所示。曲面近似于平面。当该曲面处于运动状态时,与灯光方向垂直的所有面都呈现均匀的阴影。在下一帧中,对象的运动使这些面朝向灯光的方向不同,并且其表面上的阴影强度从一端到另一端连续变化。因此,曲面似乎从具有高光的曲面变为具有均匀阴影的曲面。此外,当对象旋转时,这些高光的位置在帧与帧之间并不稳定。

马赫带效应

人们可能期望通过减小多边形的大小来避免这些问题。当然,这是不可取的,因为这会增加多边形的数量,因此会增加存储模型的内存需求和删除隐藏曲面的时间。

不光如此,马赫带效应的存在反而使效果更差,当人们观察两块亮度不同的区域时,边界处亮度增强,使轮廓表现对比加强,在生理学上的解释即人的视觉系统有增强边缘对比度的机制。

马赫带效应


图形学学习笔记(二)Phong光照模型(上)的评论 (共 条)

分享到微博请遵守国家法律