资料来自:s2013_pbs_physics_math_notes.pdf

物理渲染数学

本文讨论基于物理着色背后的基础知识模型,首先是对物理基础的事实性描述,然后是描述一些相关的数学模型,最后讨论如何试用这些数学模型实现着色。

物理着色:

着色背后的物理现象是光与物质相互作用有关的物理现象。理解这些现象,有助于对大自然的光有个基本的理解。

图1 光是一种电磁横波

光是一种电磁横波,它以垂直震荡的方式进行传播(见图1)。既然光是一种波,那么光的特征是波从波顶到波谷的波长决定。电磁波的覆盖范围很广,但只有很小的一部分范围内(大约400到700纳米)对人类是可见的,因此着色只需要关注这部分(见
图2)。

图2 可见光光谱范围

物质对光的影响是由一种叫做折射率的属性来定义的,折射率用复数来表示:它的实部衡量物质如何影响光速(相对于真空中光速的减慢)它的虚部定义光传播中是否被吸收(转化为其他形式的能量)。折射率可能会随着光的波长而变化。

媒介现象

光与物质相互作用的最简单情况是光通过均匀介质传播。这个是具有均匀折射率的物质区域(按光波的波长算,任何小于100纳米的介质变化都不会对光产生作用)。

图3:光在透明介质如水和玻璃(左)中继续沿直线传播相同强度和颜色的线条(右)。

透明介质是在可见光波长中折射率很低的介质。这意味着光在介质没有明显的吸收和分散传播只是沿着一条直线前进,没有变化。透明介质示例包括水和玻璃(见图3)

如果一个均匀介质在可见光谱中确实具有显著的吸收率,它就会吸收一些穿过它的光线。传播的距离越远吸收越多。但是,光的方向不会改变,只改变其强度(如果只针对可见波的某种波长,那么会导致颜色上的变化)-见图4

图4:光通过透明的吸收性介质(左)继续沿直线传播,但强度会减弱(并可能改变颜色),传播距离会缩短(右)。

图5:水微弱的吸收率在更远的距离上变得显著。

需要注意的是介质的吸收率。例如,实际上是水吸收一点可见光,尤其是光谱的红色部分。在以英寸为单位距离内可以忽略不计(如图3所示),但在远距离上它还是相当明显的,见图5。

散射:

在均匀介质中,光总是沿直线传播,并且不改变其方向(尽管它传播过程中可能会被吸收而减弱)。非均匀介质的折射率则会有变化。如果折射率变化缓慢且连续,那么光的传播就会发生弯曲。但是,如果折射率突然变化(即比光的波长还短的距离内发生变化),那么光的传播就会发生散射:它分裂成多个方向。但散射不会改变光的总量。

微观粒子会在折射率与周围环境不同的地方,形成一个孤立的“岛”区域。这会导致光在所有可能的传播出方向上连续散射(见图6)。注意,散射光在不同方向上的分布通常是不均匀的,这取决于粒子的类型。有些会导致前向散射(更多的光在前方传播方向),有些会导致后向散射(更多的光反向传播),以及有些具有复杂的分布,在某些方向上有“尖峰”。
在多云类介质中,光的传播在散射元素的密度足以使方向发生某种程度的随机性(图7)。在半透明或不透明介质中,散射元素的密度为如此之高以至于光的方向完全随机(图8)。
像吸收一样,散射效果取决于规模,干净的空气中,光在几英里远的距离传播上也有显著的散射效果。

图6:粒子造成光线在所有方向上散射


图7:光线在多云介质中(左)某种程度上有它自己的方向,随着它的传播有着类似有图的随机性。

图8:半透明或不透明介质中的灯光(左)的方向完全随机化传播(右)


图9:即使是在干净的空气中,光在几英里远的距离传播上也有显著的散射效果。

介质介绍

前面的章节讨论了物质和光之间的两种不同的相互作用(吸收和散射)。具有折射率的物质会造成吸收,使得光在传播时减弱(如果吸收偏向某些特定的波长,那么可能会改变光的颜色),但光的方向不变。另一方面,折射率的快速变化导致散射光的方向发生变化(分裂成多个方向),但光的传播方向和光的总量并没有改变。
还有第三种模式相互作用:自发光。从其他形式的能量中产生新的光(与吸收相反)。这发生在光源中,但在着色中不常出现。
图10说明了这三种情况互动模式。


图10:光与物质相互作用的三种模式:吸收(左)、散射(中)和自发光(右)。

图11:具有不同光吸收率和散射率的介质。它们的外观取决于这两种属性;例如,白色外观(右下角)是高散射组合的结果吸收率低。
大多数介质都在一定程度上散射和吸收光。每种介质的外观取决于关于散射和吸收的相对量。图11显示了散射和吸收的结合效果。

平面范围上的散射:

Maxwell方程可以用来计算折射率改变时光的行为,但在大多数情况下,不存在解。有一个特殊的做法能确保有一个解,尤其是表面着色相关。假设这是一个无限的,完全平坦的平面,作为折射率不同的两个体块之间的边界。空气的折射率在平面边界的一侧,另一个对象反射率在另一侧。在这种特殊情况下,Maxwell方程组的解称为菲涅耳方程。


图12:平面边界的折射率变化导致光在两个方向上散射。

虽然现实上物体的表面不是完全平坦的,但相对于可见光波长来讲可以是平坦的。至于“完全平坦”,可能会有人反对说没有物体表面真的可以是平坦的,单个原子微粒也会形成微微尺度的“凸点”。然而,这个平坦的最小尺度只是相对于光的波长而言的,确实有可能使表面在几百纳米的尺度上完全平坦,这样的表面被称为光学平坦的,通常用于高质量的光学仪器,如望远镜。
在平面边界折射率的特殊情况下,光不再是向各个方向持续的散射,光会分为两个方向传播:反射和折射(图12)。
如图12所示,反射角等于入射角,但折射不同,取决于介质1的折射率。反射和折射的部分由菲涅耳方程描述,将在后面的章节中讨论。

非光学平面(Non-Optically-Flat Surfaces)

然而,大多数真实世界的表面并没有像望远镜反射镜那样抛光到十分光滑。在光学上不平坦的表面上会怎么样?在大多数情况下,确实存在许多不平整且幅度比光的波长大得多,但对眼睛感官来说又太小,无法直接观察到细节(即,它们小于单个像素或着色采样的覆盖区域)。在这种情况下,表面其行为类似于一个微小的光学平面的大集合。表面外观是许多具有不同表面方向的点的聚合的结果,每个点都以微弱的方式反射入射光到不同方向(图13)。

图13:非光学平面的反射,是从许多不同方向的细微表面点反射的聚集结果。

图14:上图,表面相对光滑;表面方向只是略有变化,导致反射光方向的微小变化,从而看起来表面更加光滑。下图是粗糙的;表面上不同的点有着广泛不同的方向,造成反射光的方向变化很大,因此看起来相对粗糙。注意两个表面的光滑粗糙比较都是在可见的微观尺寸范围内而言的。

在这个微观尺度上,表面越粗糙,反射越模糊,微表面上与宏观表面上反射光的方向的偏离就越大(图14)。根据着色的需求,通常将此微观几何上的多个细微点整体视为一个点,从而计算这个点的反射(和折射)光(图15)。

图15从宏观上看,非光学平面可被视为反射(和折射)多个方向的光。

次表面散射

折射光会发生什么?这取决于物体的成分。在金属中,折射的光会立即被吸收,能量会被自由电子吸收。另一方面,在非金属(也被称为电介质或绝缘体)中,表现为光折射一次进入它们内部后,发生有规律的传播,表现为吸收和散射。在大多数情况下,一些折射光被散射到足以从同一表面重新发射出来。如图16。


图16:在金属中(左边),所有折射的光能立即被自由电子吸收;在非金属(右边)中,折射的光在物体内部散射有部分被吸收后,有的则重新在表面出现。

在图16的右侧,可以看到次表面散射光(用蓝色表示箭头)从表面的不同点出射,出射点的位置与入射光源的入射点位置有一定的距离。图17显示了这些距离和像素大小之间的关系的例子。在图17左上角,像素大于光在表面上从入射点到出射点的散射距离,在这种情况下,可以忽略入射点到出射点的距离,可以视为散射光在表面上同一点入射和出射,如右上角所示。这可以当做一个完全独立的点来着色:一个点的出射光只依赖于同一点上的入射光。
在图17的底部,像素小于入射点到出射点的距离。在这种情况下,暗处的点也会受到其它点光线碰撞的影响。为获得这个效果,靠点内局部着色是不够的,需要使用专门的渲染技术。这些是通常被称为“次表面散射”技术。需要注意的是“普通”漫反射着色是相同物理现象(折射光的次表面散射)的结果。唯一的区别是相对于观测散射的距离远近不同。当材质有“次表面散射”的效果时,如果观察距离足够远,那么可以用规则的漫反射着色处理(例如,远距离角色的皮肤)。相对的,这种有“规则的漫反射着色”效果的材质,在非常近距离观察时有“次表面散射”的视觉效果(例如,小塑料玩具)。


图17:在左上角,像素(带红色边框的绿色圆圈)的范围大于光线的入射点和出射点之间的距离。在这种情况下,可以当成出射光是从入射点的同一点位置出射的(右上角)。在底部的图,像素范围小于光的散射距离;如果需要更真实的着色,则不能忽略这些距离。

数学着色

电磁波辐射(包括可见光)的测量称为辐射学。有各种各样的辐射量化值被用来测量表面上的光,包括方向等等;但我们只关心其中的辐射率,它是用来量化一条3D空间上的光线的值。辐射率通常用辐射学符号LLL表示;当对表面的点进行着色时,LiL{_i}Li​表示入射到表面的辐射率,LoL{_o}Lo​表示出射的辐射率。
辐射率(和其他辐射量值一样)是一个在光谱上分布的值:它的值随波长的变化而变化。理论上讲,要表达可见光的辐射率,需要储存一个连续分布的光谱值。密集的光谱采样确实在一些特殊的渲染应用程序中有使用,但是对于制作(电影和游戏)渲染,将使用RGB三元组代替。如何解释这些与光谱分布有关的三元组也可以在许多资料中找到。

BRDF

假设着色可以在像素一点内部处理,如右上角所示图17。在这种情况下,给定的表面点对光有什么样的反应只取决于入射光和出射光(视角)的方向。在本文档中,我们将使用v{\bf v}v表示指向出射方向的单位向量,使用l{\bf l}l表示指向与入射方向相反的单位长度向量(指向离开表面的向量更方便使用)。表面对光反应的量化函数被称为BRDFBRDFBRDF(双向反射分布函数),表示为f(l,v)f({\bf l},{\bf v})f(l,v)。每个方向(入射和出射)都可以参数化为两个(即半球上确定微分立体角的天顶角和方位角),因此BRDFBRDFBRDF的总的参数为4个。在许多方面在这种情况下,围绕表面法线旋转光线向量和视角向量不会影响BRDFBRDFBRDF。类似各向同性BRDFsBRDFsBRDFs可以用三个角度参数化,如图18所示。实际上影响BRDFBRDFBRDF计算的角数量为1到5个;一些常用角度如图19所示。

图18:BRDFBRDFBRDF依赖于入射和出射方向;可以使用四个角表达,在各向同性BRDFsBRDFsBRDFs的情况下是三个角。这里n{\bf n}n是表面法向量,l{\bf l}l是入射光方向向量,v{\bf v}v是出射(视角)方向向量,t{\bf t}t是表面上首选的切线向量(这仅用于各向异性BRDFsBRDFsBRDFs,即当入射光和出射光向量围绕n{\bf n}n旋转时,反射行为会发生变化)。

图19:BRDFBRDFBRDF计算中常用的一些角示例。作为图18的补充。

原则上,BRDFBRDFBRDF仅针对表面上方的光和视角方向进行定义;换句话说为避免光线方向是向表面背面的,点积n•l{\bf n}•{\bf l}n•l和n•v{\bf n}•{\bf v}n•v(BRDFBRDFBRDF表达式中的参数)必须都是非负。避免的方式很简单:要么只聚集计算从正面方向入射光,要么通过设置来自任何背面的光方向为零。表面背向视角方向理论上不应该发生,但以插值的方式生成的顶点法线或法线贴图(在游戏中都很常见)会发生这种情况。为避免BRDFBRDFBRDF中的n•v{\bf n}•{\bf v}n•v为负值,可以通过用000到n•v{\bf n}•{\bf v}n•v的插值或用n•v{\bf n}•{\bf v}n•v的绝对值来表示。
在某些情况下,简单地计算BRDFBRDFBRDF的负值可能会产生更好的结果。但是,必须确保数学运算上能够成立(如被除数不能为0)。
BRDFBRDFBRDF可以直观地用两种方式解释,这两种方式都是正确的。
第一个解释是,给定从某个方向入射的光线,BRDFBRDFBRDF给出了该光线在表面上所有反射光和散射光的分布。
第二个解释是,对于给定的观察方向,BRDFBRDFBRDF给出了来自每个入射光方向所贡献的出射光。
这两种解释如图20所示。

图20
左图表达解释:对于给定的观察方向,BRDFBRDFBRDF给出了来自每个入射光方向所贡献的出射光。
右图表达解释:给定从某个方向入射的光线,BRDFBRDFBRDF给出了该光线在表面上所有反射光和散射光的分布。

BRDFBRDFBRDF是一个光谱上的量化值。理论上,输入和输出的光波长叠加会大大增强BRDFBRDFBRDF的效果,但实际上不同波长的光并没有相互干扰,它们是相对独立的,同样波长的出射光只受到同样波长的入射光的影响。所以,我们可以简单的将BRDFBRDFBRDF视为光谱上的颜色值函数。在渲染中可以用BRDFBRDFBRDF乘以其它光的颜色值。
BRDFBRDFBRDF的反射方程式:
Lo(v)=∫Ωf(l,v)⊗Li(l)(n⋅l)dωi(1)L{_o}({\bf v})=\int_\Omega f({\bf l}, {\bf v})⊗L{_i}({\bf l})({\bf n}·{\bf l}){\bf d}\omega {_i} \quad\quad(1)Lo​(v)=∫Ω​f(l,v)⊗Li​(l)(n⋅l)dωi​(1)
虽然这个等式看起来有点让人望而生畏,但它的含义很直观:出射光的辐射率等于所有入射光的辐射率乘以BRDFBRDFBRDF再乘以余弦系数的积分(表面以上所有方向)。如果你不熟悉积分,你可以把它们看作是一种连续的加权平均数。这里使用⊗⊗⊗符号表示分量矢量乘法;这是因为BRDFBRDFBRDF和光线颜色都是光谱上的(RGB)(RGB)(RGB)向量。
并不是每个有光线传入和传出方向的函数都可以称为BRDFBRDFBRDF。BRDFBRDFBRDF必须具有物理上合理 的两个性质:
1、相互性,相互性简单地说,BRDFBRDFBRDF的l{\bf l}l和v{\bf v}v值可互换。
f(l,v)=f(v,l)(2)f({\bf l},{\bf v})=f({\bf v}, {\bf l})\quad\quad(2)f(l,v)=f(v,l)(2)
2、能量守恒,是指一个表面不能反射超过100%的入射光能量。在数学上,它通过以下等式表示:
∀l,∫Ωf(l,v)(n⋅v)dωo≤1(3)∀{\bf l},\int_\Omega f({\bf l}, {\bf v})({\bf n}·{\bf v})d\omega{_o}≤ 1 \quad\quad(3)∀l,∫Ω​f(l,v)(n⋅v)dωo​≤1(3)

这意味着对于任何可能的光方向l{\bf l}l,BRDFBRDFBRDF乘以余弦因子输出方向v{\bf v}v的积分不得超过1。

图21: BRDFBRDFBRDF高光反射项通常用于表面反射,BRDFBRDFBRDF漫反射项的次表面散射。

BRDFBRDFBRDF描述的现象包括(至少对于非金属)两种不同的物理现象现象:表面反射和次表面散射。因为每一种现象都有不同的行为,BRDFsBRDFsBRDFs分别对它们一个单独的项来描述。BRDFBRDFBRDF描述表面反射的称为高光反射项,描述次表面散射的称为漫反射项。见图21。

表面反射(高光反射项)

基于物理的BRDFBRDFBRDF高光反射项通常是基于微表面理论的。这个理论是用于描述一般(非光学平面)表面的反射。基于假设微表面理论的微小变化值(微观几何)小于观测尺度(如着色的分辨率),但大于可见光的波长(因此只使用于几何光学,衍射等波效应可以忽略)。所以到目前为止,微区理论仅用于推导单次弹跳表面反射的表达式,多弹跳表面反射的综合理论仍然是一个尚未解决的问题。
由于微几何结构被假定比可见光波长的尺度大得多,因此,每个表面点都可以被视为光学平面。如前所述,截面,一个光学平面将光分成两个方向:反射和折射。
给定入射光,每个点的反射光由微表面的法线m{\bf m}m方向决定。要求BRDFBRDFBRDF的值,需要给定好入射光方向l{\bf l}l和观察方向v{\bf v}v的值。只有那些恰好正确地将l{\bf l}l反射到v{\bf v}v的光才有可能对BRDFBRDFBRDF的值产生贡献。在图22中,我们可以看到这些“正确定向”的表面点的法线m{\bf m}m的向量精准的在向量l{\bf l}l和向量v{\bf v}v的中间。称为半向量或半角向量;我们将其表示为h{\bf h}h。

图22:m=h{\bf m}={\bf h}m=h的表面点的向量方向将l{\bf l}l反射到v{\bf v}v中。其他表面点则不为BRDF作出贡献。


图23:在左边,我们看到一些表面点在l{\bf l}l方向上被遮挡,所以它们是在阴影中接收不到光(因此它们不能反射任何光)。在中间,我们看到一些表面点从观察方向v{\bf v}v上是看不到的,因此从这些点反射的任何光都不可见看到。在这两种情况下,这些表面点对BRDF没有贡献。事实上,尽管有阴影区域不接收来自l{\bf l}l方向的任何直接光,但它们确实接收(并因此反射)从其它表面点反射来的来自l{\bf l}l方向的光(如右图所示)。微表面理论忽略了这些相互作用。

并非所有m=h{\bf m}={\bf h}m=h的表面点都会对反射作出贡献;有些表面点在l{\bf l}l方向(阴影)、v{\bf v}v方向(遮罩)被其它表面点挡住,或两者兼而有之。微面理论假设所有的阴影光都会从高光反射项中消失;实际上,由于多个表面反射,其中一些最终将可见,但这不在微表面理论范围内。各种类型的光与表面的相互作用如图23所示。

在这些假设下(局部光学平坦表面,无相互反射),一个BRDF高光反射项可以从[1,73][1,73][1,73]的第一个原理推导出来。高光反射BRDFBRDFBRDF的形式为:
fµfacet(l,v)=F(l,h)G(l,v,h)D(h)4(n⋅l)(n⋅v)f{_{µfacet}}({\bf l},{\bf v})=\frac{F({\bf l},{\bf h})G({\bf l},{\bf v},{\bf h})D({\bf h})}{4({\bf n}\cdot{\bf l})({\bf n}\cdot{\bf v})}fµfacet​(l,v)=4(n⋅l)(n⋅v)F(l,h)G(l,v,h)D(h)​

