渲染多层材料的综合框架

来源:互联网 发布:域名被别人注册了 编辑:程序博客网 时间:2024/05/22 03:23

下面是对2014年TOG上的一篇论文的翻译。
论文题目:A Comprehensive Framework for Rendering Layered Materials

这篇文章的技术已经被用于pbrt的分层材料的渲染中,非常值得深入研究。下面只是单纯的翻译(水平有限,仅供参考),核心概念的理解以及补充材料将另起一篇文章。
另外,也正在写一篇关于分层材料的计算工具的博客,写完在贴上吧。

转载请说明出处,事实上,我还在更新其中的内容,因为还有很多知识点不太理解。
为防止误导读者,转载请也随时更新。


这里写图片描述
图1:场景内部所有的材料都是使用这篇文章描述的技术产生和渲染而来的。左右两边的小图显示了用作我们系统输入的对应的结构描述。

摘要:

我们展示了一个通用的并且切实可行的方法来计算多层材料的BSDFs。它由各向同性或各向异性散射层以及平滑的或者粗糙的电导体或电介质分界面组成。在扩展到能支持任意组合的方向基以后,我们能够准确有效地合成具有各种各样的分层结构的BSDFs。

我们的系统创建的反射模型正确地考虑了层内与层间的多次散射,在渲染系统中,他们能有效地求值,并且支持纹理和明确的重要性采样。尽管我们的方法实质上涉及在傅里叶基上对反射函数制表,但是由于我们的表示内在的稀疏性,产生的模型在存储上是紧凑的,同时也是精确的,甚至对于具有窄峰值的函数也是如此。渲染一般的多层表面的方法在过去已有所研究,而我们的是首个既有效又精确的,能够支持任意分层的系统。

我们通过与真实测量的分层材料进行比较来验证我们的模型,并且我们详细阐述了一个交互式可视化设计工具,它能非常容易地探索分层材料的空间。我们在一个开源的渲染系统中提供了一个完全切实可行的高性能的实现。

1. 概述

表面上散射的概念是渲染的核心。在场景的尺度允许的情况下将薄的结构视为表面是恰当的,并且在计算上也是必要的:从有微观划痕的金属表面到在太空上观察到的粗糙海洋平面,表面散射模型通常是正确的表示。

有着微观粗糙度的金属或者电介质分界面是最简单的散射表面,但是绝大部分的非金属材料是不透明的,它们通过次表面散射来漫反射光。包含一个漫反射和一个镜反射组成部分的最常用的散射模型,是基于在光密介质上有电介质边缘这样的思想的。

表面可以更加复杂,它们有不能完全隐藏底下材料的分层:陶瓷上的釉,底层涂料上的墙漆,有着透明涂层的彩色车漆,金银珠宝上的珐琅,以及分层的生物组织,例如树叶,花朵,花瓣或者皮肤。所有这些都能用栈的形式来描述,栈由多个用平滑或者粗糙的分界面分隔开来的散射和(或)吸收介质层堆叠而成。栈的底部可以是不透明的(例如金属)或者透明的分界面。层和分界面提供了一种能用于描述广泛材料的语言,该语言已经成为了大多BRDF模型的基础。

用物理参数将表面显式地表达为多层系统也允许在不同的尺度下对其进行一致的处理。当近距离的观测时,给定的结构不能够被视为薄的表面,那么该结构可以被直接渲染,而对于较远距离的观测,通过将结构精确地归约为表面模型,该结构可以被自由地转换为一个表面。

然而,重要的是要意识到,对于来自于任意的比单层或者单个分界面更加复杂的系统的散射,我们都没有精确的计算模型。甚至是最简单的非平凡系统,一个有平滑的分界面的单一介质,也仅仅是用标准的BRDF模型来粗糙近似。对于分层的或者有涂层的结构,已经有许多模型被提了出来,但它们都限制于特定的情况或者不够精确。当然,在一个渲染系统中显式地实例化任意类型的分层材料都是可能的,这依赖于通用的渲染算法来分解各层之间的交互,然而,由于该方法面临无法可靠地寻找通过一个材料栈的光的路径的问题,该方法通常来说是不切实际的。

在这篇文章中,我们提供了一个完整的解决方案来精确模拟分层材料的散射。我们的系统处理的是能够以层或者分界面的形式表示的任意各项同性的表面,在某种意义上,我们提供了描述表面结构的计算语言。我们系统的构建块——语言的语法,可以这么说——是基扩展(basis expansion),增加方程(the adding equation)和增加/倍增方法(adding/doubling method):来自于辐射传输的计算工具在之前也偶尔被使用于图形学中。在这篇文章中,我们建立了表达各种各样在图形学中有用的表面所需要的词汇表:我们展示了,在这个框架下如何将微面元模型用于透射和反射、测量的BRDFs以及Henyey-Greenstein和von Mises-Fisher相函数。我们同样也提供了用于求值的有效算法和在渲染过程中使用的明确的重要性采样方法。

我们的系统是具有表达力的,同样也是实际的。一个预计算的步骤在一个傅里叶基上扩展了所有的BSDFs和相函数,这导致了与平面平行的多次散射的问题被分解为每个方位频率上的子问题。多次散射的问题是通过在散射层上使用增加/倍增方法以及在一系列的层和分界面上使用增加方程来解决的。最后,最终得到的BSDF会被存起来,供之后渲染使用。

我们的实现可以有效地扩展到高阶,在保持精确度和避免震荡(ringing)或其他走样的同时,它可以处理从非常粗糙的到接近于理想镜面的分界面,以及从各向同性的相函数到具有很高的峰值的相函数。预计算的BSDF用一种稀疏的格式存储,需要几千字节到几兆字节,这取决于扩展的阶数。预计算的时间是秒级的,渲染时间性能接近于专门实现的BSDF模型——事实上,我们的重要性采样技术的质量意味着,在相同时间的比较下,预计算的标准的BSDFs模型的表示的性能有时要超过对应的分析师模型。

获取这种级别的精确度和性能要求相当谨慎地设计BSDFs表示,算法和在预计算和渲染过程都会用到的数值技术。在这篇文章中,我们讨论了系统的设计和让其起作用的最重要的一些问题,完整的细节在补充报告中。我们将会发布作为Mitsuba渲染器[Jacob2010]一部分的一个完整的开源实现。

这篇文章有以下贡献:

  1. 我们建立了有效且鲁棒的数值方法,用于将一系列传输理论反射模型投射到支持任意组合的基上。
  2. 我们意识到待解决问题其内在的稀疏属性,并且建立了一个能挖掘这一性质的系统,从而能够扩展到各种各样的分层结构,包括非常具有挑战性的输入。就我们所知,这构成了第一个不用简化假设就能对多个粗糙的分界面的交互进行建模的实际解决方案。
  3. 我们展示了如何对最终得到的制表进行有效地求值和重要性采样,并且提出了一个外插的方法使得在能接受一定近似的时候进一步地减少预计算和渲染的时间。
  4. 对于微面元BRDFs,我们提出了一个多次散射项来避免这些模型的能量损失的问题。
  5. 我们建立了启发式方法,它能自动的选择一个具有足够分辨率来确保表示错误的边界的基。

2. 前人研究

