Lightmap
光照贴图是应用在 固体 表面用于模拟 灯光 的生成式 纹理 。面的 漫反射 或 反照率 贴图的颜色值都被融合进其光照贴图中。
尽管是由 VBSP 来分配光照贴图,但在每次编译地图时,光照贴图是由 VRAD 所创建的。虽然能够开关光照贴图‘页’(详见 命名灯光 ),但这些光照贴图都是静态且无法修改的。
2024年11月16日,随着 半衰期2 二十周年更新和 军团要塞2 2025年2月18日的补丁的发布(也包括
,
,
和
)以及不久后2025年5月20日 传送门 的更新,如果玩家将视频选项设置为“非常高”,光照贴图现在会被双三次过滤。这也可以被 控制台变量 r_lightmap_bicubic 单独触发。
模型的光照可以有比固体或表层位移更高分辨率的光照贴图,但也有其自身的问题,详见 $lightmap 和 prop_static 。
缩放
面的 光照贴图缩放 决定了其光照贴图的分辨率。 默认的16倍缩放使光照贴图上的每个像素(“光纹素”)相互间隔16个 单位 ,当光照贴图缩放为1时,一光纹素等于一单位。 Hammer Face Edit Dialog 可用于修改单个面的值。
降低缩放会使光照贴图的阴影更加清晰,但会使地图文件大小增大、渲染速度略微降低,并且编译速度呈指数下降(在非常低的缩放下,编译会消耗惊人的系统内存)。
在生成光照贴图时,VRAD不会创建 半影 。这种半影效果可以通过将多个光源放置在彼此附近模拟非点光源来实现,或者也可以同时增大光照贴图的缩放(这也是为什么其默认值为相对较大的16)。
{{note|每个编译的 固体 上的多边形面最多可以容纳 31x31 个光纹素。 如果需要, VBSP 会细分固体面来获得额外的光纹素。
- 这一限制在表层位移上为 124x124 光纹素,VBSP无法自动裁剪表层位移; 详见 Displacement Luxel Density 。
- 在


中,这一限制提升到了 127x127 光纹素。 - 过多低光纹素缩放的固体面会导致 VBSP 因 Too many unique verts 编译失败。
- 雾 实际上会增加大气散射,使所有阴影更加柔和。详见 light_environment 的太阳扩散角度(SunSpreadAngle)。
光纹素缩放值不需要是二的幂次方;它并不直接对应于光照贴图的分辨率。其可以使用任何整数值,但为了避免出现接缝,建议使用偶数缩放值;奇数值可能更容易导致 Engine Hunk Overflow [证实]。
优化
可以通过观察编译后的地图来优化光照贴图:光照对比度低的面可以增大其缩放值,而光照对比度高的面则应考虑降低缩放值。只需注意不要将某个面的缩放值设置得过高,以至于使它变成一个无法与邻近面相融合的“亮斑”(可以使用 mat_fullbright 2 来发现这个问题)。
记得也要考虑面的大小。即使将一个非常大的面仅上下移动一点,也可能造成巨大的影响。如果有帮助,不妨将面体拆分开,或者在极大的地面或墙面上减少一些细节也没关系。
Hammer 视图
在Hammer的3D视图左上角点击相机控制,会显示“3D光照贴图网格”(3D Lightmap Grid)的选项。此视图选项会为每个固体面应用示意其光照贴图缩放的网格纹理(见上节)。
即使在游戏内不可见,但在此模式下工具固体(Tool brush)的纹理会和其它固体看上去一样,所以最好将它们自动生成的 visgroup 全部关闭。(或者在 Hammer++中点击
来隐藏工具固体)。
双三次光照贴图
半衰期2、
半衰期:起源、
传送门 和
军团要塞2分支 包含“非常高”着色器细节选项,其启用了对光照贴图的双三次过滤,平滑锯齿(“阶梯状”)效果,但代价是更细微的细节的减少以及更加明显的接缝。这一效果也可以被 控制台变量 r_lightmap_bicubic 单独触发。双三次光照贴图需要 (DX9 SM2) 或更高版本 。由于其是在着色器代码中实现的,它只影响 LightmappedGeneric 和 WorldVertexTransition 材质。
下面的图片比较了禁用和启用状态下双三次过滤的表现,突出展示了各自的优点和问题。点击图片可以查看全尺寸版本。
控制台指令
除 r_lightmap_bicubic 外,以下皆为 作弊 指令:
- mat_fullbright 2
- 将所有反照率贴图替换为灰色,仅保留光照信息。
- mat_luxels <bool>
- 显示所有固体面的光纹素和模型的光照贴图。
注意: 表层位移 会扭曲,这并不是bug。
错误:因为缺少着色器,这一指令在
、
和
起源2013 单人分支 上是损坏的,无法正常显示 (详见 GitHub issues #3803)。这一问题并不会影响以下游戏: 军团要塞2分支 (
,
,
,
,
)大多数 起源2013 多人分支 游戏的新旧版本和2025版 Source SDK Base 2013 - Multiplayer 。
其在 半衰期2 (20周年庆版)仍未修复。
在 Garry's Mod 中已修复。
(tested in:
,
,
(via
13 Beta),
20th,
2012 build)- mat_filterlightmaps <bool>
- 控制光纹素是否像 纹素 一样被平滑处理。
- r_avglightmap <bool>
- 毁灭模式!在每个多边形面上平均光照贴图值。
- mat_showlightmappage <int>
- 将每个光照贴图展开,显示在游戏屏幕左上角的小型窗口中。对模组制作者用处不大。
提示:你可以通过打开 mat_texture_list 并点击渲染目标(Render Targets)和特殊纹理(Special Textures)来查看所有光照贴图。- r_lightmap <int>
- 指定用于计算和显示的光照贴图的光源样式索引。如果设置为-1(默认值),则计算所有光源样式。主要用于调试和检查特定光源形式对光照贴图的影响。
- r_unloadlightmaps <bool>
- 控制在状态更新后是否从内存中卸载光照贴图数据。设置为1时,引擎会卸载光照贴图数据以节省内存。适用于调试或频繁更改光照的情况。
r_lightmap_bicubic <bool>(仅存在于
之中)- 启用 双三次过滤采样 。只在半衰期2 20周年后的
半衰期2 和
半衰期:起源 、
传送门 (2025年5月20日更新)以及2025年2月18日补丁后的
军团要塞2分支 可用。
手动光照贴图编辑
光照贴图采样不是作为嵌入纹理存储的,而是作为原始样本存储的。可以使用
BSPEntSpy 预览、导出和导入所选或所有面的光照贴图。
参阅