深入了解光照贴图

如果是第一次接触 Unity 中的光照贴图,本快速入门指南将对您有所帮助。

光照贴图完全集成到 Unity 中,可在编辑器 (Editor) 中创建整个关卡,然后对其进行光照映射,让所有材质自动获取光照贴图,无需手动进行。对 Unity 中的光照贴图来说,所有灯光属性会直接映射到 Beast 光照烘培贴图工具中并烘培到纹理,提高性能。Unity 专业版扩展了全局照明 (Global Illumination) 功能,可烘培出真实、美观的光照,实时的相反操作则不可行。此外,Unity 专业版提供 天光和发光材质,使场景照明更加有趣。 在本页中,您将看到光照贴图 (Lightmapping) 窗口中出现的所有属性的深入描述。要打开光照贴图 (Lightmapping) 窗口,请选择窗口 (Window)光照贴图 (Lightmapping) 选项。

检视器顶部有三个场景筛选器 (Scene Filter) 按钮,供用户将操作应用到所有对象或限制在灯光或渲染器内。

对象 (Object)

每个对象的灯光、网格渲染器和地形烘培设置根据当前的选择而定。

单击场景筛选器 (Scene Filter) 按钮可在层级视图 (Hierarchy) 中轻松看到灯光、渲染器或地形。

网格渲染器和地形 (Mesh Renderers and Terrains):

静态光照贴图 (Lightmap Static)网格渲染器和地形 (Mesh Renderers and Terrains) 须标为静态才能进行烘培。
光照贴图比率 (Scale In Lightmap)(仅用于网格渲染器 (Mesh Renderers))值越大,网格渲染器的分辨率越高。最终分辨率将成比例(光照贴图缩放 (Scale))*(对象的世界坐标空间所占面积)*(全局烘培设置分辨率 (Resolution) 值)。值设置为 0 将不烘培对象(但仍会影响其他烘培对象)。
光照贴图大小 (Lightmap Size)(仅用于地形)地形实例的光照贴图大小。地形不与其他对象共用图集,而是有自己的光照贴图。
图集 (Atlas)如果禁用锁定图集 (Lock Atlas),图集信息 – 将自动更新。如果启用锁定图集 (Lock Atlas),这些参数不会自动修改,可手动编辑。
光照贴图索引 (Lightmap Index)光照贴图数组中的索引。
平铺 (Tiling)(仅用于网格渲染器 (Mesh Renderers))对象的光照贴图 UV 平铺。
偏移 (Offset)(仅用于网格渲染器 (Mesh Renderers))对象的光照贴图 UV 偏移。

灯光 (Lights):

光照贴图 (Lightmapping)光照贴图 (Lightmapping) 模式:仅限实时 (Realtime Only)、自动 (Auto) 或仅限烘培 (Baked Only) 模式。参阅以下双重光照贴图 (Dual Lightmaps) 说明。
颜色 (Color)灯光颜色。实时渲染采用相同属性。
强度 (Intensity)灯光强度。实时渲染采用相同属性。
反弹强度 (Bounce Intensity)特定光源发出的间接灯光强度的倍增值。
烘培阴影 (Baked Shadows)控制这盏灯照明的对象是否投射阴影(在自动灯光 (Auto) 的情况下控制实时阴影)。
阴影半径 (Shadow Radius)(仅用于点光源和聚光灯)增加该值形成直接软阴影,增加该灯光投影(而非照明)的覆盖面积计算。
阴影角度 (Shadow Angle)(仅用于方向灯)增加该值形成直接软阴影,增加该灯光投影(而非照明)的角度覆盖面积计算。
阴影采样 (Shadow Samples)如果将阴影半径 (Shadow Radius) 或角度 (Angle) 值设为大于零的数,将相应增加阴影采样 (Shadow Samples) 的数量。高采样值将消除半影中的噪点,但会增加渲染次数。

烘培 (Bake)

全局烘培设置

