1. 从“37”这个编号说起:Modeling Mode 到底解决了什么痛点
如果你在 UE5 里做过一段时间场景或道具,大概率经历过这样的循环:在外部 DCC 软件里建好模型,导出 FBX,导入引擎,发现比例不对,回 DCC 改,再导出,再导入。一个简单的墙面造型调整,来回折腾半小时。UE5 的 Modeling Mode 就是冲着这个痛点来的——它把一整套网格编辑工具直接塞进了引擎编辑器里,让你在关卡里就能完成建模、雕刻、布尔、重构、UV 调整这些操作。
标题里的“37”是这套工具集在某个学习体系里的编号,但真正值得聊的是后面三个关键词:Modeling Mode 工具集、动态网格编辑、Geometry Script 联动。这三者构成了 UE5 内置建模能力的完整拼图。Modeling Mode 是操作界面和工具入口,动态网格编辑是底层数据结构支撑,Geometry Script 则是把建模能力脚本化、程序化的桥梁。
我第一次认真用 Modeling Mode 是在做一个室内场景的时候。当时需要大量不同尺寸的墙板和地板拼接,如果用传统流程,每个尺寸都要单独建模。后来发现 Modeling Mode 里的PolyExtrude和PolyEdit配合使用,可以直接在引擎里拉伸、切割、调整面片,效率提升非常明显。更关键的是,这些操作是非破坏性的——你可以随时回到之前的步骤调整参数,而不是像传统建模那样一旦确认就难以回溯。
这套工具适合谁?如果你是从美术转过来的,有基本的建模概念,那上手会很快;如果你是纯蓝图或程序向的开发者,Geometry Script 那部分会让你如鱼得水;如果你完全没接触过建模,建议先花点时间理解网格的基本构成——顶点、边、面、UV 这些概念,不然后面操作起来会有点懵。
提示:Modeling Mode 的工具虽然强大,但它不是要替代 Blender 或 Maya。它的定位是“引擎内的快速迭代工具”,适合做原型、做调整、做程序化生成,精细的角色建模还是得靠专业 DCC 软件。
2. Modeling Mode 工具集全解析:从面板到核心工具
2.1 如何进入 Modeling Mode 与界面布局逻辑
进入 Modeling Mode 的方式很简单:在编辑器左上角的模式下拉菜单里选择Modeling,或者用快捷键Shift + 5。切换过去之后,你会看到左侧出现一竖排工具图标,右侧是属性面板,视口里多了一些辅助显示元素。
这个界面布局的设计逻辑是“工具分类 + 即选即用”。左侧工具栏按功能分成了几个大类:创建(Create)、多边形编辑(Poly)、变形(Deform)、变换(Transform)、网格操作(Mesh)、体素(Voxel)、属性(Attribute)、UV、烘焙(Bake)等。每个大类下面有若干具体工具,鼠标悬停会显示工具名称和简短说明。
我刚开始用的时候觉得工具太多,不知道从哪下手。后来总结了一个思路:先明确你要做什么,再找对应的工具类别。比如你要给一个面做挤出,那就是 Poly 类里的PolyExtrude;你要把两个模型合并成一个,那就是 Mesh 类里的MeshBoolean;你要给模型重新生成一套均匀的三角面,那就是 Remesh 类里的Remesh。
右侧属性面板会随着你选择的工具动态变化。这里有个细节值得注意:很多工具都有“实时预览”开关,你调整参数的时候视口里会立刻显示效果,但只有点击Accept之后才会真正应用到网格上。这个设计避免了误操作,但也意味着如果你调了半天参数没点 Accept,切到别的工具就白调了。
2.2 核心工具分类与高频工具推荐
在众多工具里,有几个是我日常使用频率最高的,这里重点说一下。
PolyExtrude(多边形挤出):这是做建筑类模型最常用的工具。选中一个或多个面,调用 PolyExtrude,可以沿法线方向挤出新的几何体。参数里有Distance(挤出距离)、Direction(方向模式,可选法线方向或指定向量)、UV Scale(挤出面的 UV 缩放)。我通常会把Direction设为Face Normal,这样挤出方向自动跟随面的朝向,做斜面墙体的时候特别方便。
MeshBoolean(网格布尔):布尔运算在 UE5 里终于变得可用了。支持并集(Union)、差集(Difference)、交集(Intersection)三种模式。做门窗洞口、做复杂造型的切割,布尔是最快的方式。但要注意,布尔运算对网格质量有要求,如果两个网格的面片重叠严重或者有非流形边,结果可能会出问题。我的经验是,布尔之前先用Remesh把两个网格都处理一遍,让面片分布均匀一些,成功率会高很多。
Remesh(重构网格):这个工具可以把高模或扫描模型重新拓扑成均匀的三角面网格。参数里的Target Edge Length控制目标边长,数值越小面数越多、细节保留越好。做 Nanite 资产的时候,Remesh 是预处理的标准步骤。我一般会把 Target Edge Length 设为模型包围盒最长边的 1/100 到 1/200 之间,具体看细节需求。
PolyEdit(多边形编辑):这是最灵活的工具,可以手动移动、旋转、缩放顶点和边。配合Shift可以多选,配合Ctrl可以加选。做微调的时候比用 Transform 工具更精确,因为你可以直接操作具体的顶点。
UV 工具组:包括UVEditor、AutoUV、UVProject等。AutoUV 适合快速给一个模型展 UV,虽然质量不如手动展,但做原型够用了。UVProject 可以把 UV 按平面、柱面、球面投影,做建筑墙面的时候用平面投影最省事。
| 工具名称 | 所属分类 | 典型用途 | 关键参数 |
|---|---|---|---|
| PolyExtrude | Poly | 墙体挤出、结构延伸 | Distance、Direction |
| MeshBoolean | Mesh | 开洞、合并、切割 | Operation、Transfer Materials |
| Remesh | Mesh | 拓扑重构、Nanite 预处理 | Target Edge Length |
| PolyEdit | Poly | 顶点级微调 | 选择模式、Transform |
| AutoUV | UV | 快速展 UV | Texture Resolution |
| Displace | Deform | 表面起伏、地形细节 | Texture、Magnitude |
2.3 工具使用中的常见误区与注意事项
第一个误区是在错误的网格类型上使用工具。UE5 的网格分静态网格(Static Mesh)和动态网格(Dynamic Mesh)。Modeling Mode 的大部分工具操作的是动态网格,如果你直接对一个静态网格资产使用,系统会先把它转换成动态网格,操作完再转回去。这个转换过程可能会丢失一些信息,比如 LOD 设置、碰撞体等。所以我的建议是,先在动态网格上完成所有编辑,最后再统一烘焙成静态网格。
第二个误区是忽视面数控制。Modeling Mode 的工具用起来很爽,但很容易把面数堆上去。一个简单的挤出操作可能就增加几百个面,做几十次之后模型就变得很重。我习惯在每次大的编辑操作之后,用Stats命令看一下当前的面数,如果超过预期就及时用 Remesh 或 Decimate 减面。
第三个误区是不保存中间状态。Modeling Mode 的操作虽然可以撤销,但撤销栈是有限的。做复杂编辑的时候,我建议每隔几个关键步骤就用Create Static Mesh把当前状态保存成一个新资产,这样即使后面搞砸了,也能从上一个保存点重新开始。
注意:Modeling Mode 里的很多工具在
Accept之前不会修改原始网格,但有些工具(比如 PolyEdit 的拖拽)是实时修改的。操作前最好确认一下工具的行为模式,避免误操作。
3. 动态网格编辑的底层逻辑与实操要点
3.1 动态网格与静态网格的本质区别
要理解动态网格编辑,得先搞清楚它和静态网格的区别。静态网格是“死”的——顶点位置、索引缓冲、UV 数据在导入时就固定了,运行时不能改。动态网格是“活”的——它的顶点、面片、属性都可以在运行时动态增删改。
UE5 里动态网格的核心数据结构是FDynamicMesh3。这个结构维护了顶点数组、三角面数组、边数组,以及各种属性层(UV、法线、颜色等)。每次你调用 Modeling Mode 的工具,底层实际上是在操作这个FDynamicMesh3对象。
为什么这个区别很重要?因为动态网格编辑的性能开销比静态网格大得多。静态网格可以直接扔给 GPU 渲染,动态网格需要先在 CPU 上完成编辑操作,再上传到 GPU。所以如果你要做运行时 procedural 生成,比如根据玩家行为动态改变地形,那就必须用动态网格;但如果只是编辑器里的建模操作,最终还是要烘焙成静态网格。
我做过一个测试:一个 5000 面的模型,用 PolyExtrude 挤出 100 次,每次挤出增加 4 个面,最终面数 5400。在编辑器里操作很流畅,因为编辑器有足够的 CPU 资源。但如果在运行时每帧都做这种操作,帧率会明显下降。所以动态网格编辑的定位是编辑器工具和低频运行时操作,不是每帧都跑的高频逻辑。
3.2 动态网格的创建与转换流程
在 UE5 里创建动态网格有几种方式。最直接的是在 Modeling Mode 里用Create类工具新建一个基本体(球体、立方体、圆柱等),系统会自动创建一个动态网格对象。另一种方式是把现有的静态网格转换成动态网格,用Convert工具或者直接在 Geometry Script 里调用CopyMeshFromStaticMesh。
转换过程中有几个关键点需要注意。材质槽的映射:静态网格的材质槽会按顺序映射到动态网格的材质 ID 上,但如果动态网格编辑过程中新增了面片,这些新面片的材质 ID 需要手动指定,否则会默认使用第一个材质。UV 的保留:转换时 UV 数据会保留,但如果你做了布尔或 Remesh 操作,UV 可能会被重新计算或丢失。法线的重算:动态网格编辑后法线通常需要重新计算,用RecomputeNormals可以解决。
我通常的工作流是这样的:先从静态网格复制一份到动态网格,然后在动态网格上做所有编辑操作,最后用Bake工具烘焙回静态网格。烘焙的时候可以选择是否保留 LOD、是否生成碰撞、是否合并材质槽。这个流程的好处是原始资产不受影响,随时可以回退。
3.3 动态网格编辑的性能优化技巧
动态网格编辑的性能瓶颈主要在两个方面:顶点数量和操作复杂度。顶点越多,每次编辑需要遍历的数据量越大;操作越复杂(比如布尔运算),CPU 计算时间越长。
优化顶点数量的方法有几个。第一,及时 Remesh。编辑过程中面片可能会变得不均匀,有些地方密集有些地方稀疏,Remesh 可以重新均匀分布。第二,用 Decimate 减面。如果某些细节在最终效果里看不到,可以直接减掉。第三,分块处理。如果一个模型很大,可以拆成几个部分分别编辑,最后再合并。
优化操作复杂度的方法主要是避免不必要的布尔和 Remesh。布尔运算的复杂度是 O(n log n) 级别的,两个高面数模型做布尔会很慢。如果只是简单的切割,用PolyCut或PolyPlaneCut比布尔快得多。Remesh 也是类似,如果只是局部调整,用 PolyEdit 手动改比整体 Remesh 更高效。
还有一个容易被忽视的点是撤销栈的管理。动态网格编辑的每一步操作都会记录到撤销栈里,如果撤销栈太深,内存占用会很大。我习惯在完成一个阶段性的编辑后,手动清空一次撤销栈(用ClearUndo),释放内存。
提示:在编辑器里做动态网格编辑时,可以打开
Show > Advanced > Dynamic Mesh Stats来实时查看顶点数、面数、内存占用。这个面板对性能调优很有帮助。
4. Geometry Script 联动:把建模变成可编程的流程
4.1 Geometry Script 是什么以及它能做什么
Geometry Script 是 UE5 提供的一套蓝图和 Python API,让你可以用代码的方式操作动态网格。它的本质是把 Modeling Mode 里的那些工具函数暴露出来,让你可以组合、循环、条件判断,实现程序化建模。
举个例子:如果你要用 Modeling Mode 手动做 100 个不同尺寸的窗户,你得重复操作 100 次。但用 Geometry Script,你可以写一个循环,每次改变尺寸参数,自动生成一个窗户。这就是 Geometry Script 的核心价值——把重复性的建模工作自动化。
Geometry Script 能做的事情包括:创建基本体、布尔运算、挤出、倒角、UV 生成、法线计算、网格查询(比如获取某个位置的顶点)、网格变形(比如根据曲线弯曲)、网格合并与拆分等。基本上 Modeling Mode 里能做的,Geometry Script 都能做,而且还能做更多——因为你可以把多个操作组合成一个自定义函数。
我最初接触 Geometry Script 是为了做一个程序化的书架生成器。需求是:给定书架的宽、高、深、层数,自动生成一个带隔板的书架模型。如果用传统建模,每个尺寸都要手动做。用 Geometry Script,我写了一个函数,输入四个参数,输出一个动态网格,然后烘焙成静态网格。整个过程不到 100 行蓝图节点,但节省了大量重复劳动。
4.2 蓝图与 Python 两种调用方式的取舍
Geometry Script 支持两种调用方式:蓝图节点和 Python 脚本。两者各有适用场景。
蓝图节点适合做运行时 procedural 生成,或者做编辑器工具给美术用。蓝图的优势是可视化、易调试、可以和游戏逻辑无缝结合。比如你可以做一个蓝图工具,让美术在编辑器里拖拽一个滑块就能改变书架的层数,实时看到效果。蓝图的劣势是节点多了之后会变得很乱,复杂逻辑维护起来麻烦。
Python 脚本适合做批量处理、资产导入导出、自动化流水线。Python 的优势是代码简洁、易于版本管理、可以调用外部库。比如你可以写一个 Python 脚本,遍历一个文件夹里的所有 FBX 文件,自动导入、Remesh、生成 UV、烘焙、保存。Python 的劣势是需要一定的编程基础,而且调试不如蓝图直观。
我的建议是:编辑器内的交互式工具用蓝图,批量处理和流水线用 Python。两者也可以结合——用 Python 做批量预处理,用蓝图做精细调整。
4.3 一个完整的 Geometry Script 实操案例
下面用一个具体案例来演示 Geometry Script 的用法。需求是:生成一个带圆角的矩形板,板上均匀分布若干圆孔。
首先用蓝图节点实现。核心步骤如下:
- 用
Create Box节点创建一个长方体,设置长宽高。 - 用
Apply Bevel节点给所有边加圆角,设置圆角半径和细分段数。 - 用
Create Cylinder节点创建一个圆柱体,半径和高度根据孔径设置。 - 用
Apply Mesh Boolean节点,模式设为 Difference,把圆柱体从长方体上减掉。 - 用循环节点重复步骤 3-4,每次改变圆柱体的位置,生成多个孔。
- 用
Recompute Normals节点重算法线。 - 用
Copy Mesh to Static Mesh节点烘焙成静态网格资产。
关键参数的计算:假设板子尺寸是 200x100x10,圆角半径 5,孔径 8,孔间距 20。那么孔的数量是floor(200/20) - 1 = 9个(横向),floor(100/20) - 1 = 4个(纵向),总共 36 个孔。每个孔的位置可以用双重循环计算:X = -100 + 20 + i * 20,Y = -50 + 20 + j * 20。
如果用 Python 实现,代码结构大致如下:
import unreal def generate_perforated_plate(length, width, thickness, fillet_radius, hole_radius, spacing): # 创建动态网格 dyn_mesh = unreal.DynamicMesh() # 创建基础板 box_opts = unreal.CreateBoxOptions() box_opts.set_editor_property("dimensions", unreal.Vector(length, width, thickness)) unreal.GeometryScriptLibrary.create_box(dyn_mesh, box_opts) # 加圆角 bevel_opts = unreal.BevelOptions() bevel_opts.set_editor_property("distance", fillet_radius) bevel_opts.set_editor_property("segments", 4) unreal.GeometryScriptLibrary.apply_bevel(dyn_mesh, bevel_opts) # 计算孔位并做布尔减 num_x = int(length / spacing) - 1 num_y = int(width / spacing) - 1 for i in range(num_x): for j in range(num_y): x = -length/2 + spacing + i * spacing y = -width/2 + spacing + j * spacing cyl_opts = unreal.CreateCylinderOptions() cyl_opts.set_editor_property("radius", hole_radius) cyl_opts.set_editor_property("height", thickness * 2) cyl_mesh = unreal.DynamicMesh() unreal.GeometryScriptLibrary.create_cylinder(cyl_mesh, cyl_opts) # 移动圆柱到目标位置 transform = unreal.Transform(location=[x, y, 0]) unreal.GeometryScriptLibrary.transform_mesh(cyl_mesh, transform) # 布尔减 bool_opts = unreal.MeshBooleanOptions() bool_opts.set_editor_property("operation", unreal.MeshBooleanOperation.DIFFERENCE) unreal.GeometryScriptLibrary.apply_mesh_boolean(dyn_mesh, cyl_mesh, bool_opts) # 重算法线 unreal.GeometryScriptLibrary.recompute_normals(dyn_mesh) return dyn_mesh这段代码的核心逻辑和蓝图版本一致,但用代码表达更紧凑。实际使用时,你可以把这个函数封装成一个编辑器工具,让美术输入参数后一键生成。
注意:Geometry Script 的 Python API 在不同 UE5 版本之间可能有变化,建议先查一下当前版本的 API 文档。另外,布尔运算在循环里调用时要注意性能,如果孔的数量很多,可以考虑先合并所有圆柱体再一次性做布尔,而不是逐个做。
5. 常见问题与排查技巧实录
5.1 工具操作类问题速查
在实际使用 Modeling Mode 和 Geometry Script 的过程中,我踩过不少坑。下面整理了一些典型问题和解决方法。
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 布尔运算结果破面 | 网格有非流形边或自相交 | 先 Remesh 再布尔,或检查网格完整性 |
| 挤出后面片法线反了 | 挤出方向与面法线不一致 | 用 Flip Normals 翻转,或调整 Direction 参数 |
| Remesh 后 UV 丢失 | Remesh 会重新计算拓扑 | 在 Remesh 前备份 UV,或用 AutoUV 重新生成 |
| Geometry Script 节点报错 | 输入网格为空或参数越界 | 加判空检查,参数做 Clamp |
| 烘焙后材质不对 | 材质槽映射错误 | 检查 Material ID 设置,手动指定材质 |
| 动态网格编辑卡顿 | 顶点数过多或撤销栈太深 | 及时 Remesh 减面,清空撤销栈 |
5.2 性能与内存问题的排查思路
动态网格编辑的性能问题通常表现为视口卡顿、操作延迟、内存占用飙升。排查的时候可以按以下顺序检查。
第一步,看顶点数和面数。打开 Dynamic Mesh Stats 面板,如果顶点数超过 10 万,操作就会开始变卡。超过 50 万,基本就没法流畅编辑了。这时候需要用 Remesh 或 Decimate 减面。
第二步,看撤销栈深度。UE5 默认的撤销栈深度是 50 步左右,如果做了大量操作,撤销栈会占用大量内存。可以在编辑器设置里调小撤销栈深度,或者手动清空。
第三步,看是否有泄漏的动态网格对象。在 Geometry Script 里创建的动态网格对象,如果不再使用,需要手动释放。蓝图里有Release Dynamic Mesh节点,Python 里需要确保对象被垃圾回收。
第四步,看是否在 Tick 里做了重操作。如果动态网格编辑逻辑放在了 Actor 的 Tick 里,每帧都执行,那性能肯定好不了。应该把编辑操作放在事件触发时执行,而不是每帧执行。
5.3 资产管理与版本控制的经验
用 Modeling Mode 和 Geometry Script 生成的资产,管理起来和传统建模资产有些不同。我的经验是:动态网格的中间状态不要保存成资产,只保存最终的静态网格。因为动态网格资产体积大、依赖多,而且一旦保存就很难追溯它是怎么生成的。
更好的做法是:把生成逻辑(蓝图或 Python 脚本)保存好,需要修改的时候重新跑一遍脚本。这样资产是可复现的,改参数就能生成新版本。如果团队协作,可以把脚本纳入版本控制,每个人都能生成一致的资产。
另外,Geometry Script 生成的静态网格,命名要有规律。我习惯用SM_前缀加功能描述加参数摘要,比如SM_Bookshelf_W200_H180_D30_S5,这样一看名字就知道尺寸和层数。
提示:如果项目里大量使用 Geometry Script 生成资产,建议建一个专门的文件夹存放生成脚本,并且写一个 README 说明每个脚本的用途和参数。不然过几个月自己都忘了哪个脚本是干嘛的。
6. 从工具到流程:把 Modeling Mode 融入日常工作流
6.1 什么时候用 Modeling Mode,什么时候用 DCC
这个问题我被问过很多次。我的判断标准很简单:如果修改是“参数化”的、局部的、快速的,用 Modeling Mode;如果修改是“造型”的、整体的、精细的,用 DCC。
举个例子:场景里有一面墙,需要开三个窗户。这个需求用 Modeling Mode 的布尔工具,五分钟搞定。但如果这面墙需要做成哥特式风格,有复杂的雕花和曲线,那就得去 Blender 里做。再比如,一个道具需要调整比例和位置,Modeling Mode 里直接拉伸就行;但如果需要重新雕刻表面细节,还是得回 DCC。
还有一个场景是程序化生成。比如你要根据关卡布局自动生成围栏、楼梯、管道,这些用 Geometry Script 做最合适。DCC 软件虽然也有脚本功能,但和引擎的集成度不如 Geometry Script。
6.2 一个典型的混合工作流示例
我最近做的一个项目是搭建一个工业风场景,里面有很多管道和金属架。工作流是这样的:
第一步,在 Blender 里建一个基础的管道模型,包括弯头、三通、法兰这些标准件。导出 FBX。
第二步,导入 UE5,用 Modeling Mode 的 Remesh 工具统一面数,用 AutoUV 生成 UV。
第三步,用 Geometry Script 写一个管道生成器,输入起点、终点、管径,自动生成路径上的管道段和弯头。这个生成器可以处理任意角度的转弯。
第四步,在关卡里用样条线(Spline)定义管道路径,然后调用管道生成器,自动生成管道网格。
第五步,对生成的管道做局部调整,用 PolyEdit 微调一些连接处的位置。
这个流程的好处是:标准件在 DCC 里做一次就行,后续的排列组合全部自动化。改路径只需要改样条线,管道自动重新生成。整个场景的管道系统,从设计到完成,大概用了两天时间,如果纯手动建模,至少一周。
6.3 团队协作中的规范建议
如果团队里多个人都要用 Modeling Mode 和 Geometry Script,最好提前定一些规范。
命名规范:动态网格资产、生成的静态网格、Geometry Script 脚本,都要有统一的命名前缀和格式。比如DM_表示动态网格,SM_表示静态网格,GS_表示 Geometry Script 脚本。
参数规范:Geometry Script 脚本的输入参数要有明确的单位和范围。比如长度单位统一用厘米,角度统一用度,参数范围在脚本里做 Clamp。
版本规范:UE5 的 Geometry Script API 在不同版本之间有变化,团队要统一引擎版本。如果必须跨版本,要在脚本里做版本判断。
测试规范:Geometry Script 生成的资产,要在不同的硬件配置上测试性能。特别是面数和材质复杂度,要确保在目标平台上能跑得动。
注意:Geometry Script 的 Python 脚本在打包后的游戏里不能运行,它只在编辑器环境下可用。如果需要在运行时做程序化生成,必须用蓝图节点。
7. 我个人的一些实操心得
用了这么久 Modeling Mode 和 Geometry Script,有几个心得是文档里不会写的。
第一个心得:养成“先复制再编辑”的习惯。Modeling Mode 的工具虽然可以撤销,但有些操作(比如布尔)撤销后可能无法完全恢复原始状态。我现在的习惯是,对任何重要资产做编辑之前,先复制一份动态网格,在副本上操作。确认没问题了再替换原始资产。
第二个心得:Remesh 的 Target Edge Length 不要设得太小。我一开始追求细节,把 Target Edge Length 设得很小,结果面数爆炸,编辑器卡得没法用。后来发现,对于大多数场景资产,Target Edge Length 设在 1-5 厘米之间就够了,具体看资产在屏幕上的显示大小。如果资产只在远处出现,甚至可以设到 10 厘米。
第三个心得:Geometry Script 的调试要用 Print 节点。蓝图里的 Geometry Script 节点出错时,报错信息往往很模糊。我的做法是在关键步骤后面加 Print 节点,输出当前的顶点数、面数、包围盒尺寸,这样能快速定位是哪一步出了问题。
第四个心得:布尔运算之前先做一次“网格清理”。用MeshRepair工具可以修复非流形边、重复顶点、退化面片。清理过的网格做布尔,成功率会高很多。这个步骤花不了几秒钟,但能省掉后面大量的排查时间。
第五个心得:把常用的 Geometry Script 逻辑封装成函数库。我把自己常用的几个操作(创建带圆角的板、生成阵列孔、沿曲线弯曲网格)封装成了蓝图函数库,放在项目里。每次新项目直接复制过去就能用,不用重新搭节点。
最后再分享一个小技巧:Modeling Mode 里的PolyEdit工具,按住Ctrl拖拽顶点可以沿法线方向移动,按住Shift拖拽可以沿屏幕平面移动。这两个快捷键组合在微调的时候特别有用,比用 Transform 工具精确得多。