Unity 的预计算实时 GI 或者烘焙 GI 只对静态的物体起作用,对于可移动的物体,需要用一种新的技术来解决光照问题。
为了让动态物体(如动态场景元素或角色)能够获得静态物体反弹的光线,需要将这些光照信息记录下来,并且在运行时能快速读取和使用。
通过在场景中放置采样点捕捉各个方向的光线来实现动态物体接收间接光的功能。这些采样点记录的光照信息被编码成可以在游戏过程中快速计算值。在 Unity 中,我们将这些采样点称为“光照探针”
- 让动态物体从场景接受间接光
- 使用该技术的动态物体不会产生反射光 => 使用于较小的物体
工作原理
通过 3D 空间中的 Probe 对入射光进行采样并将这些信息通过球谐函数编码处理后保存成文件。使用球谐波来有效地表示辐照度环境贴图,从而允许在远距离照明下对漫反射物体进行交互式渲染
球谐函数
一系列定义在球面上的基函数,单位球面上的一个点实际上就能代表一个方向。
三维空间中的方向可以使用二位表示 => $ \theta $ 和 $ \phi $ 方位角和俯仰角
eg.经纬度
SH 系数 => 只记录基函数系数
如
可以只记参数,压缩为
使用球谐波来有效地表示辐照度环境贴图,从而允许在远距离照明下对漫反射物体进行交互式渲染
球谐函数参考资料
- 球谐光照与 PRT 学习笔记(三):球谐函数 - 知乎 (zhihu.com)
- 球谐函数学习笔记 - 知乎 (zhihu.com)
- Spherical Harmonic – from Wolfram MathWorld
- 大二学生都会的球谐函数 - 知乎 (zhihu.com)
BRDF 『双向反射分布函数』
它描述的是物体表面将光能从任何一个入射方向反射到任何一个视点方向的反射特性,即入射光线经过某个表面反射后如何在各个出射方向上分布。
- 交换率:交换律要求当交换 和 的值后,BRDF 的值不变。
- 能量守恒:能量守恒则要求表面反射的能量不能超过入射的光能。
PRT
把场景物体间复杂的光线交互进行预计算和综合
Unity 中的 LightProbes
存储数据: 1. Probe Position 2. SH 系数 3. 四面体曲面细分