ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

UE5山地场景制作全流程:从地形雕刻到光照叙事

UE5山地场景制作全流程:从地形雕刻到光照叙事 在 UE5.7.4 里创建“山地日记”这个山地场景时最考验人的不是某个按钮在哪而是如何把地形、植被、光照、雾气和叙事串成一条逻辑线。很多人打开空项目后第一反应是刷地形结果山是堆出来了拍照也还行但角色一走进去会发现草木比例不对、光影发灰、视线被挡死整个场景没有“日记感”。这篇文章会把一条完整的制作链路拆开讲从项目创建、地形雕刻、植被铺装到光照后期、交互日记点、运行验证和性能优化最后给你一张可以直接拿去对照的检查清单。上手前先记住一个观念环境制作不是拼资产而是布置一条让玩家愿意活动的路线。1. 先理解“山地日记”这个环境要解决什么问题1.1 环境叙事为什么不是随便摆一座山“山地日记”这个名字本身包含着一条叙事线索一个在山里活动的人沿途留下日记玩家通过环境来发现这些记录。所以场景不能是均匀的山坡加满地图的树而应该设计成“一段可被发现的路径”山谷入口、溪流边、半山平台、悬崖观景点、废弃木屋每一处都要有朝向和视野。环境叙事的地图设计目标和纯竞技射击地图不一样竞技地图要求结构对称、路线清晰、交战距离可控而叙事场景要求地形有主次、有遮挡、有收放。雕刻山体的时候优先考虑“玩家的视线在哪里被挡住在哪里突然打开”而不是“哪个顶点更陡峭”。做这个场景之前先在纸上画一张粗略路线图从山脚营地的日记出发沿溪流上行翻过一处山脊到达能看到整片山谷的日记点。之后的所有地形雕刻、植被摆放、光照方向都围绕这条路线安排。1.2 UE5 环境制作涉及的核心系统在 UE5.7.4 中做一个室外场景需要用到的系统比室内场景更复杂。户外环境的视觉表现不再是靠单盏点灯和一堵墙反射而是由多个系统共同决定地形 Landscape负责大范围地表高度和颜色分层。植被 Foliage负责树木、灌木、草和岩石的分批摆放。天空与大气 SkyAtmosphere决定天空颜色、太阳方向、大气散射。体积云 VolumetricCloud负责云层形状和光线遮挡。指数高度雾 ExponentialHeightFog控制远处空气透视和大气层次。体积雾 VolumetricFog控制光影穿透过云雾时的散射效果。光照 Lumen 定向光决定全局光照和间接光。后期处理 PostProcess负责曝光、泛光、色调映射和颜色风格。这些系统不是独立开关而是互相影响的。比如你把雾调浓山体远近层次会好很多但光照和曝光也会随之变化你把云调成浓积云体积光会变强但场景整体亮度又会下降。所以环境制作最好按“先结构、后光照、再效果、最后调色”的顺序推进不要一开始就堆特效。1.3 版本和项目类型怎么选标题写的是 UE5.7.4但下面这组流程在 UE5 整个 5.x 系列里基本通用。不同版本的主要差异在于菜单名称、默认开启的功能和一些新工具的入口核心工作流没有本质变化。项目类型上如果你只做环境展示和简单的日记交互选择“Blank”蓝图项目就够了。蓝图项目启动快不用编译 C适合雕刻地形和摆放资产。如果后续要写复杂的天气系统、多人同步或自定义渲染逻辑可以创建 C 项目或者先蓝图后迁移代码。名字建议用英文MountainDiary避免中文项目名引发路径和编译问题。注意创建项目时不要勾选“Starter Content”也可以但建议至少保留基本的Mannquin和移动控制器用于测试方便后期跑进场景里检查比例和碰撞。2. 创建项目和基础配置先搭一个干净的地基2.1 新建项目从 Epic Games Launcher 打开 UE5.7.4选择 New Project。游戏模板选择“空白 Blank”项目命名为MountainDiary目标平台选桌面 Desktop项目位置放到一个不含中文和不含空格的根目录下例如D:\UnrealProjects。项目创建后会自动生成Config、Content、Source蓝图项目没有 Source等目录。先把Content下的目录结构建好不要等到资产多了再整理。Content/ Maps/ Environments/ MountainDiary/ Assets/ Meshes/ Textures/ Materials/ Foliage/ Audio/ Blueprints/ UI/ Data/这个结构不是硬性规定但环境项目资产量会很快增长。地形材质、植被网格、UI 资源、蓝图脚本各放一个顶层目录后面修改和移交都会轻松很多。目录名尽量和项目名一致例如在Environments/MountainDiary下放这个场景专属资产避免和测试地图混在一起。2.2 项目设置里需要先改的地方打开Edit Project Settings先检查三处第一个是 Maps Modes。把 Editor Startup Map 和 Game Default Map 都设置成你新建的主关卡例如MainMap。否则每次打开编辑器都会进入默认空白关卡还要手动切换。第二个是 Rendering。如果你不熟悉具体参数可以直接使用默认项目设置。但环境展示通常希望开启 Lumen 全局光照和虚拟阴影贴图可以在控制台里确认状态r.Shadow.Virtual.Enable1 r.Lumen.DiffuseIndirect.Allow1 r.VolumetricFog1 r.VolumetricCloud1这些命令可以直接输入到输出日志旁边的控制台命令行中。如果希望每次启动都强制开启可以把它们放到DefaultEngine.ini的[SystemSettings]小节里。不同 UE 版本的默认渲染后端不一样比如在某些 5.x 版本中 DX11 下无法开启 Virtual Shadow Maps需要用 DX12 或 Metal。如果你在控制器栏弹出“该功能需要 DX12”的提示就到项目设置的 Platform Windows 里把默认 RHI 改为 DX12。第三个是把默认场景关闭。创建项目后关卡里通常有一个定向光、天空球和玩家出生点这些可以全部删掉从干净场景开始搭建避免旧参数干扰判断。2.3 导入资产前的检查清单环境项目会导入大量外部资产可能是 Quixel 下载的扫描模型也可能是自己制作的植被。导入前按这张表筛选能省很多返工时间检查项要求常见问题网格体碰撞能自动生成或已有简单盒体碰撞大量植被没有碰撞会导致寻路和物理异常树冠透明度透明或不透明模式统一树木叶子显示黑边多数是透明模式或双面设置问题LOD至少 3 层距离切换合理远景树被裁剪成大块色斑是因为 LOD 距离过近贴图尺寸优先 2K超大远景可用 1K4K 贴图过量使用会把显存吃满材质数量尽量合并到同一材质实例每棵树都独享一整套材质会造成 Draw Call 飙升世界比例模型尺寸和 UE 默认单位一致草比人高通常是把外部软件模型的单位弄错了3. 用 Landscape 雕刻出山体地形是环境的地基3.1 创建 Landscape 的尺寸和分辨率在Place Actors面板里搜索Landscape拖到场景中后会进入地形模式。新建地形时有三组参数Overall Resolution、Section Size、Component Size。直接给一组适合“山地日记”场景的经验值整体分辨率选择 1008x1008 左右Section Size 选择 63x63 或 127x127Component Size 根据画布提示保持 1x1。这套参数大约对应 1 到 1.5 公里的活动范围。如果你只是想快速看效果选 512 级别也行但山体和路径会缺少细节。分辨率不是越高越好。地形分辨率高意味着顶点数量多刷材质和刷植被时容易卡而且光源烘焙和运行时性能都会受影响。先按较低的精度把大范围山体走势刷出来再决定要不要用更高分辨率重建。地形分辨率只是决定网格密度不决定世界大小世界大小由缩放值控制。千万不能把“分辨率”当成“尺寸”否则会出现地形碰撞与视觉不同步的问题。3.2 雕刻山脊、山谷和步行路径进入 Landscape 模式后左侧会出现工具面板。第一个阶段用选择Select确定编辑区域然后用雕刻Sculpt工具刷高度。针对“山地日记”建议按这个顺序操作先整体压低山谷使用大笔刷、低强度把地形刷成一个大碗状让主活动区域低于周围山脊。再堆起两侧山脊笔刷大小设为场景宽度的一半强度不要打满逐层叠加。确定溪流路径沿着设计图上的路线用 Flatten 工具把路径刷成一个缓慢下降的斜坡。最后用手抓笔刷补充细节在山的交接处做出小的突起和凹陷避免地形看起来像是蛋糕被切了一刀。Sculpt 工具有几个关键参数值得理解。Brush Size 控制笔刷半径这个不用解释。Brush Falloff 控制笔刷边缘的过渡范围数值越高边缘越虚模拟自然坡地时建议保持 0.5 以上。Strength 控制每次刷的高度增量刷大结构时用 0.2 到 0.4补细节时降到 0.05否则地形会很快变成坑坑洼洼。注意雕刻时不要用强度拉满去刷同一块区域。即使 Brush Falloff 很大连续点击也会形成明显台阶。正确做法是设置较低的 Strength然后用压感笔或鼠标反复轻扫。3.3 通过噪声和样条工具让地形更自然纯手刷容易出现两个极端要么太规律、像梯田要么太破碎、像月球表面。一个实用的方法是使用 Landscape 模式里的Erosion或Noise工具。Noise 工具会给地形增加一层随机扰动适合模拟风化后的岩面。Erosion 模拟水流冲刷适合在溪流路径上做出河床凹陷。不过这些工具也是“放大器”地形基础结构不好时噪声会把错误放大而不是修正结构。正确的顺序是先把走势刷对再用低强度噪声做细节微调。刷完如果发现某条山脊线上有奇怪的尖峰用 Smooth 工具沿着山脊方向刷一次让表面重新连贯起来。如果你希望路径和山脊是精确曲线控制也可以使用样条工具把路径做出来再通过 Landscape Spline 把地形自动“贴”到样条上。这个方案适合需要精确对齐道路或水利设施的场景但对于自然山地手刷加噪声通常效率更高也更自然。3.4 分层材质草地、岩石、泥土和雪如何混合地形刷好后需要在 Landscape 材质里做分层。新建一个 Material节点类型选择 Landscape Layer Blend。在材质的 Layer Parameters 里添加 4 层Grass草地适合山谷和平缓区域。Rock岩石适合山脊和崖壁。Soil泥土适合路径和裸露地。Snow雪适合高海拔区域。使用 Landscape Sample Color 或 TextureSample 节点把每层的颜色贴图、法线贴图和粗糙度连上去。最常用的连接方式是 Layer Blend 输出连接到 BaseColor、法线、Roughness。然后在材质细节面板里勾选Used with Landscape否则地形材质不会生效。材质创建完成后进入 Landscape 模式切换到你创建的地形材质通过 Paint 工具给不同区域绘制权重。刷权重时要注意过渡不要在山脊和山谷之间用一条硬线分隔而是用低硬度笔刷在两个区域之间反复扫让草地逐渐过渡成岩石让岩石逐渐过渡成雪。分层材质只解决地表颜色和法线还没有解决物理材质和脚印。后续如果角色走在地面上要产生不同的脚步声音或泥泞脚印需要再给每层添加 Physical Material 映射。这个可以排在主场景完成后再做。4. 植被与细节从“空山”变成“有人活动过的山”4.1 导入并创建 Foliage 类型植被在 UE5 中使用 Foliage 工具摆放。先把树木、灌木、草和岩石的静态网格导入项目然后在静态网格右键选择Create Foliage Type生成对应的 Foliage 资产。Foliage Type 的作用是把 Static Mesh 转成受密度控制、可批量实例化的植被对象。普通静态网格如果不转 Foliage Type直接大量复制会造成严重的 Draw Call 上升Foliage 工具会将相同网格实例化渲染大幅提高同一个区域内摆几千棵草的性能。在“山地日记”这个项目里建议准备以下植被资产植被资产作用摆放区域高针叶树远景山脊的主轮廓山腰到山顶中低灌木路径边缘遮挡山谷、溪流边草簇地面覆盖开阔草地、缓坡岩石块打破地面均匀感山脊、溪流岸、转折处4.2 摆放密度、随机旋转和缩放参数选择 Foliage 工具后左侧会列出所有 Foliage Type。点击需要摆放的类型右侧会显示数量、密度、缩放范围等参数。需要重点关注的参数有三个密度/间距控制每平方米摆放数量。大范围远景树密度可以低到 0.2 以下近景草密度可能要到 20 以上。密度过高会直接卡死场景。随机缩放给每个实例一个缩放范围。注意不要把缩放范围拉得太随机森林里的树通常只是小范围变化如果缩放从 0.5 到 2.0看起来会像不同年龄的树堆在一起在近景处会显得突兀。随机旋转树木和灌木建议旋转范围 0 到 360让朝向自然。草和岩石的旋转影响不大但也要打开否则所有元素看起来像复制粘贴。摆放时先用低密度大范围刷一遍远景树把山的轮廓建立起来再缩小笔刷在路径附近种灌木和草。节奏上要“近密远疏”靠近玩家走路路径的地方密度高、种类丰富远处的山脊只需有足够剪影。4.3 用 Procedural Foliage 做自动生成手摆 Foliage 很直观但如果你需要在一片很大的山地上快速生成符合规则的植被可以使用 Procedural Foliage Volume。它的工作方式是在场景里放置一个 ProceduralFoliageVolume设置需要在其中生成的 Foliage Type然后配置每个类型的 Density、Tilt、Scale 等生成规则。运行 Generate 后工具会在范围内按规则摆放实例。这个方案适合作为“第一遍铺装”。先生成全局植被再删除路径附近太密集的部分最后手工补充关键位置的造型植物。如果直接手动刷整个 1 公里地图既慢也容易造成密度分布不均匀。注意Procedural Foliage 生成的是独立实例仍然会占用场景资源。如果要在大世界地图中使用还需要配合 HLOD 和 World Partition 考虑加载范围学习环境下直接使用即可。4.4 Nanite 和植被的兼容问题UE5 中很多高模资产可以用 Nanite 做自动 LOD但植被有特殊性。树叶通常包含半透明或双面材质传统 Nanite 网格对半透明支持有限制。不同 5.x 版本对 Nanite Foliage 的支持程度不同。如果发现树木在特定角度闪烁或者出现阴影错误优先检查树的材质是否开启双面以及是否强制触发了 Nanite 的可见性计算。不要一遇到树叶问题就关掉 Nanite先确认是不是 LOD 距离和材质透明模式的问题。地形材质本身不是 NaniteNanite 主要针对静态网格。在环境项目里Nanite 适合岩石、地面大石块和建筑结构不适合所有细小枝条和叶片。让 Nanite 负责大型不透明物体让传统 Foliage 负责树叶和草往往是最稳定的组合。5. 光照、天气与后期决定“山地日记”的情绪5.1 搭建天空、大气和体积云在场景中创建三类 ActorDirectionalLight、SkyAtmosphere、VolumetricCloud。DirectionalLight 是太阳主光。把 Mobility 设置为 Movable这样它能在运行时改变方向支持白天黑夜循环。在细节面板里其旋转角度决定太阳高度。Light Source Angle 控制阴影的锐利度数值越小阴影越硬适合正午数值越大阴影越柔和适合清晨或黄昏。SkyAtmosphere 负责大气散射。它与 DirectionalLight 一起决定天空颜色。你可以在Place Actors中直接创建 SkyAtmosphere它会根据此时太阳位置计算大气效果。如果是雨雾天气可以降低大气密度让天空看起来灰一些。VolumetricCloud 负责云层。默认云层是低高度层积云要调高云层高度和厚度来配合山地场景。云层对光源方向的反馈非常敏感设置云层厚度较大时太阳投射下来的光会形成明显的天光柱。5.2 指数高度雾的参数逻辑场景里添加 ExponentialHeightFog这是室外环境最容易被忽略但影响最大的系统。它的核心参数有参数作用调大效果调小效果建议Fog Density雾的整体浓度远景发白山体轮廓消失场景干硬缺乏空气感从 0.01 开始试Fog Height Falloff雾随高度衰减速度低处浓、高处清晰雾平均分布在山间0.2 附近比较自然Volumetric Fog体积雾总开关光穿过雾产生体积感大气效果减弱室外开 1Volumetric Fog Distance体积雾计算范围远处细节下降更费性能4000 到 8000 合适雾不要一次拉满。理想状态是站在山脚看远方树木能看到隐约的空气透视但还能分辨山体轮廓站在山顶看向山谷雾应该集中在谷底而不是覆盖太阳。5.3 后期处理体积曝光、泛光和色调映射在场景中创建 PostProcessVolume设置 Infinite ExtentBounds 无限范围然后调整参数。最先要处理的是曝光。打开 Auto Exposure把 Min EV100 和 Max EV100 控制在一个合理范围内。室外场景常用范围是 -2 到 14。如果过曝说明 Max EV 太高导致相机在强光下自动提高感光度如果画面太灰把 Exposure Compensation 向下调。接下来是泛光 Bloom。山地场景里阳光穿过树木和云层时适度的泛光会增强氛围但调太大会像手机滤镜。建议把 Bloom Intensity 保持在 0.5 左右然后通过 Threshold 控制只让高光区域发光。色调映射是影响最终颜色的重要一步。UE5 默认 ACES 色调映射器通常是安全选择。如果想让画面偏冷可以在 Color Grading 的 Shadows 里往蓝色调一点在高光的 Color 里加一点暖黄色。这个步骤放到整个环境搭建完成后再做因为光照和雾的任何修改都会影响最终调色结果。5.4 做一个简单的白天黑夜循环如果想给“山地日记”加上时间流逝感可以写一个非常简单的日夜循环逻辑。蓝图或 C 都可以核心思路是把一天 24 小时映射成定向光旋转角度然后每小时更新天空和雾。C 版本的关键帧代码可以这样写// AMountainDiaryEnvironmentActor.cpp void AMountainDiaryEnvironmentActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); if (!SunLight) return; TimeOfDay DeltaTime * TimeScale; if (TimeOfDay 24.0f) TimeOfDay - 24.0f; // 将 24 小时映射到 360 度6 点在地平线12 点在头顶 float SunYaw 0.0f; float SunPitch (TimeOfDay - 6.0f) / 24.0f * 360.0f; FRotator SunRotation; SunRotation.Yaw SunYaw; SunRotation.Pitch SunPitch; SunRotation.Roll 0.0f; SunLight-SetActorRotation(SunRotation); // 根据时间调整光照颜色 FLinearColor Color GetSunColorForTime(TimeOfDay); SunLight-SetLightColor(Color); }这只是说明思路的片段。实际项目里你还需要给 SkyAtmosphere 和 VolumetricCloud 设置太阳高度参数否则太阳转动时天空的颜色和云层不会联动变化。如果是蓝图实现逻辑相同在 Tick 中用 SetActorRotation 改变定向光角度再用 Lerp 在黑夜和白天颜色之间做插值。注意日夜循环会影响整个场景曝光和雾的颜色。建议先固定一个最舒服的黄金时间段完成地形和植被制作再在最后加入日夜循环。否则边刷地形边调光照你会被时间和颜色变化干扰判断。6. 加一点叙事日记收集点怎么做6.1 放置可交互的日记点在场景里创建BP_DiaryPage蓝图 Actor。这个 Actor 由三部分构成StaticMesh一张纸张或者一本小册子的模型。Box Collision可重叠范围用于触发交互提示。Rotating Movement可选让日记页在场景中轻微旋转作为视觉提示。日记点不要藏在太多犄角旮旯里。它应该出现在视线自然引导的位置路转角、木屋门口、悬崖边。碰撞范围建议 150 到 200 厘米太小玩家走偏一点就触发不到太大则会被远处的玩家提前触发失去“走近发现”的仪式感。6.2 用 UMG 制作日记弹窗创建一个 Widget Blueprint比如WBP_Diary。在面板里添加一个 Border 作为背景里面放一个 TextBlock 显示标题一个 MultiLine TextBlock 显示正文。把控件的 Is Focusable 设为 true这样键盘按键才能正确响应。在BP_DiaryPage里把日记内容和 UMG 绑定起来。建议给 Actor 添加两个字符串变量DiaryTitle和DiaryContent。当玩家进入碰撞体时调用CreateWidget生成日记 UI把这些变量传进去。没有数据驱动时也可以用 DataTable 管理日记内容具体做法在 6.3 说。6.3 用 SaveGame 记录收集进度日记只有三五条时用一个 GameInstance 的数组就能解决。假设你的日记有 20 条以上就引入 SaveGame 系统把已经收集的日记 ID 保存下来。先创建一个 UDataAsset 或 DataTable 来管理日记条目USTRUCT(BlueprintType) struct FDiaryEntry { GENERATED_BODY() UPROPERTY(EditAnywhere, BlueprintReadWrite) int32 ID 0; UPROPERTY(EditAnywhere, BlueprintReadWrite) FText Title; UPROPERTY(EditAnywhere, BlueprintReadWrite) FText Content; UPROPERTY(EditAnywhere, BlueprintReadWrite) FVector Location FVector::ZeroVector; };再创建 SaveGame 类UCLASS() class UDiarySaveGame : public USaveGame { GENERATED_BODY() public: UPROPERTY() TSetint32 CollectedDiaryIDs; };在玩家碰到日记点时把 ID 添加进 TSet。这样即使玩家重复进出一块区域也不会重复收集。加载场景时遍历所有BP_DiaryPage如果它的 ID 已经在已收集列表里就把该日记点隐藏或标记为已读。在“山地日记”这个环境里日记收集点是给玩家一个“继续探索”的理由。你可以把日记点数量和地形节点绑定每条日记对应一处新的视野点。这样玩家收集完日记也就看完了整座山最精华的风景。7. 运行验证与常见问题排查7.1 用地形和角色移动做基础验证场景搭建完成后先不要急着拍视频。进入 PIEPlay模式使用第三人称模板或直接打开默认角色控制从入口开始沿设计路线走一遍。检查顺序是角色能不能穿过路径和坡地植物会不会阻挡视野树根和岩石的碰撞是否合理日记点的触发器是否正常弹出 UI。每一步都要确认不只是“看到树了”就算通过。如果角色卡在某块石头上那说明这块石的碰撞盒过于复杂或角度过于垂直如果角色直接从树叶穿过去那说明树叶的碰撞响应设置成了忽略。7.2 常见问题排查表打开一个 1 公里级别的室外场景下面这些毛病几乎都会出现一遍现象常见原因检查方式处理建议场景黑屏或全暗没有定向光、曝光锁定异常检查场景中是否有 DirectionalLight检查 PostProcess 曝光参数开启 Auto Exposure确保定向光存在且角度在可照亮区域材质显示紫色或绿色材质编译失败或贴图丢失看输出日志打开材质编辑器确认节点是否有红色报错修复丢失贴图路径重新编译材质地形刷颜色不生效Landscape 材质没有勾选 Used with Landscape进入地形模式查看当前选中的材质打开材质详情勾选 Used with Landscape植被密度过高导致卡顿Foliage 密度参数太大在 Foliage 工具里选中对应类型查看实例数量降低密度或缩小刷取范围或分批手动摆放远处山体闪白或灰蒙蒙指数高度雾浓度过高把 Fog Density 降到 0.005 以下试看重新调整雾浓度和 Volumetric Fog 距离树影闪烁或出现黑块LOD 切换过快、材质双面设置不对使用r.Shadow.Virtual.Enable0临时关闭虚拟阴影测试检查树冠材质调整 LOD 距离或使用 Nanite 替代日记点触发不上碰撞体范围太小或玩家胶囊体外层忽略碰撞查看 BP_DiaryPage 的 Box Collision 范围调大碰撞体范围设置 Enabled Collision 响应为 Overlap7.3 用性能分析命令找出卡点环境场景最容易出现的性能问题是植被实例过多和阴影计算过重。运行游戏后打开控制台使用下面这些命令stat fps stat unit stat gpu stat rhistat unit会显示 Frame Time 在 Game、Draw、GPU 三个部分的花费。如果 GPU 时间远大于 Game 和 Draw说明瓶颈在渲染如果 Game 很高则可能是蓝图逻辑或物理碰撞问题。要进一步定位用profilegpu抓取一帧 GPU 报告查看各渲染阶段的耗时例如阴影、透明物体、体积雾分别消耗多少毫秒。修性能问题要抓主要矛盾如果体积雾消耗最大就降低r.VolumetricFog.GridPixelSize或r.VolumetricFog.GridSizeZ如果是阴影消耗最大就缩短阴影距离或降低阴影贴图分辨率。不要一卡就关所有效果先量化再针对性调整。8. 最佳实践与扩展方向8.1 环境制作可复用清单每次做一个新环境关卡都按这份清单走能减少大量返工[ ] 路线图确认玩家从哪里进入去哪里看到什么 [ ] 项目命名与目录结构统一 [ ] 地形分辨率与缩放符合活动范围 [ ] 山地走势先刷完再做细节噪声 [ ] 分层材质先铺完再细化贴图和物理材质 [ ] 植被近密远疏密度参数不激进 [ ] 光照和天空先搭基础再调云和雾 [ ] 后期曝光、泛光、色调映射最后调 [ ] 交互类功能日记点使用数据驱动管理 [ ] PIE 全流程走测一遍记录卡顿和报错 [ ] 用性能分析命令找到瓶颈再优化 [ ] 存档、退出再加载确认收集状态不丢失这份清单里的每一项都不要跳过。多数环境项目返工不是因为美术能力不足而是步骤顺序乱了还没定路线就开始刷山还没调光照就开始摆草结果联动起来互相影响。8.2 学习环境和生产项目的差异学习阶段可以为了效果把密度和特效都拉高只要本机跑得动就行。但进入生产项目后必须区分“测试用环境”和“发布用环境”。测试环境可以使用全部高品质资产方便看效果。正式项目要考虑资产包体积、LOD 数量、纹理内存、移动端或主机性能、加载逻辑、远程资源管理。建议从项目最开始就把 Environment 分成Dev和OptimizedOptimized版本删掉不需要的高模资产降低远景密度减少相机裁剪距离。优化不是等卡了才做。在刷地形和摆植被时就要有“我以后会在低配机器上运行”的意识。比如高模岩石可以先在近景放 Nanite 版本在远景用低模替代草地草簇尽量做成单个卡片而不是动态物体的集合。8.3 扩展方向从静态场景变成可玩关卡“山地日记”如果只做一个静态环境完成的只是环境美术部分。下一步可以扩展的方向包括天气系统雨、雪、雾的动态切换让同一个山地场景呈现不同情绪。AI 角色在山间巡逻或行走的 NPC增加场景生命力。声音溪流声、风声、鸟叫根据玩家位置切换。世界分区如果场景扩大到几平方公里启用 World Partition 按地块加载。任务系统将日记收集点扩展为支线任务让环境和玩法结合。过场演出在关键日记点触发摄像机序列给玩家一段强制视角的叙事。学习路线建议先完整做一遍“从清空项目到可玩的地形环境”再针对光照和植被各做一个专项深入练习。环境制作最容易积累经验的方式就是快速做小场景而不是只在一个场景里无限制磨下去。每做完一座山记录下自己在路线、密度、雾、光照上踩过的坑下一次项目开始时直接把经验传过去。
返回列表