3dmax中几种的光照模型的理解及其BRDF描述

在看3dmax教程时,发现在Shader Basic Parameters一栏中,有几个可选的光照模型。想起来之前书里看过的光照模型,于是查了查资料,从程序的角度来总结下这些光照模型。

Lambert:

虽然3dmax里边没有这个但是赶脚还是应该写一下……

描述漫反射:

L=cos¯¯¯¯¯θicdiff

BRDF形式:
f(l,v)=cdiffπ

  • θi :入射方向和法线的夹角。

BRDF中除以 π 的这个系数,原因是BRDF理论中,为了保持能量守恒而,做了归一化。后边的系数也都来源于此,就不一一说明了。

Phong

For surfaces with strong, circular highlights

在Lambert基础上,增加镜面高光:

L=cos¯¯¯¯¯θicdiff+cos¯¯¯¯¯mαrcspec

BRDF形式:
f(l,v)=cdiffπ+m+22πcos¯¯¯¯¯mαrcspec

  • αr (又称反射角):反射光和视线的夹角。这个夹角一定程度上描述了镜面反射时候,能看到的反射光的量。物理含义不是很清晰。
  • m:3dmax称之为 Glossiness。这个值越大,高光越尖锐。
  • 指数函数:只是为了得到一个峰更陡的函数,没有什么物理意义。
  • cspec :3dmax称之为 Specular Level。代表了整体的亮度。

由于 cos¯¯¯¯¯θi 在角度为0处是不连续的,所以在这个角度,会出现一个明显的硬的分界线。3dmax给了一个“Soften”参数来解决这个问题,增大这个参数时,这个硬痕迹同高光一起也被模糊,从而不会穿帮太明显。

注意这个BRDF的高光部分不同于漫反射部分,并不是直接把radiance的描述形式除以 cosθi 。因为这会导致在glancing角度上,f的值变为无限大,造成走样。这个BRDF形式可以直接解决上边说的“硬的分界线”的问题。

Blinn

For rounder, softer highlights than Phong shading.

又称 Blinn-Phong。将Phong中的 αr 变为 θh 即可:

L=cos¯¯¯¯¯θicdiff+cos¯¯¯¯¯mθhcspec

BRDF形式:
f(l,v)=cdiffπ+m+88πcos¯¯¯¯¯mθhcspec

  • θh (又称半反射角): 入射光与视线的角平分线方向。

Phong在表面粗糙的物体上表现不佳。而Blinn可以解决这个问题。
cosθh 可以看做是描述物体的表面微观几何上,朝向某一个方向的概率,亦即,可以通过对微表面的分析,对该某个角度所对应的所有微表面的部分进行积分,来得到 cspec 的值。
对岸灯光在河里的倒影为什么是长条形?月亮为什么像个盘子而不像个球?都可以追溯到这里。

另外,还可以直接乘以菲涅尔反射因数,来变为菲涅尔反射。不过没有在3dmax里边我还没找到它的菲涅尔反射的勾选项……有的话求告知 QWQ……(非vray材质)

Oren-Nayar-Blinn

For matte surfaces such as fabric or terra cotta

BRDF形式:

