物理渲染学习笔记(三)——Cook-Torrance微表面模型

本文从Phong到GGX,梳理了多种光照模型,并介绍了Microfacet模型的原理及其在Cook-Torrance模型中的应用,同时对比了Blinn-Phong、GGX等模型的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从 Phong 到 GGX, 光照模型林林总总,一直没能找机会梳理一遍, 这几天依次都自己实现了一遍,也正好总结下。

Microfacet

普通的着色模型假设着色的区域是一个平滑的表面,表面的方向可以用一个单一的法线向量来定义来定义。而 Microfacet 模型则认为 :

1、着色的区域是一个有无数比入射光线覆盖范围更小的微小表面组成的粗糙区域。

2、所有这些微小表
面都是光滑镜面反射的表面。因为这种模型认为着色区域的表面是由无数方向不同的小表面组成的,所以在 Microfacet 模型中,着色区域并不能用一个法线向量来表示表面的方向,只能用一个概率分布函数D来计算任意方向的微小表面在着色区域中存在的概率。


其中最常用的 Microfacet 是 Cook-Torrance

f(l,v)=D(h)F(v,h)G(l,v,h)4(nh)(nv)

概括性的解释大佬的专栏说的很到位,我这里就直接引用了

因为每一个微小表面都做完美镜面反射,上一节提到过完美镜面反射只在入射光和反射光根据发现镜面反射对称的时候才有能量,所以在计算微小表面的BRDF值时,只用先根据入射方向w_{o} 和出射方向w_{i}计算出中间向量w_{m}也就是微小表面的法线方向,然后用就可以用法线分布函数计算出这个能够完美镜面反射当前入射和出射光D(w_{m})。同样因为是完美镜面反射的缘故,Cook Torrance模型的另一个因素就是菲涅尔(Fresnel)项F(w_{o}, w_{m}),这个项和上一节镜面反射BRDF中通到的一样,用于计算不同入射角度的情况下反射的光线的强度,对于导体和电介材质记得使用不同的Fresnel公式。最后,为了更好的模拟着色区域的凹凸不平,G(w_{o}, w_{i}, w_{m})项则模拟了凹凸表面间的遮挡因素

通常菲涅尔项我们使用Schlick的近似,即:

Fschlick(v,h)=cspec+(1cspec)(1(vh)5)

很多BRDF都可以表达为这个框架下D或G的组合


Blinn-Phong:

D=e+22π(nh)n

G=(nl)(nv)


Cook-Torrance:
法线分布函数通常采用 Beckmann distribution ,即:

D=exp(tan2(α)/m2)πm2cos4(α),α=arccos(nh)

其中m表示材质的粗糙度
G=min(1,2(hn)(vn)vn,2(hn)(ln)vn)

在Unity中实现效果如下:


GGX

D=α2π((nm)2(α21)+1)2

G部分毕竟复杂,可参考 论文原文在Unity中实现效果如下(并不是太理想 :(, 跟大佬光追渲染的ip6一比简直一坨翔)


这里写图片描述

GGX参数分析效果比较


(两种各向异性模型都只是简单了过了一遍实现,还没有详细去分析其每一项)

Heidrich–Seidel anisotropic distribution

论文提供了一种基于Phong模型的各向异性法线分布,高光部分公式如下:

kspec=(1(LT)21(LT)2(LT)(LT))s

其主要思想为将单独针对表面上的每一条划痕(或发丝)去做光照分析,通过切线和光线方向在法平面重新计算法线方向,在Unity中实现效果如下:


Ward anisotropic distribution

论文
提供了 αx αy 两个参数来控制各向异性的方向,当两个参数相等的时候,及表示各向同性,高光部分公式如下:

kspec=ρs(nl)(nv)nl4παxαyexp[2(hXαx)2+(hYαy)21+(hn)]

其中X,Y表示切线空间的X,Y轴(也可以自己用其他的), ρs 则控制高光的总量,在Unity中实现效果如下:


这里写图片描述


to be continue……or not

为了在高级物理渲染中精确计算光照的菲涅尔效应,推荐深入学习《深入理解BRDF模型物理着色与Cook-Torrance公式解析》一书。该书详细解析了Cook-Torrance BRDF模型,并且特别强调了菲涅尔效应在真实感渲染中的作用。 参考资源链接:[深入理解BRDF模型物理着色与Cook-Torrance公式解析](https://wenku.youkuaiyun.com/doc/3iavy0jhzq?spm=1055.2569.3001.10343)Cook-Torrance模型中,菲涅尔效应是决定反射光强度的一个关键因素,它与观察角度和材料的折射率紧密相关。计算菲涅尔效应,通常使用菲涅尔方程,它描述了光线在不同入射角度下的反射和透射比例。对于非导电材料,菲涅尔方程可以简化为Schlick近似,这样可以大大减少计算量而不牺牲太多准确性。 具体的计算步骤包括: 1. 根据入射光和表面法线的夹角计算Fresnel项; 2. 利用Schlick近似公式将折射率转换为反射率; 3. 将Fresnel项乘以镜面反射系数来计算最终的镜面反射光强度; 4. 将计算得到的反射光强度应用到BRDF模型中,以模拟更真实的光照效果。 在实际的计算机图形学项目中,应用Cook-Torrance BRDF模型时,可以通过上述步骤计算出在不同观察角度下材料的反射特性,并结合几何阴影因子和法线分布函数来实现更加复杂和逼真的渲染效果。通过这种方式,开发者能够在物理渲染引擎中加入更加真实的光与物质相互作用的模拟,从而达到接近自然光照效果的渲染目标。 如果想要更深入地理解和掌握这些高级渲染技术,推荐阅读《深入理解BRDF模型物理着色与Cook-Torrance公式解析》,该资料不仅涵盖了菲涅尔效应的计算方法,还提供了对整体光照模型的全面理解和案例分析,有助于开发者在计算机图形学领域不断进步。 参考资源链接:[深入理解BRDF模型物理着色与Cook-Torrance公式解析](https://wenku.youkuaiyun.com/doc/3iavy0jhzq?spm=1055.2569.3001.10343)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值