1. 从“37”说起为什么 UE5 的建模工具链值得单独拎出来聊如果你最近在 UE5 里折腾过场景搭建大概率会遇到一个尴尬的瞬间美术给的模型还没到位但你想先摆个白模看看比例或者从商城买来的资产面数爆炸想删掉几块看不见的面却不想开 Blender又或者你想在编辑器里直接拉一个带倒角的箱子结果发现只能靠缩放 Cube 硬凑。这些场景正是 UE5 内置 Modeling Mode 存在的意义。“37”这个编号在我自己的学习笔记里对应的是 Modeling Tools 这一整块内容。它不是一个孤立的工具而是 UE5 从 5.0 开始逐步补齐的一整套编辑器内建模体系核心包含三块Modeling Mode 工具集、动态网格编辑Dynamic Mesh、以及Geometry Script 联动。简单说它让你不离开引擎就能完成从基础形体创建、布尔运算、UV 调整到程序化网格生成的全流程。这套东西适合谁三类人最该花时间啃一是独立开发者和小团队没有专职 TA建模和场景搭建一肩挑二是技术美术方向的同学Geometry Script 基本是绕不开的三是做关卡白模和快速原型的设计师Modeling Mode 能把你从“等模型”的状态里解放出来。它解决的核心问题就一个——缩短从想法到可见形体的距离。我踩过的第一个坑就是把它当成“Blender 替代品”。它不是。它的定位是编辑器内的轻量建模与程序化处理强项在于和引擎数据、材质、碰撞、Nanite 的无缝衔接而不是高精度雕刻。想清楚这一点后面的学习路径会顺很多。2. Modeling Mode 工具集先搞懂它到底装了什么2.1 工具集的整体布局与进入方式Modeling Mode 不是一个插件是引擎自带的编辑模式。在 UE5 里你选中一个 Actor然后在顶部模式下拉里切到 “Modeling”或者直接用快捷键 Shift5就能进入。进去之后左侧会出现一整套工具面板按功能大致分成几类创建Create、多边形Poly、变形Deform、变换Transform、网格操作Mesh Ops、属性Attributes、UV、烘焙Bake等。这里有个新手特别容易懵的点Modeling Mode 操作的对象是“动态网格”。你从 Create 面板拖一个 Box 出来它默认就是一个 Dynamic Mesh Actor而不是普通的 Static Mesh Actor。这个区别很关键因为动态网格支持运行时修改而普通静态网格是烘焙死的。你在工具集里做的所有编辑本质上都是在操作这个动态网格的数据结构。我个人的习惯是先用 Create 里的基础形体Box、Sphere、Cylinder、Cone、Torus 等搭出大致轮廓再用 Poly 组的工具做局部调整。Create 面板里每个形体都有参数比如 Box 的尺寸、分段数Sphere 的半径和细分。分段数这个参数要特别注意它直接决定后续能不能做细节。你建一个分段为 1 的 Box后面想加倒角或者做曲面细分就会很别扭因为顶点不够。我的经验是白模阶段分段给到 2 到 4 就够用既不会太重又留了编辑余地。2.2 常用工具的实际使用场景与取舍工具集里工具很多但真正常用的就那么十来个。我按使用频率排一下顺便说说每个的适用场景和坑。PolyEdit多边形编辑是核心中的核心。它支持选点、选边、选面然后做挤出Extrude、倒角Bevel、插入Inset、桥接Bridge、填充Fill等操作。这个工具的逻辑和主流 DCC 软件接近但操作手感有差异。比如挤出你需要先选中面点 Extrude然后拖动出现的 gizmo。坑在于挤出方向默认沿法线如果你想沿世界轴挤出得切换 gizmo 的坐标系这个切换按钮在视口右上角很容易被忽略。Boolean布尔是做硬表面切割的利器。UE5 的布尔支持并集、差集、交集而且是在动态网格上实时计算的。我经常用它来给墙体开窗、给箱子挖洞。注意事项布尔运算对网格的流形性manifold有要求如果两个网格有共面或者非流形边结果可能出问题。实测下来做差集时让切割体稍微穿透目标体一点点比如多出 0.1 个单位比刚好贴合要稳。Remesh重网格用来统一网格密度。当你做了一堆布尔之后网格会变得很乱顶点分布不均匀这时候 Remesh 能把它重新采样成均匀的三角面。它有几个模式Uniform、Voxel、Adaptive。Voxel 模式适合做有机形体Uniform 适合硬表面。参数上Voxel Size 越小细节保留越多但面数暴涨我一般从 2.0 开始试根据效果往下降。Smooth平滑和Displace置换属于变形类。Smooth 用来消除布尔后的硬边Displace 可以配合贴图做表面起伏。这两个工具在场景道具做旧、地形微调时很有用。UV 工具组是很多人忽略但极其重要的一块。Modeling Mode 里的 UV 工具能自动展开、投影、打包。AutoUV 适合快速出个能用的 UVProjection 适合把平面投影到特定方向。我的经验自动 UV 出来的接缝位置往往不理想如果这个模型要上精细贴图还是得手动调。但在白模和快速原型阶段AutoUV 完全够用。Bake烘焙工具能把动态网格转成静态网格资产同时可以烘焙顶点色、法线、AO 等。这一步是把你编辑器里的编辑成果“固化”下来的关键。注意烘焙前一定要确认动态网格的变换已经应用Apply Transform否则烘焙出来的资产可能带着奇怪的偏移。2.3 工具集与普通静态网格工作流的差异这里必须说清楚一个认知差异。传统流程是DCC 建模 → 导出 FBX → 导入 UE → 摆放。Modeling Mode 的流程是引擎内创建 → 编辑 → 烘焙成资产 → 使用。前者适合精细资产后者适合快速迭代和场景特化资产。我实测过一个对比做一个带窗洞和门洞的墙体DCC 流程从打开软件到导入大概 15 分钟Modeling Mode 流程从 Create Box 到 Boolean 挖洞再到 Bake大概 3 分钟。差距在迭代速度上更明显——甲方说窗子往左移 20 公分DCC 流程要重新导出导入Modeling Mode 里直接拖一下再烘焙就行。但反过来如果要做角色或者高精度道具Modeling Mode 就力不从心了。它的细分和雕刻能力有限UV 精度也不够。所以我的建议是场景类、建筑类、白模类资产优先用 Modeling Mode角色和精细道具还是走 DCC。3. 动态网格编辑理解这套体系的底层逻辑3.1 动态网格到底是什么Dynamic Mesh 是 UE5 引入的一套运行时可变网格数据结构。传统的 Static Mesh 在运行时是只读的你没法在游戏跑起来之后去改它的顶点。Dynamic Mesh 不一样它把顶点、三角面、UV、法线、顶点色等数据都放在可读写的数据结构里允许你在运行时做增删改。这个特性带来的直接好处就是程序化生成和运行时破坏成为可能。比如你可以做一个运行时挖洞的效果玩家用工具在墙上凿墙体网格实时更新。这在以前的 UE 里要么靠预烘焙的破碎网格要么靠材质做假现在可以直接改几何体。Dynamic Mesh 的核心数据结构包括顶点位置数组、三角面索引数组、以及各种属性数组。它内部用的是类似半边结构或者索引三角网格的表示。你在 Modeling Mode 里做的每一次操作底层都是在修改这些数组。理解这一点对后面用 Geometry Script 做程序化生成非常关键。3.2 动态网格与 Nanite、碰撞、LOD 的关系这是实际项目里绕不开的问题。Dynamic Mesh 默认是不支持 Nanite 的因为 Nanite 需要预计算的层级结构而动态网格是运行时变的。所以如果你打算把动态网格用于最终渲染通常要先 Bake 成 Static Mesh再开启 Nanite。碰撞方面动态网格可以生成简单碰撞和复杂碰撞。简单碰撞就是盒体、球体、胶囊体这些复杂碰撞直接用网格本身。实测建议运行时频繁变形的动态网格用简单碰撞性能更好静态场景道具烘焙后复杂碰撞配合 Nanite 的物理支持也没问题。LOD 在动态网格阶段基本不用考虑因为还没定型。Bake 成静态网格后可以用引擎自带的 LOD 生成工具或者手动做。我一般是在 Bake 之后统一处理 LOD动态阶段专注形体。3.3 动态网格的性能开销与优化思路动态网格的编辑操作是 CPU 密集型的。顶点数越多布尔、重网格这些操作越慢。我做过一个测试一个 5 万面的动态网格做布尔差集大概要 1 到 2 秒50 万面的网格做同样操作可能要十几秒甚至卡死。所以优化思路很明确控制编辑阶段的网格规模。具体做法有几个。第一Create 基础形体时分段数别给太高够用就行。第二布尔运算前如果目标网格太密先 Remesh 降一下密度。第三复杂形体拆成多个简单形体分别编辑最后再合并。第四善用 LOD 思路远处的东西不需要高密度。还有一个容易被忽略的点动态网格的编辑历史。Modeling Mode 里每次操作都会记录方便你回退。但历史记录多了会占内存也会拖慢操作。我习惯在关键节点用 Bake 固化一次然后清掉历史相当于手动打个存档点。4. Geometry Script 联动把建模变成可编程的流程4.1 Geometry Script 的定位与基本用法Geometry Script 是 UE5 提供的一套蓝图和 Python 可调用的网格操作 API。它把 Modeling Mode 里的那些工具能力变成了可以在蓝图里调用的节点。这意味着你可以写一段逻辑自动生成一批建筑、自动做布尔切割、自动展开 UV。它的基本用法是在蓝图里创建一个 Dynamic Mesh 变量然后用 Geometry Script 节点去操作它。比如Append Box节点可以往动态网格里加一个盒子Apply Boolean可以做布尔Recompute Normals可以重算法线。这些节点和 Modeling Mode 里的工具是一一对应的只是从手动操作变成了程序调用。我最初接触 Geometry Script 是为了批量生成场景里的碎石。手动摆太慢用蓝图循环生成一堆随机大小、随机旋转的石头然后合并成一个动态网格再 Bake 成静态网格效率提升非常明显。4.2 用 Geometry Script 做程序化生成的实操思路程序化生成的核心思路是“参数化 循环 随机”。举个我做过的例子生成一排随机高度的栅栏。第一步在蓝图里创建一个 Dynamic Mesh用Append Box加一个底座。第二步用 For Loop 循环 N 次每次用Append Box加一根柱子位置沿 X 轴递增高度用 Random Float in Range 生成。第三步用Apply Boolean Union把所有柱子合并到底座上。第四步用Recompute Normals和Auto Generate UVs处理一下。第五步Bake 成静态网格。这个流程里关键参数是随机种子。如果你希望每次生成结果一致要固定种子如果希望每次不同就用随机种子。我在做可重复使用的工具时通常把种子暴露成蓝图参数方便美术调整。另一个实用技巧是用曲线驱动生成。Geometry Script 支持从 Spline 采样点你可以画一条曲线然后沿曲线生成栏杆、管道、藤蔓等。这个在关卡设计里特别好用改曲线就能改生成结果不用重新摆。4.3 Geometry Script 与 Modeling Mode 的协作方式这两者不是替代关系是互补关系。我的典型工作流是先用 Modeling Mode 手动搭出一个“模板”调整到满意然后分析这个模板的生成逻辑用 Geometry Script 把它参数化。这样既有手动调整的直观又有程序化的批量能力。比如做一个中式屋顶我先手动用 Modeling Mode 做出一个满意的瓦片排列和屋脊造型然后观察它的规律——瓦片是沿坡面等距排列的屋脊是沿中轴线对称的。把这个规律写成 Geometry Script就能生成任意尺寸的同类屋顶。注意Geometry Script 生成的动态网格如果要用于最终场景同样需要 Bake。而且因为它是程序生成的Bake 之前最好检查一下法线方向和 UV自动生成的结果有时候会有翻转的面。5. 实操全流程从零做一个带窗洞的墙体资产5.1 创建基础形体与参数设定打开 UE5新建一个空关卡。按 Shift5 进入 Modeling Mode。在 Create 面板选 Box在视口里点一下拖出盒子。在右侧 Details 面板里把 Dimensions 设成 X400, Y20, Z300这就是一面墙的尺寸。分段数方面X 方向给 4Z 方向给 3Y 方向给 1。为什么这么给因为后面要在 XZ 平面上挖窗洞分段多一点布尔之后的网格分布会更均匀。提示尺寸单位是厘米400 厘米就是 4 米符合一般房间墙体的尺度。创建完之后这个 Box 就是一个 Dynamic Mesh Actor。你可以在 Outliner 里看到它名字类似 “Box_DynamicMesh”。选中它准备做下一步。5.2 布尔挖窗洞与门洞再创建一个 Box尺寸设成 X100, Y40, Z120这是窗洞的尺寸。Y 方向给 40 是为了让它穿透墙体墙体 Y 只有 20这样布尔差集才干净。把这个小 Box 移动到墙体上你想开窗的位置。移动的时候可以用视口里的 gizmo也可以直接在 Details 里改 Transform 的 Location。选中墙体大的那个在 Modeling Mode 的 Mesh Ops 里找到 Boolean模式选 Difference差集然后点 Apply。这时候会让你选另一个网格选那个小 Box。点确认窗洞就挖出来了。同样的方法再建一个门洞的 Box尺寸 X90, Y40, Z200放在墙体底部中间再做一次差集。做完之后墙体上就有了一个窗洞和一个门洞。踩坑记录我第一次做的时候小 Box 的 Y 尺寸和墙体一样是 20结果布尔之后窗洞的内壁出现了共面问题渲染时能看到闪烁。后来把切割体的 Y 加到 40让它明显穿透问题就解决了。这个经验在硬表面布尔里通用——切割体一定要穿透不要刚好贴合。5.3 网格清理与 UV 处理布尔做完之后墙体的网格会变得比较乱顶点分布不均匀有些地方三角面很密集有些地方很稀疏。这时候用 Remesh 工具模式选 UniformTarget Edge Length 设成 10 左右跑一遍。这一步会把网格重新采样成相对均匀的三角面。Remesh 之后用 Smooth 工具轻轻过一遍消除布尔留下的硬边毛刺。Smooth 的强度别给太高0.1 到 0.2 就行给高了墙体就变形了。接下来处理 UV。选中墙体在 UV 面板里点 AutoUV它会自动展开一套 UV。展开完之后可以在视口里预览 UV 布局看看接缝在哪。如果接缝在显眼位置可以用 Projection 工具重新投影一个方向。对于这面墙我一般用 Box Projection从正面投影这样正面的 UV 是规整的。5.4 烘焙成静态网格并验证形体满意之后在 Modeling Mode 的 Bake 面板里点 Bake Static Mesh。会弹出一个对话框让你选保存路径和资产名。我一般命名成 “Wall_WithWindow_Door”。烘焙选项里可以勾选生成简单碰撞、生成 LOD、烘焙顶点色等。对于这面墙勾选生成简单碰撞就够了。烘焙完成后在 Content Browser 里找到这个资产拖到场景里替换掉原来的动态网格 Actor。检查一下碰撞对不对用简单碰撞可视化看一下、UV 对不对贴个棋盘格材质看看、法线对不对转一圈看有没有黑面。实测心得Bake 之后的静态网格面数大概在 2000 到 5000 之间取决于 Remesh 的参数。这个量级对于场景道具来说很轻开 Nanite 也没问题。如果要做更精细的版本可以在 Remesh 时把 Target Edge Length 降到 5面数会上去但细节更好。6. 常见问题与排查技巧实录6.1 布尔运算失败或结果异常布尔是出问题最多的地方。常见表现有运算后网格消失、出现破面、法线翻转、内壁共面闪烁。排查思路按顺序来第一检查两个网格是否都是流形manifold。非流形网格做布尔必出问题。可以在 Modeling Mode 里用 “Check Manifold” 工具检测。如果不是流形先用 “Fill Holes” 补洞或者用 Remesh 重建。第二检查切割体是否穿透目标体。前面说过让切割体多出一点别刚好贴合。第三检查两个网格的变换是否已应用。如果网格带着非均匀缩放布尔计算可能出错。在 Transform 面板里点 Apply Transform。第四如果还是不行把两个网格分别 Remesh 一遍再试。有时候是网格密度差异太大导致的。6.2 动态网格操作卡顿卡顿通常是因为网格面数太高。解决办法编辑前先 Remesh 降密度或者把复杂形体拆成几块分别编辑。另外关闭实时预览如果工具有这个选项也能缓解。还有一个隐藏原因是编辑历史太多在 Modeling Mode 的设置里清一下历史记录。6.3 Geometry Script 生成结果不符合预期程序化生成的问题往往出在参数和坐标系上。排查清单检查 Append 节点的 Transform 参数确认位置、旋转、缩放对不对检查布尔节点的模式Union 和 Difference 别搞反检查法线重算节点有没有加自动生成的面法线可能朝内检查 UV 生成节点没有 UV 的网格贴图会显示异常。6.4 烘焙后资产与预览不一致有时候 Bake 出来的资产和你在 Modeling Mode 里看到的不一样比如少了某些面、UV 错位、法线异常。原因通常是Bake 前没有 Apply Transform导致变换信息丢失或者动态网格里有多个分离的部件Bake 时只处理了选中的那个。解决办法是 Bake 前全选所有部件确认变换已应用再执行烘焙。问题现象可能原因解决动作布尔后网格消失非流形或切割体未穿透检查流形性加大切割体尺寸布尔后内壁闪烁共面切割体穿透目标体操作卡顿面数过高或历史过多Remesh 降密度清历史Geometry Script 结果错位Transform 参数错误检查 Append 节点参数烘焙后 UV 错乱未生成 UV 或未应用变换Bake 前 AutoUV Apply Transform烘焙后法线异常法线未重算加 Recompute Normals 节点6.5 独家避坑技巧汇总几个我踩过之后总结的小技巧。第一养成 Apply Transform 的习惯每次移动旋转缩放完动态网格顺手应用一下能避免后面一堆麻烦。第二布尔前先存盘布尔是破坏性操作出问题了回退比修复快。第三Remesh 的 Target Edge Length 不要一次降太狠分两次降每次降一半网格质量更好。第四Geometry Script 调试时用 Print String 输出中间结果比如顶点数、面数能快速定位是哪一步出了问题。第五Bake 之前把动态网格复制一份备份万一烘焙参数不对还能回去重来。7. 工具选型与工作流建议7.1 什么场景用 Modeling Mode什么场景用 DCC这个边界我前面提过这里再细化一下。Modeling Mode 适合建筑白模、场景道具快速迭代、关卡特化资产、程序化生成的基础形体、需要和引擎数据紧密联动的资产。DCC 适合角色、高精度道具、需要复杂拓扑的资产、需要雕刻细节的资产、需要精细 UV 和贴图的资产。一个实用的判断标准是如果这个资产的主要价值在于“形体的快速调整”而非“表面的精细表现”就用 Modeling Mode。反之用 DCC。7.2 Geometry Script 的适用边界Geometry Script 不是万能的。它适合规则性强、可参数化的生成任务比如建筑模块、栅栏、管道、地形装饰。它不适合需要艺术判断的有机形体也不适合需要复杂拓扑的资产。另外Geometry Script 的性能在生成大量网格时会成为瓶颈如果生成规模很大要考虑分帧生成或者预生成。7.3 我个人的推荐工作流我现在的习惯是白模和场景搭建全部在 Modeling Mode 里完成能 Bake 的就 Bake 成静态网格。需要批量生成的用 Geometry Script 写工具。精细资产还是走 DCC导入后在引擎里用 Modeling Mode 做微调。这个组合下来场景搭建的效率比纯 DCC 流程快不少而且迭代成本低。最后分享一个我最近在用的技巧把常用的 Modeling Mode 操作序列录成 Geometry Script 模板比如“创建墙体 → 挖窗洞 → Remesh → AutoUV → Bake”这一套写成一个蓝图工具下次做同类墙体直接调工具几秒钟出一个。这个思路可以扩展到各种重复性场景资产上积累下来就是自己的资产工厂。