模式 (Mode)控制脱机光照贴图烘培和运行时的光照贴图渲染模式。在双重光照贴图 (Dual Lightmaps) 模式中,近端和远端的光照贴图都会烘培;只有延迟渲染路径支持渲染双重光照贴图。单光照贴图 (Single Lightmaps) 模式只会使远端的光照贴图被烘培;延迟渲染路径中也可强制使用单光照贴图 (Single Lightmaps) 模式。
使用向前渲染 (Use in forward rendering)(仅用于双重光照贴图 (Dual lightmaps))在向前渲染中启用双重光照贴图。注意,在该选项中要求创建自己的着色器用于操作。
质量 (Quality)高质量(效果好)和低质量(速度快)烘培的预设值。它们会影响最终聚集光线的数量、对比度阈值及部分其他最终聚集和抗锯齿设置。
反弹 (Bounces)全局照明 (Global Illumination) 模拟中光线反弹的次数。至少要有一次反弹才能形成真实柔和的间接光线。设置为 0 时只会计算直接光线。
天光颜色 (Sky Light Color)天光模拟天空各个方向放射出的光线,很适合室外场景。
天光强度 (Sky Light Intensity)天光的强度,值设置为 0 将禁用天光。
反弹增强 (Bounce Boost)允许增强黑暗场景中的光线反弹。如果场景中包含黑暗材质,可用直接强光补充。间接照明将非常微弱,因为反弹光线会快速消失。将反弹增强的值设置为大于 1 可通过将反射率颜色值推向 1 用于 GI 计算,对此进行补偿。请注意,0 至 1 之间的值会减少光线反弹。实际计算按照每个组件的 pow(colorComponent, (1.0/bounceBoost)) 进行。
反弹强度 (Bounce Intensity)间接光线强度的倍增值。
最终聚集光线 (Final Gather Rays)每个最终聚集点发射出的光线数量,值越高,质量越好。
对比度阈值 (Contrast Threshold)颜色对比阈值,据此,新的最终聚集点采用适当的采样算法进行创建。值越高,Beast 允许的表面照明变化越多,从而产生较平滑、不太详细的光照贴图。最终聚集光线数量越少,需要的对比度阈值越高,从而不迫使创建其他最终聚集点。
插值 (Interpolation)控制最终聚集点颜色的插值。0 表示线性插值,1 表示基于梯度的高级插值。在某些情况下推荐使用后者。
插值点 (Interpolation Points)插入最终聚集点之间的数值。数值越高,效果越平滑,但也会消除照明中的细节。
环境光遮挡 (Ambient Occlusion)烘培至光照贴图中的环境光遮挡量。环境光遮挡指集成了本地半球大小最大距离 (Max Distance) 的可见性函数,因此不考虑任何照明信息。
锁定图集 (Lock Atlas)启用锁定图集 (Lock Atlas) 时,自动图集不会运行,对象的光照贴图索引、平铺和偏移不能修改。
分辨率 (Resolution)每世界单位的光照贴图分辨率大小,将分辨率设置为 50 的 10x10 单位平面将产生一张 500x500 纹素的光照贴图。
填充 (Padding)图集上单个项目之间剩余的空白区,以纹素单位 (0..1) 表示。

贴图 (Maps)

所有光照贴图的可编辑数组。

压缩 (Compressed)控制是否压缩场景中所有光照贴图资源。
数组大小 (Array Size)光照贴图数组的大小(0 至 254)。
光照贴图数组 (Lightmaps Array)当前场景中所有光照贴图的可编辑数组。未指定的通道处理为黑色光照贴图。索引相当于网格渲染器和地形 (Mesh Renderers and Terrains) 中的光照贴图索引 (Lightmaps Index) 值。除非启用锁定图集 (Lock Atlas),否则该数组将自动调整大小并在烘培光照贴图时进行填充。

光照贴图显示 (Lightmap Display)

控制光照贴图如何在编辑器中显示的工具。光照贴图显示 (Lightmap Display) 是场景视图 (Scene View) 的一个子窗口。只要光照贴图 (Lightmapping) 可见,就显示该子窗口。

