UE4中三维几何总结——几何体

本文详细介绍了UE4中三种重要的三维几何图元:凸面网格(ConvexMesh)、三角形网格(TriangleMesh)和高度场(HeightField),包括它们的创建步骤、应用场景及烹饪过程。凸面网格适用于创建复杂的刚体形状,而三角形网格是最常见的场景表示形式。高度场则常用于地形和山体的构建。理解这些基础概念对于三维游戏开发至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、简述

此文目的总结三维几何学基础——几何体,可以依此提纲做发散,不局限为UE4,任何三维领域系统均可以使用学习
几何体用于构建刚体的形状,作为碰撞触发器,以及作为场景查询系统中的体积。还可以用于测试几何体之间的交集、光线投射以及将一个几何体扫描到另一个几何体。以下主要介绍几种常见的几何体模块。

2、基本图元

基本图元指的是数学描述中的基本模块,三维中的模块为正方体、圆球和圆锥等,在osg中,使用Drawable类将这些图元进行存储,二维中的模块为正方形、三角形等,二维的几何模块使用Geometry保存。二维和三维图元最后都需要保存在Geode容器中。
几何图形是值类型,继承自公共基类Geometry。每个几何类定义具有固定位置和方向的体积块或曲面。变换指定在其中解释几何图形的框架。

3、几何图元类型

常见3D几何图元:
球体:由一个属性(即其半径)指定,并以原点为中心
胶囊体:以原点为中心。它由半径和半高度值指定,其轴沿正 X 轴和负 X 轴延伸
要创建几何图形是直立的胶囊的动态Actor,形状需要相对变换,使其围绕Z轴旋转四分之一圈。通过这样做,胶囊将沿着Actor的Y轴而不是X轴延伸。设置形状和Actor与设置球体相同
盒体Box:包含三个边长的属性
通过Box/ 胶囊体,可以把复杂物体房子等简化为胶囊
平面Plane:平面将空间划分为"上方"和"下方"
Plane 在几何学没有属性,因为形状的姿势完全定义了平面的碰撞体积
具有PlaneGeometry 的形状只能为静态Actor创建
凸面网格Convex Mesh:如果给定形状中的任意两个点,该形状包含它们之间的线,则该形状是凸面的
三角形网格Triangle Mesh:与图形三角形网格一样,碰撞三角形网格由顶点和三角形索引的集合组成
高度场Height Field:顾名思义,可以用于制作山体、地形等

3.1 凸面网格Convex Mesh

创建步骤

  1. 定义凸对象的顶点 例如金字塔的五个点
  2. 构造凸数据布局的描述 例如顶点数量 标志flag
  3. Cooking库构建 Convex Mesh
  4. 创建形状,该几何图形对网格进行实例化

仅提供顶点
Cooking步骤
COMPUTE_CONVEX标志来计算网格
在没有Inflation的情况下,cooking会创建一个凸网格,其顶点是原始顶点的子集,并且顶点的数量保证不超过指定的最大值。Inflation将斜角锐边,这可能会增加超出指定最大值的新顶点。此外,斜角可能会产生小三角形, 首先,它试图在没有Inflation的情况下制造壳 。如果失败,它会尝试Inflation,如果也失败了,则使用AABB或OBB。

 AABB:Axis-Aligned Bounding Box,轴对齐包围盒
 OBB:Oriented Bounding Box,有向包围盒
 包围球:外接球

OBB比包围球和AABB更加逼近物体,能显著减少包围体的个数
在这里插入图片描述
凸面cooking应用以下步骤:
• 清理顶点 - 删除重复项等
• 查找包含输入集的顶点子集,即顶点有限
• 如果需要Inflation,斜角锐边并添加其他顶点
• 为新面创建多边形
• 计算顶点映射表(每个顶点至少需要 3 个相邻面)
• 检查多边形数据 - 验证所有顶点都在壳上或壳体内部,等等
• 计算质量和惯性张量,假设密度为 1
• 保存数据以进行流式传输

提供顶点和面
提供点和面后,相关的SDK 会验证网格并直接创建Convexmesh。这是创建凸网格的最快方法。需要每个顶点至少有 3 个相邻面。

凸面cooking过程中的内部步骤:
• 计算顶点映射表,每个顶点至少需要 3 个相邻面
• 检查多边形数据 - 检查所有顶点是否都在壳上或壳体内部,等等
• 计算质量和惯性张量,假设密度为 1
• 保存数据以进行流式传输

3.2 三角形网格Triangle Mesh

三角形网格可以说是被使用最多的一种场景的表达形式,与图形三角形网格一样,碰撞三角形网格由顶点和三角形索引的集合组成。
三角形网格cooking过程如下:
• 检查输入顶点的有效性
• 焊接顶点并检查三角形尺寸
• 为查询创建加速结构
• 计算边缘凸性信息和邻接
• 保存数据以进行流式传输

3.3 高度场Height Field