我们将更详细地讨论每一项,但首先是一个简要的介绍。
D(h)D({\bf h})D(h)是微表面几何法线分布函数(mi-crogeometry normal distribution function NDF),用于计算在半向量h{\bf h}h;换句话说,就是能够将l{\bf l}l反射到v{\bf v}v的表面点的浓度(相对于表面积而言)。
G(l,v,h)G({\bf l},{\bf v},{\bf h})G(l,v,h)是几何函数;它告诉我们光线方向l{\bf l}l和视角v{\bf v}v中m=h{\bf m}={\bf h}m=h,且未在阴影中或未被遮当的表面点的百分比的函数。因此,通过反射的表面点从l{\bf l}l到v{\bf v}v,D(h)D({\bf h})D(h)和G(l,v,h)G({\bf l},{\bf v},{\bf h})G(l,v,h)的乘积给出了"有效表面"的浓度。
F(l,h)F({\bf l},{\bf h})F(l,h)是有效表面点的光方向{\bf l}和有效的微几何法线m=h{\bf m}={\bf h}m=h的菲涅耳反射函数,。它告诉我们入射光有多少在表面点上被反射出去。
最后,分母4(n⋅l)(n⋅v){4({\bf n}\cdot{\bf l})({\bf n}\cdot{\bf v})}4(n⋅l)(n⋅v)是一个修正因子,表示在整个宏观表面内部的微观几何的内部之间形态转变的量。

菲涅尔反射:

菲涅耳反射函数计算从光学平面反射的光的量。它的值取决于两个因素:入射角(光和表面法线之间的角度)和材质的折射率。折射率在可见光谱中不同的值是不同的,菲涅耳反射目的就是算出光谱上的RGBRGBRGB三元色。每个RGBRGBRGB值必须位于0到1的范围内,因为表面不能反射小于0%或大于100%的入射光。
完整的菲涅耳方程有点复杂,所需的材质参数(在可见光谱上密集的采样折射率)对艺术家来说并不方便。但是,可以通过更简单的表达方式,通过检测真实世界材质的行为进行数学方程建模,从而参数化。基于这一点,让我们看看图24。
这个图表选择的材质代表了各种各样的东西。 尽管如此,依然可以观察到一些共同的元素。可以看到。对于0◦到45◦之间的入射角的反射几乎是恒定的。 反射率在45◦到75◦之间变化更显著。 最后,在75◦到90之间反射率总是迅速达到1(白色)。
看这些值和角度范围在一个简单的3D3D3D场景中是如何变化的,把微表面理论物体放进场景,我们将看到一个简单的情况:反射从一个光学光滑的金属表面发出。 这样的表面能准确地反射出每一条入射光线方向。 将此行为表示为BRDFBRDFBRDF是不合理的,但是有一种更简单的方法来模拟它的渲染:从反射的视角方向对入射辐射率进行采样,并将其乘以菲涅耳反射率,以获得出射辐射率。 这使得光照模型在任意方向入射时都表现的很好(光照模型将在这些说明的后面进一步讨论)。 在这种情况下,菲涅耳的“入射角”反射率应使用表面法线n{\bf n}n与视角方向v{\bf v}v之间的角度算出 (本例中的入射向量是v{\bf v}v绕n{\bf n}n反射同样的角度)。 图25显示这个角度(以及由此产生的菲涅耳反射率)在一个简单的3D场景中是如何变化的。 我们可以看到绿色和黄色区域占主导地位-菲涅耳反射率在大部分像素上几乎没有变化,仅在边缘显著增加。

在微表面理论中,我们处理的不只是光滑的表面,还需要关注局部独立表面的菲涅尔反射。 因为对BRDFBRDFBRDF有贡献的微表面点的法线都等于半角向量h{\bf h}h(回想图22), 这么说来,h{\bf h}h可以用来计算菲涅尔反射。菲涅耳入射角就是h{\bf h}h和l{\bf l}l之间的夹角。


图24:各种物质的菲涅耳反射率,绘制(y轴)作为函数,入射角变量为(x轴)。 铜和铝在可见光谱上的反射率有很大的变化,它们的反射率显示为R、G和B的三条独立曲线。铜的R曲线最高,其次是G,最后是B(因此它的红色)。 铝的B曲线最高,其次是G,最后是R。

图26以图25的方式可视化h{\bf h}h和l{\bf l}l之间的夹角,即和图25中可视化n{\bf n}n和v{\bf v}v之间的夹角一样。从图中可以看出,对于某些光线角度,黄色甚至红色区域为主。 然而,正如我们在图27中所看到的,这是误导性的:当其余的BRDFBRDFBRDF计算进去,那么它们都会被清除掉,仅剩红色区域(反射率增加的地方显著地)仅限于边缘。
3D3D3D场景中菲涅耳反射中可见的部分角度都很接近0◦,因此我们可以认为这个值(表示为F0{\bf F}{_0}F0​)是材质的高光反射值。 这个值具有的属性通常被认为是“颜色”属性,它是由0到1之间的RGBRGBRGB值组成,是光的选择性反射率的度量。出于这个原因,我们也将这个值称为表面的高光颜色。
F0{\bf F}{_0}F0​看起来是菲涅耳反射率近似的理想参数,实际上是Schlick给出一个廉价和合理准确的近似,使用此表达式:
FSchlick(F0,l,n)=F0+(1−F0)(1−(l⋅n))5(5)F{_{Schlick}}(F{_0},{\bf l}, {\bf n})=F{_0}+(1-F{_0})(1-({\bf l}·{\bf n}))^5 \quad\quad(5)FSchlick​(F0​,l,n)=F0​+(1−F0​)(1−(l⋅n))5(5)
这种近似在计算机图形学中得到了广泛的应用。 微表面BRDFBRDFBRDF中使用时,有效的微表面理论法线h{\bf h}h必须代替表面法线n{\bf n}n:
FSchlick(F0,l,h)=F0+(1−F0)(1−(l⋅h))5(6)F{_{Schlick}}(F{_0},{\bf l}, {\bf h})=F{_0}+(1-F{_0})(1-({\bf l}·{\bf h}))^5 \quad\quad(6)FSchlick​(F0​,l,h)=F0​+(1−F0​)(1−(l⋅h))5(6)
要知道哪些值分配给F0F{_0}F0​是合理的,查看真实世界中的材料各种值是很有用的。 这些可以在表1中找到。 值在线性空间和伽马空间中都给出;我们推荐任何不熟悉线性空间中着色的重要性的人(和从伽马空间转换到着色输入所涉及的问题)查阅一些相关资料。
图25:在左边,可以看到把图24中菲涅尔反射在光滑表面根据法线和入射方向夹角的变化区域用3种颜色区分划分。反射率几乎恒定的为绿色部分(0◦到45)◦反射率逐渐变化的为黄色部分(45◦到75),反射率迅速上升到1的为红色部分(75◦至90◦)的。在中间图像中,这些区域被可视化在三维物体上,以表示n和v之间的角度(这一点是在光学平坦表面情况下菲涅耳反射率的相关角度)。 在右边我们可以看到玻璃的菲涅耳反射率(图24中的绿色曲线)显示为相同的颜色对象。


图26:此图用与图25中显示法线n{\bf n}n相同的方法显示了h{\bf h}h向量的菲涅耳区域。 由于h{\bf h}h依赖于光方向 l{\bf l}l 以及视图方向v{\bf v}v,此处四幅图像的光线方向不同。 我们可以看到对于给定的光线角度,整个物体可能在黄色甚至红色区域。 正如我们将在图27中看到的,这是有点误导的。


图27:在此图中,菲涅耳区域颜色(如图26所示)乘以剩余部分微表面BRDFBRDFBRDF(法线分布函数、几何函数)。四幅图像的光方向分别与图26中的四幅图像的光方向相匹配。 我们可以看到,当完整的BRDFBRDFBRDF被纳入,绿色区域和红色区域只能在极端边缘看到。 在这个场景中对于光滑的表面有温和的光泽,有的则更强。


表1:各种材质的F0F{_0}F0​值。

在检查表1时,有几个明显的现象。 一是金属与非金属相比,F0F{_0}F0​的值偏高。 即使是铁,一种相对较暗的金属,在入射光角度为0◦时也能反射50%以上的光。 回想一下,金属没有次表面反射;明亮的镜面颜色,没有漫射颜色是金属的显著视觉特征。 另一方面是钻石,其中最亮的非金属之一,在入射光角度为0◦时只反射17%的入射光;大多数非金属反射都比较低。 少数材质在“无人之地”的值在20%到40%之间;这些是通常是半导体和其他外来材质,它们不太可能出现在着色情况中。 低于2%的值(水的F0F{_0}F0​值)也是如此。 实际上,除了金属,宝石和晶体,几乎任何你可能在实验室之外看到的材质都有一个窄范围的F0F{_0}F0​值,在2%和5%之间。

法线分布函数

大多数微几何表面上的点没有统一的方向分布。通常与表面宏观法线同为向上方向的点居多,相对偏离宏观法线而斜着的点较少。 定义微表面点方向分布特征的函数成为微表面法线分布函数,用D(m)D({\bf m})D(m)表示。 与F()F()F()不同,D()D()D()的值不限于在000到111之间-尽管值必须是非负的,但它们可以任意大(表示表面点的法线非常集中的指向某个特定的方向)。 也不像F()F()F(),函数D()D()D()不是光谱值,也不是RGBRGBRGB值,而是标量值。 在微表面BRDFBRDFBRDF中,D()D()D()是对方向h{\bf h}h进行评估,以帮助确定潜在活性表面的浓度点(即m=h{\bf m}={\bf h}m=h的点)。 这就是为什么法线分布函数D(h)D({\bf h})D(h)出现在方程(4)中的原因。

函数D()D()D()决定了高光的大小、光泽和形状。 在图形学文献中有几个不同的法线分布函数。许多是类似高斯模糊,有某种“粗糙度”或方差参数,而各向异性函数通常是有两个粗糙度参数(就像一些先前发表的各向同性参数一样)。 当表面粗糙度降低时,微表面点的法线指向宏观表面的法线增加,D(m)D({\bf m})D(m)的值可以变得很高。 Walter等人讨论正确的法线分布函数进行标准化,并给出了几个例子;其他文献可以找到更多的例子。

几何函数

