赞
踩
这篇文章是我实现IBL过程中初略数学推导笔记,如有错误在此先谢过聚聚们的指出。另外为了不影响阅读,部分用到的数学原理以及推导放在了附录。在此感谢U聚 @Ubp.a 和鸭聚 @膜力鸭苏蛙可 无私奉献。
基于兰伯特的漫反射项可以表示为:
注意
因此写成
最后式子变成了:
此时右边的积分表示的物理意义是单位立方体上任意一点为终点,从中心点出发的方向向量作为法向量
也可以将
所以有
使用蒙特卡洛方法后原方程变换如下:
Diffuse的CubeMap预积分图:
镜面项的反射方程可以表示为:
可以看到不同于漫反射只有法向量一个维度,如果直接使用蒙特卡洛积分运算量过大且需要实时更新,所以先将积分变换为:
根据附录推导可以知道:
根据法线分布函数的性质
将
为了继续化简,近似认为
那么约去点乘式子变为:
根据附录的使用Smith shadowing-masking approximation可知:
那么有:
近似变换
可以看到
近似到最后的式子中:
最后得到:
我们就可以预计算得到一张CubeMap直接使用。
prefilter enviroment map就是要计算出给定粗糙度的
接着在Trowbridge-Reitz GGX上通过概率密度函数
根据概率密度函数求边缘密度函数
所以得到:
记
最后得出采样过后的
预计算的
搞定了
使用蒙特卡洛积分将
用R通道与G通道存储scale与bias值,计算出来的就是对应BRDF的LUT。
最后附上代码地址与效果(图片中只有平行光的效果比较差):
只考虑各向同性的反射方程:
BRDF函数定义:在材质表面某一点上出射辐射度(Radiance)和入射辐照度(Irradiance)的比值,其关系如下
[11]对于连续随机变量
对于任意的
记
Cook-Torrance的BRDF函数定义如下:
若将
因为Cook-Torrance模型的
注意一个误区是认为漫反射是许多微小表面不平的反射现象,但那是高中物理的解释。实际上在Cook-Torrance模型中微表面反射的情况已经被考虑到镜面反射中了,而漫反射考虑的是光线散射过程中的再次返回到入射表面的透射部分。如下图中的蓝色部分:
所以将aldebo 除 PI,将[0,1]映射到
关于下面常数的粗略推导如下: 假设为完全镜面反射,即所有能量都经过镜面反射,有
在单位球上,
综合上式可以得到:
代入到积分项中:
所以得到:
F是描述反射和透射与入射角的关系,一般只需要描述反射的部分。Schlick's approximation模型如下:
因为我们只考虑出射角度在
另外在游戏中为了统一金属与非金属材质,会对
将非金属的系数设置为
最后我使用的是UE的加速版本:
D是描述微表面的法线分布关系的函数,但需要注意其并不是一个概率密度函数,定义如下:
上式可以理解为面上每个法线h被投影到法线为n的平面,总面积记为1。且对上式最后的宏观表面投影在垂直视线方向的平面上:
得到如下关系:
这里使用UE的版本-Trowbridge-Reitz GGX:
G是描述微表面的几何遮蔽与几何阴影的关系,物理意义是光线被表面遮挡后所剩下的量。所以值范围在0-1。使用Smith shadowing-masking approximation假设入射遮挡与出射遮挡是不相关的,所以有:
Unreal使用的Schlick GGX近似模型表示为表示为:
对于IBL,
对于解析光源将粗糙度重新映射到
所以有:
参考全局光照技术,近年来引擎已经考虑入射遮挡和出射遮挡的相关性:
其中有:
这也是寒霜的材质做法[10]。
将Equirectangular Map转CubeMap,也就是UV映射到球面的
因为我相机的front方向为
采样出来得到的CubeMap:
因为在输出PNG时将值clamp到了
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。