其他分享
首页 > 其他分享> > RTR4笔记--PBR

RTR4笔记--PBR

作者:互联网

这只是笔记,有很多理解和翻译错误的,请谨慎参考

文章目录

1 Physics of Light

基本概念

可见光波长400~700 nm

能量

辐射度

定义

在这里插入图片描述

符号 定义 说明
l\vec ll 光源方向
v\vec vv 视线反方向
p\vec pp 片元点
n\vec nn 法线
clightc_{light}clight​ 光源的颜色
lc\vec l_clc​ 光源原点
ri\vec r_iri​ 反射光线 与法线夹角θi\theta_iθi​

关键角度

符号 定义 说明
θ\thetaθ 光线与法线夹角

Azimuth angles ϕi\phi_iϕi​ and ϕ0\phi_0ϕ0​are given with respect to a given tangent
vector t\vec tt. The relative azimuth angle ϕ\phiϕ, used for isotropic BRDFs instead of ϕi\phi_iϕi​ and ϕ0\phi_0ϕ0​, does not require a reference tangent vector.

Particles

介质

IOR n

原始波和新波的速度比

让波速减少的介质有衰减系数k(kappa)

Surface

折射

sin(θt)sin(θi)=n1n2\frac{\sin(\theta_t)}{\sin(\theta_i)}=\frac{n_1}{n_2}sin(θi​)sin(θt​)​=n2​n1​​

微表面

Subsurface Scattering

次表面散射

BRDF

Li(c,v)=L0(p,v)L_i(\vec c,-\vec v)=L_0(\vec p,\vec v) Li​(c,−v)=L0​(p​,v)

c\vec cc 指camera pos

v\vec vv 指点到摄像机的射线

p\vec p p​ 指片元点,也就是view ray与surface的焦点(intersection)

2 Camera

4 BRDF(bidirectional reflectance distribution function)

f(l,v)f(\vec l,\vec v)f(l,v)

S(V)BRDF

考虑折射率方程

L0(p,v)=lΩf(l,v)Li(p,l)(nl)dlL_0(\vec p,\vec v) = \int_{\vec l \in \Omega}f(\vec l,\vec v)L_i(\vec p,\vec l)(\vec n \cdot \vec l)d\vec lL0​(p​,v)=∫l∈Ω​f(l,v)Li​(p​,l)(n⋅l)dl

lΩ\vec l \in \Omegal∈Ω

对于点ppp,起折射率为

L0(v)=lΩf(l,v)Li(l)(nl)dlL_0(\vec v) =\int_{\vec l \in \Omega}f(\vec l,\vec v)L_i(\vec l)(\vec n \cdot \vec l)d\vec lL0​(v)=∫l∈Ω​f(l,v)Li​(l)(n⋅l)dl

在球坐标下,通常用角度ϕ\phiϕ 、θ\thetaθ来描述

dld\vec ldl = sin(θi)dθidϕi\sin(\theta_i)d\theta_id\phi_isin(θi​)dθi​dϕi​

nl\vec n \cdot \vec ln⋅l = cosθi\cos\theta_icosθi​

于是有

L0(θ0,ϕ0)=ϕi=02πθi=0π2f(θi,ϕi,θ0,ϕ0)L(θi,ϕi)cosθisinθidθidϕiL_0(\theta_0,\phi_0)=\int_{\phi_i=0}^{2\pi}\int_{\theta_i=0}^{\frac{\pi}{2}}f(\theta_i,\phi_i,\theta_0,\phi_0)L(\theta_i,\phi_i)\cos\theta_i\sin\theta_id\theta_id\phi_iL0​(θ0​,ϕ0​)=∫ϕi​=02π​∫θi​=02π​​f(θi​,ϕi​,θ0​,ϕ0​)L(θi​,ϕi​)cosθi​sinθi​dθi​dϕi​

θi\theta_iθi​

ϕi\phi_iϕi​

θ0\theta_0θ0​

ϕ0\phi_0ϕ0​

BRDF只定义了view和light位于surface上方的情况

意味着nl\vec n\cdot\vec ln⋅l需要calmp(0,)

为了避免除0,通常用abs(nl\vec n\cdot\vec ln⋅l)*0.00001

BRDF原则

  1. 互异性:f(l,v)=f(v,l)f(\vec l,\vec v)=f(\vec v,\vec l)f(l,v)=f(v,l)
  2. 能量守恒:输出能量<=输入能量