使用光照贴图 (Use Lightmaps)控制是否在渲染时使用光照贴图。
阴影距离 (Shadow Distance)自动 (Auto) 模式灯光与近端 (Close By) 光照贴图淡出为远端 (Far Away) 光照贴图之间的距离。该设置重写 QualitySettings.shadowDistance 设置但不会覆盖。
显示分辨率 (Show Resolution)控制场景视图中的光照贴图分辨率 (Lightmap Resolution) 模式,开启该模式可预览静态对象的光照贴图纹素大小。

细节

双重光照贴图 (Dual Lightmaps)

双重光照贴图 (Dual Lightmaps) 是 Unity 中使光照贴图和高光 (specular)法线贴图 (normal mapping) 及烘培与实时阴影适当融合一起使用的方法。也可以在光照贴图分辨率低的情况下让光照贴图看起来美观。

双重光照贴图默认只能用于dualforward 表面着色器指令)编写自定义着色器来启用双重光照贴图 (Dual Lightmaps)。

双重光照贴图使用两组贴图:

仅限实时 (Realtime Only) 模式的灯光永不进行烘培。近端 (Near) 光照贴图设置用于比阴影距离 (Shadow Distance) 质量设置中的距离近的相机的距离范围内。
在该距离中,自动 (Auto) 模式灯光渲染为带高光、凹凸和实时阴影的实时灯光(使其阴影与仅限实时 (Realtime Only) 模式灯光的阴影融为一体),其间接灯光来自光照贴图。若超出阴影距离 (Shadow Distance),自动 (Auto) 模式灯光不再实时渲染,而全部照明来自远端 (Far) 光照贴图(仅限实时 (Realtime Only) 模式灯光依然进行照明,但会禁用阴影)。

下列场景包含一个方向灯,光照贴图模式设置为默认的自动 (Auto) 模式,许多经烘培的静态对象(建筑物、障碍、固定细节)及部分动态移动或可移动的对象(持枪的假人、桶)。该场景在双重光照贴图模式下进行烘培和渲染:阴影距离外的远方建筑物仅由光照贴图进行完全照明,两个假人进行动态照明但不再投射阴影;阴影距离内的假人和经烘培的静态建筑物及地面进行实时照明并投射实时阴影,而间接软阴影来自近端的光照贴图。

单光照贴图 (Single Lightmaps)

单光照贴图 (Single Lightmaps) 技术要简单得多,可用于任何渲染路径。所有静态照明(如仅限烘培模式和自动模式的灯光、天光及发光材质)烘培成一组光照贴图。这些光照贴图用于所有经烘培的对象,不论阴影距离远近。

要让动态阴影与经烘培阴影的强度一致,须手动调整灯光的阴影强度 (Shadow Strength) 属性:


将灯光的阴影强度 (Shadow Strength) 值从原来的 1.0 调整为 0.7。

光照贴图材质 (Lightmapped Materials)

使用光照贴图时 Unity 不要求选定具体材质。内置着色器中的任一着色器(以及自己就此编写的任何表面着色器 (Surface Shader))在产品发布时已支持光照贴图,不必担心。

光照贴图分辨率 (Lightmap Resolution)

有了分辨率 (Resolution) 烘培设置,可控制场景每单位需要多少纹素才能使场景看起来美观。如果场景中有一个 1x1 单位的平面,分辨率设为每单位 10 纹素,将得到一张 10x10 纹素大小的光照贴图。分辨率 (Resolution) 烘培设置为全局设置。如果想修改该设置用于特定对象(使其在光照贴图中特别小或特别大),可使用网格渲染器 (Mesh Renderers) 中的光照贴图比率 (Scale In Lightmap) 属性。将光照贴图比率 (Scale In Lightmap) 的值设为 0 将完全不烘培对象(但仍会影响其他对象的光照贴图)。利用光照贴图分辨率 (Lightmap Resolution) 场景视图渲染模式可预览光照贴图的纹素大小。


在光照贴图分辨率 (Lightmap Resolution) 场景视图模式中查看光照贴图的纹素大小(每个小方格为一个纹素)。

UV

需要进行光照贴图的网格必须有适合光照贴图的 UV 坐标集。确保该点最简单的方法是在网格导入设置 (Mesh Import Settings) 中为给定网格启用生成光照贴图 UV (Generate Lightmap UVs) 选项。

如需了解更多信息,请参阅光照贴图 UV 页面。

材质属性 (Material Properties)

下列材质属性映射到 Beast 的内部场景表示法:

注意:将材质映射到 Beast 时,Unity 可通过着色器属性和路径/名称关键字检测到着色器的“类型”,如:“高光 (Specular)”、“透明 (Transparent)”、“自发光 (Self-Illumin) 等

蒙皮网格渲染器 (Skinned Mesh Renderers)

拥有静态的蒙皮网格可让内容更灵活,因为导入这些网格后其形状可在 Unity 中更改,并根据关卡要求进行调整。蒙皮网格渲染器 (Skinned Mesh Renderers) 的烘培方法可与网格渲染器 (Mesh Renderers) 的方法完全相同,并以当前姿势发送到光照贴图工具中。

如果运行时网格顶点移动了一点,也可使用光照贴图。照明无法完全精确,但在许多情况下还是能很好匹配。

高级

自动图集 (Automatic Atlasing)

图集 (Atlasing)(UV 包)在每次执行烘培时自动执行,无需手动执行。

对象的世界空间表面积乘以每个对象的光照贴图比率 (Scale In Lightmap) 值及全局分辨率 (Resolution),所得乘积决定光照贴图中对象的 UV 集大小(更精确的算法为:[0,1] x [0,1] UV 平方)。下一步是尽可能地将所有对象打包到少数几个光照贴图中,同时确保每个占用上个步骤中计算出来的空间。如果给定对象的 UV 集只占用了 [0,1]x[0,1] 平方的一部分,在许多情况下图集会减少邻近 UV 集的间隔,利用空白处。

由于使用了图集工具,要烘培的每个对象在其中一张光照贴图中都有自己的位置,该空间不与任何其他对象的空间重叠。图集信息保存为三个值:光照贴图索引 (Lightmap Index)、平铺(缩放)(Tiling (scale)) 以及网格渲染器 (Mesh Renderer) 中的偏移 (Offset),并作为一个值:地形中的光照贴图索引 (Lightmap Index in Terrains),可通过光照贴图窗口的对象 (Object) 窗格进行查看和修改。


右击光照贴图选择使用选定光照贴图的所有游戏对象。当前选择的活动对象的光照贴图用黄色高亮显示。

图集只能修改为光照贴图索引 (Lightmap Index)、平铺 (Tiling) 和偏移 (Offset) 的每个对象数据,但不能修改对象的 UV 集,因为 UV 集已保存为共享网格的一部分。网格的光照贴图 UV 只能在导入时使用 Unity 内置的自动展开工具或导入 Unity 前在外部三维包中创建。

锁定图集 (Lock Atlas)

启用锁定图集 (Lock Atlas) 时,自动图集不会运行,对象的光照贴图索引 (Lightmap Index)、平铺 (Tiling) 和偏移 (Offset) 不能修改。Beast 将依靠当前的图集,因此,用户应负责维持正确的图集(如光照贴图中无重叠的对象,无对象引用超过光照贴图数组末端的光照贴图槽等等)。

锁定图集 (Lock Atlas) 为给光照贴图发送对象时进行其他工作流程提供 了可能。可手动执行图集或通过脚本满足具体需求;如果对当前图集满意,已为场景烘培多套光照贴图并想确定在场景中再添加一个对象后图集不会更改,使得场景与其他套光照贴图不兼容,还可锁定自动生成的图集。

请记住,锁定图集 (Lock Atlas) 只会锁定图集,不包括网格 UV。如果更改源网格且网格导入工具已设置为生成光照贴图 UV,那么可能生成不同的 UV,当前光照贴图在对象中看起来不正确,为修复该错误,须重新烘培光照贴图。

Beast 自定义烘培设置

如果需要对烘培过程进行更多控制,请参阅 Beast 自定义设置页面。

Page last updated: 2013-07-01