几何函数G(l,v,h)G({\bf l},{\bf v},{\bf h})G(l,v,h)表示给定微几何法线m{\bf m}m,从光方向l{\bf l}l和视角方向v{\bf v}v是否都相互可见。在微表面BRDFBRDFBRDF中,m{\bf m}m要替换成h{\bf h}h(原因和前两项一样)。G()G()G()表示概率,它的值是标量,值限制在0到1之间。和D()D()D()的情况一样,各种文献中有不同的G()G()G()解析表达式,它们通常是基于表面的一些简化模型的近似。 几何函数通常不会向BRDFBRDFBRDF引入任何新参数;它要么没有参数,要么使用D()D()D()函数的粗糙度参数。 在许多情况下,几何函数部分取消方程(4)中的(n•l)(n•v)({\bf n}•{\bf l})({\bf n}•{\bf v})(n•l)(n•v)分母,用其他表达式代替它。
几何函数对于BRDFBRDFBRDF能量守恒是必不可少的,没有这样的一个函数项约束BRDFBRDFBRDF,那么它可以反射超过比它接收到的能量。 微表面BRDFBRDFBRDF推导的关键部分是与有效表面积与宏观表面的表面积之间的比例。 微表面点如果被阴影或蒙板覆盖则也算有效为表面点,那么有效微表面面积可能会超过宏观总面积,这明显是不可行的,可能导致BRDFBRDFBRDF不遵循能量守恒,在某些情况下会造成很不合理的现象(见图28)。


图28:在顶部,平坦的宏观表面呈绿色,粗糙的微表面呈黑色。 表面区域用红色标记即m=h部分。投影宏表面积(在这个二维侧面中的长度)到视图方向(换句话说,它按透视缩短的表面积)显示为左上方的绿线(视图方向由图形中间的紫色箭头显示)。表面单独红色段的投影为左上角分开的红色线段集合,我们看到添加上它们后,有效微几何区域(长红线)的投影大于投影宏观区域(绿线)。这是不合逻辑的,更重要的是可以导致BRDFBRDFBRDF反射比它收到更多的能量。 在底部,红线只显示可见的部分有效的表面区域。活动微几何区域的投影现在小于宏观区域,这是正确的。 当视角较低时,那么这个效果就会更明显,忽略遮挡的部分可能导致BRDFBRDFBRDF把接收到的能量反射数千次,累加成明显的错误。

微表面模型的局限性

这种微相理论的表述是相当强大和灵活的,允许通过修改大量的不同的外观参数值(高光颜色,粗糙度的法线分布)或某种形状的函数项(法线分布函数、几何函数)。 但是,有几种情况下它没有建模。 如果很看重这些效果,那么需要对模型进行修改或者扩展。
微表面模型没有考虑明显的波光学效应,如衍射还有干扰。 这在实践中不是一个大问题,因为这种效果并不经常发生在渲染中。 当它们出现时,通常使用临时技术来解决它们,而不是基于物理的模型。 更微妙的波光学效应发生在“光滑的表面”尺寸接近可见波长的时候,或者由于透视缩小的效应使得更大的曲面特征看起来会变得更小【76】。 已发布的解决这些影响的模型是full wave-optic光学模型【33,68】,但因为他们的复杂性所以在生产中没有太多的使用。 开发更便于生产的模型来解决这些问题将是很受欢迎的。 光学工程领域(例如,【12】)的有希望的模型已经开始影响图形文献【51】。

此外,微表面模型是基于相对有限的表面微地块模型,有几个未说明的假设。 例如法线分布函数的定义,假设微几何表面的可见部分朝向分布不随观察的方向的变化而变化。 这相当于微几何高度和法线是不相关的【1】。 然而,这个会影响BRDFBRDFBRDF的情况并不是常有的。 想象一下表面最初是均匀粗糙的,但凸起的部分已经通过摩擦抛光。在一瞥角度,只有凸起的部分将是可见的,使表面比其他角度更光滑。 见图29。


图29:表面的高度和方向之间有很强相关性(凸起的区域是光滑的,较低的区域是粗糙的)。 上图:光线方向接近宏观表面法线。很多人射光线到达粗糙的坑,并散射到广泛不同的方向。 下图:光线来自一个低角度的方向。 凹坑被遮挡,所以大多数射线都是从光滑表面的部分反射出来的。这导致照明中有效的法线分布函数随角度的变化很大。

最近的研究表明,替代几何结构或修改基本的微表面模型可能在某些情况下产生更好的拟合测量数据,这很可能是由于一些上述影响的组合。 需要进一步的研究来理解这些结果。
虽然最终微相理论可能需要被替换(或至少扩展),但作为对表面反射率的理论建模基础,目前它已经是我们最了解和最成功的工具。

次表面反射(漫反射项)

文献中有几种用于次表面局部反射的模型;Lambertian{\bf Lambertian}Lambertian模型是最简单也是使用最广泛的之一。 LambertianBRDF{\bf Lambertian} BRDFLambertianBRDF实际上是一个常量;众所周知的余弦或(n•l)({\bf n}•{\bf l})(n•l)因子是反射方程的一部分(公式1所示)。 LambertianBRDF{\bf Lambertian} BRDFLambertianBRDF的准确值是:
flambert(l,v)=cdiffπ(7)f_{_{lambert}}({\bf l},{\bf v})=\frac{{\bf c{_{diff}}}}{\pi}\quad\quad(7)flambert​​(l,v)=πcdiff​​(7)

cdiff{\bf c{_{diff}}}cdiff​是光的漫反射部分。 和F0F{_0}F0​一样它是一个RGBRGBRGB值,RRR,GGG,BBB限制在0−1范围内,通俗的讲就是我们平时所称的"表面颜色"。 这个参数通常被称为漫射颜色。
其他漫射模型试图解决Lambertian{\bf Lambertian}Lambertian模型(为常量)没有建模的行为,例如在低角度时对高光反射项和漫射项之间的能量进行权衡。漫反射项的此表面反射的能量只能是来自非表面背部的入射光能量。 从某种意义上说,高光可以在入射光能上获取“我要的”能量,但漫反射只有“剩下的”。 因为菲涅耳效应在低角度时高光反射更明显,因此漫反射项必须在这些角度下减弱。 有多种模型对这种情况进行权衡,从简单(将漫反射项乘以(1减去菲涅耳因子))到更复杂和准确的方法。

其他漫射模型试图描述表面粗糙度的效果。表面不规则尺寸很重要,次表面散射使光在重新发射之前在表面下传播了一定的距离。 任何表面不规则尺寸小于这个距离则不会产生次表面反射, 因为光线从任何表面的点进入表面内部然后射出的点两点之间的距离必须要大于表面不规则的尺度。 然而,某些表面粗糙的尺度大于散射距离,这些表现出明显不同于Lambertian{\bf Lambertian}Lambertian模型的外观。 已经开发有各种模型处理这些案例。

其它项

如前所述,有两类反射率现象“介于裂缝之间”由漫射项(多弹跳次表面散射)和微表面项(单次弹跳表面反射)。
一种是次表面单次散射,光被折射进入到表面内部,经历一次散射事件后被折射回表面。 这种现象表现出一些漫反射和镜面反射的特点;它有很高的角度依赖性,也受物体表面下介质性质的影响。
另一种现象是多次表面反射,其中光在离开表面前在多个表面之间有过多次反射。 如前所述,微表面模型忽略多个表面反弹效果,假设所有被遮挡的射线都丢失了,与现实世界的相比会导致能量损失。
应该引入更多的BRDF术语,以涵盖这两种情况,但它们还缺乏良好的已公布模型。

生产中实现物理模型着色

在上一节中,我们看到了通常用于描述表面的数学模型着色。 在本节中,我们将简要讨论如何在电影和游戏制作中使用这些模型。要实现着色模型,需要与光照模型相结合。 在下main各章节中,我们会结合最常见的照明模型类型来结合BRDFsBRDFsBRDFs使用。

通用照明

在最一般的情况下,BRDFBRDFBRDF必须与来自各个方向的入射光集成在一起。这包括自然光和精准确定的光。 为全面解决这个问题,需要全局照明算法,如蒙特卡罗射线跟踪。 对这些算法的详细描述超出了这篇演讲的范围,但更多的细节可以在各种参考文献中找到。

基于图像(烘培)的照明

基于图像的照明通常用环境贴图来储存于光的距离信息。环境(烘培)图可以很容易地表示来自非常光滑(像镜子一样)物体的反射。通过方程5对菲涅耳反射率进行建模,用视角方向代替光方向进行调整(镜子表面法线的角度保持不变,所以两者是等价的)。 当表面法线向后朝向视角方向时可能会出现困难(这可能是由插值顶点引起的法线和/或凸点映射);这既影响反射方向,也影响菲涅耳反射率值,虽然不正确的反射方向很少被注意到。 如前所述,视角向量和法线的点乘应该用取绝对值或者大于0的插值;在这种具体情况下,取绝对值可能更好。 不像取插值,取绝对值将限制菲涅尔反射在极端角度得到一个狭窄的像素带,这在视觉上更可信。

环境映射图也可以与任意的BRDFsBRDFsBRDFs一起使用,但需要多次采样才能避免噪点。重要性采样可以保证采样的数量在可控的范围(至少对电影来说是)。 环境贴图预过滤是另一种可以在生产中使用的有效方法(即烘培场景贴图-游戏中的一种常见技术,但通常不用于电影制作)。 预过滤采样是反射方程的近似值,这样效果非常很好。预过滤处理过程中保证环境映射图的NDF的尺寸和形状的呈现很重要。 然后,采样预过滤样本时,它应该乘以一个合理的反射积分近似值。 可能是这样视为将积分分解为两个因素的乘积,一是预过滤环境映射图查表,二是在着色器中应用。