在图形学中,光的传播是在线性的传播理论框架中完成的(可能除了推导散射相位方程以外,波动和量子效应一般是被忽视的)。以这种级别的精确度预测来自于分层材料的反射是一维线性传播理论中的反射率问题[van de Hulst 1980]的主题——这是确定来自于仅服从于外部源的、与平面平行的介质的紧急分布(the emergent distribution,不懂)的问题。

反射率问题确定的闭式解是罕见的。在图形学中,Blinn[1982] 使用了单次散射的解决方案,Hanrahan和Krueger[1993] 扩展了该方法使之包含折射率的改变、多个分层,以及蒙特卡洛方法来计算多次散射。这些是首批在分层介质中起作用的图形学模型,但是单次散射的解决方案的应用是有限的,而更为一般的蒙特卡洛方法很不幸地收敛非常地慢——尽管在某些情况下通过使用积分形式的散射方程,收敛率可以被改进[Pharr and Hanrahan 2000]。我们的研究工作追求相同的目标,同时聚焦于效率,精确性和一般性。

包含所有阶的散射的精确解限制于有着各向同性或者线性各向异性的散射,以及有着光滑的、折射率匹配的分界面的无穷厚的材质[Chandrasekhar1960]。对于各向同性的散射,Premoze[2002]使用了包含H-function的半无穷解来渲染被灰尘覆盖的表面。有限层的解[Das 2010] 或者带有菲涅尔反射的半无限的介质[Williams 2006] 要求通过迭代或者其他方法求解积分方程。

