10 · 引擎作战手册:Unity / UE5 / Godot
每套引擎都有自己的"默认错误配置"。
本文件列出三套主流引擎在独立游戏语境下的必做设置、必避的坑、招牌技术选型。
通用:任何引擎都要做的 8 件事
- 定性能预算表(见
principles/02)
- 建母材质体系(3–5 个)
- 建导入预设(纹理/模型自动设置)
- 建资产命名规范 + 校验器
- 定单位/轴向/导出预设
- 定色彩空间(Linear)+ sRGB 规则
- 建光照模板场景
- 建画质档位矩阵 + 开关
A. Unity(URP / HDRP)
选型:URP vs HDRP vs Built-in
|
建议 |
| URP |
独立游戏默认选择。2D/3D 通吃,移动端支持好,Shader Graph 够用 |
| HDRP |
只在你需要高端 PC 写实画面时用。移动端不支持,学习成本高 |
| Built-in |
新项目不要用(除非依赖老插件) |
| Unity 6+ |
Render Graph、GPU Resident Drawer、GPU Occlusion Culling 有明显收益 |
必做设置(URP)
| 项 |
设置 |
原因 |
| 色彩空间 |
Linear |
光照正确的基础 |
| 渲染路径 |
Forward+(光源多) / Forward(光源少) |
|
| SRP Batcher |
开 |
母材质策略的直接收益 |
| GPU Instancing |
开 |
植被/散布 |
| GPU Occlusion Culling |
开(Unity 6) |
|
| Depth Priming |
PC:Auto / 移动:Disabled |
避免 overdraw |
| Native RenderPass |
Vulkan/Metal/DX12 开 |
省带宽 |
| 阴影 |
软阴影按需;级联 2–4;距离 30–120m |
|
| Additional Lights |
移动端 Per Vertex 或 Disabled |
|
| Terrain Holes |
关 |
|
| LOD Cross Fade |
移动端关 |
用 alpha test 很贵 |
| 后处理 |
一个 Volume + 合并的 Uber Post |
|
| MSAA |
前向渲染可用 2×/4×;移动端关 |
|
Shader 方案
| 需求 |
方案 |
| 常规材质 |
Shader Graph(节点式,美术也能改) |
| 招牌技术 |
手写 HLSL 或 Shader Graph + Custom Function |
| 全屏后处理 |
Custom Render Pass / Fullscreen Shader Graph |
| 性能关键 |
手写精简 HLSL |
URP Shader Graph 注意事项
- 精度默认用
Half(在 Graph Inspector 设)
- 用
shader_feature 而非 multi_compile(在 Blackboard 的 keyword 设置里选)
- 通道打包:Rough/AO/Metal 合成一张 ORM,省 2 次采样
- 用 Shader Graph 的都会自动支持 GPU Resident Drawer 的实例化声明;手写 HLSL 必须自己写
UNITY_INSTANCING_BUFFER_START/END,否则静默走慢路径
Shader 变体治理(Unity 重点坑)
Edit → Project Settings → Graphics → Shader Stripping
✅ Strip unused variants
✅ 剥离不需要的 Lightmap modes / Fog modes / Instancing variants
Player Settings → 预热:Shader Variant Collections
Debug:Window → Rendering → Shader Variant Log(查看变体数)
预算:总变体 ≤ 5000;首屏编译 ≤ 3s(否则做预热场景)。
Unity 特有坑
| 坑 |
解法 |
MaterialPropertyBlock 破坏 SRP Batcher |
慎用;优先材质实例 |
| 场景层级过深 |
扁平化层级 |
每个敌人一个 Update() |
用管理器统一驱动 |
| Resources 文件夹滥用 |
用 Addressables |
| 编辑器里 Profile |
必须真机 Development Build |
| 未剥离 shader 变体 |
打包 3 小时 + 内存爆 |
| 大量小纹理无图集 |
图集 + 通道打包 |
| 透明 UI 全屏叠加 |
减少全屏半透明 UI |
| Sprite Atlas 未启用 |
2D 必开 |
Unity 招牌技术候选
- 自定义 Render Feature(如独特的描边/扫描线/扭曲)
- Shader Graph 驱动的风格化材质(风雪/腐蚀/手绘笔触)
- VFX Graph(GPU 粒子,大量粒子场景)
- 2D:2D Light + 法线 + Palette Swap
B. Unreal Engine 5
选型与必做设置
| 项 |
建议 |
| 渲染 |
默认 Deferred;移动端 Forward |
| Nanite |
默认不开(见 domains/08) |
| Lumen |
默认不开,用烘焙 + Light Probe(见 domains/08) |
| 虚拟纹理 |
大世界才开 |
| 阴影 |
Virtual Shadow Map 按需;CSM 更可控 |
| TSR(时域超分) |
✅ 推荐(UE5 的 TAAU,质量好) |
| 前向渲染(移动端) |
关掉大部分后处理 |
| 材质 |
Master Material + Material Instance(强制) |
UE5 特有坑
| 坑 |
解法 |
| 材质节点过多导致编译慢 |
母材质控制节点数;用 Instance |
| 材质实例参数太多 |
只暴露必要参数 |
| Shader 编译(PSO)卡顿 |
PSO Caching + 打包时预编译 |
| Nanite 让包体和磁盘暴涨 |
只在需要的资产上开 |
| Lumen 在低端机不可用 |
有降级方案 |
| 蓝图里做重逻辑 |
移到 C++ 或简化 |
| Tick 太多 |
关掉不需要的 Tick |
| 大量 Actor |
用 ISM/HISM(实例化静态网格) |
| 光源数量过多 |
用烘焙 |
| 未使用资产进包 |
打包前扫描 |
UE5 招牌技术候选
- Niagara(GPU 粒子 + 复杂模拟)
- 自定义 Post Process Material
- PCG 框架(程序化散布/生成)
- Material Function 驱动的全场景参数化(风雪/腐蚀)
- UE5 的 PCG 框架是独立游戏最划算的程序化工具(内置、免费、可控)
C. Godot 4
选型与必做设置
| 项 |
建议 |
| 渲染后端 |
Forward+(桌面) / Mobile(移动) / Compatibility(极低端/Web) |
| 色彩空间 |
Linear |
| 抗锯齿 |
TAA 或 FXAA;像素风关掉 |
| 光照 |
烘焙(LightmapGI) + Light Probe(ReflectionProbe / VoxelGI 按需) |
| SDFGI |
谨慎(贵) |
| 阴影 |
方向光 CSM;距离按需 |
| 材质 |
用标准材质 + Shader 参数;复杂效果用 Visual Shader 或 GLSL |
| 物理 |
固定步长 |
Godot 特有坑
| 坑 |
解法 |
| Forward+ 在移动端太贵 |
移动端用 Mobile 后端 |
| GDScript 热路径慢 |
热路径用 C# 或 C++(GDExtension) |
| 大量节点 |
用 MultiMesh / 合并 |
| 着色器编译卡顿(首次) |
预热 |
| 纹理导入默认设置不合适 |
写导入脚本统一设置 |
| 2D 光照开销 |
控制 2D 光数量 |
| 像素风设置 |
见下 |
Godot 像素风设置
Project Settings → Rendering → Textures → Canvas Textures:
Default Texture Filter = Nearest
Project Settings → Rendering → 2D:
Snap 2D Transforms to Pixel = On
Snap 2D Vertices to Pixel = On
Camera2D: Zoom 用整数;Viewport 尺寸 = 参考分辨率
纹理导入:Filter = Nearest,Mipmaps = Off
Godot 招牌技术候选
- 自定义 CanvasItem / Spatial Shader(2D 效果极强)
- 粒子系统 + 自定义 shader
- 程序化生成(GDScript 灵活)
- 2D 的灵活性是 Godot 的强项
引擎选型决策表
| 你的情况 |
选什么 |
| 2D / 像素 / 小团队 / 无预算 |
Godot 4 或 Unity(URP) |
| 3D 风格化 / 需要大量插件 / 有 Unity 经验 |
Unity URP |
| 3D 写实 / 需要 Nanite+Lumen / 有 UE 经验 |
UE5 |
| 移动端优先 |
Unity URP 或 Godot Mobile |
| Web |
Godot 或 Unity WebGL(注意包体) |
| 团队只有 1 人且不会编程 |
Godot(GDScript 学习曲线最平缓) |
| 需要大量现成插件 |
Unity |
| 需要最好的画面上限且团队有经验 |
UE5 |
引擎迁移的警告
中途换引擎 = 项目死亡的主要方式之一。
迁移成本通常被低估 3–5 倍:不只是代码,还有资产重做、管线重建、性能重调、团队重学。
除非项目进度 < 20% 且有不可抗原因,否则绝不换。
自检清单
- 引擎选型的理由写下来了吗?(不是"因为我熟")
- 八件通用必做事做了几件?
- 该引擎的"默认坑"配置项都改了吗?
- Shader 变体/PSO 编译有预热吗?
- 真机 Development Build 测过吗?
- 招牌技术在该引擎里的实现路径清楚吗?有原型吗?
- 插件依赖清单有了吗?都在维护吗?
- 升级计划有吗?(量产期绝不升级)