从理论上讲,环境映射图只能用于表示对象的反射,即反射场景,靠近看时反射的物体看起来是凸的而且距离场景很遥远。但实践中并不这样。非凸面对象应自我遮挡环境-这可以忽略(常见于游戏),用一些简单的遮挡项(例如AO [29])进行近似,或更准确地建模通过对物体的某些表示跟踪光线[22、57、67]。反射物体也可能是足够近以在不同的表面点上具有明显的视差-特别是当反射物体很大。最后,环境贴图可以从场景中不同位置采样,甚至也可以是不同场景。事实证明,在许多情况下,人眼是对视差或使用远离其样本的环境贴图引起的错误不敏感位置。只要总体颜色和强度正确,被反射的形状通常可以在没有引起观众注意的情况下可以完全是错误的。单个场景照明中,适当调整环境贴图颜色和强度,都可以使得环境贴图效果更好。反射不正确的情况(例如,发亮的地板,通常可以解决赛车游戏中玩家的汽车,电影中闪亮的金属英雄角色)通过扭曲反射来校正。

区域光源

诸如太阳和灯之类的光源具有强度和区域。 从理论上讲,它们可能是在环境映射图中使用HDR来处理像素,但是将它们分开处理具有优势。 与基于图像的照明相比,从区域光源计算阴影要容易得多,视差可以得到更正确的处理,并且艺术家可以更轻松地调整灯光位置,亮度和大小,而无需编辑基于图像的照明表示。与基于图像的照明相比,使用面光源对任意BRDFBRDFBRDF进行着色也更容易。多重重要性采样可以大大降低噪声(此技术可以与以及基于图像的照明使用,但对于区域照明尤其有效)。

守时光源

通常可以用(尤其是在游戏中,电影也有使用了此功能)来估计区域光守时光源的光。 经典的计算机图形学光有点光源、方向光和聚光灯。 由于它们无限小且无限明亮,守时的灯光在物理上不是十分可信,但它们在许多情况下确实可以产生合理的效果,并且计算方便。

点光源对给定表面点的影响由两个量定义:
颜色clight{\bf c}_{_light}cl​ight​和光方向向量lc{\bf l}_{c}lc​。 根据守时灯的类型,它们的值在整个场景中可能是恒定的(即在使用全局方向光的情况下),也可能会变化(例如,对于点光源clight{\bf c}_{_light}cl​ight​的光强度会随着距离的增加而减小,而lc{\bf l}_{c}lc​将取决于到光位置的方向)。为了便于观察,通常将clight{\bf c}_{_light}cl​ight​光定义为来自理想化表面的反射辐射率。其法线平行于光方向(n=lc)({\bf n} = {\bf l}{_c})(n=lc​)时表面Lambertian{\bf {Lambertian}}Lambertian为100%100%100%白色。像我们看到的其他颜色数量一样,clight{\bf c}_{light}clight​光是光谱(RGB)(RGB)(RGB)值,但不同的是它的范围是无限的。

守时光源的主要优点是可以大大简化反射率(如方程式1),如我们在此处所示。 我们从一个照在表面点的区域光源开始。 区域光源是一个以lc{\bf l}_{c}lc​为中心,εεε为角半径的圆锥体。因此没有光从此圆锥体外部的方向入射:

∀l∣∠(l,lc)>ε,Li(l)=0(8)∀{\bf l}|∠({\bf l},{\bf l}_{c})> ε, L_{i}({\bf l})=0\quad\quad(8)∀l∣∠(l,lc​)>ε,Li​(l)=0(8)

我们根据给定的表面点测量区域光源的照明度来定义llight{\bf l}_{light}llight​; 换句话说,llight{\bf l}_{light}llight​等于表面点的反射辐射,如果材质Lambertian{\bf Lambertian}Lambertian是100%100\%100%的白色即法线等于lc{\bf l}_{c}lc​时:
clight=1π∫ΩLi(l)(lc⋅l)dωi(9){\bf c}{_{light}}=\frac{1}{\pi}\int_\Omega L{_i}({\bf l})({\bf l{_c}}·{\bf l})d{\omega}i \quad\quad (9)clight​=π1​∫Ω​Li​(l)(lc​⋅l)dωi(9)

这只是使方程式111和777的cdiff=1{\bf c}{_{diff}}=1cdiff​=1和n=lc{\bf n}={\bf l}_{c}n=lc​时的结果。 现在我们将εεε向000移动,clight{\bf c}_{light}clight​的值不变。 由于我们将εεε(lc{\bf l}_clc​和l{\bf l}l之间的最大角度)逐渐移动到000,在极限条件下,我们可以假设(lc({\bf l}_c(lc​· l)=1{\bf l})=1l)=1,从而得出:
clight=lim⁡ϵ→0(1π∫ΩLi(l)dωi)(10){\bf c}{_{light}}=\lim_{\epsilon \to 0}\left( \frac{1}{\pi}\int_\Omega L{_i}({\bf l})d{\omega}i \right )\quad\quad (10)clight​=ϵ→0lim​(π1​∫Ω​Li​(l)dωi)(10)

整理得出:
lim⁡ϵ→0(∫ΩLi(l)dωi)=πclight(11)\lim_{\epsilon \to 0}\left(\int_\Omega L{_i}({\bf l})d{\omega}i \right )={\pi}{\bf c}{_{light}}\quad\quad (11)ϵ→0lim​(∫Ω​Li​(l)dωi)=πclight​(11)

将区域光应用于BRDFBRDFBRDF,ε逐渐移动到000:
Lo(v)=lim⁡ϵ→0(∫Ωf(l,v)⊗Li(l)(n⋅l)dωi)=f(lc,v)⊗lim⁡ϵ→0(∫ΩLi(l)dωi)(n⋅lc)(12)L_{o}({\bf v})=\lim_{\epsilon \to 0}\left(\int_{\Omega}f({\bf l}, {\bf v}) ⊗L_{i}({\bf l})({\bf n} ·{\bf l})d\omega i \right)=f({\bf l}_c, {\bf v})⊗\lim_{\epsilon \to 0} \left(\int_{\Omega}L{_i}({\bf l})d\omega i \right)({\bf n}⋅{\bf l}_c) \quad\quad (12)Lo​(v)=ϵ→0lim​(∫Ω​f(l,v)⊗Li​(l)(n⋅l)dωi)=f(lc​,v)⊗ϵ→0lim​(∫Ω​Li​(l)dωi)(n⋅lc​)(12)

请注意,在公式121212中,通过隔离f(lc,v)f({\bf l}_c, {\bf v})f(lc​,v)和(n⋅lc)({\bf n}⋅{\bf l}_c)(n⋅lc​),我们有效地切换了极限和积分的顺序; 只要BRDF函数f()BRDF函数f()BRDF函数f()的表现合理(对于任何实际使用的BRDFBRDFBRDF)那么都是有效的。 将公式11代入公式12的右侧给我们最终的守时光方程:
Lo(v)=πf(lc,v)⊗clight(n⋅lc)L_o({\bf v})=\pi f({\bf l}_c, {\bf v})⊗{\bf c}_{light}({\bf n}⋅{\bf l}_c)Lo​(v)=πf(lc​,v)⊗clight​(n⋅lc​)

与原始反射率方程相比,我们已将积分替换为单个BRDF{\bf BRDF}BRDF评估,计算起来便宜得多。 在游戏中,为避免出现来自背部的光,通常用把点积的结果从0开始做插值的简单做法。
如上所述,在平行光源(例如太阳)的情况下,lc{\bf l}_clc​和clight{\bf c}_{light}clight​的值在场景中都是恒定的。 对于其它光源类型,例如点光源和聚光灯,两者都会有所不同,它们的clight{\bf c}_{light}clight​会与到光源的距离的平方的倒数成按比例衰减 。但实际上通常使用其他衰减做法。
如果多个守时光源正在照亮表面,则公式131313的计算将是多次和结果相加。守时光源只能用于本身的照明效果,忽略了环境中其它照明效果也很明显的各个方向的光。因此,通常将守时灯与某种环境或基于图像的照明相结合来照明; 后者已经讨论过,而前者将在下一节中讨论。

环境光

在这里,我们将环境定义为将一些低频的光线的表现效果数值化(使用如球谐(SH)之类的函数储存状态),储存范围为从单一恒定的灯光颜色和强度到无数的来自各个方向光的灯光颜色和强度。 通常,这种照明情况仅适用于漫反射BRDFBRDFBRDF项;对于高频光的高光项,用基于图像(映射)的照明。 然而,也可以将环境照明环境应用于高光BRDFBRDFBRDF项。 源自游戏行业的很多做法是这样。

建立基于物理的着色模型

在本节中,我们将讨论从头开始构建模型。 讨论有关转换非物理模型转换为基于物理模型的模型,请参见我们的SIGGRAPH 2010课程介绍[35]。
下面,将根据前面讨论的原理来构建基于物理的着色模型。 漫反射模型可选的函数为D()D()D()(法线分布函数)和G()G()G()(几何函数)用于微表面高光反射模型。 本节的其余部分将重点介绍两个高光函数。
D()D()D()和G()G()G()函数的选择在某种程度上是独立的。 要引入新的D()D()D()或G()G()G()函数,最好对大多论文数新提出的微表面理论BRDGBRDGBRDG模型有所了解。

选择法线分布函数

最常见的NDFsNDFsNDFs(法线分布函数)是各向同性的,即围绕宏观表面法线n{\bf n}n旋转它们是对称的。 这意味着这些NDFsNDFsNDFs可以被定义为一个有单个变量的函数:m{\bf m}m(微观几何法线)和n{\bf n}n之间的夹角。在着色器中,处理角余弦最方便,因为可以轻松地使用点乘计算。 因此,各向同性NDFNDFNDF通常写为n•m{\bf n}•{\bf m}n•m的函数。 文献中已经有各种类似的函数提供NDFNDFNDF使用 ; 但是,在微表面部分中它们必须经过准确的归一化才能使用。 几个已发表的各向异性NDFsNDFsNDFs在游戏和电影制作中也有使用,但出于篇幅原因,我们将讨论范围限制在各向同性的NDFsNDFsNDFs。

