做《暗黑王朝》这个项目的光影环境,前后折腾了三个多月。这不是我第一次做暗黑题材的场景,但却是投入最深的一次——从最早的光照白盒验证,到最终在 UE5 里跑通一整套 Lumen 实时全局光照流程,中间推翻过两版灯光方案,也踩了无数性能的坑。这篇就当是给自己留个项目复盘,也希望能给正在做次世代场景构建、尤其是想啃下光影环境这块硬骨头的朋友一些参考。
先说明一下,这篇文章适合谁看:场景美术、技术美术、以及想搞清“暗黑风场景的光到底怎么布”的游戏开发者。我不会只讲按钮在哪,而是会把每一步背后的判断逻辑讲清楚——为什么这么设、为什么选这个方案、遇到问题怎么排查。次世代场景构建的核心不是堆模型精度,而是光。模型再好,光不对,氛围全废。
1. 项目立项与光影基调设计
1.1 暗黑王朝的美术定位与光影风格锚点
《暗黑王朝》的美术风格定的是“暗黑哥特+写实基底”,不是那种纯魔幻的鲜艳配色,也不是恐怖游戏里那种纯靠吓人的死黑。美术组在项目初期给的关键词是:冷峻、压迫、史诗感、克制的华丽。这四个词直接决定了光影设计的走向——光不能是“亮”的,而是“存在”的。也就是说,场景里大多数区域处于低照度状态,但每一束光都必须有明确的来源、目的和视觉引导作用。
我在前期做了一件后来被证明非常划算的事:从参考图里提炼了一份“光影情绪板”,按亮度分区来归类。比如地牢类场景锚定在-2 EV左右的暗部环境,教堂/王座厅锚定在0到+1 EV的中间调,室外遗迹则靠天光和体积雾撑起层次。每个场景进制作前,先把这个锚定图定下来,后面所有灯光参数都围绕它调,而不是边做边临时拍脑袋。
这个锚定很重要的原因是,人眼对暗部环境的感知其实很宽容,但对“对比关系”极其敏感。暗黑王朝的场景如果整体压暗,却没有任何一处在CIE色度图上有意偏移,出来的画面就是一坨灰。所以我定的原则是:画面里有且只有一个明确的视觉焦点区,这个区域的照度要比周围高出至少3档,色温上也要和周围环境拉开明显差距。
1.2 为什么光影环境要先于模型细化介入
很多场景美术的习惯是:先把模型、材质全部做完,最后拉个灯随便打一下。我强烈不建议这么做,尤其在次世代场景构建流程里。光影环境应该是“先行的”——在模型还在灰盒阶段时,光影验证就必须进场。
原因很简单:光决定了构图。同一个教堂场景,模型精度做得再高,如果光从侧面打、从正面打、从顶部天光漫射下来,完全是三种观感。灰盒阶段的光影验证成本极低,改一个灯光角度就是几秒钟的事,但等所有高模贴图都做完了再改光,牵一发动全身——阴影方向变了,AO烘焙要重来,反射捕获要重摆,甚至模型的体量感判断都会受影响。
我在《暗黑王朝》里做的第一个可玩性验证场景,就是用一个纯白模型(不是灰盒,是给了标准白色无光照材质)的教堂中庭,打了四套灯光方案:正面平光、45度侧光、逆光剪影、顶光+体积雾。给主美和导演看完,光是方向感这件事就节省了一周的沟通成本。这四套方案最终融合成了两套,分别用在了地下墓穴和王座大厅两个核心场景上。
2. 灯光架构与核心参数解析
2.1 三点布光在场景尺度下的重构
影视和CG里常说的三点布光——主光、补光、轮廓光——很多人以为是单角色特写才用的。实际上场景级布光同样遵循这套逻辑,只是尺度完全不同。角色级的主光是照亮人,场景级的主光是“划分区域”。我在《暗黑王朝》里是这样重构的:
主光用 Directional Light 模拟月亮或地窖天窗投下的冷光,色温设在 6500K 到 7500K 之间,角度压得很低,让物体拖出长阴影。这个低角度是特意的——长阴影在地面上会形成天然的视觉引导线,配合廊柱的投影节奏,玩家走进去不用看地图,光就会告诉他们该往哪走。平行光强度我一般放在 2 到 4 lux,具体看该场景要压暗到什么程度。
补光不单指一个灯,而是天光(Sky Light)加若干个局部点光源的组合。暗黑题材里最容易犯的错就是补光补过头。我定的纪律是:补光的照度永远不超过主光的 1/4,色温必须与主光拉开,冷光主光配暖色补光,或者反过来,形成最基础的冷暖对比。这样画面不会显得“平”,但暗部依然是扎实的暗部。
轮廓光在这个项目里承担了很多视觉叙事功能。怪物雕像背后藏一个暖色轮廓光,不是为了看清轮廓,而是让玩家产生“那后面有东西”的不安感。LED 矩形光(Rect Light)用来勾轮廓非常合适,强度可以开得不低,但衰减半径要控制好,避免把整个空间染上一层不该有的颜色。
2.2 暗黑场景的曝光控制与对比度设计
曝光控制是暗黑风场景和普通照明场景最大的分水岭。大部分新手场景美术的默认思路是让场景“看得清”,于是拼命加光、拉亮度,结果整个暗黑氛围荡然无存。在 UE5 里,我用的是手动曝光,关闭自动曝光,把光圈、快门、ISO 三个参数固定下来,再靠灯光本身去控制画面明暗。
我的常用参数是:光圈 F2.8,快门 1/100,ISO 100,EV 值稳定在 -1.5 到 -2 之间。这个配置相当于给整个画面定了一个偏暗的曝光基准,之后每一个灯光的强度都基于这个基准来微调。实测下来,暗部基准设在 EV -2 时,画面依然能保留足够的暗部层次,不至于一片死黑——关键是要配合后处理里的高光和阴影曲线。
对比度这块,我强烈建议在色彩分级(Color Grading)里去调,而不是靠盲目堆光。我的做法是把 Shadows 的强度压到 -0.3 左右,同时把 Blacks 稍微抬起一点(+0.1),这样暗部有“沉下去”的实感,但不会缺细节。高光那端则加一点暖色调,让少数被光照亮的区域显得像“暖烛光”一样有温度。这一冷一暖的对比,就是暗黑王朝整个画面情绪的核心来源。
2.3 体积雾与丁达尔效应的正确打开方式
暗黑场景不能没有空气感。没有雾的暗黑场景就像一个干净的摄影棚,所有的光都显得“假”。我在《暗黑王朝》里用的是指数高度雾(Exponential Height Fog),没有开 Volumetric Fog。原因很简单:项目要支持中低端设备,全动态体积雾的开销太大。
但不开体积雾不等于没有体积光。我需要丁达尔效应当视觉焦点,所以在王座大厅和教堂天窗位置,我用了 Light Shaft(定向光散射)功能。实用参数是:Directional Light 的 Light Shaft Occlusion 开启,强度设在 0.2 到 0.3 之间,散射强度在 0.6 左右,密度打到 0.8。这个组合能够比较真实地模拟出“天光从高处穿过尘埃落下”的感觉。
指数高度雾的参数我记一下:Fog Density 设在 0.02 到 0.05 之间,Fog Inscattering Color 用偏冷的蓝灰色,比如 (0.4, 0.45, 0.6)。千万不要用纯黑做雾的颜色,纯黑会吃掉所有层次,让场景变得像劣质恐怖片。雾的作用是拉开空间深度,也就是让远处的物体被空气遮挡、变淡、偏冷,近处保持清晰偏暖,这个纵深关系立住了,暗黑氛围也就成功了一半。
3. 材质与光影交互的暗黑适配
3.1 PBR材质在低照度环境下的反射破局
次世代场景构建的基本盘是PBR材质,但PBR材质在暗黑低照度环境里有个天然问题:金属和高光材质在光不够的情况下会严重发闷,甚至直接消失。这不是材质问题,是你没给材质足够的“反应空间”。我在标准PBR基础上做了一层暗黑风格的适配。
针对锈蚀金属、旧铜、粗石墙这类高频材质,我把 Roughness 控制在 0.6 到 0.85 之间,避免过低糙度在暗光下形成突兀的镜面高光。同时给这些材质加了细节法线(Detail Normal),在贴图层面增加微表面变化。这样做的好处是,当一束轮廓光扫过墙面时,高光不是一块完整的光斑,而是具有金属颗粒感的碎光,暗黑古旧质感立刻出来了。
另一个做法是控制 Specular 通道。UE5 里可以给材质单独调节高光强度,我在大多数暗黑材质里把 Specular 从默认的 0.5 降到 0.3 左右。这让材质在高光端更内敛,保留了PBR物理正确性的同时,又不至于让暗黑场景里到处是乱反光的“塑料感”。注意:别乱关能量守恒,只调高光权重就够了。
3.2 AO与接触阴影:暗黑场景的质感命门
暗黑场景里,玩家对画面质感的敏感度极高。两个相邻材质的边界如果没有任何过渡,整个场景看起来就会像一张平面图。我在所有暗黑王朝的场景里都极其依赖环境光遮蔽(AO)和接触阴影来塑造“体积感”。
我的流程是:模型阶段先生成高精度 AO 贴图烘焙,用于材质层的静态明暗;场景里再叠加实时接触阴影(Contact Shadow)。UE5 的 Directional Light 上有个 Contact Shadow Length 参数,我设到 0.02 到 0.05。这么小的距离能让墙角和物体相接处产生极细微的压暗,肉眼看到的效果是“物体和地面咬合在一起”,而不是“飘在表面上”。
使用 AO 时有个反直觉的操作要注意:在材质里乘 AO 贴图时,不要直接用,而是先把 AO 曲线拉一下,让中灰色区域稍微提亮,只保留最深的那部分阴影。因为模型烘焙的 AO 一次覆盖得太均匀,在暗黑场景里会让所有东西都显得脏兮兮的。我用 PhotoShop 的色阶把 AO 的黑场提升到 20 左右再乘上去,效果会干净非常多。
3.3 自发光与局部点光源的实战组合
暗黑王朝这类题材免不了要做魔法符文、火把、灯笼、灵魂碎片之类的发光体。这里有个常见误区:为了让这些物体更亮,直接把自发光(Emissive)强度拉到十几甚至几十,结果就是屏幕上出现一块刺眼的白斑,非常出戏。
正确的做法是:自发光材质本身只作为“光的载体”,负责表达颜色和亮度梯度;真正照到环境的亮度,靠场景里的点光源去模拟。比如一个火把,我在火苗模型上用了 Emissive 强度 3 左右的暖橙色自发光,但在旁边放了一个 Point Light,强度 70 坎德拉,半径 120 到 180 单位,衰减指数用默认的平方反比,色温 1800K。玩家看到的是火把周围的地面被真实照亮,而不是一根棍子上贴了个亮片。
另一个细节:精灵类的小光点,我会用粒子系统和极低强度的点光源配合,但保证同一屏内动态光源不超过 6 个。超过这个数,中端显卡的实时阴影和光照计算就会出现明显的帧率波动。这是性能纪律,也是画面品质纪律——光不在多,在于每一次亮起都有意义。
4. 实操流程记录:从灰盒验证到输出
4.1 光照白盒:建模之前先把光的“骨架”打好
我的标准流程是四步走:灰盒 → 光照白盒 → 材质细化 → 后期定调。光照白盒阶段是用纯白材质(Roughness 0.3、Metallic 0)搭出场景的大体量关系,只调光,不管贴图。
这一步最凶险的坑是“白盒光感”和“最终光感”不一致。白盒的白色材质反射率很高,同样的灯光强度下,白盒会比最终带材质场景亮很多。所以我在光照白盒阶段会故意把曝光压低半档,留出材质的“吸光余量”。比如王座大厅最终曝光是 EV -1.5,我在白盒验证时用的是 EV -2。
光照白盒还有一个重要任务:验证光源对人类动线的引导。我每个场景都会让策划同事实际走一遍,标记出“哪里看不清路”“哪里过于压迫”“哪里有视觉焦点”。这轮反馈的数据非常重要,因为它把美术的主观审美转化成了可量化的动线指标。改光从来不是改一个灯那么表面,背后是在改玩家的体验节奏。
4.2 UE5 光照构建:Lumen 与烘焙的选型决策
这是次世代场景构建绕不开的选型问题:用 Lumen 实时全局光照,还是传统的烘焙光照。我的结论是:动态性强、需要高频迭代的场景用 Lumen;完全静态、需要极致性能的走廊墓穴类场景,用烘焙更稳。
《暗黑王朝》的主要场景是混合方案。王座大厅、教堂、主城这类空间开阔、玩家活动自由的区域,开了 Lumen,光反弹、半透明遮挡、动态物体染色都依赖它,视觉效果极其出色。代价是 GPU 开销高,实测在 4K 分辨率下,Lumen 的全局光照部分大概吃掉 3 到 4 毫秒的 GPU 帧时间。为了控制整体性能,这些大场景我主动压低了场景内动态光源数量,靠 Lumen 的间接光撑起环境亮度。
地下墓穴、密道这类窄空间则是烘焙方案。UV 和 Lightmap 精度我控制在 256 到 512 像素每单位(按实际网格密度调整),预计算光照比 Lumen 更稳定,也不会出现暗部噪点闪烁。烘焙逼我必须在灯光上做一次“收束”——因为烘焙出来的明暗关系是固定的,之前调好的每一束光的价值都会被锁定。这也是个很好的自我检查:如果烘焙后画面变难看了,说明灯光本身有问题,不是GI的锅。
4.3 后期处理体积与 LUT 调色:最后一公里
灯光定完之后,真正的“味道”是在后期处理体积(Post Process Volume)里调出来的。我给《暗黑王朝》所有场景做了统一的后期基准:Bloom 强度 0.35,泛光阈值设置在高光区,不然暗黑场景里的火把不会有那种柔和的辉光;镜头光晕(Fringe)强度 0.5,给极端高光边沿加一点紫边,增加电影感;暗角(Vignette)强度 0.4,把视线往画面中心收。
最重要的是 LUT 调色。我不用 UE5 内置的饱和度直接拉数值,而是进 DAVinci Resolve 做了一张自定义 LUT,核心思路是“中间调压暖、暗部抬冷、高光加青”。这张 LUT 直接作为 Color Grading 的预置文件接入所有场景,保证《暗黑王朝》里每个场景虽然灯光不同,但色彩语言是统一的。有朋友可能会问为什么不直接用后期参数,我的经验:LUT 的表达能力强太多了,可以把曲线、分区调色、胶片模拟全部封装进去,不用在引擎里堆一堆运算。
5. 常见问题与排查技巧实录
5.1 场景暗部死黑与灰蒙感的两难
这是我被问得最多的问题:暗黑场景做出来不是一团死黑,就是灰蒙蒙的没氛围。其实这两个症状根子上是同一件事——对比度管理和曝光基准没配合好。
死黑的排查路径:先看曝光基准(EV)是不是压得太狠,再看暗部是否被 Power of Two 的 sRGB 曲线彻底压没了。我的解决办法是把 Post Process 里的 Shadows 强度往正数方向拉 0.2 左右,同时把 Blacks 也抬 0.1,让最暗的地方不完全是 0,而是接近 0.01 的微光。这样保留暗部层次,肉眼还是觉得“暗”,但屏幕上不会出现一块完全没有细节的洞。
灰蒙感的排查路径则相反:一般是雾太厚、或者补光强度失控。把指数高度雾的密度减半,同时检查天空光强度是不是高于主光。我见过很多项目把 Sky Light 开到几万勒克斯,整个场景被天光均匀照亮,没有任何方向性,画面自然就灰了。天光只负责暗部染色,我的经验是不超过主光的 1/3,而且要调 Sky Light 的 Color 向环境色调靠拢。
5.2 Lumen 暗部噪点与阴影闪烁的防御
Lumen 在实时全局光照里效果出色,但在暗部区域的积分采样会出现比较明显的噪点,动态光源下尤其严重。表现为:墙面暗部有颗粒感、阴影边缘有轻微闪烁。这个问题通过后期滤镜是压不干净的,要在源头做防御。
我的做法有两个:第一,把 Lumen 的 Final Gather Quality 从默认的 64 提到 128,代价是 GPU 开销和帧数下滑,所以只对玩家近距离高频注视的区域开;普通远景区用 32 就够。第二,动态光源不要离墙太近,点光源半径内的几何体如果全是高粗糙度材质,Lumen 的间接反弹会反复计算同一个区域,噪点概率会翻倍。给光源留出至少半倍半径的安全距离是个好习惯。
阴影边缘闪烁排查起来比较麻烦,我总结了个经验值:如果 Directional Light 的阴影贴图分辨率低,长距离阴影边缘必然闪烁。把 Shadow Map Resolution 提升到 2048,并打开 Per Object Shadow 来处理关键道具的阴影,能解决掉 80% 以上的闪烁问题。剩下的 20% 通常出现在动态骨骼动画的阴影上,没啥特别好的方案,只能靠阴影距离(Dynamic Shadow Distance)的合理控制——我设的是 3000 单位,超过这个距离的阴影统一交给距离场阴影。
5.3 性能优化:光影与帧率的取舍清单
次世代场景构建最终都要过性能这道关,光影是性能开销的大头。我整理了一份自查清单,每次提交场景前都要过一遍:
| 检查项 | 合理范围 | 超标后症状 |
|---|---|---|
| 实时动态光源数量 | 单视口内不超过 8 个 | 帧率断崖,暗部噪点暴增 |
| Lumen Final Gather Quality | 近景 128,远景 32 | GPU 帧时间超预算 |
| 阴影贴图分辨率 | 关键光源 2048,普通 1024 | 阴影边缘模糊或闪烁 |
| 指数高度雾密度 | 0.02 到 0.05 | 场景灰蒙,层次消失 |
| 后期体积数量 | 每场景不超过 2 个 | 混合出现性能损耗和色偏失控 |
我个人在遇到“想加光但性能不够”的情况时,第一反应不是去降材质贴图,而是先看哪些光是没有明确功能的。暗黑王朝最大的性能优化收益,其实是删掉了三个“为了好看但没人看得到”的装饰性补光。做暗黑场景的精神我觉得就是这点:克制,比堆砌重要得多。
6. 一点个人的体感收尾
从《暗黑王朝》这个项目里,我最深的一个体会是:光影环境制作百分之六十是技术,百分之四十是取舍。UE5 给了你 Lumen、给了你体积雾、给了你一堆可以拉的高光参数,但真正让画面成立的不是你会用哪个按钮,而是你敢不敢把光收掉。我试过把王座大厅的灯光减到只剩一束天窗光的时候,整个场景反而活过来了——因为当光变少,玩家对光的注意力就会加倍,每一个视觉焦点都变得重要。这个体感也延续到了我的其他项目:遇到场景怎么调都不对劲的时候,先删灯,再谈别的。
最后再分享一个小技巧:搭建暗黑场景时,给所有主光都设置好“柔化阴影”(Soft Shadow)半径,哪怕只开一点点。这个动作会让长阴影的边缘带一点点过渡,而不是像刀切一样硬。肉眼可能说不出哪里变了,但画面的立体感和真实感会明显上一个台阶。这个小参数我一般设 0.05 到 0.1,成本几乎为零,收益整个场景。