directional-hemispherical reflectance R(l)R(\vec l)R(l)

描述BRDF能量损失程度,也就是surface的粗糙度roughenss

R(l)=vΩf(l,v)(nv)dvR(\vec l)=\int_{\vec v \in \Omega}f(\vec l,\vec v)(\vec n\cdot\vec v)d\vec vR(l)=∫v∈Ω​f(l,v)(n⋅v)dv [0,1]\in[0,1]∈[0,1]

放射方程中的v\vec vvl\vec ll 是整个半球的。。

类似的

R(v)=lΩf(l,v)(nv)dlR(\vec v)=\int_{\vec l \in \Omega}f(\vec l,\vec v)(\vec n\cdot\vec v)d\vec lR(v)=∫l∈Ω​f(l,v)(n⋅v)dl

Lambertian BRDF

最简单的BRDF是Lambertian

其中nl\vec n\cdot\vec ln⋅l 项简化了

real-time rending常用

$f(\vec l,\vec v)是一个常数

R(l)=πf(l,v)R(\vec l)=\pi f(\vec l,\vec v)R(l)=πf(l,v)

漫反射(constant relfectance) diffuse color cdiffc_{diff}cdiff​ 或者albedo ρ\rhoρ,次表面subsurface albedo ρss\rho_ssρs​s

f(l,v)=ρssπf(\vec l,\vec v)=\frac{\rho_{ss}}{\pi}f(l,v)=πρss​​

其中1π\frac{1}{\pi}π1​时由于半球上积分余弦因子产生

在这里插入图片描述

这里抽象一个模型,假设入射光恒定

输出为:diffuse,specular lobe,

1上为Lambertian BRDF(简单球形)

2.上为Blinn-Phong highlighting+Lambertian term

3.上为Cook-Torrance BRDF

1.下a close-up of Ward’s anisotropic model。tilt the specular lobe

2.下Hapke/Lommel -Seeliger "Lunnar surface " BRDF

3.下Lommel-Seeliger scattering

5 Illumination

Li(l)L_i(\vec l)Li​(l) term 描述反射方程在shaded surface point的光

Global illumination(GI)通过光在整个场景的弹射等效果计算Li(l)L_i(\vec l)Li​(l),这种策略将反射考虑进来了。

这一节,描述的时local illumination,也就是假设一直Li(l)L_i(\vec l)Li​(l),计算每个点使用GI时该如何计算光照。

真实场景,Li(l)L_i(\vec l)Li​(l)计算了所有方向的来自光源或表面反射的非0辐射,真实世界的光为area lights。本节讨论的时虚拟的方向光或精确坐标的光源

将方向光的影响极限趋近为0时,可以积分方程可以简化为单个计算更少的BRDF方程

L0(v)=πf(lc,v)clight(nlc)L_0(\vec v)=\pi f(\vec l_c,\vec v)c_{light}(\vec n\cdot\vec l_c)L0​(v)=πf(lc​,v)clight​(n⋅lc​)

为了确保背面的光不被计算进来,(n,l)(\vec n,\vec l)(n,l)需要clamped to 0

L0(v)=πf(lc,v)clight(nlc)+L_0(\vec v)=\pi f(\vec l_c,\vec v)c_{light}(\vec n\cdot\vec l_c)^+L0​(v)=πf(lc​,v)clight​(n⋅lc​)+

对于n个光源

L0(v)=πi=1nf(lci,v)clighti(nlci)+L_0(\vec v)=\pi \sum_{i=1}^n f(\vec l_{c_i},\vec v)c_{light_i}(\vec n \cdot \vec l_{c_i})^+L0​(v)=π∑i=1n​f(lci​​,v)clighti​​(n⋅lci​​)+

其中lci\vec l_{c_i}lci​​为光源方向,clightic_{light_i}clighti​​为光源颜色

其中π\piπ因子被BRDFs中出现的1π\frac{1}{\pi}π1​抵消,但公式、论文中不能简化。

6 Fresnel Reflectance

物体的表面由其周围的介质和substance组成。光源在两个介质间相互作用遵守Fresnel equations(Augustin-Jean Fresnel).

菲涅尔对surface有几何假设:表面不含有光波波长的1~100倍的不规则

光与与表面作用后分成两部分:反射、折射

在这里插入图片描述

反射光用ri\vec r_iri​表示,它与n\vec nn夹角为θi\vec \theta_iθi​,根据入射光线l\vec lln\vec nn可以计算的到

