Real Time Shading Model (2)

继续基于物理的光照模型,先从Oren-Nayar开始,这个模型从一开始就是为了改进对Diffuse分量的计算,所以并没有包含Specular分量的计算。也是基于微表面模型,但是和Cook Torrance模型的假设有一些区别:

  • 假定表面是由一些连续的对称的V型凹槽构成的,每一个凹槽由两个对立的面构成
  • 每一个微表面的面积远大于光的波长,所以不用考虑衍射之类的问题
  • 每一个微表面是一个Lambertian面,有相同的Diffuse反射系数
  • 微表面的面积相比物体整个表面积非常小,所以每个像素可以覆盖足够多的微表面,可以使用统计分布模型建模

Oren-Nayar有分析模型,但是由于计算过于复杂,一般使用的是简化模型:

\(J_{d}=C_{d}(A+B\cdot \max(0,(V^{‘},L^{‘}))\cdot\sin\alpha\tan\beta\)

\(A=1-\frac{1}{2}\frac{\sigma^{2}}{(\sigma^2+0.33)}\)

\(B=0.45\frac{\sigma^{2}}{\sigma^2+0.09}\)

\(\alpha=\max(\theta_i,\theta_o),\beta=\min(\theta_i,\theta_o)\)

\(V^{‘},L^{‘}\)分别是视点向量和光照方向向量在切平面的投影。

最重要的可控参数只有一个就是表示粗糙程度的\(\sigma\)。如果这个参数是统一的,那么计算量最大的A和B两个参数都可以用预计算的方式存储在纹理中。当然也可以以参数纹理的方式,让美术可以精确的控制材质表现,对于某些种类的Diffuse材质,Oren-Nayar效果还是不错的,不过大家基本都是做了各种简化(比如战锤40000,以及这里的一个优化,以及GPU Gems的Warp Lighting)。可见了解这些有数学和物理基础的模型的思想,对解决自己游戏中特定的效果需求还是很有帮助的,凑也得有基础啊。

Strauss

这个模型也是很有影响力的,特别是在金属高光材质上。上面这个右边的角色就是用Strauss模型的。顺便说一下作者后来去了Pixar做工具开发,现在在做Google Earth。主要的目的是在达到和Cook-Torrance类似的效果基础上降低计算开销,并提供更直观的材质调节参数:Smoothness(s),Metalness(m),以及Transparency(t)。和Cook-Torrance一样,也包含了Fresnel系数和几何衰减系数,不过算法略有区别。Strauss包含了Diffuse,Specular以及Ambient项。下面逐项来看。

\(J_d=r_d (1-ms)C, r_d =(1-s^3)(1-t)\)

Diffuse分量会随Smoothness,Transparency,Metalness增大而减小.这在物理上是正确的,但是一个缺点是美术会发现自己画的Diffuse纹理色和最后实际的Diffuse颜色差别很大,不好控制。

下面是Specular了:

\(J_s=\frac{1}{(N,L)}r_s C_s\)

其中\(r_s\)是一个Phong+Fresnel+Gemoetry的混合系数,也是这个模型中最复杂的部分。

\(r_s=r_j(V,R)^e,e=\frac{3}{1-s}\)

\(r_j=\min(1,r_n+(rn+k_j)j\)

\(k_j=0.1,r_n=(1-t)-r_d\)

j是Fresnel系数和几何衰减系数的近似函数,注意都是直接以角度为函数参数的。

\(j=F(\theta_i)G(\theta_i)G(\theta_o)\)

其中\(\theta_i=acos(N\cdot L),\theta_o=acos(N\cdot V)\)

\(F(\alpha)=\frac{\frac{1}{(2\alpha/\pi-k_f)^2}-\frac{1}{k_{f}^2}}{\frac{1}{(1-k_f)^2}-\frac{1}{k_{f}^2}},G(\alpha)=\frac{\frac{1}{(1-k_g)^2}-\frac{1}{(2\alpha/\pi-k_g)^2}}{\frac{1}{(1-k_g)^2}-\frac{1}{k_{g}^2}}\)

这部分计算代价很大,估计只能预计算或者做简化吧。不然只能用作Demo里面。

\(C_s=C_w+m(1-F(\theta_i))(C-C_w)\)

最后是高光色的计算,根据Fresnel系数和Metalness系数,在白色和固有色直接做插值获得。

今天写到这里,下周继续。越发觉得遍历一次学术界的各种模型和原始论文,还是很有必要的。参考文献到最后再来整理吧。

Tags: ,

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>