着色器编程,第7卷

镜面照明模型

现在,我们已经对非照片级逼真阴影进行了一些实验,让我们来看看如何模拟更逼真的阴影。

第3.3章

了解照明模型,创建Phong镜面反射类型

物体的镜面反射描述了物体的光泽度。 这就是所谓的与视图有关的效果,因为要在着色器中实现逼真的镜面效果,您必须考虑相机面向对象表面的方向。

Phong Specular效果是一种非常基本且便宜的Specular类型。 这是一个非常常见的“镜面反射”模型,不是因为它是最逼真的模型,而是因为它提供了一个很好的近似值,在大多数情况下都能很好地执行。 让我们看看一个人的代码是什么样的,并逐步完成它。

您可能不熟悉此着色器的第一件事是它使用了依赖于视图的照明功能。 Unity带有一组照明功能,包括以上代码中声明的基于视图的照明功能。 使用此特定声明使我们可以使用视图方向向量viewDir。

为了更好地了解Phong Specular照明的计算方式,让我们看一下该图。

  • L = 光线方向
  • R =光线的完美反射方向
  • N =表面法线方向
  • V = 观察方向

Phong模型使用两个分量的总和来计算反射表面的最终光强度:漫反射色和镜面反射值。

我= D + S

第一个分量D是漫反射色,与Lambertian模型相同:

D = N∙L

第二个分量S由函数定义

S =(R∙V)^ p

其中p是在着色器中定义为_SpecPower的“镜面反射”功率。 R变量是根据表面法线方向N的光方向L的反射方向。R的计算公式如下:

R = 2N *(N∙L)– L

这是在着色器代码的第43行中完成的计算。

通过此脚本可视化,这些反映如下所示:

假设反射方向与定向光应从球体表面反射的方向近似,则反射方向是有意义的。

就像在地球上射击乒乓球一样。 或者其他的东西。

让我们尝试更高效的镜面照明模型BlinnPhong。