ri=2(nl)nl\vec r_i = 2(\vec n\cdot \vec l)\vec n - \vec lri​=2(n⋅l)n−l

反射的量由Fresnel reflectance F描述,该变量由θi\theta_iθi​决定

F(θi)F(\theta_i)F(θi​) 当做RGB处理,规则

  • θi=0o\theta_i = 0^oθi​=0o,也就是光线垂直入射时,有F0F_0F0​,也被认为是该物质的镜面反射颜色,也叫垂直入射
  • 随着θi\theta_iθi​上升,F(θi)F(\theta_i)F(θi​)也上升,当θi=90o\theta_i = 90^oθi​=90o,F(θi)=1F(\theta_i) = 1F(θi​)=1 (白色)
  • 上升的曲线由物质决定,

在这里插入图片描述
上图依次为:玻璃、铜、铝的Fresnel reflectance.可以看到,不同波长的光的曲线不同,不同物质相同波长的曲线不同。波长由可以找到对应光颜色,也就是不同颜色的光的反射结果不同。玻璃这种物质的F与光颜色无光。

在这里插入图片描述

我们使用F(n,l)F(\vec n,\vec l)F(n,l)而不用θi\theta_iθi​,Fresnel function时BRDF的一部分。

F0F_0F0​由物质决定,在rough工作流,常简化

FFF项计算方法(Schlick):

F(n,l)F0+(1F0)(1(nl)+)5F(\vec n,\vec l)\approx F_0+(1-F_0)(1-(\vec n\cdot\vec l)^+)^5F(n,l)≈F0​+(1−F0​)(1−(n⋅l)+)5

这个公式时白色和F0F_0F0​的非线性差值结果。

另一种计算的方案(Gulbrandsen),不能用来实时计算。这个曲线更拟合金属的Fresnel equations。

对于Schlick,F0F_0F0​只是一个参数,下面的方程介绍了如何通过两种介质的折射率计算F0F_0F0​,这里用n代替了n2n_2n2​,这里n1=1n_1=1n1​=1(空气环境下)

F0=(n1n+1)2F_0={(\frac{n-1}{n+1})}^2F0​=(n+1n−1​)2

该值转化为RGB颜色的公式在8.1.3介绍颜色空间时提及

软件中常用公式为

F(n,l)F0+(F90F0)(1(nl)+)1pF(\vec n,\vec l) \approx F_0 + (F_{90} - F_0)(1-(\vec n\cdot\vec l)^+)^{\frac{1}{p}}F(n,l)≈F0​+(F90​−F0​)(1−(n⋅l)+)p1​

设置F90F_{90}F90​为非白色可以描述Fresnel 方程无法描述的物质,比如覆盖物质上的灰尘

常见物质的F0F_0F0​

主要分三类:绝缘体(insulators),半导体(semiconductor),导体(conductor)

Dielectrics 的F0F_0F0​很低,通常<=0.06,菲涅尔效果明显

对于未知物质通常使用0.04

Dielectric Linear Texture(sRGB) Color Notes
Water 0.02 39
Living tissue 0.02-0.04 39-56 Watery tissues are toward the lower bound, dry ones are higher
Skin 0.028 47
Eyes 0.025 44 Dry cornea (tears have a similar
value to water)
Hair 0.046 61
Teeth 0.058 68
Fabric 0.04-0.056 53-67 Polyester highest, most others under 0.05
Stone 0.035-0.056 53-67 Values for the minerals most often found in stone
Plastics, glass 0.04-0.05 56-63 Not including crystal glass
Crystal glass 0.05-0.07 63-75
Gems 0.05-0.08 63-80 Not including diamonds and diamond simulants
Diamond-like 0.13-0.2 101-124 Diamonds and diamond simulants(e.g., cubic zirconia, moissanite)
金属的菲涅尔反射

在这里插入图片描述

金属的F0F_0F0​很大,通常高于0.5

半导体的菲涅尔反射

在这里插入图片描述

介于导体和绝缘体之间,范围为[0.2,0.45]

水的菲涅尔反射

之前讨论的菲涅尔反射全是基于空气的,真空或者液体环境下值是不一样的,也就是不能假设n1=1n_1 = 1n1​=1了,此时我们需要使用如下公式计算F0F_0F0​

F0=(n1n2n1+n2)2F_0=(\frac{n_1-n_2}{n_1+n_2})^2F0​=(n1​+n2​n1​−n2​​)2