存在各式各样的近似确定的方法可用于计算一般多层材料的BSDFs,包括离散坐标标注(discrete ordinate(SN)[Thomas and Stamnes 2002]),传输矩阵方法(the transfer matrix method[Aronson 1971]),FN 方法[Siewert 1978],增加-倍增方法(adding-doubling[van de Hulst 1980],分析离散坐标标注(analytical discrete ordinate[Siewert 2000]),以及奇异特征函数方法(the singular eigenfunction method[McCormick and Kuscer 1973])。这些方法全都有不同的精确度/开销上的折衷以及稳定性的问题[Chalhoub et al. 2003],并且原则上,在我们一般的框架下,它们中任意一个都能被用于计算传输算子(operators)。

在图形学中,我们的方法最接近于Stam[2001]。在他的文章中,他提出了第一个用于粗糙电介质的BSDF模型并且通过SN方法使用它来计算对皮肤进行建模的BSDF,将其作为带有电介质分界面的各向异性的散射介质。我们的工作延续了Stam相同的方法:我们同样以层和分界面的形式对表面建模并且我们使用了相似的方向基。然而,我们的系统提供了能够精确有效地处理任意分层结构并且对高阶的扩展保持良好的性能的、完整的、模块化的解决方案,这远远超出了Stam早期的工作。这要求完全不同的方法来计算基的扩展,简洁地表示它们,以及在面对具有挑战性的输入时能够鲁棒地求解最终的方程。同样,就我们所知,我们的系统是第一个在使用这一方法时考虑了重要性采样,von Mises-Fisher散射以及用于粗糙分界面的近似多次表面散射校正的系统。

几个使用了漫反射项和镜反射项的、用于近似特定类型的分层结构的、专门的BRDF被提了出来 [Wolff et al. 1998; Shirley et al. 1997; Kelemen and Szirmay-Kalos 2001],包括粗糙散射(asperity scattering)[Koenderink and Pont 2003],以及用于粗糙厚板的修正了的微面元分布[Dai et al. 2009]。我们的框架包含了这些模型,并且由于正确地考虑了各层之间的相互影响,一般情况下也更加精确。各种各样其他的用于渲染分层材料的近似分析式方法也已经被提了出来,例如Kubelka-Munk[Donner and Hanrahan 1996],基于漫反射的方法[Donner and Jensen 2005],或者用于树叶的特殊近似[Wang et al. 2005]。Weidlich和Wilkie[2007]提出了一系列灵活的分层BRDFs。他们的方法简单有效但是不能像我们的模型那样获得想要的许多性质,包括可逆性,能量守恒,以及精确地考虑层内和层间的多次散射。

在这篇文章中,我们仅仅考虑标量辐射传输而忽略偏振效应。扩展我们的方法去处理向量辐射传输是直接的[Garcia 2012]。也有可能存在不均匀的散射层,这些层的单次散射反射率是关于深度的函数,这个问题也可以用已知的方法解决[Yanovitskij 1997a]。荧光[Wilkie et al. 2006],异常色散[Weidlich and Wilkie 2009],以及薄胶卷的干涉效果[Hirayama et al. 2001]也已经在反射模型中得以考虑并且能够作为我们框架的一部分被包含进来,但是这篇文章我们聚焦于一个综合的几何光学的框架。

3. 背景

本章节描述了系统的计算框架,其构建在许多前人的关于传输理论的研究上,我们在这一章节回顾这些这些研究。我们将基于与平面平行的或者说一维传播的假设,这意味着我们假设,横跨整个平面,光照和表面的性质是不变的,以致于所有与位置相关的函数都可以建模为与深度相关的函数。从实践的角度来看,这意味着我们推导的是BSDF而不是BSSRDF模型。

系统将辐射函数在方向基上进行扩展,所以各层和各分界面的BSDFs用矩阵来表示,称之为散射矩阵。

我们从介绍增加方程开始,给定各个组成层的散射矩阵,增加方程被用于计算组合层的散射矩阵。接着我们描述矩阵表示下的方向基,并且我们展示了如何使用方向基来离散化辐射传播方程和边界条件。最后,我们描述了如何使用增加/倍增方法来求解辐射传播方程,增加/倍增方程之所以这样命名是因为它依赖于增加方程来不断倍增一层直到它达到了需要的大小(厚度)。

3.1 增加方程

Stoke[1860]进行了对于分层材料的一些早期理论研究工作,他分析了一摞玻璃板的组合反射和传输性质。回顾他对于只包含了一块板这个最简单的情况的分析背后的数学原理是有益的。

被具有单位能量的光线照射的玻璃板,其顶层的分界面反射了光的一部分R并且透射了另一部分T进入到了材料中,透射进材料的光继续向前遇到了底层的分界面,在来回反射的过程中每一次都会有一部分光逃逸了出去。

这里写图片描述

由于具有可逆性,底层的分界面的反射和透射的系数同样等于R和T。通过对所有的光路进行求和,作为一个整体计算出平板总的反射和透射是可能的。最终得到的几何序列有一个非常简单的显式形式:
R~=R+TRT+=R+RT21R2,
T~=TT+TR2T+=T21R2 .(1)

这个等式向我们展示了如何计算来自于两个分离的分界面的反射和透射的这两个分界面的总的标量反射和透射。

有了这个例子,我们转向更加一般的情况:与其考虑被单一方向照明的一个平滑界面,这次我们考虑任意组合的平板,其被以某种基表达的辐射分布所照明(我们暂时让底层的离散化不明确。)。光的线性传播让我们能够将被映射到相同基上的发散的光照写为矩阵-向量乘积的形式。
Φ(t)=RtΦ(t)+TbtΦ(b),
Φ(b)=RbΦ(b)+TtbΦ(t),(2)

其中Φ(τ)Φ(τ)分别是描述对应于所使用的基在深度τ向上和向下的辐射亮度的向量。深度t和b对应于顶层和底层的表面,并且方阵 RtRbTtbTbt分别描述到达顶层和底层光的反射和透射。
这里写图片描述

与玻璃板例子类似的问题是:给定两个不同层的散射矩阵(i.e. Rt1Rb2Ttb1Tbt2,etc.),两层被上下叠加在一起后的散射矩阵是什么?
这里写图片描述

解是相似的,但是用矩阵RT代替标量R和T。与标量的情况相同,我们对反射和透射所有可能的序列进行求和,并用闭式解代替几何序列。必须注意乘法的阶,因为矩阵一般不能够交换。对于这个推导的严格的讨论,我们让读者参考[Grant and Hunt 1969]。类似于(1),这个计算的最终结果就是所谓的增加方程:
这里写图片描述

同样的方法在计算一层的顶部或者底部的粗糙分界面或者两层之间的分界面的效果也是同样起作用的。

增加方程是我们系统的关键组成要素,因为它们使得精确地计算层栈的散射性质成为了可能。我们通过重复使用等式(3)来计算分层材料的散射矩阵,从而能够基于材料的结构描述来组合层和分界面。这要求已知各层内部的以及各分界面的矩阵,我们在3.4节和3.4.1节分别讨论它们。
这里写图片描述

这里写图片描述
图2: 我们的框架组合了分界面和层从而形成了组合材料的BSDF。

3.2 问题描述

在描述我们用于表示散射函数的基以及用于计算增加方程所使用的矩阵的方法之前,我们首先形式化待解决的全局的与平面平行的辐射传输问题。几何特征在图2中描述:我们有一系列的层,每层都包含同质的介质,并且被分界面所分隔开来,分界面用BSDF所描述。由于一维传播的假设,辐射仅依赖于方向和深度。简洁起见,我们在z方向上定义从顶部开始测量的无维的光学深度为

τ(z):=z0τt(z)dz(dimensionless)

其中τt(z)标记了分层材料内部深度为z的消失系数(单位为1/距离)。

辐射亮度被标记为Φ(τ,μ,ϕ),其中μ=cosθ[1,1]是天顶角的余弦值,而ϕ[0,2π]是方位角。使用这样的参数化,在一层内的辐射传输方程具有以下的形式[Chandrasekhar 1960]:

μdΦ(τ,μ,ϕ)dτ=Φ(τ,μ,ϕ)+2π011dΦ(τ,μ,ϕ)p(μ,ϕ,μ,ϕ)dμdϕ,(4)

其中p(μ,ϕ,μ,ϕ)是层的相函数,它是(μ,ϕ)(μ,ϕ) 这两个方向之间角度的函数。注意p隐式考虑了散射相互作用的反射率并且一般会积分到一个小于1的值。

这一等式的边界条件是层间的分界面的BSDFs。为了用这些层的边界描述光的相互作用,我们必须区分入射辐射亮度和出射辐射亮度,因为在深度τ0的边界一般对于Φ引进了不连续性。
这里写图片描述

有了这样的定义,在一层的边界上表面光照积分(既考虑了反射也考虑的透射)有如下形式:

Φo(τ0,μ,ϕ)=2π011Φi(τ0,μ,ϕ)f(μ,ϕ,μ,ϕ)|μ|dμdϕ,(5)

其中f是边界上的BSDF。

3.3 方向基

在我们进一步使用增加方程来求解实际问题之前,我们必须确定一个基用于表示辐射函数的空间。为了在方向上对Φ进行离散化,我们依赖于最早由Chandrasekhar[1960]提出的一个基。它使用了方位角$$\phi的傅里叶序列和天顶角的余弦值$\mu$的点样本来表示深度为$\tau$的光的分布。

我们将分析限制在各向同性的表面,即围绕着法向量的旋转不变性,见图(a),再进一步加上双向对称的合理假设,见图(b):

这里写图片描述

这些共同暗示了所有相关的量只依赖于μ,μ|ϕϕ|。我们将模型的组成部分展开为对应于|ϕϕ| 的偶实数傅里叶展开式。

在散射量中,我们展开了辐射亮度分布Φ和相函数p

这里写图片描述

并且在深度为τ0的分界面上,我们相似地定义了入射和散射辐射亮度函数,即Φil(τ0,μ)Φol(τ0,μ),以及边界的BSDF的展开式。将这些定义替换为(4)中的散射积分,并使用余弦基的卷积性质进行简化,将内散射辐射亮度(在(4)的最终形式)写为傅里叶序列的形式,

这里写图片描述

其中 是Kronecker Delta函数。让两边的系数相等,产生了:

这里写图片描述

表面反射方程的一个相似的变换为

这里写图片描述

这种形式显示了傅里叶展开式一个关键的好处——计算作为μμϕϕ的函数的辐射亮度的问题已经被归约成一系列独立的子问题,每一个子问题仅包含μμ。在实践中,系数ptft随着l无穷大逐渐衰减,所以需要被求解的只有那些索引小于m的子问题。这由积分中最低的频率因子所决定——例如,对于一个漫射层,无论光照的频率是多少,只有l=0项是必须的。我们把每个没有l约束的方程都理解为一系列的方程,那么为了简洁起见,我们从现在开始忽略(l=0,)的后缀。

傅里叶序列通常被认为难以处理那些可能包含窄的峰值的函数,但是他们在这个情况下提供了非常重要的好处:将问题划分为每个方位角上的独立的问题显著减少了必须被求解的问题的困难程度。这是卷积理论的结果,这对于傅里叶家族的基函数是独一无二的。通过利用散射函数下本质的对称性,它们的维度进一步由4维减少到了3维。就像我们之后将会看到的那样,通过结合稀疏性,这些性质将会让我们进行更高阶的展开,从而能够精确地表示哪怕是类理想镜面的反射。最后,将已存在的材料模型投射到这个空间包含一系列的一维积分,使用递归可以很容易对它们求值(细节在第5节)。我们的系统原则上也能够使用其他的基来实现,但是这会引入一些复杂性因为至少丢失了上述性质中的一个。

3.3.1 对天顶角进行离散化

我们现在转向μ相关性:这里使用具有积分节点{μ1,,μn}[1,1]{0} 和权重{ω1,,ωn}被用于离散化积分变量μ。这将傅里叶空间表面光照积分(9)转为了求和:

这里写图片描述

并且通过使用矩阵记号,我们可以将等式写为

这里写图片描述

其中 Φl(τ):=(Φl(τ,μk))k,对于具有n元素的向量ΦilΦol也是相似的,另外Fl:=(fl(μi,μj))ij,并且对角矩阵W:=(δijωi)ij且有M¯:=(δij|μi|)ij,其中 是n×n矩阵。一个相似的过程应用于传输方程(8)导致了矩阵微分方程

这里写图片描述

其中Pl的定义类似于FlM:=(δijμi)ij

各种各样的正交方案可应用于这个环境,并且在实现中,我们使用了Gauss-Lobatto点[Chandrasekhar 1960],其包含端点±1,且最大化服从这一限制的明确可积分多项式的阶。

3.4 求解散射矩阵

回忆一下在我们的系统中,我们计划使用增加方程(3.1节),其输入是描述一层对入射光照的响应的散射矩阵RtRbTtbTbt。转换成方位角上的频率表示的一个重要的结果是现在每一层都有一系列标记为RtlRblTtblTbtl (l=0,,m)的矩阵,它们描述了不同的方位傅里叶模式对光照的响应。在这一节中,我们从带有一个边界的交互这一较为简单的例子开始,展示了如何找到这些散射矩阵。

3.4.1 层的边界的散射矩阵
对于层的边界,基于等式(11)直接从傅里叶投影的BSDF Fl 中抽取散射矩阵是简单的。对于这个,我们将矩阵Fl划分为四个子块FtlFblFtblFbtl ,它们分别对应于表面顶端和底部的反射和透射的不同模式。那么,我们有

这里写图片描述

在第5节,我们探寻特定的散射模型来找到Fl

3.4.2 层的散射矩阵
存在几个不同的技术可以被用于求解介质层的散射矩阵。在我们的系统中,我们实现了离散坐标标注方法\footnote{离散坐标标注方法在补充材料中讨论,它使得我们能够处理参数是深度的连续函数的层。}和增加/倍增技术,并且发现由于增加/倍增方法的鲁棒性,其一般情况要更优。作为光学深度的函数,多次散射对于足够薄的层是可以被忽略的高阶的效果,增加/倍增方法就是建立在这一性质上的。另一方面,最多具有单次散射事件的层的散射矩阵是很容易获得的,因为他们有解析解。那么增加/倍增的思想如下:在计算了非常薄的层(薄到多次散射可以被忽略)的散射矩阵之后,通过叠加两个相同层,第3节的结果被用于寻找具有两倍厚度的层的散射矩阵。层的厚度会不断倍增知道它由了想要的厚度。

既然\tao是指数增长的,那么即使是非常厚的层也能够被快速的处理。

在我们的实现中,我们从深度 = 开始。为了获取并不是d\tao 的2次幂的厚度的层,我们先将数字 用2进制表示(其中b-t是想要的厚度)。然后一个简单的循环在不断增加的量级方向上迭代通过每个数字(注:即从右往左遍历2进制每个数字),每当遇到的 为1时,在已经部分产生的层上增加一个厚度为 的层。

再次回到被投影并且离散化辐射传输方程(12),注意到它描述了周围介质的一个单位的光学深度是如何局部影响辐射函数的:

为了获取具有d\tao光学厚度的薄层的散射矩阵,我们可以接着简单的使用上述的微分方程作为泰勒展开的线性项。在记号上可能略有不同,这可以被解释为

更为正式的,让我们将矩阵P_l划分为四个子块 ,他们分别对应于表面顶部和底部的反射和透射的不同模式。那么我们有

这告诉了我们如何从相函数矩阵P中寻找深度为d\tao的初始层的散射矩阵,这个矩阵是启动增加和倍增过程所需要的。

到目前为止,我们已经解释了我们系统的基本的数学框架,它由方向基和将在这个基下相函数和BSDFs的矩阵表示转变为任意分层材料的散射矩阵的必要方法组成。这篇文章剩下的部分的结构如下:第4节给出了核心算法的概述并将后面几节连接在一起。第5节展示如何找到我们在3.4.1-3,4.2节中所要求的相关相函数和BSDF模型的矩阵表示 和 。5.3节修正了微面元模型中会对分层BRDFs造成困难的的能量损失问题,而第6节解释了在渲染器中如何有效地对我们的模型求值以及重要性采样。最后,第7节阐述了我们模型的应用而第8节总结这篇论文。

4. 算法概述

算法1实现了系统的核心组成部分,其计算了每一层的反射和透射矩阵的傅里叶模式,接下来使用增加方程将它们组合起来。算法的输入时材质的结构化模型,其由相函数,各层的光学深度,边界的BSDFs,以及\miu和\miu’的目标离散化值n和方位差异角 傅里叶展开系数m。离散化与模型的精确度相关,在5.4节中我们展示了这些参数保守的边界。

整个计算是个离线的过程,也就是说,它是在渲染开始之前执行的。过程的输出是一组n×n的矩阵 , , , (l=0,…,m),矩阵刻画了材质对光照的响应。第6节解释了这种表示如何被渲染算法所使用。

注意算法1的高级结构并不是新的东西,它是一维线性传播理论中各标准技术的结合。接下来的章节是这篇论文的核心贡献,其聚焦于让每一步都充分一般化并且可以扩展来解决渲染过程中的相关问题。

稀疏性:此时,我们来观察关于我们的方法的可扩展性的重要的含义:
1. 为了表示具有非常窄的尖峰的反射函数,我们需要许多傅里叶系数,但这仅仅是对于有非常少的天顶角余弦值对(\mui,\miu)的情况。例如就镜面反射而言,展开式只有在\miu\miu时具有非常高的频率,而其他时候频率都非常低甚至为0。

  1. 在许多(\mui,\miu)上,更加平滑的反射函数是非零的,但是在方位差异角ϕ/phi中它们是低频的,因此它们的傅里叶序数衰减的非常的快。

在Chandrasekhar[1960]的方向基中表达的高频材料的散射矩阵是稀疏的:因此我们的系统依赖于稀疏线性代数技术,使得我们能够达到非常高的阶来表示甚至是类似于镜面反射的材料,而在要求相对较小的存储量的情况下产生BSDF时,不会出现震荡或者其他的走样(图3)。我们没有找到关于此性质的任何文献,相信我们是第一个采用这个方法的人。

我们现在转向第6行和第9行中对PlFl的计算。

5. 散射模型

我们的系统支持几种类型的散射函数:对于层的电介质和电导体的分界面,我们使用Walter et al.[2007]提出的微面元模型,而介质层是通过Henyey-Greenstein[1941]相函数和由Gkioulekas et al. [2013] 提出的von Mises-Fisher部分的线性组合来建模。推导矩阵PlFl的主要困难在于为相函数p找到傅里叶展开式:

而BSDFs f的傅里叶展开式是类似的。对天顶角余弦值\miui\miuo的依赖是简单的,因为它被离散化所处理。我们从寻找相函数的展开式开始。

图3:当尝试表示镜面材料时,例如图中这个Beckmann粗糙度α=0.01的铬合金物体,基于频率的表示通常是不切实际的。我们将材料投射到有着m=9763个傅里叶级数和在\miui\miuo中都有n=503个离散点的基上,这通常会产生28GiB密集的系数数据。通过采用稀疏性和我们高效的傅里叶投射方法,我们只需要在9.6秒内计算出来的51.3MiB的系数(0.19%)而渲染需要1.4分钟。

5.1 相函数

5.1.1 Henyey-Greenstein相函数
Henyey-Greenstein(HG)相函数是广泛使用的一维相函数家族,它有一个单一的参数g[1,1],指定了介质的散射光的向前或者向后的倾向。作为一个入射和出射方向间夹角的\gama的函数,Henyey-Greenstein相函数定义为

为了计算p的傅里叶展开式,Stam[2001]通过数值方法求得每个待计算的系数的值。我们发现这个级数收敛的非常的慢,尤其是对于较高的g值。相反,我们使用Yanovitskij[1997b]提出的技术,使用递归通过一轮就能够快速而准确的计算出各个系数。(代码提供在了补充技术报告中)。

我们想要强调Yanovitskij的递归的奇特的方面,因为它将在下一节中再次出现。他的推导显示了HG模型中任意三个连续的傅里叶系数都有如下关联

其中ρR并不依赖于l。这启发了下面简单的实现:在使用任意的数值或者解析的方法计算出来了p0p1后,简单的对l=2,,m,执行一轮扫描,每次都使用公式(15),从pl1pl2找到下一个pl。然而这并不起作用:在几轮迭代之后,公式(15)中严重的抵消和误差放大导致了比正确答案的量级要大的误差。Yanovitskij因此在相反方向使用了递归,从pl+2pl+1pl,这在数值上表现良好。这导致了有点不寻常的情况,就是必须从想要的范围的尾部开始递归而不是它的开头,但是最终的实现是快速的并且是数值稳定的。

5.1.2 von Mises-Fiser 相函数

当模拟各向异性体渲染时,由于内在的简单性,HG模型是常用的默认选择,但是在最近的研究中,Gkioulekas et al [2013]分析了不同相函数空间的感知重要性并且推荐转向一个更大的空间,该空间包含了HG模型和定义为

的von Mises-Fiser分布的一部分的线性组合。我们推导出了递归式,在5.2节中再次可以用于计算粗糙边界的傅里叶展开式。我们注意到cosγ可以以\miuϕ\miuϕ的形式表示,这等价于

在使用公式(17)并以方位差异角ϕd=ϕϕ的形式重写了公式(16)并且运用了双曲余弦的恒等式后,我们有

其中A= 而B= ,因为他们都不依赖于ϕd,因此就这个推导而言可以被视为常量。

通过使用Jacobi-Anger展开式(Abramowitz and Stegun 9.6.34),我们将公式(18)中的三角指数转为包含第一类修正的Bessel函数的傅里叶级数:

技术上,这完成了傅里叶投射的推导,但是实际上,Bessel函数的求值代价非常高,并且在我们的系统中,由于它们的快速增长,它们会被用导致浮点数运算溢出的参数所调用(考虑一下Io(1000)2.510432),这是在这篇文章后面使用这个展开式时会遇到的一个特别的问题。为了解决这个问题,我们首先注意到公式(19)实际上会取[0,1]区间一个非常合理的值,因为A+Bcosϕd0。因此为了总是保持在可表达数的范围中,关键是我们将由expA扩展的指数包含在系数的计算当中。我们使用下面的表达式来计算第l个扩展的Bessel函数:

第一项Iexp0(B)是指数扩展了的0阶修正Bessel函数,它并不会遭受溢出并且能够在标准的数值库中找到。最后一项是Bessel函数的比值的乘积,其非常接近于1并且非常容易表达。这些比值满足了一个递归关系,我们不仅用这个关系对公式(20)进行求值,同时对于一对角度\miu,\miu在一次扫描中有效找到(16)中的所有的级数(例如常数A和B)。递归式如下

有趣的是,与5.1.1节中的Henyey-Greenstein递推式相似,当被用于一个向上的方式时,这一关系同样也遭受灾难性的抵消和误差放大(例如从之前的l的比值计算l+1的比值),而被用于向下的方式时是稳定的。

那么我们的实现从最大的展开式阶l=m开始,用递归关系从上往下计算比值Il/Il1Il2/Il1直到I1/I0。这要求知道最后的比值Il/Il1来启动这个递推公式:出于这个目的,我们使用了一个基于Gauss在超几何函数比值的研究的快速收敛连续分式表达式(一般的讨论见Gautschi and Slavik [1978]))。

