做县城夜景类场景时最容易被问到的就是“一个多月到底在忙什么”。其实这类场景的难点并不在建模本身而在于“夜景氛围”的组合关系路灯、招牌、室内灯光、月光、雾气、反射、后期调色每一样单独拿出来都不复杂但叠在一起要做到自然、耐看、有生活气息需要反复调整。这篇文章把整个“县城夜晚游戏场景”的制作过程拆开从设计、搭建、灯光、材质、后期到性能优化整理成一套可以直接落地的完整流程适合正在做室外场景、城市街道、乡镇氛围项目的开发者参考。1. 项目背景与目标1.1 为什么选择“县城夜晚”这个题材县城夜晚和城市夜晚在视觉语言上有明显区别。城市夜景的核心是高楼玻璃幕墙的冷色反射、密集的广告屏、车流灯带而县城夜晚更接近“生活化灯光”低矮民居窗户里的暖黄光、电线上挂着的破损招牌、烧烤摊的浓烟和白炽灯、街道转角的路灯昏黄光圈。这种场景在游戏中通常承担剧情铺垫、氛围叙事或者关卡转换节点。从技术角度来看县城夜晚场景是一个很好的综合练习项目。它需要同时处理大面积室外环境的灯光布局建筑、道路、植被、道具的种类多而杂夜景特有的光源对比和后期调色光照烘焙与实时性能之间的取舍。这类场景做熟之后再去做更复杂的城市开放场景很多方法都是通用的。1.2 项目目标与验收标准在动工之前先确定验收标准后面每一步都有了对照依据。本文以“一个县城十字路口及周边街巷”为范围目标如下场景面积约 200m × 150m包含主干道、巷道、居民楼、商铺、夜市摊位、行道树仅使用静态光照支持低端硬件流畅预览核心氛围夜晚 生活化暖光 少量冷色环境光。在做这个项目时我们用一个简单的表格来锁定版本和范围模块说明地形范围200m × 150m建筑数量主干道两侧约 20 栋灯光数量路灯 30 盏、商铺灯 40 个、室内窗光 80 个交互内容基本漫游无复杂游戏逻辑目标帧率编辑器实时预览 30 FPS 以上打包后 60 FPS 左右确定标准后后面每一步做不做、做到什么程度一目了然也方便控制一个多月的工作节奏。2. 场景设计思路2.1 风格定位写实偏风格化县城夜景如果完全走写实路线资产制作成本极高而且对光照精度要求很苛刻。更推荐的做法是“写实结构 风格化灯光”。意思是说建筑的体块关系、道路尺度、物件比例尽量参考真实照片但材质贴图可以使用偏干净的风格化纹理不做太脏太破的效果。这样做的好处是贴图资源要求降低整体画面更干净夜景色调统一灯光控制在较少数量时仍有良好表现后期调色空间更大。参考对象可以搜集“县城老城区”“乡镇十字路口”“夜市街”等关键词。重点看三类内容建筑体块和高度的错落变化招牌、电线、空调外机的分布密度夜晚灯光的色温和位置。这些参考不需要一次收集完毕但在搭建前至少要明确 3 到 5 张核心参考图作为灯光和材质调整的基准。2.2 色彩与光线基调场景整体的色彩关系可以划分为三层环境层远景/天空深蓝到暗青的渐变饱和度不能太高否则会抢掉灯光的颜色辅助层地面/墙体受到月光和环境色影响偏冷灰色视觉焦点层灯光区域使用暖黄色、橙红色与前面两层形成对比。在后期调色里后续会把对比度、饱和度、Bloom 强度统一调整。但基调配色要在布置灯光前就定好不要等做完灯光再返工。2.3 场景布局规划在 UE4 里直接空手摆建筑很容易越摆越乱。建议先做一张简单的平面布局图不需要专业设计软件用 Draw 工具或者网格纸手绘即可。规划内容包括主干道走向与宽度人行道和绿化带位置建筑朝向、退界、层数夜市区域、广场区域、居民区的位置停车场、电线杆、路灯的分布节奏。比如本项目采用“十字型主干道 两侧商业房 背后居民楼”的结构。主干道交叉口放置夜市摊位形成人群聚集的视觉中心。商业房背后是安静一点的老居民楼灯光密度从路口向两侧递减。这样做的好处是灯光布置有了主次关系场景读起来不会像“均匀撒了一路灯”而是一眼能看出哪里是核心区域、哪里是过渡区域。3. 环境准备与项目配置3.1 UE4 版本选择项目选用 UE4.27 作为制作环境。UE4.27 对室外场景的静态光照管线成熟、稳定且大量教程资源都是针对 4.2x 系列遇到底层问题容易找到参考。如果你的项目已经使用了 UE5Lumen 动态全局光照流程会不同但本文的地形、建模、灯光布局、后期思路依然适用只需要把光照烘焙环节换成 Lumen 实时方案。版本需要根据实际环境调整不一定要强制统一。关键是注意以下兼容点老项目从 4.24 升级到 4.27 时光照构建结果需要重新烘焙自定义的 Shader 或插件需要重新编译不同版本之间蓝图基本兼容但个别节点接口会有变化。3.2 创建项目与基础设置新建项目时选择“Blank”空白模板或“Architecture Visualization”模板都可以。实际项目更推荐 Blank因为它没有自带多余的 Demo 内容项目结构干净。创建完成后进入 Project Settings 做一些基础调整[/Script/EngineSettings.RendererSettings] r.DefaultBackBufferPixelFormat0 [/Script/EngineSettings.GeneralProjectSettings] ProjectNameCountyNightDemo [/Script/Engine.RendererSettings] r.AllowStaticLightingTrue上面是一个简化的项目配置片段Core 思路是允许静态光照。更推荐在编辑器面板中操作依次打开 Project Settings → Rendering确认 Static Lighting 选项开启。同时做下面几个步骤禁用不需要的插件比如移动端预览插件、特定平台插件减少编译压力设置项目的默认地图为将来要使用的主关卡设置深度缓冲为 32 位或更合适的精度根据目标平台调整。3.3 目录结构规范美术资源多起来后文件夹管理直接决定开发效率。推荐的项目内容目录结构如下Content/ Maps/ Main_CountyNight.uasset Lighting_Test.uasset Meshes/ Architecture/ Props/ Vegetation/ Street/ Materials/ Buildings/ Ground/ Lights/ Leaves/ Textures/ Buildings/ Ground/ Misc/ Blueprints/ BP_Lamp.uasset BP_ShopLight.uasset BP_WindowLight.uasset BP_DayNight.uasset VFX/ Fog/不强制规则完全一致但要做到任何人打开项目能凭目录名判断资源用途。后期优化时可以按文件夹批次处理避免漏网资源。4. 场景搭建实战4.1 地形与道路系统县城场景通常地势平坦不需要起伏剧烈的地形。在 UE4 中可以使用 Landscape 搭建基础地形也可以用平面 Static Mesh 拼接。推荐做法使用 Landscape 创建低分辨率地形拉升一个平整地面作为基础在需要车道、人行道、石板路的地方用样条工具 Spline 拉出道路形状在道路表面加一层 Decal 或者使用分层地形材质处理车辙、井盖痕迹。道路的宽度要参考真实尺度。双向两车道县城道路大约 12 米宽两侧人行道各 3 到 4 米。如果只是按感觉拉路容易出现车开不进、建筑比例失衡的问题。在 UE4 中搭建简易道路演示思路如下在 Place Actors 面板搜索 “Spline”创建一根样条调整样条点贴合地形使用 Spline Mesh Component 或者直接把 Static Mesh 沿线摆放道路模型选择带有长度单位的素模。如果需要把路面 UV 方向统一需要在模型制作时就预留好 UE4 的材质坐标不要完全依赖世界坐标映射。否则道路拼接处会有明显纹理错位。4.2 建筑搭建模块化组合建筑是场景中数量最多的资产。如果每一栋楼都单独做一个完整模型工作量会非常大。推荐模块化做法做 4 到 6 种标准墙体模块包括实墙、带窗墙、带门墙、转角墙、屋顶模块每种模块做好原点、碰撞、LOD在编辑器里像搭积木一样组合出不同样式的建筑同一批模块通过材质变化形成不同的颜色和材质感。用这种方式二十栋楼只需要制作少量基础模块即可完成外观变化。建筑内部不需要完整建模只需保证从窗外看不到漏缝。建筑摆放顺序建议从主干道两侧开始先摆商业房再摆路口转角建筑最后填充背面居民楼。这样能够控制好整个场景的天际线和体块节奏。4.3 植被与道具布置县城夜晚场景的植被不需要大片森林。主要是行道树街角花坛、灌木居民墙角的杂草丛。植被在夜晚的重要作用是遮挡灯光、制造阴影层次。比如树冠把路灯灯光切碎地面出现斑驳的树影整体画面立刻真实不少。因此行道树的间距要结合路灯位置错开避免全部对称排列。道具方面优先准备以下类别垃圾桶、消防栓、电表箱电动车、自行车、三轮车塑料凳、烧烤架、遮阳伞招牌、灯箱、电线杆、电缆线。电动车和自行车可以用简模做几个颜色变体密集停放在夜市区域。一个有趣的规律是县城夜晚的“生活感”很大程度上来自这些静态道具的随机分布绝对不要按统一间隔阵列摆放稍微缩放、旋转、错位一点效果立刻不同。4.4 布景细节生活气息“县城感觉”不是靠大地方撑起来的而是靠小细节。具体可以在以下位置增加内容商铺卷帘门半开门口放拖把和水桶电线上晾挂衣服用可提示性静态网格附件做行道树下停着几辆共享单车或电动车楼顶水塔、太阳能热水器、天线锅墙面空调外机垂下的滴水管。这些内容单个资产体量不大但数量多、摆放密是整个场景工作量的大头。在做这类角落细节时建议用 “Actor 组合” 方式把多个小道具做成一个 Blueprint Actor便于批量摆放和后续性能优化。下面是一个简易路灯蓝图的逻辑例子展示如何将灯光和网格组合在一个 Actor 中Blueprint: BP_Lamp Components: - StaticMeshComponent (灯杆 灯头) - PointLightComponent (灯光) - LightProfileComponent (IES 配置可选) Construction Script: - 根据变量参数调整光照半径和强度在场景中放入 BP_Lamp将灯头略微朝下调整模拟真实路灯的照射角度。5. 夜晚灯光设计核心5.1 灯光类型的选择夜晚场景的主要光源种类如下灯光类型用途关键参数Directional Light月光、模拟整体环境光颜色偏冷蓝强度最低Point Light路灯、室内灯泡、摊位照明衰减半径小暖黄色Spot Light聚焦照明比如橱窗射灯、夜市摊灯设置内圈/外圈锥角Rect Light如有大面积窗户透光、霓虹灯补光仅在高质量渲染下使用最关键的一点县城夜晚的光源强度一定不能拉满。要相信“暗的地方暗到位亮的地方才有意义”。先压低整个环境的亮度再逐一把灯光放上去。5.2 路灯照明方案路灯是主干道的主要光源。推荐使用 Point Light 或者 Spot Light。路灯参数参考思路颜色色温偏暖黄RGB 近似1.0, 0.8, 0.55或255, 204, 140强度静态光照下通常 2000 到 5000根据灯光单位调整UE4 的亮度单位是 Lux/Candela需要以实际效果为准衰减半径15 到 25 米让灯光只照亮附近路面不要一个灯光覆盖全街锥角如果是聚光灯内圈 60 度、外圈 100 度左右让光线洒在路面。把路灯做成蓝图后逐个摆放方便批量调整。需要注意路灯间距大约每 20 到 25 米一盏灯光的圆斑交叉但不完全重合。路灯照射到地面上时可以通过给地面材质添加细节法线让灯光下的路面有细微颗粒反射增强油润感。5.3 室内窗光与商户灯室内窗光是县城夜景非常重要的层次。它让建筑看起来“有人住”。窗光设置原则颜色以暖黄、橙黄色为主温度感强使用平面光或低强度点光源放在窗户内侧不要让所有窗户都有光保持 60% 亮窗、40% 暗窗不同房间的窗户光强度有差异有的亮、有的暗。商铺门面光则需要更强的存在感。可以在商铺门口、招牌下方放置点光源形成门口的小范围亮区这个亮区与室内窗光的柔和感形成对比。5.4 灯光蓝图控制与闪烁在场景中加入“闪烁灯光”会增加真实感但不能过度。常见做法是用 BP_Timeline 控制灯光的强度或开启状态。以“坏路灯”为例蓝图逻辑是Event Tick - Branch (判断是否启用闪烁) True - Timeline 驱动 Intensity 在 0 到 1 之间波动 Set Intensity False - 保持默认强度实现时建议把可闪烁的灯光数量限制在 3 到 5 个闪烁频率不能太快模拟电流不稳即可需要把灯光参数设置为可实例化否则无法每盏灯单独控制。如果使用 C 实现逻辑相同核心是控制 PointLightComponent 的 SetIntensity()。5.5 光照烘焙设置静态光的烘焙是决定最终画面质量的关键环节。在场景基本搭建完成后不要每次调灯光都立刻重新烘焙全图建议先使用预览质量。烘焙前要检查所有主要灯光设置为 Static 或 Stationary需要动态交互的灯光设置为 Movable但数量要严格控制场景中的 Static Mesh 有合适的 LightMap UVWorld Settings 中开启 Allow Static Lighting。实际操作时在编辑器工具栏找到 Build → Build Lighting弹出构建窗口。构建品质选择 Medium 做中间验证最终输出时使用 High 或者 Production。光照烘焙完成后检查以下位置墙角有没有漏光窗户光有没有在墙体内部产生奇怪投影树木阴影是否产生过于密集的暗区地面大面积区域是否过暗。漏光问题通常来自 Lightmap UV 重叠或光照图分辨率不足。解决方法是给出问题的物体单独分配更高的光照图分辨率。6. 材质与后期处理6.1 基础材质制作材质类型按照用途可以分成三类墙体材质使用平铺贴图 法线粗糙度 0.7 到 0.9几乎没有高光路面材质贴图平铺大一些粗糙度 0.6 到 0.8可以加细节法线金属/玻璃材质粗糙度较低高光反射较强。UE4 中使用 PBR 材质时注意 BaseColor 和 Roughness 是关键。夜间灯光较弱粗糙度对画面影响非常大。如果一个物体表面太光滑微弱的灯光会产生刺眼的高光点太粗糙则会显得死板。6.2 自发光材质与霓虹灯招牌、灯箱、LED 屏需要使用自发光材质。在 UE4 材质编辑器中可以把自发光颜色接到底色和 Emissive 输入节点结构: TextureBaseColor - BaseColor TextureEmissive - Emissive Color EmissiveColor * EmissiveIntensity - Emissive Color推荐做法是给 Emissive 材质留一个 “自发光强度” 参数方便在后期统一调整。比如招牌自发光强度设置为 3 到 5灯箱设置为 2 到 4不要让所有自发光都拉满否则画面会花。霓虹灯的重点是颜色和形态不是大面积亮度。窄窄一道彩色灯管加上一点点辉光效果就能撑起一个视觉焦点。6.3 后处理体积与调色在场景中放置一个 Post Process Volume并勾选 Infinite Extent让它作用于整个场景。后处理参数参考思路Bloom强度 0.6 到 1.2阈值不宜过低否则普通灯光会大面积泛白曝光模式使用 Manual 或 EV100锁定一个适合夜晚的曝光避免镜头转动时画面忽明忽暗Color GradingSaturation 0.7 到 0.9对比度 1.0 到 1.2让暗部偏蓝、亮部偏暖Tonemapper可以使用 ACES 或 Filmic画面层次更丰富。调色时建议通过 “分层调整” 进行不要一个滑块拉到底。先调整整体曝光再调阴影色温和饱和度最后用 Bloom 补充光感。后处理参数设置如下BloomIntensity: 0.8 BloomThreshold: 1.1 AutoExposureMinEV100: -5 AutoExposureMaxEV100: 3 ColorGradingSaturation: 0.85 ColorGradingContrast: 1.15 ColorGradingGamma: 1.0具体参数需要根据实际画面反复微调不要照抄数值。核心思路是让画面“暗而不黑、亮而不白”。7. 性能优化与发布7.1 DrawCall 与实例化县城场景的静态物件数量很大很容易把 DrawCall 打满。主要优化手段有四种使用 Hierarchical Instanced Static MeshHISM批量放置行道树、路灯、垃圾桶等重复物件合并贴图减少材质切换使用 Level Streaming 划分区域加载将建筑内部不可见部分删除面片。在编辑器里选中多个静态网格可以使用“Merge Actors”工具合并成单个 Actor但要注意光照 UV 不能丢失。推荐优先使用 HISM保留每个实例的独立变换性能更优。7.2 LOD 与碰撞每个静态网格都要设置 LOD。方法一用 UE4 自带的 Auto Generate LOD在 Static Mesh 设置面板开启 方法二在建模软件中手动生成 Low、Medium 两个精度的 LOD。LOD 距离可以根据物件大小设置。建筑远处用 Medium近处用 High大型建筑可以设置三个级别的 LOD。同时检查碰撞体不要使用每面碰撞而是用 Box、Sphere 等简单碰撞体。7.3 光照性能优化静态光照的优势是烘焙完成后运行时不占用实时计算。但是对于 Movable 动态灯光每增加一盏都会大幅影响性能。因此项目里所有路灯、招牌光都保持 Static只保留少量必要的交互灯为动态。对于大范围地表可以拆分多个光照图分区把分辨率控制在一个合理范围内。过大的光照图分辨率会导致内存增加和烘焙时间缓慢。7.4 项目打包打包前检查所有关卡是否已经烘焙完成后期处理体积是否覆盖到所有进入区域是否有多余的调试蓝图资产纹理大小是否达到目标平台限制。打包时选择自己对应的平台在 Project Launcher 中创建打包任务。打包完成后在目标机器测试帧率是否达标内存占用是否在合理范围输入设备的映射是否生效。8. 常见问题与排查思路8.1 场景太暗或太亮问题现象常见原因解决思路整体一片黑曝光参数过低或没有灯光先检查 Directional Light 强度再提高曝光 EV亮部过曝Bloom 强度过高或曝光参数偏高降低 Bloom 阈值锁定曝光值局部灯光无法照亮地面衰减半径过小增大 Point Light 的衰减半径夜景没有层次灯光色温全部相同增加冷暖对比光源8.2 光照烘焙问题问题现象常见原因解决思路烘焙后有漏光阴影Lightmap UV 重叠或分辨率不足重新展 UV提高光照图分辨率烘焙时间过长场景太大或灯光过多拆分地图分区块烘焙烘焙结果与预览不同质量设置不一致最终统一使用相同质量档位8.3 材质与渲染问题问题现象常见原因解决思路自发光材质过曝Emissive Intensity 太高降低强度到 1 到 3玻璃窗反光太强Roughness 偏低提高 Roughness减少反射地面反射灯光不均匀缺少细节法线添加细节法线贴图8.4 外接设备与漫游输入映射场景制作过程中为了更快地漫游查看夜景效果通常会把 Xbox/LED 等外接手柄或键盘接入 UE4。外接设备的按键映射可以在 Project Settings → Input 中配置。以手柄为例ActionMappings(ActionNameMoveForward,KeyGamepad_LeftY,Scale1.0) ActionMappings(ActionNameMoveRight,KeyGamepad_LeftX,Scale1.0) ActionMappings(ActionNameLookUp,KeyGamepad_RightY,Scale1.0) ActionMappings(ActionNameTurn,KeyGamepad_RightX,Scale1.0) ActionMappings(ActionNameJump,KeyGamepad_FaceButton_Bottom,Scale1.0)需要注意不同输入设备在 UE4 中的映射名称不同。手柄默认映射可以在 Input Settings 中查看。如果在打包后无法使用外接设备优先检查两个问题插件是否开启了 RawInput 的支持输入映射是否分配给了正确的 Player Controller。更稳妥的方式是使用 Enhanced Input 系统。如果项目版本较老仍然使用旧版 Input 系统则按旧版映射方式配置即可。实际项目推荐在开发时就接入外接设备映射方便实时调试避免每次都要用键鼠操作。9. 最佳实践与工程建议9.1 命名规范与资源管理项目资产多了以后命名混乱会导致资源丢失和引用损坏。推荐统一格式类别_对象_变体_精度 例如 SM_Building_Wall_Window_LOD0 M_Road_Asphalt_Dirt T_Road_Asphalt_Diffuse BP_Lamp_Street材质前缀使用 M_贴图前缀使用 T_蓝图前缀使用 BP_静态网格使用 SM_。这可以从名字上一眼判断资源类型。9.2 版本控制与备份做户外场景时间跨度长版本管理非常重要。推荐做法使用 Git LFS 管理大型二进制资源大版本改动前先做一份备份分支光照烘焙结果使用时记录下来作为后续对照。不要每天直接原地覆盖防止出现灯光调乱后回不去的局面。9.3 灯光设计习惯在布置灯光时建议使用分层法先布置基础环境光月光、天光满足整体可见再布置主要功能灯光路灯、室内窗光最后布置氛围特效灯光招牌、霓虹、荧光。每次调整只改一层。如果整体画面偏花优先减少氛围灯光数量。9.4 性能监控场景开发过程中要经常监控性能不要等全部做完再优化。常见做法是使用 stat unit、stat scenerendering 命令观察 GPU 和 DrawCall每完成一个区域记录一次帧数和 DrawCall把高消耗区域标记出来优先优化。一个简单的命令行示例stat unit stat scenerendering stat rhi在编辑器运行后可以实时看到 Frame、DrawCall 等数据。如果 DrawCall 超过 3000就需要考虑合并资源或使用实例化。9.5 移动端与 PC 端的差异如果项目目标是 PC可以适当增加材质复杂度和灯光数量如果是移动端必须大幅度压缩移动端尽量使用全静态光照关闭不必要的体积雾降低 Post Process 的 Bloom 开销减少半透明材质数量。这些差异要在项目起步时确定不要后期再大规模切换平台。10. 总结与后续拓展到这里一个县城夜晚游戏场景的完整制作流程就梳理完了。从项目背景、场景设计、地形建筑搭建到灯光布置、材质后期、性能优化和常见问题排查基本覆盖了 UE4 室外夜景场景的核心环节。如果按照这个流程做一个 200m × 150m 的县城节点场景一个开发者在一个多月内完成是完全可行的。实际工作量的分配重点在细节布景和灯光调优而不是大体量建模。后续可以从以下几个方向继续深入加入交互逻辑比如摊位老板对话、街边小游戏增加昼夜循环系统让县城在白天、黄昏、夜晚之间切换接入 AI 行走逻辑让场景更有生活感做移动端适配把一个县城节点跑在手机上。如果你正准备启动类似的项目建议先把本文提到的布局规划、灯光分层、性能优化思路在项目文档里写清楚再动手。最后记住夜晚场景的效果上限往往不取决于灯光数量而取决于你对“暗”的控制程度。