通常n1̸=1n_1\not= 1n1​̸​=1是水下场景。也有可能是其他情况,比如雾

在这里插入图片描述

参数化Fresnel Values

常用的参数化时将F0F_0F0​和diffuse color ρss\rho_{ss}ρss​合并,这种方法能是的金属这类无diffuse color和电解质具有一组受限的F0F_0F0​.它包含一个RGB颜色CsurfC_{surf}Csurf​和一个标量m–metallic/metalness

  • 如果m=1m=1m=1,F0F_0F0​为csurfc_{surf}csurf​,$\rho_{ss}是black;
  • 如果m=0m=0m=0,F0F_0F0​为电解质值(是一个常量(0.04)或被额外参数控制的值),csurff=ρssc_{surff} = \rho_{ss}csurff​=ρss​

"metalness"最早被Brown University使用,电影WallEWall-EWall−E.迪士尼动画电影WreckItWreck-ItWreck−It中的DisneyprincipledDisney principledDisneyprincipled光照模型中使用了一个额外的变量"specular"来控制F0F_0F0​,这个参数化方法被Unreal Engine和Frostbite engine使用来描述非电解质的范围较广的F0F_0F0​.游戏CallofDuty:InfiniteWarfareCall of Duty:Infinite WarfareCallofDuty:InfiniteWarfare使用压缩算法将两个值压缩为一个值,节省内存。OverwatchOverwatchOverwatch也是用了一种压缩算法:

mixed.rg为图片使用通道

metallic=saturate(2mixed.r1)2;metallic = saturate(2*mixed.r-1)^2;metallic=saturate(2∗mixed.r−1)2;

diffuse=albedo.rgb(1metallic);diffuse = albedo.rgb*(1-metallic);diffuse=albedo.rgb∗(1−metallic);

F0=saturate(mixed.r0.25)F_0=saturate(mixed.r-0.25)F0​=saturate(mixed.r−0.25)

F0=F00.06+0.02F_0=F_0*0.06+0.02F0​=F0​∗0.06+0.02

specular=lerp(F0,albedo,metallic)specular=lerp(F_0,albedo,metallic)specular=lerp(F0​,albedo,metallic)

onemiusref=(1metallic)(1F0)onemiusref=(1-metallic)*(1-F_0)onemiusref=(1−metallic)∗(1−F0​)

多数实时渲染引擎使用metalness值而不直接使用F0F_0F0​和ρss\rho_{ss}ρss​是出于使用方便和节省G-buffer.在游戏Call of Duty: Infinite Warfare中,美术绘制F0F_0F0​和ρss\rho_{ss}ρss​的纹理,再通过压缩算法存储到一个同道中。

metalness工作流有几个缺点:它不能描述有些种类的材质,比如具有着色F0F_0F0​的电镀金属。美术可以手动调整得到中间值。

另一个被实时渲染引擎使用的参数化技巧:除了特种抗折射涂层,没有一个材质的F0F_0F0​时小于0.02的。这个技巧用来高亮边缘。这里没有使用额外的occ纹理,而是将小于0.02部分用来“关闭”菲涅尔边缘增强。这项技术被Schuler发明,用于UE和Frostbite engiens.

Internal Reflection

次表面反射

n1&gt;n2n_1&gt;n_2n1​>n2​会发生次表面反射

在这里插入图片描述

次表面只有绝缘体会有,

sinθc=n2n1=1F01+F0\sin_{\theta_c}=\frac{n_2}{n_1}=\frac{1-\sqrt F_0}{1+\sqrt F_0}sinθc​​=n1​n2​​=1+F​0​1−F​0​​

在这里插入图片描述

Microgeometry

在这里插入图片描述

关于法线

7 Microfacet Theory

微表面理论

micro-BRDF $f_u(\vec l,\vec v,\vec m) $ 混合了所有微表面的反射光

在这里插入图片描述

左侧,我们看到积分项D(m)(nm)D(\vec m)(\vec n\cdot \vec m)D(m)(n⋅m),

右侧,积分项D(m)(vm)D(\vec m)(\vec v\cdot \vec m)D(m)(v⋅m),cos(θo)=(vn)\cos(\theta_o)=(\vec v\cdot\vec n)cos(θo​)=(v⋅n)