结合连续分式表达式,比值上的递推式以及指数扩展函数Iexp0,我们获得了一个计算von Mises-Fiser分布的方位傅里叶级数的有效且稳定的方法。

5.2 层之间的边界

为了对电介质和电导体边界进行建模,我们使用了Walter et al.[2007]提出的微面元模型。微面元模型描述了光与由服从于微面元分布的电介质或电导体微平面组成的随机平面之间的交互。在分布上进行积分推导出简单的分析表达式,在宏观尺度下其描述了期望的反射和透射性质。通过使用真实世界的测量值进行的验证表明微面元模型要比其他参数化BRDF模型更优[Ngan et al. 2005]。

我们先简单回顾由Walter et al. 提出的微面元模型,特别是那个使用了由Gaussian随机表面推导得到的Beckmann分布的微面元模型。这个模型由一个反射和透射项组成

反射项定义为

其中F是菲涅尔反射,D是Beckmann分布,G是阴影-遮挡项,\miuh标记法向量 和 入射方向和出射方向之间的半方向向量 之间的夹角的余弦值。透射的情况也是相似地定义,但是包含了修改的半向量和不同的加权项。注意,尽管Walter et al.的论文本身只考虑了电介质,但是通过将F替换为用于含复数的相对折射率的边界的非偏振菲涅尔反射项并且设ft=0,从而将模型泛化为可以处理电导体是容易的。更多的细节以及关于折射项完整的讨论请参考原论文。

