[Unity]渐进式光照贴图(Progressive Lightmapper)

2020/01 09 16:01

注意:渐进式光照贴图(Progressive Lightmapper)在 Unity 2018.1 中第一次被添加。

渐进式光照贴图是一种基于路径追踪(fast path-tracing-based)的光照贴图系统,它提供了能在编辑器中逐渐刷新的烘焙光照贴图(baked lightmaps)和光照探针(Light Probes)。它要求不重叠的 UVs 具有较小的面积和角度误差,以及图表(charts)之间有足够的填充。

渐进式光照贴图采取了一个短暂的准备步骤来处理几何体与实例的更新,同时生成 G-buffer 和图表遮罩( chart masks)。然后,它会立即生成输出,并随着时间的推移逐步细化输出,以实现更完善的交互式照明工作流。此外,当渐进式光照贴图在烘焙时,因为它提供了一个预估的时间,所以烘焙时间更加可预测。

渐进式光照贴图以光照贴图的分辨率对每一个纹素(texel)都烘焙了全局光照(GI),而不需要向上采样,或者依赖于辐照度缓存,或者其他的一些全局数据结构。这就使得它足够健壮,允许你烘焙你选中的部分光照贴图,这让你能够在场景中快递地测试和迭代。

想了解更多使用流程相关的内容,请看视频教程: In Development – Progressive Lightmapper (YouTube)

设置

打开 Window > Lighting > Settings 菜单

image

