Lightmass会生成表面光照贴图,用于静态对象上的间接光照。但是,动态对象(例如角色)也需要一种接受间接光照的方法。这种方法就是在构建时将所有点的预计算光照存储在名为 Volumetric Lightmap(体积光照贴图) 的空间中,然后在运行时用于动态对象的间接光照的插值。
今后 体积光照贴图 会取代 间接光照缓存 和 体积光照样本。
要重新启用间接光照缓存,可以打开 World Settings(世界场景设置) > Lightmass Settings(Lightmass设置) ,将 Volume Lighting Method(体积光照方法) 设置为 VLM Sparse Volume Lighting Samples(VLM稀疏体积光照样本)。
间接光照缓存(旧方法) | 体积光照贴图(新方法) |
---|---|
![]() |
![]() |
使用体积光照贴图渲染动态对象要比使用间接光照缓存渲染准确得多。
概括起来,体积光照贴图是按下列方式工作的:
当放置 Lightmass Importance Volume(全局光照重要体积) 时,体积光照贴图会构建由4x4x4个单元格组成的砖块(光照样本)。运行Lightmass时,会将这些单元格放置在整个 Lightmass Importance Volume(全局光照重要体积) 上,然后在场景中的静态几何体周围使用更多单元格,以获得更好的间接光照结果。
每个这样的点(或球体)都是一个体积光照贴图光照样本,它使用三阶球谐函数存储所有方向传来的光照。
在 对象 附近,任何处于某个砖块中的静态几何体都将在间接光照变化最大的地方使用更多单元格。通过数据结构能够将间接光照插值到GPU上的任何空间点。
(从左到右)一个Lightmass重要体积,在该体积中放置了一个静态网格体。静态几何体周围的单元格密度较高;砖块的一个面的表示示例,显示了4x4x4个单元格的布置;同样的单元格表示示例,光照构建期间存在静态几何体时密度较高。
单击 Show(显示) > Visualize(可视化) > Volumetric Lightmap(体积光照贴图),使用 体积光照贴图 的视图模式在关卡视口中将光照样本可视化。
启用体积光照贴图视图模式 | 可视化体积光照贴图光照样本 |
---|---|
![]() |
![]() |
如果在光照构建之后将体积光照贴图可视化,可以根据受影响的Lightmass重要体积中的单元格数量看出聚集在静态几何体周围的光照样本的密度。距离静态几何体较远的光照样本密度较低,因为它们附近没有几何体。
体积光照样本(旧方法) | 体积光照贴图(新方法) |
---|---|
![]() |
![]() |
间接光照缓存仅将光照样本放置在静态几何体表面上方。体积光照贴图将样本高密度地放置在静态几何体周围,在间接光照变化最大的地方呈现更多细节。
体积光照贴图允许预览有未构建的光照的对象。如果移动一个先前为其构建过光照的静态网格体,它会自动切换为体积光照贴图,直至下一次光照构建为止。
间接光照缓存(旧方法) | 体积光照贴图(新方法) |
---|---|
![]() |
![]() |
与整个组件只发生一次光照样本的插值的间接光照缓存不同,体积光照贴图允许内插至每个像素,从而可以呈现更多细节。这样可以实现可靠的细节分布,从而减少漏光现象。
间接光照缓存(旧方法) | 体积光照贴图(新方法) |
---|---|
![]() |
![]() |
增加的体积光照贴图细节使角色更好地与环境融合。
间接光照缓存(旧方法) | 体积光照贴图(新方法) |
---|---|
![]() |
![]() |
对于嵌入在任何静态几何体中的可移动Object,它提供了比间接光照缓存更好的静态Object光照匹配。
体积光照贴图使每个雾体素都有预计算光照内插到其在空间中的位置,从而支持了体积雾的静态光照应用。
静止光源的间接光照存储在光照贴图中,现在会影响雾。
点光源 无间接光线反射 | 点光源 有间接光线反射 |
---|---|
![]() |
![]() |
天空光照现在也可以正确地投射阴影,防止室内区域变成大雾效果。
带自发光颜色的天空光照 | 天空光照体积光照贴图 |
---|---|
![]() |
![]() |
静态光照的静态和自发光对雾的影响没有任何开销,因为它们全部都合并到体积光照贴图中了。
间接光照缓存:静态光照的静态和自发光(旧方法) | 体积光照贴图:静态光照的静态和自发光(新方法) |
---|---|
![]() |
![]() |
可以在 World Settings(世界场景设置) 的 Lightmass Settings(Lightmass 设置) 下访问体积光照贴图设置。
设置 | 说明 |
---|---|
Volumetric Lighting Method(体积光照方法) | 用于在Lightmass重要体积内的所有位置提供预计算光照的技术。 |
VLM Volumetric Lightmap(VLM体积光照贴图):在覆盖整个Lightmass重要体积的高级网格中计算光照样本。在几何体附近使用较高密度的网格。通过在GPU上逐像素进行高效的体积光照贴图插值,为动态Object和体积雾实现准确的间接光照。重要体积以外的位置复用体积光照贴图的边界纹素(限制寻址)。在移动平台上,在CPU上对每个Object的边界中心执行插值。 | |
VLM Sparse Volume Lighting Samples(VLM稀疏体积光照样本):体积光照样本按中等密度放置在静态表面上,在Lightmass重要体积中的其他所有位置则按低密度放置。重要体积以外的位置则没有间接光照。这种方法要求CPU插值,因此使用间接光照缓存为每个动态Object内插结果,会增加渲染线程开销。如果使用此方法,预计算光照无法影响体积雾。 | |
Volumetric Lightmap Detail Cell Size(体积光照贴图细节单元格大小) | 最高密度(在几何体周围使用)下的体积光照贴图体素的大小,按世界场景空间单位计。这个设置对于构建时间和内存有很大影响,应该谨慎使用。 |
Volumetric Lightmap Maximum Brick Memory Mb(体积光照贴图最大砖块内存量) | 要为体积光照贴图砖块数据花费的最大内存量。系统会丢弃高密度砖块,直至达到这一限制为止。先丢弃距离几何体最远的砖块。对内存裁减过多会导致分辨率不一致,因此最好用增大 Volumetric Lightmap Detail Cell Size(体积光照贴图细节单元格大小) 来代替。 |
在考虑体积光照贴图的性能和内存使用时,应该考虑下列因素。
下面是间接光照缓存与体积光照贴图的详细对比:
预计算光照体积/间接光照缓存 | 体积光照贴图 |
---|---|
在CPU上进行开销巨大的插值 | 在GPU上进行高效插值 |
逐个Object插值,在实例化组件上也不例外 | 逐像素插值 |
无法影响体积雾 | 对体积雾有效 |
仅在静态表面上高密度放置,导致低密度样本漏光 | 以高密度放置在所有静态表面周围 |
Lightmass重要体积以外为黑色样本 | 拉伸边界体素以覆盖Lightmass重要体积外部区域 |
支持关卡流送 | 当前不支持关卡流送 |
如果在大型关卡中降低 Volumetric Lightmap Detail Cell Size(体积光照贴图细节单元格大小) 来获得更高的精度,则还需要增大 Volumetric Lightmap Maximum Brick Memory Mb(体积光照贴图最大砖块内存量)。否则,细节单元格将会被剔除,导致动态Object间接光照精度下降。