为了计算f的方位模式,我们必须再次积分

然而,由于被积函数显著的复杂性,我们不能够找到这个积分的解析式。强制转为数值积分的话我们进一步遇到如下问题:
(1) 关于ϕd,f的值变化巨大:通常情况下,只有很小一部分定义域对积分有所贡献。
(2) 高阶傅里叶基函数是震荡的,例如,它们有非常多符号相反的项,它们几乎(但不是完全)相互抵消。

这些性质组合在一起使得通用的和特别的震动积分方法不切实际地非常的慢。为了规避这些困难,对于这个特定的问题我们专门提出一个半分析的积分程序。

我们注意到,尽管BSDF f的完整表达式有几个部分依赖于ϕd,但是Beckmann微面元分布中的指数项对它的行为有更主导的作用。将(25)中的被积函数划分为指数项和包含剩余项的一个函数frem从而得到

其中,在反射的情况下,A和B定义为

在透射的情况下,A和B定义为

我们观察到其与我们在处理von Mises-Fisher相函数时遇到的方程(19)中的余弦指数傅里叶级数具有惊人的相似性,主要的不同是包含了归一化,阴影-遮挡函数以及菲涅尔系数的额外项frem(ϕd)。设想一下我们能够单独地得到这一块块的级数表达式,例如,系数albl从而有

我们实际想得到的傅里叶级数是这两个级数逐点的乘积。这时,我们注意到作为卷积定理的结果,在频率空间,对应于在参数ϕd上逐点相乘的是数列(an)(bn)的离散卷积。如果albl很容易获得,并且如果它们中的一个衰减的足够快,那么这就产生了一个吸引人的方式来找到乘积的系数。我们发现情况确实如此:对于电导体,frem一般足够平滑,只要使用6个级数项(我们保守使用了12个)就可以在106相对误差范围内表示。对于电介质,在某些情况下需要更多的参数(在补充材料下有更多的细节),但是平均情况仍然是非常少的,取决于参数大约需要14-20个系数。重要的是,改变粗糙度α并不改变frem的频率内容,因此我们依靠于余弦指数展开式的鲁棒性来处理第粗糙度的情况。

那么,我们的方法就是计算两个傅里叶级数并找到它们的离散卷积:一个是高频指数,我们简单使用了已经在5.1.2节中开发的算法来计算,另一个是frem(ϕd),我们使用一个用于傅里叶积分的传统数值方法来处理(我们使用Filon quadrature[1928])。

测量材料:将测量材料导入到我们的系统中从而将它们和其他层组合在一起是可能的。我们已经为Matusik et al. [2003]数据库中的材料实现了这一点,对于这些材料,通过在方位角[0,2π]上密集采样并运用快速傅里叶变换,对每一对\miui,\miuo,我们对它们的BSDF进行近似的傅里叶投影。

