一、BRDF(Bidirectional Reflectance Distribution Function)双向反射分布函数
基于https://blog.csdn.net/Master_Cui/article/details/119787704中的内容,就可以基于辐射度量学理解反射
先看下图中法线的右侧,符合照度(Irradiance)模型,表示单位面积上接受到了能量
再看法线的左侧,符合radiance模型,表示将单位面积上,沿着单位立体角将能量辐射出去
![](https://img-blog.csdnimg.cn/20210824204314327.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_29,color_FFFFFF,t_70,g_se,x_16)
所以,反射就可以理解为:根据镜面反射或者漫反射方式的不同,将某个单位面积上接收到的能量dE以dL的方式辐射出去
但是这里的问题在于:入射方向的能量有多少被辐射出去了呢?为了表示这个比例,brdf出现了,brdf的表示如下图所示
![](https://img-blog.csdnimg.cn/20210824204314389.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_31,color_FFFFFF,t_70,g_se,x_16)
这个比例,取决于物体表面的材质,所以,brdf的决定因素就是物体表面的材质
借助于brdf和对单个点的反射情况的分析,就可以认为,反射是单位面积上,所有方向的能量被吸收后,再向外辐射的过程
所有方向在数学上的表示就是对单位立体角进行积分(累加),因此,反射方程可以写成如下形式
![](https://img-blog.csdnimg.cn/20210824204314360.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_28,color_FFFFFF,t_70,g_se,x_16)
上述方程的物理意义就是单位面积所有方向接收到的能量乘上一个比例因子(brdf)后,向外辐射了多少radiance
二、渲染方程
渲染方程就是在反射方程的基础上加了一个自放光项的radiance
![](https://img-blog.csdnimg.cn/20210824204314335.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_32,color_FFFFFF,t_70,g_se,x_16)
三、渲染方程的理解
当只有一个入射光时
![](https://img-blog.csdnimg.cn/20210824204314317.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_29,color_FFFFFF,t_70,g_se,x_16)
当有多个入射光时
![](https://img-blog.csdnimg.cn/20210824204314331.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_31,color_FFFFFF,t_70,g_se,x_16)
当存在面光源时,可以把面光源看成无数个点光源,因此,渲染方程写成如下形式
![](https://img-blog.csdnimg.cn/20210824204434633.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_16,color_FFFFFF,t_70,g_se,x_16)
当空间中存在其他物体时,也可以将物体视为光源,因为物体会将反射的光照射到单位面积上,在下图中,只有等式两侧的radiance是未知的
![](https://img-blog.csdnimg.cn/20210824204314355.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_30,color_FFFFFF,t_70,g_se,x_16)
因此,可以将上式写成
![](https://img-blog.csdnimg.cn/20210824204314394.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_29,color_FFFFFF,t_70,g_se,x_16)
将上式再次写成矩阵的形式为
![](https://img-blog.csdnimg.cn/20210824204314280.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_27,color_FFFFFF,t_70,g_se,x_16)
再对矩阵形式进行变换
![](https://img-blog.csdnimg.cn/20210824204314272.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_23,color_FFFFFF,t_70,g_se,x_16)
得出反射结果可以进行如下表示
![](https://img-blog.csdnimg.cn/20210824204314370.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_22,color_FFFFFF,t_70,g_se,x_16)
可见,光线追踪得到的渲染结果,不仅包含了光栅化的渲染,更包含了间接反射的渲染,所以,光线追踪得到的渲染效果是全局光照(直接光照+间接光照)
光栅化只是光线追踪的近似
下图是一次反射和四次反射的光线追踪渲染效果图
![](https://img-blog.csdnimg.cn/20210824204314711.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_33,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/20210824204314691.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_Q1NETiBATWFzdGVyIEN1aQ==,size_30,color_FFFFFF,t_70,g_se,x_16)
参考
GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili
欢迎大家评论交流,作者水平有限,如有错误,欢迎指出