称为*normal distribution function * or NDF,使用符号D(m)D(\vec m)D(m)表示,也称为D项,微表面法线的贡献,更有用的时积分D(m)(nm)D(\vec m)(\vec n\cdot\vec m)D(m)(n⋅m),Θ\ThetaΘ表示对以n\vec nn为中心的整个球面积分

mΘD(m)(nm)dm=1\int_{m\in \Theta}D(\vec m)(\vec n\cdot\vec m)d\vec m = 1∫m∈Θ​D(m)(n⋅m)dm=1

如果对以n\vec nn为中心的半球进行积分使用符号Ω\OmegaΩ表示

在经验表明,heightfields,所有位于Ω\OmegaΩ外的m\vec mmD(m)=0D(\vec m)=0D(m)=0,但non-heightfields它是合法的

更通用的,从任何视线方向,微表面在视线垂直方向的投影都满足如下公式

mΘD(m)(vm)dm=vn\int_{m\in\Theta}D(\vec m)(\vec v\cdot\vec m)d\vec m=\vec v\cdot\vec n∫m∈Θ​D(m)(v⋅m)dm=v⋅n

在这里插入图片描述

注意\cdot⋅没有clamp(0,1),右侧展示了原因.

渲染时,我们只考虑可见的微表面,可见微表面的投影面积之和等于宏观表面投影面积,这里提出新的一项G项,masking function G1(m,v)G_1(\vec m,\vec v)G1​(m,v)来描述微表面的法线m\vec mm和视线v\vec vv的可见性,此时积分项为球面的G1(m,v)D(m)(vm)+G_1(\vec m,\vec v)D(\vec m)(\vec v\cdot\vec m)^+G1​(m,v)D(m)(v⋅m)+:

ΘG1(m,v)D(m)(vm)+dm=vm\int_\Theta G_1(\vec m,\vec v)D(\vec m)(\vec v\cdot\vec m)^+d\vec m=\vec v\cdot\vec m∫Θ​G1​(m,v)D(m)(v⋅m)+dm=v⋅m

G1(m,v)D(m)G_1(\vec m,\vec v)D(\vec m)G1​(m,v)D(m)时可见的normals的贡献,

Smith G1G_1G1​ function:

G1(m,v)=χ+(m)v1+Λ(v)G_1(\vec m,\vec v)=\frac{\chi^+(\vec m)\cdot\vec v}{1+\Lambda(\vec v)}G1​(m,v)=1+Λ(v)χ+(m)⋅v