这相对较快但是仅仅只是近似,同时要求的分辨率取决于材料的镜面性并且必须被人工地确定。对于这样的“黑盒”数据我们将更好的积分方案留给未来的研究工作。

5.3 多次散射项

我们当前使用的微面元模型的一个问题是,在微几何级别,它们只考虑了单次散射事件,与多个微平面进行交互的光实际上被忽略了。这意味着这些模型引起了能量损失,能量的损失会随着分界面粗糙度的增加而不断的增长。在具有多个粗糙的内部分界面的分层材料的模拟中,由于层间的交互,这个能量损失会发生多次,可能会去除掉大量的能量。

对于微面元模型,我们提出一个附加的校正项,它重新引进了对于多次散射的能量损失。这一项是近似的——特别地,我们假设,散射辐射亮度,在表面微几何内多次交互后,会以非常接近于漫射的角度分布出现。对于这个校正项的主要限制是它应该像系统的其他部分那样具有互易性。在我们的设定中,连续互易性的离散版本是一组矩阵方程:

多次散射光照会以近似于漫射的轮廓出现,这个假设让我们将校正项限制为0阶傅里叶模并且为了保持互易性,我们使用下面对F的rank-l更新:

并且Ftb0Ftb0也进行类似的更新。恰当地选择向量rtrbttbtbt使得最终的表达式没有能量损失。对于粗糙电导体和电介质,我们推导出了这些向量的表达式。我们的方法与Kelemen et al. [2001]的工作相关,他们推导了specular-matte BRDF的连续的校正项。这些表达式的推导是有相当技术难度的,因此让读者查阅补充材料来了解细节。图4强调了我们校正项对于有不同粗糙度值的电介质和电导体的影响。

图4:对于电介质和电导体(第1行和第3行),传统的微面元模型会遭受能量损失,这对于模拟分层材料问题尤其严重。我们提出一个多次散射项来重新引进这些能量(第2行和第4行)。

5.4 误差分析

为了在实践中使用算法1,我们需要一个选择合适的天顶角离散化值n和傅里叶展开式的项数m的方法。这些参数应该如何被设置并不是显而易见的,过高的值会导致不必要的开销,而过低的值会引进不可接受的误差。直觉上,他们的选择与材料的“锋度”相关,例如,分界面的参数α,以及散射层的gk

在补充材料中,如果层是单独表示,我们对于每一种层提出一个启发式来指定恰当的n和m值。这些启发式是以低于1%的相对的L2表示误差将相关参数映射到离散化值的简单函数。我们通过限定用暴力搜索找到的n和m值创建这些启发式(图5)。

图5:为了建立一个好的启发式来选择离散化值和展开式的阶(n,m),我们在一系列参数上实例化了系统支持的层的类型,并且搜索误差低于1%的开销最小的表达式。我们使用一个简单的分析表达式来限定图上最终得到的值从而获得其渐进性。(顶行:对于η=1.5的粗糙电解质在一般域和对数域上的边界,底行:我们的边界的存储需求和取得的相对误差。)

对于由多层组成的材料,i=1,,N,这些启发式一般推荐一组不一致的参数值(n1,m1),,(nN,mN)。然而,要让算法1奏效,我们必须为n和m确定一个单一的值用于整个计算。对于参数n,我们简单地设n=maxini。对于参数m我们不需要这么保守:每一层i可以被认为是一个去除了高于mi阶的方位频率内容的低通滤波器。因此,所有材料内部的层都被顶层和底层滤波,因此我们设m=max{m1,mN}

6. 求值和采样

到目前为止,所描述的系统的所有的元素都以某种方式与算法1连结。作为一个离线的过程,这个算法在渲染之前执行并且产生了一系列的散射矩阵,,,。这个管道最后一部分在下面讨论,而这一部分的目的就是在将最终得到的数据写到磁盘之前将其转为方便渲染的格式。

回忆方程(13),我们之前用它来将投影的BSDF模型Fl转为适用于涉及增加方程的计算的散射矩阵。我们现在在相反的方向再次运用这个方程来将最后的矩阵集,,,,转回投影的BSDF Fl(l=0,…,m)。接着我们转置这个张量使得傅里叶系数(Fl)I,j相对于索引l是连续的,它的顺序与我们接下来要访问的顺序向匹配。为了采用稀疏性,我们也为每一对天顶角单独确定最小的有效展开式阶m(i,j),其满足(Fl)I,j=0forl>m(i,j)。只有达到这个阶的系数会被存储。

这一节剩下的部分讨论在渲染算法中如何使用这个信息。在我们的实验中,我们使用了标准的蒙特卡洛路径追踪器,这要求对BSDF进行求值以及与BSDF成正比对方向进行重要性采样的能力,我们展示了如何有效的实现这两个操作。

6.1 模型求值

为了在一组方向\muii,ϕi\muio,ϕo上对模型进行求值,对于给定的天顶角(\miui,\miuo),我们确定在稀疏文件中包含方位傅里叶展开式的位置并提取出相关联的系数a0,,ak。简单地,BRDF值就是

\miui\miuo就是离散的天顶角集合中的一部分时,这是可以的,但是情况通常不是如此。在系统运行过程中,我们用来自于附近的天顶角的傅里叶系数插值得到中间的值,使用的是标准二维张量乘积Catmull-Rom样条的4×4的模板进行插值。

由于在每一次BSDF求值调用了大量的三角函数,方程(28)的简单实现在渲染过程中会导致严重的性能问题,为了将开销减到最小,在迭代通过求和中的各项时,我们使用余弦倍角公式

作为递推式。为了进一步加速计算,当对(28)求值时我们使用指令集并行。所有的求和项都是互相独立的,因此,通过使用迭代式(29)一步求得整组所需要的余弦值,我们能够同时载入并处理多组数据。

纹理:为了纹理化层任意的参数(例如它的光学深度),我们对应于一些样本在整个目标参数域上计算几个BSDF模型。为了对一个特定的参数值对BRDF求值我们简单地用这些模型进行插值。对于线性相关的参数,两个样本就足够了,为了得到非线性的效果,更多的参数是必不可少的。多个样本可以同时被纹理化,尽管需要的样本数呈指数增长的,最终会难以负担。这个方案是近似的,但是在实践中,对于多个类型的参数都是非常有效的,包括漫射或者相函数反射率,或者光学的深度。其他的一些参数不太合适(例如,折射率和分界面粗糙度)并且用这种方法纹理化时可能需要许多的参数。这是我们系统的一个限制并且是未来工作的一个很有趣的方向。

6.2 重要性采样

6.1节介绍的样条插值方案将BSDF矩阵Fl的连续扩展诱导为分段多项式函数Fl:[1,1]×[1,1]R。对于来自于初始离散化的两个角度(\miui,\miuj)Fl(\miui,\miuj)简单返回底层矩阵的(I,j)项,对于离散化样本之间的参数,附近的项会被用来插值。

注意0阶函数F0的特殊重要性,它描述了在方位角上积分的BSDF的平均值:

这意味着对方位角的依赖可以被有效的“排斥”出这个模型,这个事实被我们用于构建简单而有效的重要性采样方法,重要性采样被划分为单独的天顶角和方位角采样步骤。因为这两步都可以被实现为从单一均匀的量到出射角的平滑映射,所以它们都特别适合用于某种结构化的点集,例如Sobol或者Halton序列,使得使用了它们的渲染减少了方差。

两个步骤都包含对积分的标准的数值求逆方法,为了完整性,我们在这里回顾:为了在一个区间[a,b]上正比于一个1维密度函数q(x)1抽取样本,我们产生一个均匀随机量\Eta并求解方程Q(x)=\Eta中的x,其中Q(x)=xaq(x)dx。注意Q是连续的且是单调递增的。因为Q(a)=0Q(b)=1,这保证了存在唯一解,而[a,b]是已知的闭区间。我们依赖于混合牛顿方法求Q的逆函数,每当可以从二次收敛率中收益从而使得使用Newton-Raphson进一步靠近解的时候,它保持了一个闭区间作为不变量。

天顶角采样:给定一个固定的入射天顶角\miuu,这一步以正比于分段三次样条函数F0(\miui,)的概率来选择一个出射天顶角。简单起见,我们假设\miui等于一个来自于离散化的天顶角。让Ii,k标记直到第k条样条线段的F0(\miui,)的定积分,例如

我们首次使用O(logn)复杂度的二分搜索将一个均匀的变量\Eta1[0,1)映射到线段k并满足Ii,k\Eta1Ii,n<Ii,k+1。这之后,我们应用牛顿二分法鲁棒地求得F0(a quartic)在[\miuk,\miuk+1]上的积分的逆函数,从而产生想要的出射天顶角\miuo。整个矩阵Ii,k有能够被预计算的解析解。由于线性的组织结构,离散化的样本之间的天顶角\miui是非常容易处理的:我们可以使用Catmull-Rom基对预计算的积分Ii,k进行内插

方位角内插:为了在已知(\miui,\miuo)时对方位角进行采样,我们从稀疏存储中提取相关联的内插傅里叶系数al:=Fl(\miui,\miuo)并正比于最终得到的傅里叶展开式q(ϕd)选择一个方位差异角ϕd。最后我们设ϕo=ϕi+ϕd。就像之前那样,主要的采样操作涉及使用混合牛顿二分法求取定积分Q的逆函数。幸运地是这个积分有一个简单的解析式:

图6:由我们系统产生的反射模型支持明确的重要性采样,就算是在分析式反射模型存在的情况下这种重要性采样仍是有趣的。中间和右边的图片显示了使用标准的微面元BSDF建模的磨砂花瓶在相同时间下的渲染结果。注意尽管每个像素使用了更少的样本数,(c)中仍呈现出的改进的收敛。

来自于6.1节的递归式在这里同样可以用应用来避免开销较大的三角函数求值。指令级的并行也提供了加速的机会。

提出的重要性采样方案是明确的,因为其保持入射方向固定,在所有散射方向上产生1的常量重要性权重。额外的一些项(例如,表面光照积分的余弦)可以很容易吸收进数据从而也很好地考虑它们。

既然BSDF采样技术几乎从来都不是明确的,这是一个罕见的情况。这实际上意味着,甚至是在可以使用分析型反射模型(并可能可以更快的求值的)情况下,我们的方法也是让人感到有趣的。图6展示了一个粗糙的玻璃(η=1.5,α=0.3),它使用了Walter et al. [2007] 的解析式和采样方法,以及这一节我们展示的方法来渲染。在积分上使用了拟蒙特卡洛方法,尤其是scrambled Halton point来进行渲染。

解析采样技术只对模型的其中一个因子(微面元的分布)进行采样并依赖于从微面元法向量到出射方向的转换,这扭曲了Halton点的等价分布。相比较之下,我们的技术能够在整个出射方向的球上对BSDF所有的项进行采样。

6.3 谐波外插

我们发现对于有着光滑或者粗糙边界的散射和吸收电介质板这一特定的例子,其最终得到的BSDF对于方位角的相关性可以被由圆上的一个均匀的和一个wrapped高斯分布混合创建的简单的3参数函数族很好的近似,例如

其中Σ,β,σ2都是常数。对于这样的例子,我们的框架支持被我们称为谐波插值的方法,从而在预处理和渲染过程获得额外的性能。

这个方法就是让计算出来的散射矩阵的傅里叶模式和(30)的模式相等并对参数Σ,β,σ2求解。扰民鸡皮。傅里叶系数可以被抛弃,取而代之,式(30)会被使用。既然这个方法从前三个谐波来外插整个行为,那算法1可以在m=2后停止,这显著减少了预计算的时间。

图7:Gu et al. [2007] 提供了一个测量的表面污染物的数据库。我们使用他们的光学厚度图中的一个来渲染由于与盐水接触而带有干燥沉积物的一个光亮的铬合金立方体。注意盐是如何阻挡地面上部分的caustic。

7. 结果

我们在Mitsuba渲染器上用C++实现了这个技术,对于稀疏线性代数计算其依赖于Eigen库。BSDF采样和求值使用Intel的AVX指令集来开采指令集并行。为了求解增加方程(3.1节)稀疏线性系统,我们使用了supernodal LU 分解[Li 2005]。

为了确保我们系统的正确性,我们照例执行验证测试——这包括通过与参考数据进行比较从而检查散射模型投射到方向基中是否精确,参考数据包括索引相同的各向同性和各向异性厚板的角度反射数据([van de Hulst 1980]的表12和表13)以及有电介质分界面的各向同性半空间的反射率值[William 2006]。最后,我们也比较了使用明确的层结构的蒙特卡洛渲染(比较在补充材料中)。在所有的用例中,我们的验证显示了极好的一致性,通常在4个有效数字上与辐射传输文献中的参考数据相匹配。

我们现在展示用我们系统产生的一系列的结果。报告的预计算和渲染时间是针对有16个物理核(32个超线程)的Intel Xeon E5-2660机器的。

内部:图1画出了一组由我们的模型产生的分层材料。对应的层结构在边上显示,而关于处理时间和存储需求的详细的统计数据在表2中呈现。木质的厨房柜台的材料是有着纹理映射反射率的覆盖有涂层的漫射表面,而为了获取材料在反射率上的非线性相关性,我们在容许的参数范围[0,1]上使用了4个BRDF参数。在预计算之后,被路径追踪的图像的分辨率为1800×1800,为了解决物体间光亮的内部反射,每个像素使用了2048个样本,渲染使用了1个小时23分钟。

