news 2026/9/25 17:03:55

UE5 Modeling Mode与Geometry Script:动态网格编辑实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UE5 Modeling Mode与Geometry Script:动态网格编辑实战指南

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 按平面、柱面、球面投影,做建筑墙面的时候用平面投影最省事。

工具名称所属分类典型用途关键参数
PolyExtrudePoly墙体挤出、结构延伸Distance、Direction
MeshBooleanMesh开洞、合并、切割Operation、Transfer Materials
RemeshMesh拓扑重构、Nanite 预处理Target Edge Length
PolyEditPoly顶点级微调选择模式、Transform
AutoUVUV快速展 UVTexture Resolution
DisplaceDeform表面起伏、地形细节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 的用法。需求是:生成一个带圆角的矩形板,板上均匀分布若干圆孔。

首先用蓝图节点实现。核心步骤如下:

  1. 用Create Box节点创建一个长方体,设置长宽高。
  2. 用Apply Bevel节点给所有边加圆角,设置圆角半径和细分段数。
  3. 用Create Cylinder节点创建一个圆柱体,半径和高度根据孔径设置。
  4. 用Apply Mesh Boolean节点,模式设为 Difference,把圆柱体从长方体上减掉。
  5. 用循环节点重复步骤 3-4,每次改变圆柱体的位置,生成多个孔。
  6. 用Recompute Normals节点重算法线。
  7. 用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 工具精确得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 16:57:30

rkt 容器引擎全解析:pod 原生架构、安全特性与标准兼容性

容器运行时云原生网络 【免费下载链接】rkt [Project ended] rkt is a pod-native container engine for Linux. It is composable, secure, and built on standards. 项目地址: https://gitcode.com/gh_mirrors/rk/rkt 点击查看 免费下载 rkt(发音同 &…

作者头像 李华
网站建设 2026/9/25 16:53:43

写屏障机制原理

写屏障机制原理 1. 核心概念与工作原理 并发 GC 最大的难题不是"如何快",而是"如何对"。当 GC 扫描与用户 goroutine 同时运行时,用户 goroutine 改写指针的瞬间可能让 GC 漏标存活对象。这就需要一种机制——每当用户程序执行指针赋…

作者头像 李华
网站建设 2026/9/25 16:46:40

基于SpringBoot的鲜花在线商城管理系统:技术栈、背景意义与核心代码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 1. 项目背景与意义 随着互联网和移动支付的普及,线上购物已成为人们日常生活的重要组成部分。鲜花作为一种具有时效性、季节性和情感属性的特殊商品&#x…

作者头像 李华