属性作用
Lighting Mode(光照模式)指定 Unity 对场景中的所有混合光照使用哪种光照模式。选项有:Baked IndirectDistance ShadowmaskShadowmaskSubtractive
Lightmapper(光照贴图系统)使用该选项来指定使用哪种光照计算方式来计算场景中的光照贴图。选项有:ProgressiveEnlighten。默认选项是 Progressive。如果你想使用 Enlighten 系统,请看 Enlighten 一节。
Prioritize View(优先视图)开启该选项后,渐进式光照贴图(Progressive Lightmapper)优先刷新当前场景视图中可见的纹素变化,然后再改变视野外的纹素。
Direct Samples(直接光照采样)来自每个纹素的直接光照采样数(路径数)。该设置控制了渐进式光照贴图在计算直接光照时的采样数。增加该值将提升光照贴图的质量,但是也会增加烘焙时间。
Indirect Samples(间接光照采样)来自每个纹素的间接光照采样数(路径数)。该设置控制了渐进式光照贴图在计算间接光照时的采样数。在一些场景中,尤其是户外场景,100采样数就足够了。而对于有自发光几何体的室内场景,则可以增加数值,直到看到你想要的效果。
Bounces(反射次数)当追踪路径时,使用该值来指定间接光照反射的次数。对于大多数场景,反射2次应该足够了。而对于一些室内场景,可能需要更多地反射次数。
Filtering(过滤)配置光照贴图的后处理(post-processing)来限制噪点。选项有:NoneAuto 或者 Advanced。其中,Advanced 选项又提供了额外三个用于手动配置的参数。在 Auto 模式中,将使用来自 Advanced 模式的默认值。对于每个参数,Gaussian(高斯)和 A-Trous 过滤器都可被单独使用。
Filtering / Auto使用默认数值用于光照贴图的后处理。
Filtering / Advanced提供了额外三个用于手动配置的参数。你可以对直接和间接光照设置单独使用 Gaussian 和 A-Trous 过滤器。注意,Gaussian 过滤器数值定义的是半径,而 A-Trous 过滤器数值定义的是“sigma(标准差)”。Sigma 是一个决定了图像中是否运用过滤的阈值参数。
Filtering / Advanced / Direct Filter选择一个过滤器用于光照贴图中的直接光照。
Filtering / Advanced / Direct Filter / Gaussian对光照贴图中的直接光照使用高斯过滤器。
Filtering / Advanced / Direct Filter / Gaussian / Direct Radius纹素中高斯过滤器的半径。半径越大,模糊强度越大。
Filtering / Advanced / Direct Filter / A-Trous对光照贴图中的直接光照使用 A-Trous 过滤器。
Filtering / Advanced / Direct Filter / A-Trous / Direct Sigma纹素中 A-Trous 过滤器的 sigma 值。sigma 值越大,模糊强度越大。
Filtering / Advanced / Direct Filter / Gaussian / None对光照贴图中的直接光照不适用过滤器
Filtering / Advanced / Indirect Filter选择一个过滤器用于光照贴图中的间接光照。(该选项及其子选项,和上面的选项内容差不多,只不过将直接光换为间接光)
Filtering / Advanced / Indirect Filter / Gaussian对光照贴图中的间接光照使用高斯过滤器。
Filtering / Advanced / Indirect Filter / Gaussian / Indirect Radius纹素中高斯过滤器的半径。半径越大,模糊强度越大。
Filtering / Advanced / Indirect Filter / A-Trous对光照贴图中的间接光照使用 A-Trous 过滤器。
Filtering / Advanced / Indirect Filter / A-Trous / Indirect Sigma纹素中 A-Trous 过滤器的 sigma 值。sigma 值越大,模糊强度越大。
Filtering / Advanced / Ambient Occlusion Filter(环境遮蔽过滤器)选择一个过滤器用于光照贴图中的环境遮蔽(简称 AO)。至于当你开启 Ambient Occlusion 选项,该值才可用。
Filtering / Advanced / Ambient Occlusion Filter / Gaussian使用一个高斯过滤用于光照贴图中的 AO。
Filtering / Advanced / Ambient Occlusion Filter / Gaussian / Ambient Occlusion Radius纹素中高斯过滤器的半径。半径越大,模糊强度越大。
Filtering / Advanced / Ambient Occlusion Filter / A-Trous使用一个 A-Trous 过滤用于光照贴图中的 AO。
Filtering / Advanced / Ambient Occlusion Filter / A-Trous / Ambient Occlusion Sigma纹素中 A-Trous 过滤器的 sigma 值。sigma 值越大,模糊强度越大。
Filtering / None选择该选项后,将不对光照贴图中的间接光照使用过滤器。
Lightmap Resolution(光照贴图分辨率)指定用于光照贴图的每 unit(单位)的文素数(texels)。增加该值将提升光照贴图的质量,但是也会增加烘焙时间。注意,改变该数值,将会以它的平方值影响纹素数(因为该值代表的是光照贴图的高和宽)。可在统计中查看 Occupied texels 值,下面有相关介绍。
Lightmap Padding(光照贴图填充)使用该值指定烘焙光照贴图中各个形状之间的间隔(单位:纹素)。默认值是2。
Lightmap Size(光照贴图尺寸)完整光照贴图纹理的尺寸(单位:像素),由各个区域合并而成。默认值是 1024。
Compress Lightmaps(压缩光照贴图)一张压缩过得光照贴图占据更少的存储空间,但是压缩过程会产生不需要的视觉效果。勾选该选项将压缩光照贴图,或者不勾选将不会压缩。默认是勾选的。
Ambient Occlusion(环境遮蔽)勾选该属性将开启一组用于控制 AO 表面的相对亮度的设置。更高的数值会增加遮蔽处与完全照亮区域之间的对比。该属性只作用于 GI 系统中间接光照的计算。默认是开启的。
Ambient Occlusion / Max Distance该属性控制光照系统发射光线的距离,决定是否对物体应用遮蔽。更大的数值生成更长的射线,以及光照贴图中更多的阴影;更小的数值生成更短的射线,于是只有相互之间靠得很近的物体才有阴影。该属性设置为0的话,将投射一根无限长的射线。默认值是1。
Indirect Contribution(间接光贡献)使用滑动条来调节最终光照贴图中间接光(比如:环境光,或者反射光、来自自发光物体的灯光)的亮度。范围是0到10,默认值是1。数值小于1将减少亮度,数值大于1将增加亮度。
Direct Contribution(直接光贡献)使用滑动条来调节直接光的亮度。范围是0到10,默认值是0。数值越大,应用于直接光照的对比越高。
Final Gather(最终收集器)开启该选项,Unity 将在 GI 计算中以烘焙光照贴图的分辨率计算最终的灯光反射。这将提升光照贴图的视觉质量,但是会增加额外的烘焙时间。
Ray Count(射线数量)定义发射自每个 Final Gather(最终收集器)的射线数量,默认值是 256。
Denoising(去噪)Final Gather(最终收集器)的输出施加一个去噪过滤。该属性默认被勾选。
Directional Mode(平行模式)你能够设置光照贴图,来存储关于游戏对象的表面上的每一点的主要接收光的信息。更多细节请看 Directional Lightmapping 一节。默认模式是 Directional
Directional(平行)在该模式下,Unity 生成一张二级(次级)光照贴图来存储接收光的主要方向。该模式允许使用漫反射法线贴图材质,以能够与GI系统一起工作。为了获取额外的光照贴图数据,该模式需要大约两倍的存储空间。Unity 不能在 SM2.0 的硬件上或者使用了 GLES2.0 时解码,此时会退回到 non-directional(非平行)光照贴图模式。
Non-directional(非平行)在该模式下,Unity 不会生成一张二级(次级)光照贴图,取而代之的是将所有光照信息存储到相同的空间中。
Indirect Intensity(间接光强度)控制 Unity 存储在 real-time(实时)和 baked(烘焙)光照贴图中的间接光的亮度,范围是0到5。数值大于1将增加间接光的亮度,数值小于1将减少间接光的亮度。默认值是1。
Albedo Boost(反照率增强)通过增强场景中材质的反照率,来控制表面之间反射光的数量,范围是1到10。增加该值后,在计算间接光照时,反照率值将趋近与白色。默认值是1,是标准的物理性质。
Lightmap Parameters(光照贴图参数)Unity 使用了一系列综合参数用于光照贴图,而不仅仅是 Lighting 窗口中的属性。该属性中预设了一些可用的默认配置,当然你也可以使用 Create New 选项来创建你自己的光照贴图参数文件。默认选项是 Default-Medium

统计

Auto GenerateGenerate Lighting 选项下展示了关于光照贴图的统计,包括:

  • Unity 已经创建的光照贴图数目。
  • Memory Usage:当前光照贴图所需的内存。
  • Occupied Texels:光照贴图 UV 空间中被占用的纹素数。
  • Lightmaps in view:场景视图中光照贴图数目。
  • Lightmaps not in view:场景视图之外的光照贴图数目。
    Converged:所有计算已完成的光照贴图。
    Not Converged:仍然在进行烘焙的光照贴图。
  • Bake Performance:每秒 mrays(百万射线) 数。如果该值过低(比如低于2),你应该调节你的设置或者硬件,以处理更多光线。

Auto 模式中,Unity 自动计算光照贴图和灯光探针。如果你没有开启 Auto 模式,你需要点击 Build 按钮来开始烘焙。

烘焙期间

渐进式光照贴图(Progressive Lightmapper)提供了监测和停止烘焙过程的选项。

ETA

当 Unity 在烘焙光照贴图时,会提供一个进度条,展示“预计完成时间(estimated time of arrival,简称 ETA)”,单位为秒。它提供了更加可预测的烘焙时间,让你快速知晓,在当前光照设置下,需要多少烘焙时间。

强制停止

在手动烘焙期间,可以在任何时候点击 Force Stop 停止烘焙过程。这可以让你在看到理想的效果时停止烘焙过程。