参考博文【《Real-Time Rendering 3rd》 提炼总结】(六) 第七章 · 高级着色:BRDF及相关技术,部分参考计算机图形学 读书笔记(二) BRDF双向反射分布函数
这一章物理和数学概念比较多,作者原博整理的很好,这里我就不多赘述了,这篇主要记录读后感和关于BRDF比较基础的内容以及我的理解。
详情参照原博客
BRDF(双向反射分布函数)用于描述反射光与入射光的关系,即为给定入射的光线数量和方向,计算出指定方向的出射光亮度:
反 射 光 强 度 = 入 射 光 强 度 × B R D F 反射光强度 = 入射光强度 \times BRDF 反射光强度=入射光强度×BRDF
BRDF的精确定义是出射辐射率的微分和入射辐照度的微分之比:
f ( l , v ) = d L o ( v ) d E ( l ) f(l,v)=\frac{dL_o(v)}{dE(l)} f(l,v)=dE(l)dLo(v)
其中, l l l表示入射光方向, v v v表示出射方向。
辐射通量:每单位时间的辐射能量
辐射率:每单位立体角每单位投影面积的辐射通量
辐照度:入射表面的辐射通量
公式意义:由于照射到入射点的不同方向的光都可能从指定反射方向出射,因此考虑入射时需要对面积进行积分,而辐照度表示单位时间内到达单位面积的辐射通量刚好满足。出射的辐射率可以简单明了地描述入射光线经过表面反射后如何在各个出射方向上分布。
适用于点光源或方向光源。
f ( l , v ) = L o ( v ) E ( l ) c o s ‾ θ i f(l,v)=\frac {L_o(v)} {E(l)\overline {cos}\theta_i} f(l,v)=E(l)cosθiLo(v)
其中, E ( l ) E(l) E(l)是光源在垂直于光的方向向量 L L L平面测量的辐照度。 L o ( v ) L_o(v) Lo(v)是在视图矢量 v v v方向上产生的出射辐射率。
那么,用n个非区域光拟合一般的着色方程:
L o ( v ) = ∑ k = 1 n f ( l k , v ) ⨂ E l k c o s θ i k L_o(v)=\sum_{k=1}^nf(l_k,v)\bigotimes E_{l_k}cos\theta_{i_k} Lo(v)=k=1∑nf(lk,v)⨂Elkcosθik
其中, k k k是每个光源的索引, ⨂ \bigotimes ⨂表示分段向量乘法。
源自于亥姆霍兹光路可逆性(Helmholtz Recoprpcity Rule)。交换入射光和反射光,并不会改变BRDF的值。
入射光的总能量与出射光总能量相等。
表面上某一点的全部反射辐射度可以表示为各个BRDF反射辐射度之和。
特点:不考虑材质特性,仅提供反射光的粗糙近似;提供简洁的公式实现反射光线的快速计算;不一定满足物理定律。
常见的经验模型:
应用:参照实时渲染学习(三)图形渲染与视觉外观中着色方程的环境分类、漫反射分量和镜面反射分量计算。
度量较大的BRDF材质集合,并将其记录为高维向量,利用降维的方法从这些数据中计算出一个低维模型,这样基于查表的方式,可以直接找到渲染结果,省去大量的实时计算。但是,没有可供调整效果的参数,无法基于这些数据修改成想要的效果。
用数学建模的方式模拟物体表面各种材质散射光线的属性从而渲染照片真实图片的技术。基于物理的BRDF要必须满足至少如下两条BRDF的特性:能量守恒、亥姆霍兹光路可逆性。
常见的基于物理的模型有:
当光线半透明的物体时,光线一部分被反射、一部分被吸收,还有一部分经历投射。次表面散射,Subsurface Scattering,简称SSS(3S),是指光射入表面,在材质里散射,然后从与射入点不同的地方射出表面的现象。
菲涅尔方程,用于描述光在两种不同折射率的介质中传播时的反射和折射的光学方程。
菲涅尔反射指,当光入射到折射率不同的两个材质的分界面时,一部分光会被反射,而我们所看到的光线会根据我们的观察角度以不同强度反射的现象。
简单来说,视线垂直于表面时,反射较弱,而当视线并非垂直表面时,夹角越小,反射越明显。因此,影响菲涅尔反射的关键参数在于每个微平面的 法 向 量 \color{red}{法向量} 法向量和 入 射 光 线 的 角 度 \color{red}{入射光线的角度} 入射光线的角度。
微表面理论假设表面是由不同方向的微小细节表面,也就是微平面(microfacets)组成。每一个微小的平面都会根据它的法线方向在一个方向上反射光线。
法线分布函数(Normal Distribution Function,简写为NDF), D ( h ) D(h) D(h)来描述组成表面一点的所有微表面的法线分布概率。即向NDF输入一个朝向 h h h,NDF会返回朝向是 h h h的微表面数占微表面总数的比例,比如有8%的微表面朝向是 h h h,那么就有8%的微表面可能将光线反射到 v v v方向。
NDF函数:
D ( h ) = α 2 π ( ( n ⋅ h ) 2 ( α 2 − 1 ) + 1 ) 2 D(h)=\frac {\alpha^2} {\pi((n \cdot h)^2(\alpha ^2 - 1)+1)^2} D(h)=π((n⋅h)2(α2−1)+1)2α2
BSSRDF(Bidirectional scattering-surface reflectance distribution function,双向表面散反射分布函数)。BSSRDF描述了射出辐射率与入射通量之间的关系,BRDF是BSSRDF的近似。考虑了物体表面不一致的情况,因为随着位置的变化,反射系数也会发生变化。
一个捕获基于空间位置BRDF变化的函数被称为空间变化的BRDF(Spatially Varying BRDF ,SVBRDF)或称空间BRDF,空间双向反射分布函数(Spatial BRDF ,SBRDF)。
为了处理光线传播的问题,对物体表面定义了两个BRDF和两个BTDF(T表示传播“Transmittance”),每侧各有一个,这样就组成了BSDF(S表示散射“Scattering”)。
之前看图形学的数看到BRDF都直接跳过了,虽然知道很重要但是觉得看起来很负责很麻烦,今天通过本专栏的学习对BRDF有了一个浅显且大概的认识,收获很多。