f(l,v)=cdiffπ(A+Bcos¯¯¯¯¯(ϕ)sin(min(θi,θo))tan(max(θi,θo))

这个光照模型同样也是对Phong模型的一个优化。它注意到了微表面上的回射(retro-reflection)效应,对此进行了优化。

retro-reflection:光在微表面上并不直接消失,它可能反射到微表面的其他位置。 Light that was occluded by microscale surface detail does not disappear—
it is reflected, possibly onto other microgeometry.
另外,还需要先引入一个粗糙度 σ 的概念:
σ :描述了微表面上的法线与宏观表面的法线之间的夹角(弧度)。The roughness σ is defined as the standard deviation of the angle between the microfacet surface normals and the macroscopic surface normal.
粗糙度为0的时候,也就是Lambert表面。

  • ϕ :入射光和观察角度的相对方位角。也就是他们投影到表面上之后的夹角。
  • A=10.5σ2σ2+0.33
  • B=0.45σ2σ2+0.09
  • A和B的这些系数是近似的结果。

在3dmax中,可以看到它多了”Advanced Diffuse”和”Roughness”这两项,roughness应该就是上边说的这个了。Advanced Diffuse 看上去和本光照模型没有太大关系,3dmax的document里边描述是“可以用这个参数来控制漫反射的强度,而不影响高光的强度”。
补充一句……虽然这个光照模型看上去复杂,但是其实里边的很多部分都可以提前烘焙。

Metal

For metallic surfaces

金属作为导体,与塑料等绝缘体的不同之处主要是没有了副表面散射(例如表现为漫反射)和透明。金属会将大多数光线都反射出去(例如铁是70%,重金属常常达到90%),所以前边所说的菲涅尔效应和 retro-reflection,对于金属材质就会变得明显。前者描述反射光的强度分布,后者描述粗糙程度。

菲涅尔效应大体上是一个使反射率在glancing方向增大的效果,菲涅尔反射:

Lt=(1RF(θi))n22n21Li

其中n1和n2是折射率,θ是入射角度, RF 便是菲涅尔反射系数的函数。现在用的菲涅尔反射系数函数一般是一个经验近似:
RF(θi)RF(0°)+(1RF(0°))(1cos¯¯¯¯¯θi)5

可以看出,其中惟一的参数就是这个 RF(0°) 了。3dmax中对应于此的应该是specular level了。
正是因为菲涅尔反射的特性,Metal中的Specular Highlights曲线呈现出中间下凹的驼峰状,使得金属在Blinn高光反射达到最高峰的地方,反而亮度有所降低。

Strauss

For metallic and nonmetallic surfaces

RTR里边居然没有写这个光照模型,有点懵逼……3dmax的document只说了可以通过修改Glossiness和Metalness来修改它的金属程度。
查了一些资料,据说这个光照模型主要优势是,满足了能量守恒,自带菲涅尔反射,还顺带提供透明参数~赶脚好神奇~
论文:A realistic lighting model for computer animators
(羞耻地说道我下载不下来这个pdf……

Anisotropic

For surfaces with elliptical, “anisotropic” highlights

各向异性意味着从同一个俯视角去看材质表面,所看到的光照并不一样。它需要使用到材质副法线,用来描述材质切线空间的旋转。上边用到的半反射角 θh ,也会先转换到切线空间,投影到法线、副法线方向上,再进行计算。
看3dmax里边的曲线的表现,应该是分别在两个切线方向上做Blinn反射,给定的参数是Specular Level、Glossiness(这两个和Blinn一样),还有Anistropy、Orientation,分别控制各向异性的程度,和旋转角度。

感觉这个最大的限制应该是,两个方向都得是Blinn,无法控制曲线的形状。比如头发材质常用的 Kajiya-Kay BRDF,它在发丝切线方向和其垂直方向,会分别使用specular和diffuse分量来计算。
是时候召唤比BRDF还要长的英文名了!就是你了!SBRDF/SVBRDF!

Multi-Layer

For surfaces with more complex highlights than Anisotropic

这个应该就是上边说的Anistropic所不能解决的部分的解决了——使用多个层级叠加的方式来描述更复杂的各向异性。好像是传说中的 Lafortune BRDF耶。 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄

Translucent

Lets you specify translucency, where light is scattered as it passes through the material

这个半透明模型具有两个方面的效果:被光照射这一面的Blinn效果,没有被光照射到的这一面的光线传播。主要是这个背面的光线传播,3dmax给出了如下参数:
Translucent Clr (Color):描述光在材质内被散射出去的颜色。
Filter Color(transmissive color):描述颜色穿过透明或半透明材质时的颜色。【这个颜色是什么意思我现在十分懵逼 0 0 调了之后完全没有效果……】
Opacity:不透明度。

你可能感兴趣的:(shader)