现在的位置: 首页 > 综合 > 正文

Some Shading Models in realtime rendering

2013年04月12日 ⁄ 综合 ⁄ 共 4625字 ⁄ 字号 评论关闭

http://blog.csdn.net/bugrunner/article/details/7848514

 

 

前段时间有在这里(http://www.fseraph.com/?p=661)看到关于实时渲染中的一些常见渲染模型的总结,最近于是也找了些资料学习了一下,这里简单总结一下。

1. 一些基本概念

  • Photon(光子): 波粒二象性;属于粒子;拥有波长;具有能量
  • Radiant Energy(辐射能量): 光子集所具有的能量,,单位:(焦耳)
  • Radiant flux(辐射通量) , Radiant power(辐射功率):,单位时间内的辐射能量(或光源在单位时间内所发射的光子所具有的能量),单位:(瓦特,焦耳/秒)
  • Flux density(通量密度), Irradiance(辐射照度):,单位面积上的辐射通量,即:面积为的平表面上通过(进入或离开)的辐射通量;Irradiance则是特化后用来描述单位表面在其法向半球空间内进入该表面的辐射通量;单位:
  • Radiant intensity(辐射强度):,单位实体角上的辐射通量,即:在某个方向上通过(进入,发射或穿过)某一点的辐射通量;Solid
    angle(实体角)
    :三维空间中的二维角度;在球面度上进行衡量;:在半径为的空间球上,实体角所对应的区域的球面表面积为;单位:
  • Radiance(辐射亮度):,单位实体角、单位投影面积的表面元素上在某一方向上通过(进入、发射或穿过)的辐射通量为方向与表面法向之间的夹角);比如,在各个方向上相同的辐射亮度对应着与成比例的辐射强度;在某一点上的辐射亮度与距离无关;单位:

2. Bidirectional Reflectance Distribution function

BRDF(双向反射分布函数)用来描述物体表面入射与反射光线之间的关系,其数学形式上的表示:在物体表面上的点处,出射方向上所反射的辐射亮度的微分与入射方向所进入的辐射照度的微分之间的比率;因而,BRDF是一个关于的三元函数,量化公式为:

将上式变型后即可以得到在点处的反射方程:

该积分式计算出了物体表面在一定光源条件下特定方向上的辐射亮度,于是也就最终决定了其被人眼感知时所得到的形象。其中的核心就是BRDF所涉及的部分,它也是特化出不同渲染模型所对应的变化关键。

BRDF的一些属性。首先是一些基本的公共属性:

  • Wavelength dependency, 波长相关:不同波长的光线在其表面上应有不同的反射结果,因而其是波长相关的。
  • Reciprocity, 互反性:变换入射和出射光线的方向并不会影响BRDF的值,数学上的描述为:。这个属性在一些基于物理的渲染中很重要,比如Bidirectional
    path tracing等(但在实时渲染模型中可能会被忽略)。
  • Energy conservation, 能量守恒: BRDF需要满足能量守恒定律,即要求从一表面点上反射出的总能量不大于进入该点的总能量。对于一表面点进行量化后有:。大多数BRDF都能一定程度上满足此属性,这样会让渲染结果看起来更自然;但在严格意义上地满足该约束则不太容易,它要求能量不能被无缘由地损失或减少(这些在基于物理的渲染中可能很重要)。
  • Anisotropy & Isotropy, 各向异性&各向同性:如果BRDF是关于表面法向量是旋转对称的,它的结果只取决于以及所对应的方位角之间的差值,那么其为各向同性的;反之则其为各向异性。大多数金属质感材质的BRDF具有各向差异的属性。

另外,还有一些从实时渲染工程性角度考量下的一些应该尽量被满足属性:

  • 直观简单的参数化:BRDF需要若干关键参数来进行调制,直观易用的参数能使美工更方便地对材质的各项属性进行设置,极大地降低使用难度以及提高使用效率。
  • 更高的计算效率: 效率是实时渲染中最主要的考虑因素,这也正是各种高效Phong模型很流行,其它有更好表现力的模型并不被广泛使用的重要原因之一。关于BRDF的计算效率包括两方面,即时间和空间;在当前的GPU架构下一般来说对于每个Pixel均需要进行对应的BRDF计算,因而这两个方面的效率同样重要。

3. 菲涅尔反射(Fresnel Reflectance)

实用的BRDF需要用来表现尽可能多样的材质类型,这其中当然就包括常见的金属、水晶或液体之类的物质。物理实际中,光线在这类比较光滑的物质表面上传递时会出现另外一种反射和折射现象:菲涅尔现象。在菲涅尔现象中,通过不同介质间的光线会以某种与折射率、反射率有关的比率和夹角、并通过反射或折射的方式通过物体。这种反射现象可以用菲涅尔方程进行描述,它主要用来描述光线在不同介质间传递时反射与折射量之间的相互关系。菲涅尔方程中主要包括两个分量:反射系数,透射系数(或折射),两者之间满足关系:

当然,在BRDF之中由于只考虑光线的双向反射分布,因而可以只取其中的部分即可;而在其它的比如BTDF或BSDF(Bidirectional
Transmission/Scattering Distribution Function)中则同样需要考虑其中的部分(比如在一些次表面散射等效果中就需要使用)。
在实际中,计算出近似物理真实的并不容易,这主要由于两方面原因:
  • 高近似度的还原需要的计算量过大;
  • 几近真实的物理属性参数并不尽可知;

在实时渲染中,多数情况下会采用近似的方法以尽可能小的代价来计算出看起来比较可信的结果。当前使用比较多的近似途径是一种由Schlick提出的方法,其式如下所示:


其中的为介质的折射率;为入射光线与反射光线之间的半夹角(在BRDF中使用时即为之间的半夹角)。有了上述的Fresnel
term之后即可将其适时地嵌入到某些BRDF中以便一定程度上还原菲涅尔现象进而丰富BRDF对于该类型材质的表现力度(比如在后面的Cook-Torrance等模型中)。

4. 一些常见的渲染模型

对反射方程的原始积分式直接计算显然不太可行,需要采用离散化的方式进行简化,这里通常结合对于光源的狄拉克脉冲函数建模的方法进行(看这里); 简化后可得:

这样,对于有限个方向上的光源进行叠加即可得到最终的渲染结果;在分析过程中只需要考虑一个方向上的光线影响,即有:


转换为另外一种抽象表达的形式以便于后述对于各种渲染模型的分析(注意:此处的并非前述的辐射强度):


上式中的为物体表面的法向量,为光线到表面点的向量,而V则为视点到表面点的向量;其中的表示两个单位向量之间的点乘,用来取代分量;原始的三个参数此时也完全可以由来直接、间接地转换并替代(见下图示):


通常来说BRDF是关于表面多种属性的反射结果之间的线性组合(在实时渲染中一般只考虑diffuse和specular两种即可),其可以量化表示为:


其中的分别表示两种反射的结果,表示其对应的权重;如此一来通过调制组合中的四个参数就可以得到不同渲染表现的BRDF。接下来看一下一些常见的模型:

Lambert

Lambert模型是最简单的一种形式,它主要是用来还原完全的diffuse reflection效果(入射的光线在称为Lambert 的表面上均匀地反射向外部的各个方向),而不考虑specular反射;其BRDF的表述为:


而在实时渲染中又通常将上式中的直接替换为diffuse颜色值,因而其最终的BRDF调制因数就为:


单纯的兰伯特模型使用较少,它通常是被合理地融入到其它更复杂的模型之中。

Phong

Phong应该说是当前使用得最多的一种渲染模型,它在diffuse反射的基本上加入了glossy specular反射,其关于该部分的计算使用了光线从表面射出的方向(或)与光线在该点的全反射方向之间的夹角的一个数学变换操作来实现(余弦值的幂),其BRDF公式化如下:


上式中的即为glossy
specular反射分量:其中的为对应的specular
color(与类似);部分可以用来约去反射方程中外部的几何因子;调节其中的可以控制高光区域的范围:较大的对应较小范围的高光区域,反之则相对;关于的计算为:

基本Phong模型的BRDF调制因数为:


一般情况下有,但也可以使其值小于1,只要不大于1其均满足energy
consveration的约束。

  • Blinn-Phong

Blinn-Phong是在原始Phong基础上对计算细节做了改动,其使用halfway vector来计算specular反射分量的值:


其与原始Phong在计算效率上还是有所差别:当某些情况下恒定不变时,可以预计算出统一使用,因其不依赖于表面法向量(依赖则要求在每个Pixel均需计算);其它情况下,计算R则更加节省(至少可以节省出开方操作)。B-P的调制参数为(其余的均无变化):

  • Modified-Phong

P和B-P两种模型中的中均有关于的除法操作,这样就会在(也即光线与法线几近垂直时)处产生数学运算上的问题进而导到BRDF的互反性(Reciprocity)不被满足。在Modified-Phong中就直接去掉了这一操作来避免这个问题,其BRDF如下:


因而这种修改也被称为:reciprocal (Blinn-)Phong。虽然这个简单的修改可以避免0除问题,但同时也会使得在的周围的渲染效果看起来不太自然。此处的BRDF有:


  • Max-Phong

另一种关于基本Phong的变型是Max-Phong,其相对于前几种可以在一定程度上更好地模拟具有光滑金属质感的表面,同时也使用了Modified-Phong的方法来保持BRDF的互反性,其BRDF如下所示:

此时有:

前述几种Phong模型都是实时渲染中最为常用的反射模型,其公共特点是参数都比较容易调节、计算效率也比较高,这也正是其流行的主要原因;它们之间的主要区别均在于其对部分使用的不同计算方法,但是总体来说Phong模型对于部分的表现力度还是不够,而这也是其它更加复杂的渲染模型所改进的重点之一。

Oren-Nayar

Lambert方法是一种基本的漫射模型,它假定光线在物体的表面朝各个方向上均匀发散,而这显然不太符合物理事实,特别是对于一些表面较为粗糙的材质;Oren-Nayar模型是另外一种基于一定物理事实的漫射模型,它能更好地反映这类材质表面的漫射现象。该模型的分析基于微表面方法,该方法主要建立在以下几个假设的基础上(图示如下):

  • 物体的表面是由一些微小得对称的V形结构组成;微表面之间有相互反射
  • 每个V表面的宽度要远远小于其长度
  • 每个微表面的面积要远远大于光线的波长(这点很容易满足)
  • 每个Pixel要能够覆盖足够多的微表面
  • 每个微表面具有Lambert漫射属性

关于Oren-Nayar模型的理论分析也比较复杂,这里不再多说,详细可以参考论文:Generalization of Lambert's reflectance Model 。这里直接看一下其最后量化的BRDF方程:


其中的表示两个向量在点处的切平面上的投影向量之间的夹角;另有:


上式中的表示材质表面的粗糙度,有效取值范围为;其值越大则漫射方向的分布越不均匀,当其为0时对应漫射方向的均匀分布,此时退化为Lambert模型。对该模型的BRDF用另外一种形式表述后有:


而其中对应点的切平面上的单位投影向量,这样就可以得到其BRDF调制参数:


Oren-Nayar相对于Lambert来说对于diffuse反射有更强的表现力,不过其代

抱歉!评论已关闭.