任何微几何法线分布都需要满足从任何角度看, 可见的微几何面积加起来就是可见的宏观表面积。 更确切地说,微几何的正向投影面积之和必须等于宏观几何的正向投影面积。这在任何角度观察都是成立的[73]。 从数学上讲,这意味着该函数对于任何v{\bf v}v必须满足:
(v⋅n)=∫ΘD(m)(v⋅m)dωm(14)({\bf v}·{\bf n})=\int_\Theta D({\bf m})({\bf v}·{\bf m})d\omega m \quad\quad(14)(v⋅n)=∫Θ​D(m)(v⋅m)dωm(14)

请注意,积分不仅覆盖半球,还覆盖整个球体,因为余弦系数未用区域插值所以有表面背部负数值。 这个等式适用于任何一种微观表面,而不仅仅是较高区域。 在v=n{\bf v} = {\bf n}v=n特殊情况下:
l=∫ΘD(m)(n⋅m)dωm(15){\bf l}=\int_\Theta D({\bf m})({\bf n}·{\bf m})d\omega m \quad\quad(15)l=∫Θ​D(m)(n⋅m)dωm(15)

对于BRDFBRDFBRDF的计算,很期望NDFNDFNDF部分的计算量能够尽量廉价,尤其是在游戏中和其他实时渲染应用程序。 对于光线追踪,降低重要性采样至关重要。
我们将重审所有面向为微表面外部的法线用于计算。因为以下的这些函数计算在n⋅v{\bf n}⋅{\bf v}n⋅v为负数时会导致不可信的结果。强制光方向和视角方向都为正面方向后,半角向量也会为正面方向从而避免可能为问题。另外法线插值和法线贴图可能会导致法线与视角产生指向表面内部的半角向量,这个通常把n⋅m{\bf n}·{\bf m}n⋅m映射到0以上或者用一个极小正数来代替负数。

