PBR学习

PBR学习

https://learnopengl-cn.github.io/07%20PBR/01%20Theory/

请结合所给参考链接中的图示进行学习,我主要对参考链接中的资料翻译和理解,为了方便理解另外查阅了一些资料,但都过于零散我也没记住有哪些。
能用文字说清楚的地方我并没有给出图示,但显然图示更易于理解。

PBR满足的三个基本条件

  1. 基于微平面的表面模型
  2. 能量守恒
  3. 基于物理的BRDF(存在不基于物理的BRDF,后续会详解)

先解释这三个条件

微平面模型

在微观尺度下,没有任何一个平面是完全光滑的。把一个表面看成方向各不相同的微小的镜面的组成。粗糙的表面上微平面的排布就更加混乱,当光线照射时,反射方向会发散开来,而光滑的表面微平面排布会更有序,反射方向会更倾向于向一个方向。

粗糙度

在说明“粗糙度”这个量之前,我们先看一下我们是如何衡量粗糙程度这个人的直观感受的。当我们计算一个点的镜面反射时,我们会用到该点到视线方向 v v 的向量和该点到光照方向的向量 l ,我们先求出两个向量的中间向量(介于两个向量正中间的向量) h=l+v||l+v|| h = l + v | | l + v | | ,如果中间向量和表面法向量一致的话,证明镜面反射光是直射到人眼的,两个向量相差越大,则反射光越弱。
粗糙程度表现就是对于越粗糙的物体,总体的镜面反射越弱,对于越光滑的物体,镜面反射越强。而前面提到,所有的平面都是由许多微平面组成,我们无法具体到每个微平面方向,但是我们可以估计所有微平面方向和中间向量一致的概率,而估计这个概率用到的参数,就是粗糙度。
拿一个球举例,假设该球非常光滑,即对于球上的每个微平面,其法向量等于该微平面的位置与球心位置的差。那么对于球的不同的地方,微平面方向和中间向量一致的概率就是不同的,准确的说只有一个微平面和中间向量一致,其余都或多或少有区别(这时还没有引入粗糙度)。也就是说,此时球面上只有非常小的一个区域,它满足中间向量和表面法向量一致这个条件,也就是该点最亮,其他地方都是黑的。
Alt text
而当我们引入了粗糙度,我们将微平面的方向逐渐打乱,在原先最亮的位置,由于并不是所有的微平面方向都一致,那么势必该点亮度会有所下降,而其他地方由于也有可能存在方向满足条件的微平面,其他部分亮度会有所上升。
Alt text

能量守恒

出射方向能量永远不能超过入射光线的能量。(微平面近似法显然满足这个条件,显然上面的一切说理都未添加新的能量)随着粗糙度上升,镜面反射区域会增加(一些本来没有变量的区域因为部分微平面方向和中间向量一致而有了镜面反射),但是亮度会变暗(一些本来变量的区域因为部分微平面方向和中间向量变得不一致而反射减弱)。
为了遵循能量守恒定律,我们需要对漫反射光和镜面反射光作区分。当一束光线碰撞到表面的时候,一部分反射(我们前面一直在说的镜面反射),另一部分折射。
折射指的是光线进入物体表面被吸收。实际上是光线与物体表面微粒不断碰撞导致能量消耗的过程,在这个过程中,一部分能量被完全吸收(能量消耗完毕),另一部分幸运儿在能量消耗完毕之前会从表面的另一个位置离开表面,并参与构成了表面的漫反射。在次表面散射中会模拟计算这一个折射过程,因为对于玉石,皮肤,牛奶这样的结构,它表面的散射不仅和光线入射点的位置相关,还跟内部的结构有关,所以需要跟踪折射的过程(当然是模拟啦)。
对于次表面散射来说,有两个基本的问题。一是折射会有能量损失,二是入射点和出射点并不在同一个位置,我大概以后会单独介绍次表面散射,现在回到基本的PBR。在PBR中,实际上我们并没有完全按照折射的原理进行光线跟踪计算,我们通常以为折射的所有光线能量都完全被吸收(但是漫反射依旧是需要模拟出来的)。
而对于金属表面来说,所有的折射光是真的会被吸收而不会散开,所以金属表面是真的不会显示出漫反射颜色的。
根据能量守恒的关系,首先计算出镜面反射部分,等于入射光线被反射的能量所占的百分比,折射光部分可以用1减去这个百分比。就能确保能量总和永远不会超过入射光线的能量。

反射率方程

PBR遵循的是反射率方程的一个特化版本,我们先从最初的反射率方程开始学习。
需要涉及到辐射度量学的内容(用物理量度量辐射(光线能量)的学问(一种我很难理解但是死记下来后好像就是那么一回事的学问))

辐射率

辐射通量: 表示的是光源所输出的能量(单位时间穿过截面的光能),单位是瓦特。光线的能量跟其波长有关,所有的光都是由不同波长(颜色)的光线组合而成,所以根据不同波长光线的比重和其对应的能量,就可以求出该光源输出的能量。
数学一点,就是光源所放射出来的能量可以被视作这个光源所包含的各种波长的一个函数,对于白光(日光),不同波长所具备的能量如下:(横坐标是波长,纵坐标是能量)
Alt text
所以如果我们想求白光的辐射通量,就是求彩色部分的面积,也就是那个函数的积分。但我们通常并不这样求(因为我们并不能给计算机输入这个函数,即输入每一个波长对应的能量),我们一般用RGB三个颜色进行编码(是不是档次一下子就掉下去了?)。
立体角: Alt text
立体角用

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值