【光照】光照探针
本文目录 9 个章节
【光照】光照探针
创建时间:2021/6/1 11:18
Instroduction
背景:预计算实时GI或者烘焙照明只对静态的物体起作用
Light Probes provide a way to capture and use information about light that is passing through the empty space in your scene.
lightmaps store lighting information about light hitting the surfaces in your scene light probes store information about light passing through empty space in your scene.
为了让动态物体(如交互式场景元素或角色)能够获得静态物体反弹的光线,需要将这些光照信息记录下来,并且在运行时能快速读取和使用。
Light Probes are positions in the scene where the light is measured (probed) during the bake. At runtime, the indirect light that hits dynamic GameObjects is approximated using the values from the nearest Light Probes to that object.
基础知识
球的坐标
拉普拉斯方程
讲的很好的文章:https://zhuanlan.zhihu.com/p/350388376
球谐函数
实现原理
探测照明通过3D空间中的探头对入射光进行采样并将这些信息通过 球谐函数 编码处理后保存成文件。这些信息占用的存储空间很少并且在运行时解码非常快。场景中的Shader可以使用这些信息来模拟物体表面的光照。
详细的原理:https://docs.unity3d.com/Manual/LightProbes-TechnicalInformation.html
实践应用
劣势:在一定的计算量下,探测照明很难表现变化复杂的照明效果。但是如果增加模拟精度,计算代价也会随之增高。基于性能的考虑,Unity限制了计算的精度。另外一个,由于一个3D位置只用了一个球来进行模拟,在大模型以及较平的模型表面上的光照效果可能会不太好。 适用性:探测照明在小的、凸状的物体上有很好的效果,同时性能很好。
经验
非静态物体根据距离最近的探头来接收光照。 光照探头会将整个空间划分成一个个四面体,一个物体最终从哪个探头读取光照数据这个物体最终落在哪一个四面体中确定的。为了能够形成这些四面体,探头在摆放时必须形成三维的立体形状或者笼子的形状(不能只在一个平面上摆放,在Y轴至少要放置两层)。
以整齐的密集网格排列会减少摆放时的工作量,但是这样会造成很多探头的浪费,因为很多探头在相近的位置接收到的光照都类似,在相似的光照位置,只需要一个或几个探头就足够了。
为了提高探头的效率,应该在光照变化比较大的地方多放置探头,在光照变化不大的地方少放探头。比如应该在从明亮到阴影的过渡位置多放探头,在反射光较强烈的表面多放置探头,在大的平面上少放探头。
接近地面的区域可以多放置一些,空中可以少放置一些
在放置探头时,记住检查最底端的探头是否高于地面(在地面以下可能会造成地面上的物体光照信息错误)。
在GI烘焙中,大量的小物体会增加非常多的计算量,但是这些小物体反射的光基本上对场景没有影响。所以如果能将这些小物体排除在外,只接收间接光,不反射光,可以将预计算的时间减少很多。这也是光照探头针对GI的一个优化点。
Ref
https://zhuanlan.zhihu.com/p/38550884 http://www.ppsloan.org/publications/StupidSH36.pdf http://cseweb.ucsd.edu/~ravir/papers/envmap/envmap.pdf https://zhuanlan.zhihu.com/p/153352797