Phong着色公式是最早(也是影响最大)的计算机图形学文献中提出的方程之一。 几年后,Blinn对其进行了修改,以更好地适应微面BRDF的结构(此修改通常称为Blinn-Phong BRDF,但我们将这些NDF简单的成为”PhongNDF””{\bf Phong\,NDF}””PhongNDF”。 Blinn没有指定归一化因子,很容易计算:
Dp(m)=αp+22π(n⋅m)αp(16)D_p({\bf m})=\frac{\alpha_p+2}{2\pi}({\bf n}·{\bf m})^{\alpha_p}\quad\quad(16)Dp​(m)=2παp​+2​(n⋅m)αp​(16)

能量αp{\alpha_p}αp​是PhongNDF{\bf Phong\,NDF}PhongNDF的“粗糙度参数”;值越高表面表现越光滑,值越低时表面越均匀的粗糙。艺术家操作αp{\alpha_p}αp​参数的值很不方便。αp{\alpha_p}αp​较小的数值变化可以有巨大的视觉效果值,但αp{\alpha_p}αp​巨大的数值变化也可能几乎没有效果变化。因此,它让艺术家操纵“接口值”是很常见的,可以通过αp{\alpha_p}αp​为变量的非线性函数提取出让艺术家操纵的值。例如:αp=ms{\alpha_p} = {\bf m^s}αp​=ms,其中s是介于0和1之间的艺术家操作值,而m是游戏中给出的αp{\alpha_p}αp​的上限。这种“接口功能”通常在BRDFBRDFBRDF本身的参数巨大很不方便艺术家操作时很有用。图30显示了Phong余弦功率的曲线分布。


图30:Phong在对数空间余弦次方的分布。 在左边,αp{\alpha_p}αp​(余弦次方)值从0到8不等。中间是16到128,右边是从256到2048。
Blinn将Phong阴影功能改编为微面NDF,他还提出了另外两个NDF。 其中之一源自Torrance−SparrowBRDF{\bf {Torrance-Sparrow BRDF}}Torrance−SparrowBRDF [70]。将Torrance-Sparrow NDF与Phong进行比较时,它的总体行为似乎非常相似但也有更高的计算成本。 后来Cook 和 Torrance [15,16]提出用不同NDF替代它,这些通常都是基于Beckmann分布的。经过正确的归一化,Beckmann分布函数有以下形式:
Db(m)=1παb2(n⋅m)4e−(1−(n⋅m)2αb2(n⋅m)2)(17)D_b({\bf m})=\frac{1}{\pi\alpha^2_b ({\bf n \cdot{\bf m}})^4}e^{-\left( \frac{1-({\bf n}\cdot{\bf m})^2}{\alpha^2_b({\bf n}\cdot{\bf m})^2} \right)} \quad\quad(17)Db​(m)=παb2​(n⋅m)41​e−(αb2​(n⋅m)21−(n⋅m)2​)(17)

Beckmann分布在某些方面与Phong分布非常相似,而它们的实现方式不一样。 这两个参数的等效值可以用(αp=2αb−2−2)(\alpha_p=2\alpha^{-2}_b -2)(αp​=2αb−2​−2) 【73】 ,它们对于相对光滑的表面(αb<0.5\alpha_b <0.5αb​<0.5左右)非常匹配,如图31左侧所示。对于更平滑的表面(αb<0.1\alpha _b <0.1αb​<0.1左右),匹配几乎完美。

图31:Beckmann(品红色)和Phong(蓝色)分布的比较。 在左侧,我们看到两者对于光滑表面非常相似(αb\alpha _bαb​的值范围从0.2到0.5)。 在右边,我们发现它们在中等粗糙度的表面上有所不同(αb\alpha _bαb​的值范围从0.6到1.0)。

考虑到贝克曼(Beckmann)与Phong相比明显的相似性以及较高的计算量成本,这似乎也是一个死胡同。但是,两者之间有根本的区别两者是由于它们不同的参数设置所致。 αb\alpha _bαb​参数等于微几何表面的均方根(RMS)斜率。所以增加αb\alpha _bαb​意味着增加平均值微观几何斜率,而 αb\alpha _bαb​减少则意味着“粗糙度”的“随机性增加”。而Phong分布具有“最大粗糙”参数值( αb=0\alpha _b=0αb​=0,对应于微观几何法线相等的均匀分布指向上半球任何地方的概率),相应的值( αb=1\alpha _b=1αb​=1)对于贝克曼(Beckmann)没有特殊含义-仅表示RMS微几何斜率是1或45°。对于αb\alpha _bαb​的中部粗略值,我们可以看到贝克曼在分布的中间得到了“浸入”而不是像Phong那样扁平化(请参见图31的右侧)。当αb>1\alpha _b>1αb​>1时,您得到具有高RMS微观几何斜率的“超粗糙”表面,即它们与表面法线均匀分布相比相对低,这些表面的随机性较小分布,但在某种意义上说“较粗糙”,因为它们不那么平坦。查看曲线(图32),我们可以看到,随着粗糙度的增加,分布中的“倾斜”在90度变为“反向峰值”(实际上是一个环)。

图32:Beckmann分布可以构建出具有大部分陡峭的倾斜的微几何形状(此图中αb\alpha _bαb​的值范围为1到7)。

这样的“超粗糙”分布对建模任何现实表面有用吗? 也许,许多尖锐的朝上的线会组成类似纤维和绒毛似的微观结构,其他材料也可能如此。 在任何在这种情况下,对于高αb\alpha _bαb​值,贝克曼分布的这种行为是可行的,否则别的方式基本上是Phong NDF的较昂贵版本。

Blinn的论文中讨论的最后一个NDF(以及Blinn建议使用的NDF)来自Trowbridge和Reitz 。 Blinn没有为Trowbridge-Reitz NDF指定归一化因子,但是后来的论文(将其称为“ GGX分布”)给出了正确的因子。 由于“ GGX”分母的形式略为复杂(但等效),因此我们使用原始,简单的形式如下:
Dtr(m)=αtr2π((n⋅m)2(αtr2−1)+1)2(18)D_{tr}({\bf m})=\frac{\alpha^2_{tr}}{\pi \left( ({\bf n}\cdot{\bf m})^2(\alpha^2_{tr}-1)+1 \right)^2}\quad\quad (18)Dtr​(m)=π((n⋅m)2(αtr2​−1)+1)2αtr2​​(18)

图33展示了αtr\alpha_{tr}αtr​参数值变动的效果。 参数控制与贝克曼(Beckmann)的相似之处在于,增加该值会使表面更粗糙。 Trowbridge-Reitz可以对均匀分布(例如Phong)和“超粗糙”曲面(例如Beckmann)建模。

将Trowbridge-Reitz分布与Phong分布进行比较(图34)时,显然,这两个分布具有根本不同的形状。 在整个参数空间中Trowbridge-Reitz始终具有比Phong窄的峰(对于在高光中心处产生相同值的参数值)以及围绕这些峰的较长“尾部”。


图33:左侧显示了从0.4到1的αtr\alpha_{tr}αtr​值的Trowbridge-Reitz分布。就其参数而言,分布的行为类似于Beckmann:较高的参数值会产生更粗糙的表面。 与Beckmann不同的是,值为1表示均匀分布。 在右边,我们看到像Beckmann一样,Trowbridge-Reitz对于较高的参数显示“超粗”行为值(此图中的αtr\alpha_{tr}αtr​值范围为1到7)。


图34:Trowbridge-Reitz(红色)和Phong(蓝色)分布的比较。 左图显示出粗糙到中等的表面(αtr\alpha_{tr}αtr​值在0.4到1.0之间)。 右图显示更流畅表面(αtr\alpha_{tr}αtr​值介于0.1和0.4之间)。 在这两个图中,Trowbridge-Reitz显然具有不同的形状比Phong的“峰值”更窄,“尾巴”更长。

Burley 为Trowbridge-Reitz建议了一个简单的“接口函数”:αtr=s2\alpha_{tr}=s^2αtr​=s2,其中sss是艺术家操纵的值,介于0和1之间。

在对真实表面建模时着色模型需要表现得更好。 几位研究人员已发布了测量的BRDFBRDFBRDF数据,有人针对多个着色模型比较了该测量数据。 这些比较倾向于表明许多材质不能通过现有模型很好地建模。 而最近,有开发出了有效的模型,特别是为了更好地表达精准的表面。我们概述了NDFs分布的三方式。

还有人引入的ABCABCABC分布。 两个不同方法引入。 ABC分布最初用作表面高度场的光谱功分布(用于考虑了波浪效应的光滑表面BRDFBRDFBRDF),也被重新用于微表面NDFNDFNDF。 其未归一化分布函数格式如下:
Duabc(m)=1(1+αabc(1−(n⋅m)))γabc(19)D_{uabc}({\bf m})=\frac{1}{(1+\alpha_{abc}(1-({\bf n}\cdot{\bf m})))^{\gamma_{abc}}} \quad\quad (19)Duabc​(m)=(1+αabc​(1−(n⋅m)))γabc​1​(19)

它有两个参数,αabc\alpha_{abc}αabc​(对应于原始论文中的“ B”参数)和γabc{\gamma_{abc}}γabc​(对应于原始论文中的“ C”参数,“ A”参数是比例因子,因此归入规范化)。 作者没有发布标准化因子,但是我能够使用Mathematica生成一个:
kabc(αabc,γabc)=αabc2(1+αabc)γabc(γabc−2)(γabc−1)2π((1+αabc)2+(1+αabc)γabc(αabc(γabc−2)−1))(20)k_{abc}(\alpha_{abc}, \gamma_{abc})=\frac{\alpha^2_{abc}(1+\alpha_{abc})^{\gamma_{abc}}(\gamma_{abc}-2)(\gamma_{abc}-1)}{2\pi((1+\alpha_{abc})^2+(1+\alpha_{abc})^{\gamma _{abc}}(\alpha_{abc}(\gamma_{abc}-2)-1))} \quad\quad (20)kabc​(αabc​,γabc​)=2π((1+αabc​)2+(1+αabc​)γabc​(αabc​(γabc​−2)−1))αabc2​(1+αabc​)γabc​(γabc​−2)(γabc​−1)​(20)

此函数在γabc=1\gamma_{abc}=1γabc​=1和γabc=2\gamma_{abc}=2γabc​=2时具有奇点。但是,我们可以为这些值计算出特定的标准化值。这些与相邻的值的通用函数的限制值一样, 表明可删除那些奇点:
kabc(αabc,1)=αabc22π((1+αabc)ln(1+αabc)−αabc)(21)k_{abc}(\alpha_{abc}, 1)=\frac{\alpha^2_{abc}}{2\pi((1+\alpha_{abc})ln(1+\alpha_{abc})-\alpha_{abc})} \quad\quad(21)kabc​(αabc​,1)=2π((1+αabc​)ln(1+αabc​)−αabc​)αabc2​​(21)
kabc(αabc,2)=αabc22π(αabc−ln(1+αabc))(22)k_{abc}(\alpha_{abc}, 2)=\frac{\alpha^2_{abc}}{2\pi(\alpha_{abc}-ln(1+\alpha_{abc}))}\quad\quad(22)kabc​(αabc​,2)=2π(αabc​−ln(1+αabc​))αabc2​​(22)

归一化的BRDFBRDFBRDF等于kabcDuabck_{abc}D_{uabc}kabc​Duabc​。 kabck_{abc}kabc​的表达式有些复杂(尤其是当考虑奇点情况时),但在绘制时会产生平滑曲线。

图35:具有各种参数值的标准化ABCABCABC NDFNDFNDF。 最上面一行的每个图都不同αabc\alpha_{abc}αabc​(B)参数(从1到1000),同时保持γabc{\gamma}_{abc}γabc​(C)值恒定。 每个情节最下面一行在保持αabc\alpha_{abc}αabc​(B)值恒定的同时,改变γabc{\gamma}_{abc}γabc​(C)参数(从0.1到1.5)。该图中使用的参数值范围涵盖了由Matsik拟合的大多数Matusik数据集。

图35显示了两个参数都有不同值的ABCABCABC NDFNDFNDF。 我们看到的NDFNDFNDF以前只有一个参数; 改变ABCABCABC NDFNDFNDF的两个参数使其能够形成各种形状,从而改进了BRDFBRDFBRDF对许多不同测量材料的适合性。一些实验表明,通过更改γabc{\gamma}_{abc}γabc​参数的值,ABCABCABC分布可以模仿Trowbridge-Reitz和Phong(图36)。 此外,降低γabc的值参数所产生的曲线甚至比Trowbridge-更“尖锐”(峰值更窄,尾部更长),Reitz,如图37所示。


图36:通过更改γabc\gamma_{abc}γabc​参数的值,将显示ABCABCABC分布(绿色虚线)以匹配Trowbridge-Reitz(红色,左侧)和Phong(蓝色,右侧)。 左图显示Trowbridge-Reitz的αabc\alpha_{abc}αabc​值介于0.3和0.7之间,ABCABCABC的γabc\gamma_{abc}γabc​值为1.75(已手动调整αabc\alpha_{abc}αabc​以匹配相应的Trowbridge-Reitz曲线的峰值。
右图显示的Phong的αb\alpha_bαb​值在2到20之间,ABCABCABC的γabc\gamma_{abc}γabc​值为1000(当γabc{\gamma}_{abc}γabc​达到无穷大时,ABCABCABC似乎渐近逼近Phong;如左图所示,手动调整了αabc\alpha_{abc}αabc​值)。 尽管未显示更平滑的表面,但对应关系关联的很好。 请注意,与Phong完全匹配所需的γabc\gamma_{abc}γabc​值要高得多比Löw等人在Matusik数据库拟合中使用的任何数据都要多。 这可能表明现实世界材料倾向于不具有高斯正态分布。


图17:把γabc\gamma_{abc}γabc​值设置到相对低时(0.5),将会看到ABC分布为较窄的峰,较长的尾巴形状(相对于TrowbridgeReitz)。在左边将会看到相对粗糙的表面(αtr\alpha_{tr}αtr​范围为0.5-0.8),右边则是光滑材质(αtr\alpha_{tr}αtr​值为0.2-0.5)。

Bagher等人的最新论文。 提出了偏移的伽马分布(SGDSGDSGD)作为微面NDFNDFNDF。 表达式如下:

P22定义为:

其中Γ()是不完整的伽玛函数:
。注意,αsgd和γsgd参数在原始论文中分别称为α和p。像ABC NDF一样,SGD是各向同性的,并具有两个参数,并且主要是为了适合测量的BRDF(例如Matusik数据库。但是,它所使用的BRDF具有一些不同寻常的品质-它们是分开的红色,绿色和蓝色通道的参数,“菲涅耳”函数是一条广义曲线,通常表现出与实际菲涅耳完全不同的表现。由于这些原因,可能很难直接将SGD与其他NDF(例如ABC)进行比较。例如,我们可以在图38中看到SGD即使对于中等光滑的表面,NDF也会迅速变为0,并且无法描述其他NDF的“长尾巴”特征,例如ABC;这可以通过一些独特的属性来补偿使用它的BRDF的名称。在图38中,我们还看到,与ABC不同,SGD NDF可以建模有点“超粗糙”的表面,尽管(如前所述)尚不清楚此功能的用处是(而且,同样,在材质拟合中也找不到产生此行为的参数组合。无论如何,p22 都非常复杂(很少有着色语言包括Γ()作为内置函数),但由于它是一维的,因此可以用更简单的方法近似功能或查询表。


图38:具有各种参数值的归一化SGD NDF。 最上面一行的每个图都不同αsgd(纸张中的α)参数(从1到0.1),同时保持γsgd(纸张中的p)值不变。 最底行的每个图都会改变γsgd(p)参数(从0.0到1.5),同时保持αsgd(α)值常数。 该图中使用的参数值范围涵盖了粗略的Bagher等人拟合的Matusik数据集中的中等光滑材料。

本节讨论的最后一个NDF(以及最新开发的NDF)是Burley提出的Trowbridge-Reitz NDF 。 该提议的灵感来自于以下事实:Berry分布是原始论文中讨论的其他分布之一,其形式与Trowbridge-Reitz分布非常相似,但指数为1而不是2-结果是更长的尾巴 这促使Burley提出了通用行人桥Reitz(GTR)分布,具有可变的指数。 非规范分布函数具有以下形式:

有两个参数,αgtr(对应于原始Trowbridge-Reitz分布中的αtr参数,Bution)和γgtr,当它们等于2时,GTR分布与TR相同,并且与其他值会产生不同形状的分布。 白肋烟还给出了归一化因子,在一般情况是:

该函数在γgtr = 1和αgtr = 1时具有奇异性。但是(与ABC一样)特定的归一化可以为这些值计算因子。 再次,这些与常规的极限值相同这些值附近的函数,表明奇异点是可移除的:

归一化的BRDF等于k gtr D ugtr。 k gtr的表达式有点复杂(尤其是当考虑了奇异情况),但在绘制时会产生平滑曲线,因此很可能(针对先前讨论的NDF),可以为其安装更简单的功能。

图39显示了GTR NDF,两个参数的值都不同。 GTR可以表达广泛各种NDF行为。 通过设置γgtr = 2,GTR当然可以轻松地与Trowbridge-Reitz相匹配。一些实验表明,通过增加γgtr参数的值,GTR分布也可以模仿Phong(图40)。 GTR还可以匹配ABC曲线的“更尖锐”版本γabc = 0.5(在前面的图37中可以看到),如图41所示。

图40:像ABC一样,随着γgtr的值达到无限。 这两个图都显示了GTR分布,其中γgtr = 10000(棕色,左侧为实线,虚线为右侧)与Phong分布(蓝色)相比。 在左侧,我们看到分布
中度粗糙的表面略有差异(αp的值在1到8之间)。 在右边,我们看到它们几乎完全适合中等光滑的表面(αp的值介于8到100之间,尽管没有显示更平滑的表面,匹配也适用于它们)。 在这两种情况下,αgtr的值均为手动调整以匹配相应Phong曲线的峰值。


图41:通过将γgtr参数的值设置为0.54,GTR(虚线棕色)可以相当与γabc = 0.5(绿色)的ABC分布的“尖峰”曲线紧密匹配。 在左边,我们对于相对粗糙的表面(αabc的值介于5到100之间)看到合理的良好匹配,右边是平滑材料(αabc在100到4000之间)的几乎完全匹配。 同时在这种情况下,手动调整αgtr的值以匹配相应ABC曲线的峰值。

列出所有这些NDF之后,问题是要推荐哪个。 经常发生空间变化在任何给定点,镜面反射性比精确的高光形状更重要。 在这些情况下,使用Phong NDF可能是最简单的,它在计算上是简单且合理的富有表现力的。 如果需要更逼真的高光形状,那么Trowbridge-Reitz可能是一个很好的选择。它的“宽边帽”形状可能比高斯人字形更适合实际材料叶。 Trowbridge-Reitz的另一个优势是已成功用于电影和游戏中生产[10,38,54,59]。 如果需要更具表现力的NDF,则在两参数各向同性中在此讨论的NDF(ABC,SGD和GTR)我建议使用GTR分配。 它是在某种程度上比其他两个更简单,并且也已用于电影制作中[10]。 然而,对于艺术家而言,此类NDF的空间变化可能难以管理。 一种可能有用的方法是通过定义通过(αgtr的一维线来减小参数空间的维数γgtr)空间(基于艺术品味或材料测量),并公开参数化,对艺术家而言。 另一种方法是仅公开其中一个参数(可能αgtr)用于通过纹理绘画进行空间变化,并且仅允许设置其他(最可能的γgtr)作为每个材料的常数。 在这种情况下,可能需要重新参数化以创建更清洁的“平滑度”和“形状”之间的分离。 一种可能的方法是使用统计概率分布的度量,例如方差和峰度(可能在某种程度上视觉上对应于“平滑度”和“尖锐度”)。

选择一种多边形函数

许多发布的微面BRDFBRDFBRDF取代了分子项G(l,v,h)和分母带有单个子表达式的(n• l)(n•v)项,因此为其命名是有必要的; 分母可以被认为是“缩短系数”,而这两个部分都与可见性有关,我喜欢称之为“可见度项”。 一些BRDF(通常用于游戏或电影制作中的那些)没有可见度项,这等效于将可见性项设置为1,从而隐式定义以下内容几何函数:

实际上,这是一个针对高度场微表面的合理的几何函数(Blinn-Phong法线分布函数与之相对应,因为对于所有背面微几何形状,它均为零表面区域)。 当l = n和v = n时,G implicit()等于1,这对于高度场是正确的(否则微表面区域从宏观表面法线方向被遮挡)。 它去对于扫视视角或扫光角度均为0,这也是正确的(在增加至100%内时,被其他表面区域遮挡的表面点随视角的增加而增加)。 给定的几何函数实际上花费不到零个着色器周期计算(它抵消了缩短因子,因此我们不需要除以它)。

当将G implicit()与图形文献中的几何函数进行比较时,我们发现到0的速度太快以至于在适度的掠射角度它太暗。 换句话说,添加显式几何函数将具有使镜面反射项变亮的结果(这似乎与直觉不符合,直到我们回想起同时也引入了缩短因子)。 这个隐函数不受表面粗糙度的影响,这是直觉不符合的-我们期望粗糙表面具有比平滑表面更高的荫蔽和蒙版概率。图形文献中最早的几何函数之一称为“ Cook-Torrance”,并出现在那两位作者的著名论文中:

然而,它早在几年前就出现在Blinn 的论文中,作为几何的重新表述。Torrance和Sparrow 仍在早期引入了功能。 Cook-Torrance几何函数多年来(特别是在电影中)已经使用了很多,但是它存在一些问题:它基于不切实际的微观几何模型(由无限长的凹槽组成的各向同性表面)及其也不受粗糙度影响。

除此之外的其它问题,Cook-Torrance在游戏方面还有些昂贵。 然而,Kelemen等。提出了一种非常便宜和有效的近似方法:

这几乎和隐式几何函数一样省计算。 它近似于Cook-Torrance几何函数,除以缩短因子,只需要除以菲涅耳项无论如何都需要计算的点积的平方。

考虑到最终性能的准确性时,我个人推荐Smith系列几何函数。人们普遍认为它们比Cook-Torrance函数更准确,并考虑到法线分布的粗糙度和形状。 原始Smith函数是为Beckmann NDF设计的,但是Brown 和后来的Bourlier等人。 概括了将Smith函数转换为一种用于计算几何函数以匹配任何NDF的方法。 Walter等总结这些结果,并为相应的Smith函数提供有效的近似值。例如Beckmann和Trowbridge-Reitz(GGX)NDF 20和Bagher等人的文章。 给出一个近似值对应于他们建议的SGD NDF的Smith函数。

在我之前的陈述中,“Smith几何函数” 系列函数,几何函数的选择“某种程度上”独立于
NDF。 选择Smith函数系列时(例如与Cook-Torrance几何图形相反的函数)决定是否与所使用的NDF无关,一旦做出此选择,您应该使用正确的NDF Smith功能。

Smith系列功能用于电影制作,效果很好。前一篇文章的作者建议调整使用的粗糙度值。 已公布的各种Smith函数的近似值仍然比Kelemen昂贵得多函数,尽管很可能在游戏中找到更便宜的近似值Kelemen函数成功近似(更复杂)Cook-Torrance的方式几何函数。

物理渲染数学(s2013_pbs_physics_math_notes)相关推荐

  1. Unity3D 的物理渲染和光照模型

    阅读目录 漫反射面:郎伯模型 朗伯着色器(Lambertian shader) Toon shading 镜面: Blinn-Phong模型 在Unity5中物理渲染 Unity 中使用的着色技术 结 ...

  2. 物理渲染-基于物理的光照模型

    http://blog.csdn.net/leonwei/article/details/44539217 文章所用图片来自相关领域文献,如有侵权请联系撤除, 转载本文请注明出处 1.关于光照模型 对 ...

  3. 计算机图形学十四:基于物理渲染的基础知识(辐射度量学,BRDF和渲染方程)

    基于物理渲染的基础知识 摘要 1 为什么需要辐射度量学? 2 辐射度量学 2.1 辐射能量(Radiant energy)和辐射通量(Radiant flux) 2.2 辐射强度(Radiant in ...

  4. 基于物理渲染的基础理论

    本篇作为理论的概括介绍,并不涉及公式的部分 基于物理渲染的优点 很容易就可以作出真实和照片级的效果. 同一配置可以适用于在不同HDR光照环境下. 接口简单而直观,都是基于世界真实的参数.(如粗糙度,金 ...

  5. Unity5 新功能解析--物理渲染与standard shader

    Unity5 新功能解析--物理渲染与standard shader http://blog.csdn.net/leonwei/article/details/48395061 物理渲染是UNITY5 ...

  6. 【好书推荐】物理、数学和发明的经典科普书籍

    目录 1 物理:<汤普金斯先生身历奇境> 2 数学:<啊哈!原来如此>和 华罗庚的平话系列 3 发明:<发明的故事> 计算机行业的从业者,需要很好的物理和数学基础并 ...

  7. Unity3d 基于物理渲染Physically-Based Rendering之最终篇

    前情提要: 讲求基本算法 Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF plus篇 Unity3d 基于物理渲染Physically-B ...

  8. shader 反射 水面_unity水面波浪光照反射折射物理渲染着色器Lux Water 1.01

    unity水面波浪光照反射折射物理渲染着色器Lux Water 1.01 Lux Water 是一款简单而强大的水面渲染工具,可为你呈现最佳的水面折射.反射和光照效果. 渲染功能 • 基于物理的着色, ...

  9. 宿命争论!物理和数学的前年纠葛!道翰天琼认知智能机器人API平台接口为您揭秘。

    宿命争论!物理和数学的前年纠葛!道翰天琼认知智能机器人API平台接口为您揭秘. 数学系的学生学数学分析.复分析.实分析.泛函分析.数值分析.线性代数.抽象代数.概率论.集合论.数论.微分几何.微分流形 ...

最新文章

  1. windows7x64安装小记
  2. java兔子_JAVA经典兔子问题
  3. 无线网络的网速很慢_家里无线网络每天不定时段出现网速很慢或者直接无连接,这是怎么回事?...
  4. Linux命令之whereis
  5. 洛谷P1352 没有上司的舞会题解
  6. 表单令牌阻止数据重复提交
  7. mysql开启binlog启动慢_mysql配置开启binlog与慢查询日志功能
  8. 2013长春区域赛总结
  9. python中urlLib的使用
  10. 机器学习算法总结之XGBoost(下) 实战与调参
  11. xhprof 性能分析工具
  12. Starling滤镜合集2(新增7种滤镜)
  13. 免费分享一套狂雨小说cms采集规则
  14. 使用腾讯轻量搭建Cydia软件源,随时随地稳定下载
  15. 西南石油大学天空教室_学府之旅 | 西南石油大学
  16. Excel如何制作下拉列表
  17. BLE学习笔记3:GAP初始化
  18. 淘宝美工设计就业前景怎么样?有发展前途吗?
  19. 文章本天成|跟我一起来一场简洁易懂的servlet的过滤器Filter的学习吧
  20. 在与 SQL Server 2014建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器 provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Ser

热门文章

  1. Ubuntu安装微软字体
  2. 微信小程序 如何等待onLaunch拿到后端数据后,再执行onLoad
  3. puppy linux php,硬盘/U盘安装Puppy Linux方法
  4. ck6.8整合php,WordPress整合ckplayer X和ckplayer 6.8的最新完美代码
  5. 计算机中的进制 进制转换 位运算符号
  6. Openpyxl操作Excel教程
  7. 密码打马赛克已经不安全了!这款开源的去“马赛克”工具一秒还原
  8. 解决Cannot call sendError() after the response has been committed和getOutputStream() has already been
  9. openvas-nals 调试脚本ftp 2
  10. 豆瓣9.1分:软件开发的201个原则