污染物图:图7显示了在日光照射下渲染的带有盐水沉积物的一个光亮的铬合金立方体。我们将其建模为带有折射率相同的各向异性层(g=0.7)的光亮的铬合金基(α=0.03,其中各向异性层的光学厚度被Gu et al. [2007]的污染物图纹理化。为了获取σt的非线性相关性,我们在参数范围上预计算了6个BRDF样本。相比于密集版本4.3GiB的存储空间,离散化值n=158且展开式阶m=2540的组合BRDF需要21.6MiBde 的存储空间,其计算需要13.7秒。使用有64个突变(mutations)/像素的Manifold Exploration MLT[Jacob 2013]进行渲染需要3分54秒。

表面 vs. 体渲染:在我们的框架中,两类传播运算——表面和体——以基本不同的方式对入射光起作用。单独分析它们的行为是有益的。图8比较了透射穿过具有粗糙表面的层和透射穿过具有光滑表面但有内部体散射的层不同的清晰度损失。粗化玻璃板的两面导致了背景场景的均匀模糊透射,而具有光滑平面的玻璃板内的前向峰值(forward-peaked)体散射导致了更加朦胧的外观。各种各样的运算的任意组合产生了构建BSDFs的一个非常灵活的系统。

这里写图片描述
表2:图1中各物体的离散化值,(展开式的阶?),预处理时间,存储需求以及非零系数百分比。

这里写图片描述
图8:将由表面粗糙度带来的清晰度的视觉损失和一层内体散射所带来的损失进行比较:最上面一行((a)-(d))展示了光透射过两面有相同粗糙度的电介质板。底下两行展示了用HG散射(这可能对于有气窝或者其他内含物的材料是适合的)模拟的具有体瑕疵(volumetric imperfection)的折射率相同的板。随着厚度和各向异性发生改变,各种不同的外观也显现了出来((e)-(l))。粗糙的电介质散射产生了一个模糊的效果,而体散射引起了一个朦胧的透射信号。
粗糙散射(Asperity Scattering)和漫射材料:在一个基质材料中增加一个体散射层能被用于粗糙散射[Koenderink and Pont 2003],这对于仿真表面上薄薄的灰尘或者纤维是有用的。我们在图9中通过在一个黑色基层上可视化了各种粗糙层接着仿真了金色雕塑上的灰尘来说明这一点。注意这些渲染类似于Pharr and Hanrahan[2000],他们的非线性散射方程提供了另一种方式来求解层间的交互。然而,他们的方法并没有推导出显式的反射模型:在渲染过程中,分层材料的每一次交互都触发了各层上的嵌套的蒙特卡洛积分。我们的系统是首个考虑了粗糙层和底层之间的所有阶的内部反射并包含了粗糙层内多次散射而不要求在渲染时在各层上进行代价高昂的积分的系统。

这里写图片描述
图9:顶部:在黑色表面上使用了体散射的粗糙散射。比较了各种各样的厚度\tao和HG相函数(均值余弦为g)。在所有用例中,单次散射反射率略微有点偏橙。因为更多的散射事件被要求散射与g=0.9相似量的光,所以结果更加的饱和。底部:对一个粗糙金色雕塑运用各种各样的灰色HG(g=0.9)灰尘的厚度。

这里写图片描述
图10:通过结合体散射层和朗伯漫反射,各式各样的漫反射模型都是可能的。注意在(c)和(d)中的体模型与(a)和(b)中的传统漫反射BRDFs模型之间不同的轮廓和整体上微妙的外观差异。(c)和(d)中的参数的选择使得它们在垂直光照下产生相同的反射率。

体散射层产生了各种各样的新的漫反射BRDFs,它们补充了标准的分析式模型。图10比较了朗伯BRDF和Oran-Nayar BRDF与有各向同性或者前向峰值(forward-peaked) Henyey-Greenstein散射的体散射材料。各向同性散射材料(c)的使用产生了一个布满灰尘的外观,这被在一个90%的朗伯反射上叠加一层g=0.8,\tao=5的HG散射层给减弱了。体散射渲染的速度减慢不超过30%,而BSDFs可以被压缩存储在3.5KiB的空间中。

近似分层BRDFs:Weidlich and Wilkie [2007]的模型支持有各向异性分界面的可纹理化的渲染材料但是并没有考虑层间所有阶的内部反射。这在简单的组合中引起了错误的反射率,例如在朗伯反射面上一个平滑的电介质分界面。图11比较了折射率为1.5的这样的一个模型的总的反射率,让其作为底层朗伯表面的漫反射kd的一个函数。由于内部的散射,总的反射能量与kd有一个非线性的相关性。Weidlich and Wilkie的模型放弃了这样的内部反射光路径,并使用了一个启发式尺度因子来补偿了最终的能量损失。然而,无论是否使用启发式,各层的非线性行为都没有被捕捉到。这个方法的另外一个限制是它不能准确地仿真多个粗糙边界的交互,这要求在内部反射路径上完整的积分。

对测量数据的拟合:图13展示了搪瓷的浅蓝色层的透射和反射测量。黑点指定了光源180°扫描材料沿着材料法向量方向记录的辐射亮度(图的左半边是透射)。我们在我们的框架中重复这一光照和视点几何设置,并自动搜索与观察数据最匹配的一层。通过固定折射率和粗糙度(两个都近似已知),一个包括反射率,光学深度和各向异性的三参数模型族保持不变。搜索找到的拟合用蓝色展示,其与数据有很好的一致性。

可视化分层设计工具:为了方便分层来组合材料并渲染它们,我们建立了一个可视化工具,在图12中展示。补充材料中的视频包含一个使用这个工具的交互式材料编辑会话的屏幕录影。

这里写图片描述
图11:具有不同kd的朗伯漫反射面上的一个η=1.5的光滑电介质的反射能量的比较。最近的一个近似模型(虚线)提出在kd和总的反射间线性的关系,这种线性关系并不见诸于考虑了所有阶的内部反射的明确的解。

这里写图片描述
图12:我们开发了一个交互式的可视化设计工具来探索分层BRDF模型的空间。补充材料中的视频展示了使用它的一个编辑会话。

这里写图片描述
图13:我们的方法能够被用于为测量材料确定合适的散射参数:这里我们用我们的方法拟合用于珠宝设计的浅蓝色的珐琅的1mm层的透射和反射测量。这个电介质有已知的折射率并且非常的光滑,要被探索的只有一个包含的反射率,光学厚度和各向异性的三参数模型族。一个自动的搜索找到这个拟合,图中用蓝色曲线显示,它与数据有很好的的一致性(从左到右:RGB,顶部:辐射亮度,底部:对数辐射亮度)。

这里写图片描述
图14:左边:一个花朵艺术品的照片,它是通过用金子浇铸一个3D打印石蜡模型并手工用景泰蓝镀膜生产出来的。花瓣使用的是图13测量的相同的釉质。右边:使用我们的框架的渲染。细节请参考补充材料。

8. 总结

对于渲染分层材料我们展示了一个新的框架。我们的系统允许任意已知的分析的或者测量的各向同性的BRDFs的任意分层组合并产生新的能量守恒的,具有互逆性的,具有相应的重要性采样方案的BSDFs。层内的所有内部反射都以相同的精确度进行计算,它们被用于整个场景的基本光照传播。对于实践中编辑复杂场景以及允许以接近于与物理组成相关联的方式设计分层材料,这允许无缝的细节级别的转换,这对于快速编辑异质的或者空间变换的材料是有用的,对于预测渲染也是必须的。将光滑的和粗糙的分界面体散射层结合起来产生了各种各样新的分层BSDFs,包括漫反射表面和粗糙散射层的有表现力的泛化。我们已经阐述了我们方法的实用性,它非常重要地依赖于一些新奇的方法,包括以稳定的方式处理粗糙的表面和散射事件,一个在粗糙分界面上保持能量守恒的新的方法,以及用于压缩BSDFs的存储空间和加速其计算的稀疏方法和外插技术。对于大量的参数,甚至是扩展到具有窄峰的反射函数,我们的系统都保持了实用性,但是不能表示完美的镜面和理想光滑的玻璃,它们是在方向上的狄拉克脉冲函数。最后,对于这些情况解析解是存在的,它们像我们这样的数值方法要将更加可取。

  1. 致谢

  2. 参考文献

0 0
原创粉丝点击