1.81k likes | 2.08k Views
Chapter 6. Advanced Lighting and Shading. 金小刚 Email: jin@cad.zju.edu.cn http://www.cad.zju.edu.cn/home/jin 浙江大学 CAD&CG 国家重点实验室. If it looks like computer graphics, it is not good computer graphics . –Jeremy Birn.
E N D
Chapter 6. Advanced Lighting and Shading 金小刚 Email: jin@cad.zju.edu.cn http://www.cad.zju.edu.cn/home/jin 浙江大学CAD&CG国家重点实验室
If it looks like computer graphics, it is not good computer graphics. –Jeremy Birn • 本章的目的是如何用更精致的Muti-texture methods, vertex shader and pixel shader对光照明模型进行扩展。 • 主要讨论:光与物质之间的相互作用、 vertex shader、pixel shader、控制shading的语言、运动模糊、景深、反射、折射、阴影、整体光照明模型(辐射度和光线跟踪)在实时绘制中的应用。
Gouraud shading: 1971 • Phong shading,:1975 • Applying textures: Blinn and Newell 1976 • 这些算法是图形加速卡的支柱,它们采用fixed-function流水线。 • Vertex shader:取代fixed-function顶点处理,用户可以对每个顶点的操作进行编程。 • Pixel shader: 提供了更灵活的纹理贴图操作,可以用编程语言对纹理贴图进行控制。 使得实时绘制更加复杂的光照模型和图形操作成为可能!
辐射度学和光度学Radiometry and Photometry • 上一章我们忽略了物理和测量概念。基本光照模型是真实物理模型的一种简单逼近。 • 为了描述更广泛的材料模型,我们需要了解光如何工作和度量。 • 光子路径:一些光子直接来自光源,另一些来自其它表面的反弹。 • 发射的光子是否被吸收取决于波长,使得物体呈现颜色。
辐射度学 • 通过电磁光谱来处理辐射能的测量。 • 辐射度学主要研究频率为3×1011~ 3×1016Hertz的光辐射,对应于0.01~1000μm微米的波长。 • 波段范围包括红外、可见光、紫外线。
光度学 • 与辐射度学类似,但它只处理人眼可感知的光,即可见光,波长范围为380~780nm纳米。 • 波长450nm对应于蓝色,540nm对应于绿色,659nm对应于红色。 • 色度学不处理颜色的感知本身,而是研究各种波长的感知强度。例如,绿光比红光和篮光亮。
色度曲线 • 辐射度学的计算结果通过与色度曲线相乘,转化为色度学单位。色度曲线是一条铃状的曲线,中心为555nm,表示眼睛对各波段光的反应。 色度曲线
辐射能量 • 在辐射度学中,辐射能量Q是基本的能量单位,用J(焦耳)来度量。 • 每个光子有一定的辐射能量,其大小为Planck常数(6.62620×10-34焦耳秒)乘以光速(2.998×108米/秒),再除以光子的波长。 • 等价地,每焦耳的光子数目为5.034×1015乘以光子的波长。例如,在波长为550nm的波段处,每焦耳的光子数目大约为2.77×109个。
光通量密度 • 光源的光通量Φ为每秒钟发射出的焦耳数(dΦ/dt)。也可用瓦特W来度量(1W=1J/s) • 在光子离开光源后,下一步为如何度量它们到达表面。光通量密度为单位面积接收的光通量,用瓦特/米2来度量。光通量密度的概念可以应用于任何表面,无论是真实的或虚拟的。 • 一块区域的光通量密度与每秒钟光子从各个方向穿越该区域的速率成正比。理论上,我们可以让面积任意小,这样我们可以度量一个点的光通量密度: • 如果光通量在一区域是均匀的,则可简化为u=Φ/A。
光通量密度的别名 • 光通量密度(radiant flux)在特定的应用场合还有一些其它名字。 • 当光通量到达一个表面时,我们用辐照度E (irradiance) 这一词。 • 当光通量离开一个表面时,我们用辐出度M(radiance exitance)这一词,辐出度有时也称辐射度(Radiosity)。
立体角 • 在计算机图形学中,光源和视点常被看成点。用面积来度量不太适合,而是用立体角(solid angle)来描述。立体角的度量单位为球面度sr(steradians) 。 • 立体角是平面角向三维空间的推广。在二维空间,2π角度覆盖整个单位园。在三维空间, 4π的球面度立体角覆盖整个单位球面。
辐射亮度 (Radiance) • 在计算机图形学中,最重要的辐射度学单位为辐射亮度L (因为我们在象素中存贮的是辐射亮度),它为从某一方向到达给定点的光通量。 • 与辐照度和辐出度不同,辐射亮度既可以指到达表面的光通量,也可以指离开的光通量。
入射辐射亮度 • 入射辐射亮度(incoming radiance)定义为: 它用来度量单位平方米单位球面度的瓦特数。其中θ为入射光线与表面法向的夹角。
上述公式在通过对入射辐射亮度积分来计算表面某处的辐射亮度非常有用。上述公式在通过对入射辐射亮度积分来计算表面某处的辐射亮度非常有用。 • 虽然我们通常对到达表面的辐射亮度感兴趣,但辐射亮度的值实际上是与表面无关的。与表面无关的辐射亮度公式为:
环境中的辐射亮度可看成是5个变量的函数(若包含波长,则为6个),称为辐射亮度分布(radiance distribution)。3个变量为位置,另2个变量为方向。则该函数描述了所有光线在空间的分布。 • 对于给定的一点,我们可把辐射亮度分布看成一整个场景的环境图,它表示了所有方向的入射辐射亮度。
色度学(Colorimetry) • 我们可以观察到可见波段的光(380nm~780nm)。给定方向的光包含一系列不同波长分布的光子。该分布称为光谱。 在白色光照下,一个成熟的棕色香蕉的光谱分布
感觉器官 • 人眼可以区分1千万种不同的颜色。在视网膜上,人眼有三种不同类型的感觉器官,每种感觉器官对不同的波长反应不同。 • 所以给定一个光谱,人脑从感觉器官只接收三种不同类型的信号。这是为什么任何可见光谱只用三个数来表示的原因。
颜色匹配 • 三个什么数?CIE提出了一套标准的测试颜色的条件,颜色匹配验采用它们来进行。 • 在颜色匹配中,三种颜色的光投影到白屏幕上,使得三种颜色相加后得到一patch。然后把单波段的测试颜色投影到该patch上。观察者改变三种颜色光的权因子,直到颜色匹配为止。
该图为对于r=645nm,g=526nm, b=444nm三种单色光的测试结果
但是三个加权的r、g、b值不能直接表示所有的可见光颜色。因为对于有些波长,权值有可能为负。CIE提出了三种不同的假想光源(不用单色光),它们表示为 它们的光谱为:
三刺激值 • 给定一个光源和物体的表面反射系数,它们的乘积定义了一个颜色函数C(λ) ,即光谱。把该函数与颜色匹配曲线相乘,并积分得到三刺激值:
X, Y, Z为CIE XYZ空间定义一种颜色的权因子。但该三维空间用起来很不方便,因此我们使用X+Y+Z=1平面,该空间的坐标为x, y, z,计算如下:
色度图 由于z值是冗余的,通常被省略。色度坐标x和y构成的图称为色度图。
其它颜色系统 • HSB (Hue, Saturation, Brightness) • CMYK (Cyan青, Magenta洋红, Yellow黄, blacK黑)(主要用于四色打印、四色印刷) • YIQ(主要用于电视)
BRDF理论 • BRDF表示Bidirectional Reflectance Distribution Function(双向反射率分布函数)。它用来描述物体的材料属性,表示光如何从一个表面反射出去。 • 该函数的输入为入射及发射光的方位角ø和仰角θ。另一个输入为入射光的波长。 • 该函数的输出为一个无单位的值,表示对于给定的入射方向,在发射方向反射出去能量的比例。 BRDF给出了入射光子在某一方向离开的概率。
BRDF示意图 BRDF描述了入射辐射亮度和发射辐射亮度是如何相互联系的,但没有解释材料是如何在物理上与光相互作用的。 i:表示incoming; o: 表示outgoing
BRDF的性质 • Helmholtz互反定理(Helmholtzreciprocity):输入和输出角切换后函数值相同。 • 发射的能量小于等于入射的能量。
BSSRDF • BRDF是更一般方程双向表面散射反射率分布函数Bidirectional Surface Scattering Reflectance Distribution Function (BSSRDF)的一种逼近。 • BRDF描述的是在表面的同一点光的入射和发射分布,并没有包含表面内光的散射(如在大理石中可见)。 • BSSRDF通过把入射光的位置和发射光的位置作为函数的输入覆盖了散射现象。它描述的是光从入射方向在表面的某一点入射,然后在另一点沿发射方向发射的比率。
BSDF • BRDF和BSSRDF考虑的是光的反射,而没有考虑光的传输。 • 为了处理传输,对于一个表面,需要定义2个BRDF和2个BRTF (T表示传输Transmission),每侧各1个,它们构成BSDF (S表示Scattering)。
反射方程(Reflectance equation) • 给定一BRDF和入射辐射亮度分布,反射方程决定了表面在给定视域方向的发射辐射亮度。它通过在表面的半球面上对所有方向的入射辐射亮度进行积分得到: 其中i表示入射方向,o表示发射方向。L表示在给定方向的辐射亮度,f为BRDF。 L cos(θi)使得变成正向入射(其意义与Lambert定律类似),双重积分符号和σ表示在半球面上Ω积分。 • 该方程表示:对于表面半球面上的所有方向,决定入射辐射亮度,乘上该入射方向和发射方向的BRDF,并用入射方向和表面法向夹角的余弦进行比例缩放,然后积分。结果为视域方向的辐射亮度。该方程对三个颜色分量单独计算。
点光源的反射方程 • 对于点光源,反射方程简化为: 其中 为光源方向。为了简化符号表示,我们用单位矢量 表示方位角和仰角,并用点积来表示余弦项,得到: 其中函数 为光源的入射辐射亮度。
Phong高光的BRDF • 对于漫反射表面,BRDF返回的是常数值。对于Phong高光的Blinn形式,BRDF为: 其中ks控制镜面贡献的强度。对于不同的RGB通道,BRDF的分布不同。 项用来取消反射方程中的相应项。 • 也就是说,Phong镜面项有点奇怪,它的BRDF消掉了反射方程中的余弦项。这是因为Phong高光忽略了投影面积的影响,是一种特例。
BRDF分布图 • 理解BRDF的一种方法为把入射方向保持恒定,然后观察其输出结果。对于给定方向的入射光,发射能量的分布见下页图 。 • 交点附近的球面部分为漫反射项。椭圆形部分的为反射叶(reflectance lobe)(镜面项),通常在入射光的反射方向。
Torrance-Sparrow模型. 镜面高光并非在反射方向最强! Phong/Blinn高光加上漫反射项 漫反射表面 Ward’s各向异性模型 Hapke的BRDF模型 Lommel-Seeliger散射模型 长虚线为入射光方向,短虚线为理想的反射方向。
微面元 • 在过去几年,已经提出了多个BRDF模型,其中的一个关键概念为微面元(microfacet). • 微面元是物体表面上一种微小的、平坦的镜面,具有随机的大小和角度。
因为高斯分布在数学上处理起来较容易,在这些BRDF模型中,微面元通常假设在大小和角度上具有高斯分布。因为高斯分布在数学上处理起来较容易,在这些BRDF模型中,微面元通常假设在大小和角度上具有高斯分布。 • 镜面反射可以用一些微面元的直接反射来描述,而漫反射可以用微面元间的相互反射来描述。微面元之间还可以互相投射阴影。 • 当微面元的大小与光的波长相近时,还有一个重要概height correlation, 可用来模拟干涉、衍射等物理现象。
Fresnel Reflectance • 菲涅尔反射对于塑料、玻璃和水等绝缘体或电介质材料非常重要。 • 当电介质材料以接近掠角(Grazing angle)的角度观察时,反射会更厉害(但对于金属,该角度引起的反射变化相对较小)。当用最浅的掠角时,所有的材料变成全反射. • 该现象可以这样来看:手拿一本书,对准计算机的显示器,以很浅的角度去看其中的页面,在一个极端浅的角度,你可以看到屏幕在书上的反射。
菲涅尔反射公式 • 菲涅尔反射的公式与折射率、衰减系数、入射角有关。绝缘体的折射率可设成是1.5。若衰减系数未知,可设置为0。菲涅尔反射公式为: 其中 v为视线矢量,h为半角矢量,n为折射率
菲涅尔反射曲线 对于给定表面,F描述了不同入射角的反射曲线。 入射角 在该图中,折射率为1.5。
HTSG BRDF • 采用height correlation的HTSG BRDF模型,可能是目前最全面的BRDF模型,该模型可以模拟很多物理现象。但缺点是计算量较费。 参考: He XD, Torrance KE, Sillion FX, Greenberg, DP. “A Compressive Physical Mode for Light Reflection” ,Siggraph’91, 1991, pp.175-186.
各向异性(Anisotropy) • 如果视点和光源固定不动,若物体绕其法向旋转时其外观发生改变,则该材料是各向异性的。很多物体是各向异性的,如上了油漆的木头、布、毛发等。
一个简化的各向异性BRDF模型(镜面部分)为: 其中mspec为材料的镜面系数, mshi为会聚指数,l为光矢量,v为视线矢量,t为切矢量(与材料的方向垂直)。 • 此时,发射辐射亮度为:
BRDF获取方法 • BRDF理论模型的一个问题是它们不能表示特定的材料。 • 另一个方法是获取真实表面的BRDF,可采用:角度测定法 (goniometers), 双向反射计成像法(imaging bidrectional reflectometers) ,基于图像的方法(image-based methods)。 • 有些数据库是公开的,可以在线下载。
Implementing BRDF • 应用BRDF的直接方法为计算顶点的颜色并把结果传到流水线。但其缺点是:如果BRDF反射在一些象素上的变化速度太快,线性插值会导致丢失或过分突出这种反射变化。一个解决方法是把表面加细,但会降低算法的性能. • 对于给定的材料,如果有一种存取快速的简凑的表示方法,可以带来如下好处: (1). 避免精确理论模型的计算耗费 (2). 减少存贮量 (3). 减少实验获取BRDF中的噪声。 • 在实时绘制中,主要采用两种简凑的BRDF表示方法:(1). Factorization (2). Environment map filtering
因数分解法(Factorization) • 一种表示BRDF的方法为把BRDF表示成乘积项的和(而不是一系列基函数的加权和),其中每个乘积项包含两项。 • 思想:把BRDF转化为一系列二维纹理对。每对纹理通过四维参数存取(2个入射角和2个发射角).返回的纹理值相乘后再相加,得到象素的颜色。 • 在实践中,我们发现对于很多材料表面,一对纹理已经可以产生令人满意的结果。
因数分解法公式 • 初始的BRDF有两个方向矢量,入射矢量和发射矢量。因数分解法就是把BRDF表示成简单函数对乘积的和: • 因数分解法蕴涵的思想为把入射和发射方向映射为纹理上的象素,使得上式中的n尽量小,并且方向矢量可以通过纹理的线性插值来得到。 • 存取的纹理与环境映照具有相同的形式:球面图、抛物面图、立方体图。其中立方体图的质量最高。
例子 • 我们的目标是构造纹理对:一个通过入射方向存取(我们称之为入射纹理),另一个通过发射方向存取(我们称之为发射纹理)。 金材质的BRDF因数分解(采用Cook-Torrance 模型)。两个纹理通过入射光线矢量和发射视线矢量存取。对于每个象素,对应的纹理相乘生成茶壶的光照
入射纹理中每个纹素的uv坐标表示入射方向,发射纹理中每个纹素的uv坐标表示发射方向。例如,u坐标可以映射到方位角,v坐标可以映射到仰角。入射纹理中每个纹素的uv坐标表示入射方向,发射纹理中每个纹素的uv坐标表示发射方向。例如,u坐标可以映射到方位角,v坐标可以映射到仰角。 • 在实践中,我们发现这种参数化结果并不好,会导致需要很多纹理对(即n太大)才能较好地逼近BRDF。在三角形内的线性插值结果也不好,会导致严重的误差。 • 好的参数化方法与材料的类型有关(并非完全是一个科学问题)。