
1. 从“37”这个编号说起Modeling Tools 到底解决了什么痛点如果你在 UE5 里做过一段时间场景或者道具大概率经历过这种循环在 DCC 软件里建好模型导出 FBX导入引擎发现比例不对切回 DCC 改再导出再导入材质槽又乱了。一个简单的墙面凹槽调整可能要来回折腾三四次。Modeling Mode 这套工具集的出现本质上就是把“轻量级模型修改”这件事从外部软件拉回了引擎内部。标题里的“37”是这套工具集在某个版本迭代中的编号标记不用太纠结这个数字本身它更像是一个版本锚点代表 Modeling Tools 从实验性插件走向正式内置功能的一个阶段。这个阶段最核心的变化有三个Modeling Mode 工具集正式整合进编辑器模式切换栏、动态网格编辑支持非破坏性工作流、Geometry Script 可以通过蓝图和 Python 驱动程序化建模。我最初接触这套工具是因为一个室内场景项目客户要求墙面上的插座孔位要跟电气图纸完全对齐。如果用传统流程每个孔位都要在 Blender 里定位、布尔、导出光是重复劳动就让人崩溃。后来改用 Modeling Mode 里的 PolyGroup 编辑加 Geometry Script 批量生成整个墙面 40 多个孔位写个脚本 10 分钟跑完而且后续改参数直接重新跑一遍就行。从那之后我就开始系统性地研究这套工具链。这篇文章适合三类人看一是刚接触 UE5 建模、想知道引擎内建模到底能不能替代部分 DCC 工作的新手二是已经用过 Modeling Mode 但只停留在简单拉伸、倒角层面的中级用户三是想通过 Geometry Script 做程序化生成、批量处理的技术美术方向从业者。我会从工具集的设计逻辑讲起然后拆解核心操作细节再给出一套完整的实操流程最后把常见坑和排查方法整理出来。2. Modeling Mode 工具集的设计逻辑与模块拆解2.1 为什么 UE 要在引擎内做建模工具这个问题我一开始也没想明白。引擎做好渲染和逻辑就行了建模交给专业软件不好吗但实际项目做多了就发现有一类需求 DCC 软件反而处理起来很别扭。第一类是环境适配型修改。比如你从素材库买了一个楼梯模型但你的楼层高度是 3.2 米而不是标准的 3 米你需要把楼梯拉伸到合适高度同时踏步数保持不变。这种修改在 DCC 里要重新计算阵列但在 Modeling Mode 里直接用 Dynamic Mesh 的拉伸加上边循环调整就能搞定。第二类是程序化批量生成。比如你要在一个城市街区里放置 200 个不同尺寸的窗户每个窗户的框宽、玻璃分割数都要根据建筑立面自动变化。这种需求用 Geometry Script 写逻辑比手动建模快几个数量级。第三类是碰撞与视觉的一致性维护。热词里有个“ue5碰撞盒识别不到overlap事件”这个问题很多时候就是因为视觉网格和碰撞网格是分开制作的改了视觉网格忘了更新碰撞。Modeling Mode 允许你直接从视觉网格生成简化碰撞改完即时同步减少这类低级错误。注意Modeling Mode 不是要替代 Maya 或 Blender它的定位是“引擎内的轻量级修改和程序化生成”。高精度角色建模、复杂曲面造型还是得靠专业 DCC 工具。2.2 工具集的四大模块划分Modeling Mode 的工具面板看起来选项很多但按功能逻辑可以分成四块创建与形状模块包括基础体素Box、Sphere、Cylinder 等、多边形绘制、挤出、放样。这块主要解决“从无到有”的问题适合快速搭建灰模或者占位几何体。编辑与变形模块包括 Dynamic Mesh 的推拉、平滑、倒角、桥接、三角面重组。这是日常用得最多的部分相当于把 Blender 的编辑模式搬进了 UE。属性与材质模块包括 UV 展开、材质分配、顶点色绘制、法线调整。这块经常被忽略但实际上引擎内直接调 UV 比导出到 DCC 再导回来快得多尤其是只需要简单平面投影的时候。程序化与脚本模块Geometry Script 的蓝图节点和 Python API。这是整套工具链里上限最高的部分也是区分普通用户和技术美术的分水岭。2.3 动态网格编辑的核心机制Dynamic Mesh 是 Modeling Mode 的底层数据结构。传统的 Static Mesh 是一旦导入就固定不变的而 Dynamic Mesh 允许在运行时或编辑时动态修改顶点、边、面。它的核心优势在于非破坏性迭代。举个例子你用 Dynamic Mesh 在一个墙面上挖了五个不同大小的洞后来发现第三个洞的位置偏了 10 厘米。传统流程你要重新布尔运算但 Dynamic Mesh 会保留操作历史你只需要调整第三个洞的位置参数整个网格自动重新计算。但这里有个坑Dynamic Mesh 的面数如果太高编辑操作会明显卡顿。我实测下来单个 Dynamic Mesh 超过 5 万三角面之后推拉操作就开始有延迟感。所以建议在编辑阶段用低模确认形状后再通过细分或者 Nanite 来提升细节。3. 核心操作细节与实操要点拆解3.1 进入 Modeling Mode 的正确姿势与初始设置很多人第一次打开 Modeling Mode 会发现工具是灰的点不了。这是因为没有选中可编辑的 Actor。正确流程是在场景中选中一个 Static Mesh Actor点击编辑器左上角的模式切换下拉菜单选择Modeling此时右侧会出现 Modeling 工具面板左侧会出现工具分类列表但这里有个隐藏设置需要提前改。在Editor Preferences Modeling Mode里把Asset Creation Mode从默认的“Create New Asset”改成“Overwrite Existing Asset”或者根据你的工作流选择。默认模式下每次操作都会生成一个新的 Static Mesh 资产做几次修改之后你的内容浏览器里就会多出一堆_Generated后缀的文件非常乱。我个人的习惯是前期探索阶段用“Create New Asset”确认最终效果后用“Overwrite Existing Asset”覆盖原模型。这样既保留了试错空间又不会污染资产库。3.2 Dynamic Mesh 编辑的五个高频操作第一个是 PolyGroup 编辑。PolyGroup 相当于把网格面分组你可以按组选择、按组挤出、按组赋材质。在 Modeling Mode 里按ShiftG可以快速进入 PolyGroup 编辑模式。这个功能在做硬表面模型时特别好用比如一个机械零件的不同功能区域可以用不同 PolyGroup 区分后续调整时直接选组操作。第二个是三角面与四边面转换。UE 的 Dynamic Mesh 默认是三角面但编辑时四边面更直观。在工具面板里找到Tri to Quad和Quad to Tri可以互相转换。我的经验是推拉变形用四边面最终输出前转回三角面因为 UE 渲染管线对三角面优化更好。第三个是边循环插入。在需要增加细节的地方用Insert Edge Loop工具在指定位置插入一圈边。操作方式是按住Ctrl点击边然后拖动到目标位置。这里有个技巧插入边循环时按住Shift可以吸附到网格的 25%、50%、75% 位置做对称结构时非常方便。第四个是桥接。两个分离的开口之间可以用Bridge工具连接。选中两个边缘循环点击 Bridge引擎会自动生成连接面。这个功能做管道、走廊连接处特别快。第五个是投影与吸附。Project工具可以把一个网格的顶点投影到另一个网格表面。做贴合地面的石块或者墙面装饰时用这个工具比手动调整顶点快得多。3.3 Geometry Script 的接入方式与执行环境Geometry Script 有两种使用方式蓝图和 Python。蓝图方式适合做交互式工具。在 Content Browser 里右键创建Editor Utility Blueprint然后在蓝图里调用 Geometry Script 节点。比如你可以做一个“批量倒角”工具选中多个 Actor 后一键给所有边缘加倒角。Python 方式适合做批处理和自动化。UE5 内置了 Python 编辑器在Output Log里把输入模式切换到 Python 就可以直接执行脚本。我常用的一个脚本是批量修改选中 Actor 的网格分辨率import unreal selected_actors unreal.EditorLevelLibrary.get_selected_level_actors() for actor in selected_actors: mesh_component actor.get_component_by_class(unreal.StaticMeshComponent) if mesh_component: static_mesh mesh_component.get_editor_property(static_mesh) # 这里调用 Geometry Script 的简化函数 unreal.GeometryScriptLibrary.set_mesh_simplify(static_mesh, 0.5)这段代码的意思是获取当前选中的所有 Actor找到它们的 StaticMeshComponent然后把网格简化到 50% 的面数。做 LOD 或者性能优化时非常实用。提示Geometry Script 的 Python API 在 UE5.1 之后才比较稳定如果你用的是早期版本部分函数可能不存在或者参数不同。建议至少用 UE5.2 以上版本。3.4 UV 与材质在引擎内处理的取舍Modeling Mode 内置了 UV 展开工具包括平面投影、柱面投影、盒式投影。我的建议是简单几何体在引擎内做 UV复杂曲面还是回 DCC。原因很简单引擎内的 UV 展开算法精度有限做建筑墙面、地板、简单道具没问题但做角色面部或者有机曲面时接缝和拉伸问题会比较明显。我试过用引擎内工具给一个雕塑模型展 UV结果接缝处出现了明显的纹理错位最后还是回 Blender 用 Smart UV Project 重新做的。但有一个场景引擎内 UV 特别有优势程序化生成的几何体。比如你用 Geometry Script 生成了 100 个不同尺寸的窗户每个窗户的 UV 都需要根据尺寸自动调整。这时候用脚本批量做平面投影比手动一个个展 UV 快无数倍。4. 完整实操流程从零搭建一面带孔洞的程序化墙面4.1 需求分析与参数规划假设我们要做一面 4 米宽、3 米高的墙面上面有 6 个插座孔孔的位置和大小由外部数据决定。后续可能还要调整孔的数量和位置所以整个流程要参数化。参数规划如下参数名类型默认值说明WallWidthFloat400墙面宽度厘米WallHeightFloat300墙面高度厘米WallThicknessFloat20墙面厚度厘米HoleRadiusFloat5孔洞半径厘米HolePositionsVector Array6个坐标孔洞中心位置4.2 第一步创建基础墙面网格在 Modeling Mode 里创建一个 Box尺寸设置为 400 x 20 x 300。然后进入Dynamic Mesh编辑模式用Insert Edge Loop在墙面正面插入几圈边目的是增加网格密度方便后续布尔运算时孔洞边缘更平滑。这里有个经验值孔洞边缘的平滑度取决于孔洞周围的面数。如果墙面只有 6 个面布尔出来的孔洞会是六边形而不是圆形。我一般会在孔洞预期位置周围插入 3 到 4 圈边保证布尔后孔洞边缘至少有 12 到 16 个顶点。4.3 第二步用 Geometry Script 批量生成孔洞手动一个个挖孔太慢我们用 Geometry Script 写一个循环。在 Editor Utility Blueprint 里创建一个函数输入墙面 Mesh 和孔洞位置数组输出挖好孔的 Mesh。核心逻辑是遍历 HolePositions 数组在每个位置创建一个圆柱体然后用Apply Mesh Boolean节点从墙面网格中减去圆柱体。布尔运算的模式选择Difference。这里有个性能优化的点不要每次布尔都生成一个新的 Dynamic Mesh而是把所有圆柱体先合并成一个“孔洞集合网格”然后用一次布尔运算减去这个集合。这样比循环 6 次布尔快大约 3 到 4 倍。4.4 第三步孔洞边缘的倒角与平滑处理布尔运算出来的孔洞边缘是直角硬边视觉上不够真实。用Bevel工具给孔洞边缘加一个 0.5 厘米的倒角。操作时选中孔洞边缘的边循环点击 Bevel设置距离为 0.5段数为 2。然后切换到Smooth工具对倒角区域做一次轻度平滑强度设为 0.3 左右。这样孔洞边缘会有轻微的高光过渡看起来更像真实开孔。4.5 第四步UV 展开与材质分配墙面主体用盒式投影展 UV孔洞内壁用柱面投影。在 Modeling Mode 的UV Editor里可以分别选中不同 PolyGroup 做不同的投影方式。材质分配上墙面主体给一个乳胶漆材质孔洞内壁给一个深色塑料材质。这里可以用PolyGroup 材质分配功能按组赋材质比手动选面快得多。4.6 第五步碰撞生成与 Overlap 事件测试墙面需要碰撞否则角色会穿模。在 Modeling Mode 里用Generate Collision工具选择Convex Decomposition模式。这个模式会把网格分解成多个凸包适合带孔洞的复杂形状。生成碰撞后在蓝图里给墙面添加一个 Box Collision 组件设置碰撞预设为OverlapAllDynamic。然后写一个简单的测试蓝图角色靠近墙面时触发 Overlap 事件打印一条日志。这里就涉及到热词里提到的“ue5碰撞盒识别不到overlap事件”问题。常见原因有三个一是碰撞预设设置成了 Block 而不是 Overlap二是碰撞体没有正确生成比如 Convex Decomposition 失败导致碰撞体为空三是 Overlap 事件绑定在了错误的组件上。排查方法后面会详细讲。5. 常见问题与排查技巧实录5.1 碰撞盒识别不到 Overlap 事件的排查思路这个问题我在项目里遇到过至少三次每次原因都不一样。整理一个排查顺序第一步检查碰撞预设。在 Static Mesh 编辑器的 Collision 面板里确认 Collision Presets 设置的是 Overlap 而不是 Block。如果预设是 BlockAllOverlap 事件不会触发。第二步检查碰撞体是否存在。在编辑器里按AltC可以可视化碰撞体。如果看不到任何碰撞线框说明碰撞体没有生成。回到 Modeling Mode 重新生成一次或者手动添加简单碰撞。第三步检查 Overlap 事件的绑定对象。在蓝图里Overlap 事件是绑定在 Collision Component 上的不是绑定在 Actor 上的。如果你把事件绑定到了 Actor 的根组件而根组件没有碰撞事件就不会触发。第四步检查碰撞通道。在 Project Settings Collision 里确认两个物体的碰撞通道是否互相响应。比如一个物体是 WorldStatic另一个是 Pawn如果 WorldStatic 的碰撞响应里 Pawn 被设置为 IgnoreOverlap 也不会触发。5.2 Dynamic Mesh 编辑卡顿的优化方案前面提到过面数超过 5 万之后编辑会卡。除了降低面数还有几个优化手段关闭实时预览在 Modeling Mode 面板里把Live Preview关掉操作完再手动应用使用LOD编辑在低 LOD 上做形状调整高 LOD 只做细节分块编辑把大网格拆成几个小网格分别编辑最后合并升级硬件Dynamic Mesh 编辑主要吃单核 CPU 性能高频 CPU 比多核更有优势5.3 Geometry Script 执行失败的常见原因Geometry Script 的报错信息有时候很模糊我整理了几个高频错误错误现象可能原因解决方法节点执行后网格为空输入网格的 Dynamic Mesh 没有正确初始化检查输入是否为空加一个 Is Valid 判断布尔运算结果异常两个网格没有相交或者法线方向相反确认网格有重叠区域检查法线朝向Python 脚本报 AttributeErrorAPI 版本不匹配查官方文档确认当前 UE 版本的函数名批量处理时崩溃内存溢出分批处理每处理 50 个对象后手动清理一次5.4 引擎内建模的边界与取舍经验用了两年多 Modeling Mode我的体会是它适合做“修改”和“生成”不适合做“创作”。修改方面比如调整比例、挖孔、倒角、简化、UV 重投影这些引擎内做比 DCC 快。生成方面比如程序化摆放、批量布尔、参数化构件Geometry Script 的优势非常明显。但创作方面比如角色雕刻、复杂硬表面设计、有机曲面造型还是得用专业工具。我试过在引擎内做一个机械臂的复杂关节做到一半就放弃了因为推拉工具在复杂拓扑上的精度和效率远不如 Blender 的编辑模式。所以我的工作流是DCC 做主体创作引擎内做适配修改和程序化生成。两者配合而不是互相替代。6. 进阶方向Geometry Script 与蓝图工具链的联动6.1 用 Editor Utility Widget 做自定义建模面板如果你经常做某类重复性建模操作可以做一个自定义的 Editor Utility Widget。比如我们项目里经常需要给建筑墙面加窗户我就做了一个面板输入楼层高度、窗户间距、窗户尺寸点击生成自动在墙面上排列窗户并挖孔。实现方式是Editor Utility Widget 里放几个 Slider 和 ButtonButton 的 OnClicked 事件里调用 Geometry Script 的函数。这样即使不懂蓝图的美术同学也能一键生成大大减少了沟通成本。6.2 与 PCG 工具集的配合思路UE5 的 PCGProcedural Content Generation框架和 Geometry Script 是互补的。PCG 负责“在哪里放”Geometry Script 负责“放什么”。比如你要在一片区域里随机散布石块PCG 可以生成散布点然后每个点调用 Geometry Script 生成一个随机形状的石块。这样每次运行都能得到不同的结果而且所有石块都是真实几何体不是贴图假象。6.3 性能考量与资产规范程序化生成的资产如果不加控制很容易面数爆炸。我的建议是生成的网格面数控制在 5000 三角面以内及时生成 LOD可以用 Geometry Script 的 Simplify 函数自动生成碰撞体用简单形状不要用复杂网格生成的资产命名要有规律方便后续批量管理提示Geometry Script 生成的资产默认保存在内存里记得用Save Asset节点持久化到磁盘否则编辑器重启后就丢了。7. 我个人在实际操作中的几点体会这套工具链我用了两年多踩过的坑和总结的经验大概能写一本书这里挑几个最有价值的说。第一个体会是不要试图用 Modeling Mode 做所有事。我刚开始的时候很兴奋觉得终于可以告别 DCC 了结果做了一个复杂的机械零件花了 6 个小时最后效果还不如在 Blender 里 1 个小时做的。工具是有边界的认清边界才能高效工作。第二个体会是Geometry Script 的学习曲线在“理解数据结构”上不在“写代码”上。很多人觉得要学 Python 或者蓝图很麻烦但实际上 Geometry Script 的节点就那么几十个真正难的是理解 Dynamic Mesh 的顶点、边、面、PolyGroup 之间的关系。理解了数据结构写逻辑就是顺理成章的事。第三个体会是版本更新会带来 API 变化。UE5 从 5.0 到 5.4Geometry Script 的函数名和参数改了好几次。如果你在网上找到的教程代码跑不通先查一下版本兼容性不要怀疑自己的环境有问题。最后分享一个小技巧在 Modeling Mode 里按F可以聚焦到当前选中的网格按Alt鼠标左键可以旋转视角按Alt鼠标中键可以平移。这些快捷键和 Blender 的操作逻辑很像如果你有 Blender 基础上手会非常快。另外Modeling Mode 的所有操作都支持CtrlZ撤销不用担心改坏了回不去大胆试就行。