χ+(x)=\chi^+(x)= χ+(x)=$
\left {
\begin{array}{c}
1,where x < 0\
0,where x \leq 0
\end{array}
\right.
$

Λ\LambdaΛ函数对每个NDF都不同,Smith masking目前是最好的一个G项函数,但并不是完美的,也就是还有更好的解决策略,但目前渲染器都用的它。

考虑了微表面法线的贡献后的micro-BRDF fμ(l,v,m)f_\mu(\vec l,\vec v,\vec m)fμ​(l,v,m),normal贡献D(m)D(\vec m)D(m),mask函数G1(m,v)G_1(\vec m,\vec v)G1​(m,v)后新的微表面BRDF为:

f(l,v)=mΩfμ(l,v,m)G2(l,v,m)D(m)(ml)+nl(mv)+nvdmf(\vec l,\vec v)=\int_{m\in\Omega}f_\mu(\vec l,\vec v,\vec m)G_2(\vec l,\vec v,\vec m)D(\vec m)\frac{(\vec m\cdot\vec l)^+}{|\vec n\cdot \vec l|}\frac{(\vec m\cdot\vec v)^+}{|\vec n\cdot\vec v|}d\vec mf(l,v)=∫m∈Ω​fμ​(l,v,m)G2​(l,v,m)D(m)∣n⋅l∣(m⋅l)+​∣n⋅v∣(m⋅v)+​dm

这里是对半球积分

这里使用joint masking-shadowing function G2(l,v,m)G_2(\vec l,\vec v,\vec m)G2​(l,v,m)而不是用G1(m,v)G_1(\vec m,\vec v)G1​(m,v),该方程式G1G_1G1​的扩展,给出了根据从view vector v\vec vv和light vector l\vec ll可见的normal m\vec mm的微表面微分。使得BRDF能够masking,也能shadowing.和所有BRDFs一样,都有一个太暗的缺点。

Heitz讨论了一些G2G_2G2​的方程,最简单的是G2(l,v,m)=G1(v,m)G1(l,m)G_2(\vec l,\vec v,\vec m)=G_1(\vec v,\vec m)G_1(\vec l,\vec m)G2​(l,v,m)=G1​(v,m)G1​(l,m),这里假设masking和shadowing是无关联的。事实上,不是。这会导致过暗。当光线和视线方向一致时,应该有G1G_1G1​=G2G_2G2​,但是该方法仍然是G2=G12G_2=G_1^2G2​=G12​,假定ϕ\phiϕ为v,l\vec v ,\vec lv,l之间的角度,G2(l,v,m)G_2(\vec l,\vec v,\vec m)G2​(l,v,m)=min(G1(v,m),G1(l,m))\min(G_1(\vec v,\vec m),G_1(\vec l,\vec m))min(G1​(v,m),G1​(l,m)),这种条件下,对任何G1G_1G1​有:

G2(l,v,m)=λ(ϕ)G1(v,m)G1(l,m)+(1λ(ϕ))min(G1(v,m),G1(l,m))G_2(\vec l,\vec v,\vec m)=\lambda(\phi)G_1(\vec v,\vec m)G_1(\vec l,\vec m)+(1-\lambda(\phi))\min(G_1(\vec v,\vec m),G_1(\vec l,\vec m))G2​(l,v,m)=λ(ϕ)G1​(v,m)G1​(l,m)+(1−λ(ϕ))min(G1​(v,m),G1​(l,m))
其中λ(ϕ)=1e7.3ϕ2[0,1]ϕ\lambda(\phi)=1-e^{-7.3\phi^2} \in [0,1] \propto \phiλ(ϕ)=1−e−7.3ϕ2∈[0,1]∝ϕ

另一个λ\lambdaλ函数λ(ϕ)=4.41ϕ4.41ϕ+1\lambda(\phi)=\frac{4.41\phi}{4.41\phi+1}λ(ϕ)=4.41ϕ+14.41ϕ​

考虑光线和视线的相关性,Smith height-correlated masking-shadowing function:

G2(l,v,m)=χ+(mv)χ+(ml)1+Λ(v)+Λ(l)G_2(\vec l,\vec v,\vec m)=\frac{\chi^+(\vec m\cdot\vec v)\chi^+(\vec m\cdot\vec l)}{1+\Lambda(\vec v)+\Lambda(\vec l)}G2​(l,v,m)=1+Λ(v)+Λ(l)χ+(m⋅v)χ+(m⋅l)​

Heitz也提出了一个混合direction和height的相关性的函数:

G2(l,v,m)=χ+(mv)χ+(ml)1+max(Λ(v),Λ(l))+λ(v,l)min(Λ(v),Λ(l))G_2(\vec l,\vec v,\vec m)=\frac{\chi^+(\vec m\cdot\vec v)\chi^+(\vec m\cdot\vec l)}{1+max(\Lambda(\vec v),\Lambda(\vec l))+\lambda(\vec v,\vec l)\min(\Lambda(\vec v),\Lambda(\vec l))}G2​(l,v,m)=1+max(Λ(v),Λ(l))+λ(v,l)min(Λ(v),Λ(l))χ+(m⋅v)χ+(m⋅l)​

8 BRDF Models for Surface Reflection

specular term

这里假设微表面perfectly mooth fresnel mirror。这意味着,除非l\vec ll平行于v\vec vvfμ(l,v,m)==0f_\mu(\vec l,\vec v,\vec m) == 0fμ​(l,v,m)==0

新增变量*half vector *h=l+vl+v\vec h = \frac{\vec l+\vec v}{||\vec l+\vec v||}h=∣∣l+v∣∣l+v

在这里插入图片描述

对于specular微表面模型,对于所有mh\vec m \neq \vec hm̸​=h,菲涅尔项为0,

fspec(l,v)=F(h,l)G2(l,v,h)D(h)4nlnvf_{spec}(\vec l,\vec v)=\frac{F(\vec h,\vec l)G_2(\vec l,\vec v,\vec h)D(\vec h)}{4|\vec n\cdot\vec l||\vec n\cdot\vec v|}fspec​(l,v)=4∣n⋅l∣∣n⋅v∣F(h,l)G2​(l,v,h)D(h)​

normal distribution functions(D项)

NDF

大多数渲染器用的NDF都是isotropic(各向同性),此时,NCF只是一个宏观法线n\vec nn和微表面法线m\vec mm之间的夹角θm\theta_mθm​的函数,理想情况下,可使用cos(θm)\cos(\theta_m)cos(θm​)简单计算。

Beckmann NDF最早被使用,它也被Cook-Torrance BRDF选用:

D(m)=χ+(nm)παb2(nm)4exp((nm)21αb2(nm)2)D(\vec m)=\frac{\chi^+(\vec n\cdot\vec m)}{\pi \alpha_b^2(\vec n\cdot m)^4}\exp(\frac{(\vec n\cdot\vec m)^2-1}{\alpha_b^2(\vec n\cdot\vec m)^2})D(m)=παb2​(n⋅m)4χ+(n⋅m)​exp(αb2​(n⋅m)2(n⋅m)2−1​)

其中χ+(nm)\chi^+(\vec n\cdot\vec m)χ+(n⋅m)确保背面贡献为0,另外值得注意的是这里有个1π\frac{1}{\pi}π1​在完整的BRDF中可以被约掉.如所有的NDFs一样,它描述了一个heightfield微表面.αb\alpha_bαb​控制roughness,它与微表面的均方根成正比(RMS),当αb=0\alpha_b=0αb​=0时,微表面绝对平滑.

当将Smith G2G_2G2​函数引入Beckmann NDF,需要相应的Λ\LambdaΛ函数.Beckmann NDF是shape-invariant(形状不变的),可以简化Λ\LambdaΛ函数,这种NDFs形式如下:

D(m)=χ+(nm)alpha2(nm)4g((1(nm)2)α(nm))D(\vec m)=\frac {\chi^+(\vec n\cdot \vec m)}{alpha^2(\vec n\cdot\vec m)^4}g(\frac{\sqrt{(1-(\vec n\cdot \vec m)^2)}}{\alpha(\vec n\cdot\vec m)})D(m)=alpha2(n⋅m)4χ+(n⋅m)​g(α(n⋅m)(1−(n⋅m)2)​​)

ggg是任意变量函数.对于各向同性的NDF,Λ\LambdaΛ依赖于两个变量:其一为roughness α\alphaα;其二为向量(v\vec vv or l\vec ll)的入射角。但对于shape-invariant NDF,Λ\LambdaΛ函数只依赖于变量aaa:

a=nsα1(ns)2a=\frac{\vec n\cdot\vec s}{\alpha\sqrt{1-(\vec n\cdot\vec s)^2}}a=α1−(n⋅s)2​n⋅s

其中s\vec ss代指v\vec vvl\vec ll.事实上,仅依赖于一个变量的Λ\LambdaΛ实现是合适的.单变量函数更容易你和曲线,能用一维数组表示.

Beckmann NDF的Λ\LambdaΛ:Λ(α)=erf(α)12+12α(π)exp(α2)\Lambda(\alpha)=\frac{erf(\alpha)-1}{2}+\frac{1}{2\alpha\sqrt(\pi)}\exp(-\alpha^2)Λ(α)=2erf(α)−1​+2α(​π)1​exp(−α2)

其中erferferf为错误处理函数,所以有待评价.作为近似解决:

Λ(α)\Lambda(\alpha)Λ(α)={11.259α+0.396α23.535α+2.181α2,α&lt;1.60,α1.6\begin{cases} \frac{1-1.259\alpha+0.396\alpha^2}{3.535\alpha+2.181\alpha^2}, \alpha &lt; 1.6\\ 0,\alpha \leq 1.6\\ \end{cases}{3.535α+2.181α21−1.259α+0.396α2​,α<1.60,α≤1.6​

另一个NDF是Blinn-Phong NDF.是过去常用的,现在移动端常用,该NDF是对Phong shading model的推广.

D(m)=χ+(nm)αp+22π(nm)αpD(\vec m)=\chi^+(\vec n\cdot\vec m)\frac{\alpha_p+2}{2\pi}(\vec n\cdot\vec m)^{\alpha_p}D(m)=χ+(n⋅m)2παp​+2​(n⋅m)αp​

其中the power αp\alpha_pαp​是Phong NDF中的roughness变量,越大约光滑,[0,\infty∞]

9 BRDF Model for Subsurface Scattering

10 BRDF Models for Cloth

11 Wave Optics BRDF Models

12 Layered Materials

13 Blending And Filtering Materials

标签:frac,G1,PBR,cdot,BRDF,RTR4,笔记,vec,theta
来源: https://blog.csdn.net/gqkly/article/details/88086865