高度字段的局部空间轴为:
行 - X 轴、列 - Z 轴、高度 - Y 轴
顾名思义,地形只能通过常规矩形采样网格上的高度值来描述:
每个样本都由一个 16 位整数高度值、两个材质(对于样本矩形中的两个三角形)和一个曲面细分标志组成。
标志和材质是指下方和采样点右侧的像元,并指示沿哪个对角线将其拆分为三角形,以及这些三角形的材料。
在这里插入图片描述

高度场cooking过程如下:
• 将高度场样本加载到内部存储器中
• 预先计算边缘碰撞信息
• 保存数据以进行流式传输

<think>嗯,用户问的是如何在UE中对三维实体的网格顶点进行精确编辑。我需要先回忆UE的相关工具。UE本身主要是游戏引擎,建模功能不如专业软件,但可能有内置工具或插件支持。 首先,用户可能指的是静态网格体的顶点编辑。在UE中,静态网格体通常是通过导入外部建模软件制作的,比如Blender或Maya。不过,UE本身有没有顶点编辑功能呢? 记得在静态网格体编辑器中,有一个“编辑网格体”选项,可能允许基本的顶点调整。但功能可能有限,适合简单修改。需要检查具体步骤:打开静态网格体,进入编辑模式,选择顶点,移动、旋转或缩放。但精度如何保证?可能需要输入数值,而不是手动拖动。 另外,几何体脚本插件(Geometry Script)可能提供更多网格操作功能。可能需要通过蓝图或Python脚本来精确控制顶点位置。比如用Geometry Script的Set Vertex Position节点,但用户可能需要编程知识。 还有建模模式(Modeling Mode)里的工具,比如变形或直接编辑,但同样可能不够精确。用户可能需要结合其他方法,比如使用样条或生成器创建精确结构,再转换为网格体。 如果用户需要高精度编辑,可能还是建议在外部软件中处理,再重新导入UE。不过用户可能希望直接在UE内完成,所以需要提供可行的方法。 总结步骤:使用静态网格体编辑器进行基础编辑,结合几何体脚本或Python进行编程控制,或者利用建模模式工具。同时提醒用户注意引擎限制,复杂操作推荐外部软件。</think>在虚幻引擎(Unreal Engine, UE)中对三维实体网格顶点进行精确编辑,可以通过以下步骤实现: --- ### **一、核心工具选择** 1. **静态网格体编辑器(Static Mesh Editor)** - 适用于基础顶点编辑,支持手动调整顶点位置。 - **操作步骤**: 1. 在内容浏览器中双击静态网格体资源。 2. 点击顶部工具栏的 **编辑网格体(Edit Mesh)** → 进入编辑模式。 3. 在 **选择模式(Selection Mode)** 中选择 **顶点(Vertex)**。 4. 选中目标顶点,通过拖动或输入坐标值(按 `F4` 打开细节面板)调整位置。 2. **几何体脚本(Geometry Script)插件** - 提供编程式顶点控制,适合批量或算法化编辑。 - **操作步骤**: 1. 启用插件:`Edit → Plugins → 搜索 Geometry Script`。 2. 在蓝图或Python脚本中调用 `Set Vertex Position` 节点,通过索引和坐标直接修改顶点。 3. **建模模式(Modeling Mode)** - 集成多种网格操作工具(如挤出、切割等),支持非破坏性编辑。 - **操作步骤**: 1. 进入 `Modeling Mode`(快捷键 `Shift+5`)。 2. 使用 **变形(Deform)** 或 **顶点编辑(Vertex Editing)** 工具进行局部调整。 --- ### **二、精确控制技巧** 1. **坐标输入法** - 在顶点编辑模式下,选中顶点后按 `F4` 打开细节面板,直接输入 `Location` 的XYZ值(单位:厘米)。 2. **参考坐标系切换** - 通过工具栏的 **坐标系(World/Local)** 切换,确保移动方向符合需求: - **World Space**:基于全局坐标系。 - **Local Space**:基于模型自身坐标系。 3. **吸附功能(Snapping)** - 启用顶点吸附(按住 `V` 键拖动顶点),使其对齐到其他顶点或网格。 --- ### **三、高级方法:Python脚本自动化** 1. **使用Python API** - 通过 `unreal.EditorStaticMeshLibrary` 类实现批量顶点操作。 - **示例代码**: ```python import unreal mesh = unreal.EditorStaticMeshLibrary.get_selected_assets()[0] vertices = unreal.EditorStaticMeshLibrary.get_vertex_positions(mesh) # 修改第一个顶点的位置为 (100, 0, 50) vertices[0] = unreal.Vector(100, 0, 50) unreal.EditorStaticMeshLibrary.set_vertex_positions(mesh, vertices) ``` --- ### **四、注意事项** 1. **性能影响** - 高多边形网格的顶点编辑可能导致实时预览卡顿,建议分区域操作。 2. **外部工具联动** - 复杂建模建议使用Blender/Maya完成,通过Datasmith插件导入UE。 --- ### **五、总结** - **简单编辑**:使用静态网格体编辑器+坐标输入。 - **批量操作**:结合Geometry Script或Python脚本。 - **复杂建模**:优先在DCC软件中处理,再导入UE优化。 通过上述方法,可在UE中实现从基础到进阶的网格顶点精确控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值