| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 图形 2.4 传统经验光照模型详解(PBR光照计算公式介绍) -> 正文阅读 |
|
[人工智能]图形 2.4 传统经验光照模型详解(PBR光照计算公式介绍) |
参考视频: 作业1.能量守恒在光照模型中的作用 微表面理论微表面理论认为任何平面都是由极小的“微平面组成” 粗糙度越大镜面反射范围越大,更暗;越小反射范围越小,越亮 微平面理论说明光线在交界点处会在多个方向上产生反射和折射光。 菲涅尔反射想象观察一个湖面,远看(入射角大)树的倒影(反射)很清晰,近看(入射角小)湖面下的鱼(折射)清晰。可见随着入射角增大(从近到远看),光的反射率单调上升,折射率单调下降。更容易看到物体表面上其他物体的倒影而很难看到物体内部的情况 菲涅尔公式则描述了一束光经过两个介质交界面分裂成反射光和折射光时,反射光与折射光占原光线的比例。(图中可正可负的意思是正负号与如何定义光线的正方向有关) 对于自然光,s波和p波的能量相等,因此自然光的反射率
R
n
=
1
2
(
R
s
2
+
R
p
2
)
=
1
2
[
s
i
n
2
(
θ
1
?
θ
2
)
s
i
n
2
(
θ
1
+
θ
2
)
+
t
a
n
2
(
θ
1
?
θ
2
)
t
a
n
2
(
θ
1
+
θ
2
)
]
R_n=\frac{1}{2}(R_s^2+R_p^2)=\frac{1}{2}[\frac{sin^2(θ_1-θ_2)}{sin^2(θ_1+θ_2)}+\frac{tan^2(θ_1-θ_2)}{tan^2(θ_1+θ_2)}]
Rn?=21?(Rs2?+Rp2?)=21?[sin2(θ1?+θ2?)sin2(θ1??θ2?)?+tan2(θ1?+θ2?)tan2(θ1??θ2?)?] 1.金属 2.非金属(也被称为电介质) ·菲涅尔反射率与波长无关,因此F0只用一个值(一般取0.04)就能表示 也许有人就会产生疑惑:根据微平面理论,直接反射光方向是多种多样的,那为什么这部分光不算漫反射而算镜面反射呢? reflectance equation反射比方程/渲染方程该方程是目前模拟光的视觉效果的最佳模型,具体如下 p:辐射功率。指单位时间内辐射源所发射的总辐射能 ω:ωi表示入射光线(l) ,ω0表示出射光线(v),注意等号右边要积分的微元指的是立体角 dω:立体角,是站在某一点的观察者测量到的物体大小的尺度 L:辐射亮度(radiance),简称辐亮度。指面辐射源在单位时间内通过垂直面元法线方向n上单位面积、单位立体角上辐射出的能量,即辐射源在单位投影面积上、单位立体角内的辐射通量 Φ:辐射通量。指单位时间内通过某一截面的辐射能 E:辐射照度(Irradiance),简称辐照度。指接收物体的单位表面积上接收到的辐射功率 下图直观地展示了这些物理量的区别和联系 了解了这些字母的含义之后我们再回看渲染方程 ·ωi表示入射光线光线方向l),w0表示出射光线(特指视线方向v) 1.diffuse BRDF(漫反射)漫反射的计算方法大体分为两种,基于经验(如Lambert(朗伯/兰伯特))和基于物理。1.Lambert diffuse
f
l
a
m
b
e
r
t
=
C
d
i
f
f
u
s
e
π
f_{lambert}=\frac{C_{diffuse}}{π}
flambert?=πCdiffuse?? 2.Disney diffuse 2. specular BRDF(镜面反射)目前业界广泛采用的基于微表面理论的Microfacet Cook-Torrance BRDF模型,公式如下(l:表面指向光源方向,v:表面指向视线方向,h:半角向量(微平面法线),n:微元法线): (推导见[彻底看懂PBR/BRDF方程-知乎 7.镜面反射的BRDF如何推导?])(https://zhuanlan.zhihu.com/p/158025828) 可以看到该公式由分子的三个符号和分母的一个归一化因子组成,其中分子的DFG各代表微平面表面特性的一个近似描述的函数 D:Normal distribution function(NDF)法线分布函数法线分布函数表示法线与半角向量方向相同的点微平面占微元的比例 其他NDF模型(m是微平面法线,这里指半角向量h) F:Fresnel equation菲涅尔方程菲涅尔方程表示反射到视线方向上的光占入射光的比例,菲涅尔方程是一个相当复杂的方程,一般我们用Fresnel-Schlick近似表达菲涅尔反射率F G:Geometry function几何函数(阴影遮罩函数)之前讲微平面理论的时候提到过只有法线等于h的微平面才对brdf做出贡献,但是法线等于h的微平面中可能会有一部分发出的反射光被其他微平面给阻挡, 而 几何函数就是描述法线等于h且未被遮蔽的微平面占微元的百分比。1.Schlick-GGX模型 2.Cook-Torrance模型 将漫反射与镜面反射合并Cook-torrance模型提供了一种方案(据learnopengl所述) 其中 ωi表示入射光向量(l),ω0表示出射光向量(v),kd是漫反射系数,ks是镜面反射系数(菲涅尔反射率),kd=1-ks(考虑到能量守恒。kd和ks表示入射光照射到物体表面微元后分配给漫反射和镜面反射的比例) 总结:直接光照就是上面的反射率公式,对于物体表面上的一个微元。给定微元法线正向的半球上所有的入射光的功率,我们可以得到物体在接收入射光后最终在视线方向上发出的光的功率。 环境光除了直接光以外我们还需要环境光(来自环境其他物体的光,默认等同于间接光),在传统经验光照模型中我们用一个常数来代替,在PBR中我们用反射率方程更精确地描述环境光对物体的影响(环境光与直接光很大的区别是,直接光方向是确定的,而环境光方向是来自四面八方其他物体的反射光的) 了解环境光照的表示形式后我们再来看环境光影响物体的表达式 环境光的反射率方程与直接光照的一样 环境光-漫反射对于漫反射部分,将常数移到外面,得到如下形式:
创建一个cube,将上述顶点着色器应用于该cube,则cube的6个面就是辐照度环境立方体贴图的6个面 ·2.球谐函数SH(球谐函数还没看懂,这里给出一些参考资料) ·3.球形高斯SG 环境光-镜面反射镜面反射部分如下: 预过滤环境贴图跟辐照图贴图类似,是预先卷积计算过的环境贴图,但预过滤环境贴图考虑到了粗糙度(roughness)的影响。为了体现不同的粗糙度级别,环境贴图会使用更为分散的入射光向量(也叫采样向量)计算卷积以产生更模糊的镜面反射,我们将不同粗糙度的计算结果存入mipmap的不同级别中,如下图所示 生成预过滤环境贴图(重点:如何选择采样向量?): 了解上面这些概念之后,我们再来看下面这幅图 下面是ue中预过滤环境贴图的代码(R是镜面反射向量) 代码中Hammersley函数是生成随机数序列的一种方法,可以得到在[0,1]之间均匀分布的随机数序列(生成点在采样空间分布的均匀程度称作差异度Discrepancy,Hammersley属于低差异度序列),下面给出具体实现代码:(来自learn opengl)
重要性采样的函数如下(Phi:φ,H:将球面坐标转换为笛卡尔坐标系): 2.环境镜面反射BRDF 这个卷积要求我们同时考虑到入射角(n·ω0),表面粗糙度(影响fr中G和D项)和菲涅尔系数F0(与入射光矢量ω0),对3个变量卷积实在复杂,但是我们可以对方程做点变换,先试着将F项移出方程
这里解释一下float G_Vis = (G * VdotH) / (NdotH * NdotV) 是怎么来的 别忘了之前在介绍直接光G项的时候提到过,K值与粗糙度α的关系,因此这里用IBL的方式计算环境光的时候,k=(α^2)/2 将环境光漫反射与镜面反射相加得到完整的环境光,这里可以乘上一个系数AO来模拟物体之间挨的很近时环境光很弱产生的阴影(AO具体怎么计算本文不做过多叙述,可以参考网上其他资料,这里给出一个我觉觉得讲的挺好的:游戏中的全局光照(三) 环境光遮蔽/AO) 最终将直接光与环境光相加得到完整的光照模型 考虑次表面散射的BSSRDF(待补充)参考资料:游戏中的次表面散射/Subsurface Scattering 2.手写一个基于能量守恒的光照 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 15:54:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |