跳到主要内容

光照贴图

PlayCanvas 光照贴图 此场景使用光照贴图、AO 纹理及盒式投影 IBL(反射)实现光照

这里提供最终场景及项目。它使用外部 HDR 光照贴图(本页介绍)、环境光遮蔽,以及通过盒式投影应用 HDR 立方体贴图的基于图像的光照,实现图示真实反射。

概览​

光照贴图生成是为静态场景预计算光照信息、存入纹理,再应用到材质的过程。场景中大量光源和几何体静止或属于环境时,这是一种高效的光照方式。

PlayCanvas 提供两种方式:用第三方工具外部生成,以及引擎在加载时或应用运行期间自动生成的运行时光照贴图。

本页介绍使用外部工具渲染光照贴图的细节和最佳实践。

外部生成光照贴图​

许多 3D 内容工具可生成光照纹理,例如 3ds Max、Maya、Blender 等均可将光照烘焙到纹理。离线工具的优势是可使用全局光照反弹、软阴影、AO 等复杂计算;主要缺点是必须在 3D 工具中完整重现场景。如果 PlayCanvas 场景由许多在编辑器中摆放的实例组成,就需要在烘焙工具中重新搭建。

外部生成后,只需将贴图作为普通纹理资源上传,放入标准物理材质的 Lightmap 插槽。

工具​

本页使用 3ds Max 和 VRay,但其他类似建模工具也可实现相同功能。

伽马校正​

光照贴图和立方体贴图应在线性空间渲染,以免颜色曲线重复受到伽马校正。PlayCanvas 引擎会在实时渲染时进行伽马校正。

在 3ds Max 中,禁用 Preference Settings(Customize > Preferences)中的 Enable Gamma/LUT Correction:

3ds Max 首选项中的线性空间设置

然后更新 Color Mapping(颜色映射),它位于 Render Settings(F10,或从 Render To Texture 窗口打开)。输出不应截断或进行后处理(Mode 选项),应使用 Linear Multiply 实现线性颜色空间。 下图展示各选项的设置,点击“Default”按钮可将设置展开为“Expert”:

3ds Max 渲染设置

UV 映射​

要将光照纹理应用到几何体,必须先展开 UV。以下做法有助于生成适合光照贴图的 UV。

简单几何体​

几何体表面积越小越好。尽量减小三角形总面积,移除不可见三角形。较大面积会降低光照细节,需要更大纹理,有时还需拆分为多个资源。

光照贴图建议:简单几何体

一致的纹素尺寸​

保持 UV 纹素不拉伸,且同一几何体内尺寸一致,确保场景的光照纹理细节程度一致。根据美术和优化需求,对于近看或远看的几何体,也可适当改变纹素尺寸。

光照贴图建议:一致纹素尺寸

不重叠的 UV​

UV 中三角形不能重叠,确保每个像素对应几何体上唯一的 3D 位置,独立存储光照信息。光照贴图 UV 被限制在 0.0 到 1.0 范围,不向外平铺。

光照贴图建议:不重叠的 UV

其他建议​

为取得良好结果,烘焙应只基于光传播相关的数据,不依赖烘焙时相机的观察位置。

  1. 禁用法线贴图:微表面细节太小,不适合记录在光照纹理中。
  2. 将材质 Reflection 设为 0,并禁用光泽贴图:反射可能产生焦散、增加渲染复杂度并引入伪影。光照贴图通常只包含漫反射光照,反射应在运行时实现。
  3. 过暗的材质难以得到良好结果:它们反射很少光,对全局光照贡献很小。
  4. 在下述 Render To Texture 窗口中使用较大的 Padding(间距)。
  5. 光可能从几何体背后泄漏,应添加遮挡几何体阻光。

光照贴图漏光

渲染到纹理​

要从建模工具导出光照数据,需将其渲染到纹理,并指定分辨率和格式。

3ds Max 使用 Render To Texture 窗口。设置较大的 Padding,选择第二 UV 通道,并按渲染器选择输出配置;下图使用 VRayRawTotalLightingMap。

渲染到纹理:PlayCanvas 光照贴图

噪声​

受渲染质量和时间影响,输出光照数据可能包含噪声。可通过保留纹理边缘、平滑平坦区域的模糊滤镜解决。在 Photoshop 中可使用 Surface Blur(表面模糊):

光照贴图:Photoshop 表面模糊

上传到编辑器​

此时已有带第二 UV 通道(UV1)的几何体和 HDR 光照纹理,可以上传到 PlayCanvas 场景并设置材质。拖放文件或使用资源面板上传按钮即可。几何体上传后自动生成材质,每个烘焙了光照的材质都需设置对应纹理。选择全部所需材质,将纹理拖入或选择到 Lightmap 插槽。

PlayCanvas 编辑器:材质光照贴图插槽

最后调整​

可调整伽马校正、色调映射和曝光,获得场景所需的外观与颜色。

可查看使用上述技术的示例和项目。