光照模型

光线分类

图形学基础 | Blinn-Phong反射模型与着色方法
将光线简单分成三类:镜面反射、漫反射、环境光。


泛光模型

泛光模型只考虑环境光的影响:

Ienv=KaIa I_{env} = K_aI_a

其中KaK_a是物体表面对环境光的反射率,IaI_a是入射环境光的亮度。

图形学基础 | Blinn-Phong反射模型与着色方法

这个模型只能得到物体的平面结构,但体现体积感还需要添加下面的漫反射模型。


Lambert漫反射模型

漫反射指的是光从一定角度入射之后,从这个点向四面八方反射,且各方向反射的光的强度相等。

模拟漫反射首先考虑入射光的角度:

图形学基础 | Blinn-Phong反射模型与着色方法
入射角度越倾斜损失的能量越大,应该将光强乘上cosθ=lncosθ=l·n,其中ll是入射光方向,nn为平面法线方向。

光源与照射点的距离也需要考虑,离得越近强度越大。得到以下公式:

图形学基础 | Blinn-Phong反射模型与着色方法
kdk_d为漫反射系数,II为入射光强,取max是为了剔除夹角大于90°的光。

将泛光模型和漫反射模型结合,可以得到如下结果:

图形学基础 | Blinn-Phong反射模型与着色方法
观察图片,加上高光才会更真实,所以需要用到反射模型。


Phong反射模型

图形学基础 | Blinn-Phong反射模型与着色方法
在Phong反射模型中会考虑镜面反射角度RR与观察角度vv的夹角:

Ls=ks(I/r2)max(0,cosα)p L_s=k_s(I/r^2)max(0,cosα)^p

其中ksk_s为镜面反射系数,添加指数p的原因是加速衰减。

图形学基础 | Blinn-Phong反射模型与着色方法
将以上的模型累加得到结果:

图形学基础 | Blinn-Phong反射模型与着色方法

对计算反射方向与人眼观察方向角度进行优化,就有了下面的Blinn-Phong反射模型。


Blinn-Phong反射模型

避免计算反射方向v^\hat{v},为此引入新的矢量:半程向量h^\hat{h},对v^\hat{v}I^\hat{\Iota}取平均后再归一化来得到:

图形学基础 | Blinn-Phong反射模型与着色方法
这种方法的优点是加速了角度计算,提升计算的效率,具体来说,算出的近似角度是正确角度的一半。

总结上面的几种光照:

图形学基础 | Blinn-Phong反射模型与着色方法



着色方法

在光照模型中涉及法线向量,法线可能对应三角形面,也可能对应顶点。这涉及到了着色频率的问题,可以分类为面着色、顶点着色、像素着色,即是三种不同的着色方法。

Flat Shading

以一个面作为着色单位,利用每个面的法线向量进行一次Blinn-Phong反射光照模型的计算,将颜色赋予整个面,效果如下:

图形学基础 | Blinn-Phong反射模型与着色方法

计算很快,但是效果很差。


Gouraud Shading

Gouraud Shading对每个三角形的顶点进行着色,顶点法线计算方法是将所有共享该点的面法线向量相加求均值,再标准化。对于三角形内部的点,利用重心坐标(参考链接)来插值得到它的颜色

c=αc0+βc1+γc2 c=αc_0+βc_1+γc_2

c0c_0c1c_1c2c_2是三个顶点的颜色,ααββγγ是三角形内一点的重心坐标。

图形学基础 | Blinn-Phong反射模型与着色方法

可见对顶点计算,效果有明显提升。


Phong Shading

Phong Shading对上面的方法进行了改进,通过插值法线来真正对每一个点都进行光照模型的计算:

n=αn0+βn1+γn2 n=αn_0+βn_1+γn_2

得到每个点的法线后,再进行Blinn-Phong模型计算,效果对比如下:

图形学基础 | Blinn-Phong反射模型与着色方法
不同精度下的对比:

图形学基础 | Blinn-Phong反射模型与着色方法


透视矫正插值

在屏幕空间进行重心坐标插值会有误差(因为经过了变换),所以需要透视矫正插值来确保插值正确。

参考笔记:

计算机图形学六:透视矫正插值和图形渲染管线总结

相关文章:

  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-10
  • 2021-04-18
  • 2021-07-10
猜你喜欢
  • 2021-08-25
  • 2021-05-12
  • 2022-01-11
  • 2022-12-23
  • 2021-05-21
  • 2021-09-20
相关资源
相似解决方案