几何体脚本库包含非常广泛的功能,从低级别的网格体构造和查询(例如逐三角形构建网格体或计算其顶点数量),到高级别运算,如网格体布尔运算和相交测试,不一而足。
如需详细了解如何使用几何体脚本库,请参阅几何体脚本用户指南。
大部分函数在编辑器中以及在运行时可用。但是,一些函数仅在编辑器中可用,下面的表中已注明。
资产和组件读写
这些函数用于读写动态网格体实例,例如读写现有或新的资产或组件。
| 节点名称 | 说明 |
|---|---|
| Copy Mesh From Static Mesh | 从静态网格体资产提取动态网格体资产。 |
| Copy Mesh To Static Mesh | 使用从动态网格体资产转换的新几何体更新静态网格体资产。 |
| Copy Mesh From Component | 从世界或本地空间中受支持的组件类型提取动态网格体资产。 |
| Create New Volume From Mesh | 从动态网格体资产创建新体积Actor(例如阻挡体积)。请注意,该节点仅适用于编辑器。 |
| Create New Static Mesh Asset From Mesh | 从动态网格体资产创建新静态网格体资产。请注意,该节点仅适用于编辑器。 |
| Set Static Mesh Collision From Mesh | 基于输入网格体为静态网格体资产生成简单碰撞形状 |
| Set Dynamic Mesh Collision From Mesh | 基于输入网格体为动态网格体组件生成简单碰撞形状 |
图元生成
这些函数用于生成图元网格体并附加到输入动态网格体
| 节点名称 | 说明 |
|---|---|
| Append Box | 将3D盒体附加到指定的动态网格体。 |
| Append Sphere Lat Long | 将使用纬度/经度拓扑进行三角剖分的3D球体附加到动态网格体。 |
| Append Sphere Box | 将使用盒体拓扑进行三角剖分的3D球体附加到动态网格体。 |
| Append Capsule | 将3D胶囊体附加到动态网格体。 |
| Append Cylinder | 将3D圆柱体(带可选的端盖)附加到动态网格体。 |
| Append Cone | 将3D椎体附加到动态网格体。 |
| Append Torus | 将3D圆环面或部分圆环面附加到动态网格体。 |
| Append Rectangle | 将平面矩形附加到动态网格体。 |
| Append Round Rectangle | 将带圆角的平面矩形(RoundRect)附加到动态网格体。 |
| Append Disc | 将平面圆盘形附加到动态网格体。 |
| Append Triangulated Polygon | 将平面2D多边形的德洛内三角剖分附加到动态网格体。 |
| Append Revolve Polygon | 将2D多边形的旋转表面(完全旋转或可选限制的部分旋转)附加到动态网格体。 |
| Append Spiral Revolve Polygon | 沿螺旋路径旋转2D多边形,就像用于创建垂直螺旋的那种路径。 |
| Append Revolve Path | 旋转开放式2D路径,带可选的顶部和底部端盖。 |
| Append Simple Extrude Polygon | 使用所选动态网格体沿垂直路径挤压2D多边形。 |
| Append Simple Swept Polygon | 使用所选动态网格体沿任意3D路径扫描2D多边形。 |
| Append Linear Stairs | 使用所选动态网格体附加线性楼梯。 |
| Append Curved Stairs | 使用所选动态网格体附加环形楼梯。 |
变换和变形
这些函数用于操控动态网格体的 顶点位置(Vertex Positions) 。它们不会改变网格体拓扑或连接。
| 节点名称 | 说明 |
|---|---|
| Translate Mesh | 将平移应用于网格体的顶点。 |
| Scale Mesh | 将缩放变换应用于网格体的顶点。 |
| Transform Mesh | 将任意FTransform应用于网格体的顶点。 |
| Apply Bend Warp To Mesh | 围绕变换定义的轴应用弯曲扭曲。 |
| Apply Twist Warp To Mesh | 围绕变换定义的轴应用扭转扭曲。 |
| Apply Flare Warp To Mesh | 应用迸发/膨胀扭曲。 |
| Apply Math Warp To Mesh | 应用各种基于简单数学函数的扭曲,目前为带有任意方向的1D或2D正弦波。 |
| Apply Perlin Noise To Mesh | 应用3D Perlin噪点置换。 |
| Apply Iterative Smoothing To Mesh | 应用若干迭代以对动态网格体使用简化网格体平滑。 |
| Apply Displace From Texture Map | 基于Texture2D和UV信道将置换应用于动态网格体。 |
复合 / 分解
这些函数用于将网格体组合在一起或分割开。
| 节点名称 | 说明 |
|---|---|
| Copy Mesh To Mesh | 在不同动态网格体之间复制网格体。 |
| Get Sub Mesh From Mesh | 在不同动态网格体之间复制三角形列表。 |
| Split Mesh By Components | 将网格体分成多个部分,每个连接的组件对应一个部分,从动态网格体池绘制。 |
| Split Mesh By Materials | 将网格体分成多个部分,每个连接的组件对应一个部分,从动态网格体池绘制。 |
| Append Mesh | 将几何体从一个网格体附加到另一个网格体,带可选的变换。 |
| Append Mesh Repeated | 基于应重复的次数将几何体从一个网格体附加到另一个网格体,每次累积变换。该运算很适合用于创建图案。 |
网格体建模
这些函数提供标准高级别建模运算,但通常会调用建模模式中类似名称的工具会调用的低级别网格体处理代码。
| 节点名称 | 说明 |
|---|---|
| Apply Mesh Boolean | 基于第二个网格体将布尔值运算(例如,并集、交集和差集)应用于动态网格体。 |
| Apply Mesh Plane Cut | 将平面切割应用于网格体,可选择填充创建的所有孔洞。 |
| Apply Mesh Plane Slice | 将网格体切成两半,带可选的孔洞填充。 |
| Apply Mesh Mirror | 在整个平面中镜像网格体,带可选的三角形切割和结合。 |
| Apply Mesh Offset | 将网格体的顶点移至偏移表面。 |
| Apply Mesh Shell | 将网格体的三角形副本移至偏移表面,并将其拼接到原始三角形。例如,用于创建加厚外壳。 |
| Apply Mesh Extrude | 沿恒定方向挤压网格体的三角形。例如,从开放式三角剖分的多边形创建固体。 |
| Apply Mesh Solidify | 将网格体替换为体素化、网格化的近似对象(VoxWrap运算)。 |
| Apply Mesh Morphology | 将网格体替换为基于SDF的偏移网格体近似对象。 |
| Apply Mesh Self Union | 将对象与自身进行网格体布尔值并集运算,以修复自我交集,删除浮动几何体,等等。 |
| Apply Mesh Polygroup Bevel | 将网格体斜边运算应用于所有多边形组边缘。 |
细分函数
这些函数将各种网格体细分策略应用于动态网格体资产。
| 节点名称 | 说明 |
|---|---|
| Apply Recursive PNTessellation | 使用递归策略(即1到4个三角形的分割)将PN曲面细分应用于输入网格体。 |
| Apply Polygroup Catmull Clark SubD | 将Catmull Clark细分应用于网格体的多边形组拓扑(丢弃输入三角剖分)。请注意,该节点仅适用于编辑器。 |
| Apply Triangle Loop SubD | 将循环细分应用于输入网格体。请注意,该节点仅适用于编辑器。 |
简化函数
这些函数使用各种策略来简化网格体。
| 节点名称 | 说明 |
|---|---|
| Apply Simplify To Triangle Count | 简化网格体,直至达到目标三角形计数。 |
| Apply Simplify To Vertex Count | 简化网格体,直至达到目标顶点计数。 |
| Apply Simplify To Tolerance | 将网格体简化至目标几何公差。例如,进一步的简化会导致与输入网格体的偏差大于公差。 |
| Apply Simplify To Planar | 简化网格体中三角形超过必要数量的平面区域。请注意,这不会改变网格体的3D形状。 |
| Apply Simplify To Polygroup Topology | 将网格体简化至多边形组拓扑。例如,网格体多边形组的高级别面。另一个例子是在默认盒体球体上,简化至多边形组拓扑会生成盒体。 |
法线函数
这些函数重新计算网格体的法线。
| 节点名称 | 说明 |
|---|---|
| Flip Normals | 反转每个面的方向来翻转网格体法线。 |
| Set Per Vertex Normals | 将网格体法线设置为每个顶点的法线。例如,所有顶点都没有分割法线。 |
| Set Per Face Normals | 将网格体法线设置为每个面/三角形的法线。例如,沿网格体每个边缘的分割法线。 |
| Compute Split Normals | 基于角度公差和/或诸如多边形组拓扑之类的其他因素,计算网格体的分割法线。 |
| Recompute Normals | 重新计算现有网格体法线。保留现有分割法线。例如,在网格体变形之后使用。 |
| Compute Tangents | 重新计算网格体的切线(各种方法)。 |
清理/修复函数
这些函数用于修复网格体中的问题,或应用其他标准修复。
| 节点名称 | 说明 |
|---|---|
| Compact Mesh | 压缩网格体的顶点和三角形,以删除顶点ID或三角形ID列表中的所有"孔洞"(请参阅"低级别网格体查询"小节中的讨论)。 |
| Discard Mesh Attributes | 从动态网格体删除属性集,例如所有UV、法线、材质ID、顶点颜色和扩展多边形组层。请注意,这可能会导致许多函数无法正常运行。 |
| Auto Repair Normals | 该函数尝试自动调整网格体法线的方向,使其保持一致,例如修复翻转的法线。 |
| Weld Mesh Edges | 在可能的情况下,将网格体的所有开放式边界边缘结合在一起,以便删除"裂缝"。 |
| Fill All Mesh Holes | 尝试填充网格体的所有开放式边界循环(例如几何体表面中的孔洞)。 |
| Remove Small Components | 删除网格体中体积、面积或三角形计数低于阈值的连接组件。 |
| Remove Hidden Triangles | 删除网格体中按照"可见"和"外部"的各种定义从外部视图不可见的所有三角形。 |
低级别网格体查询
这些函数提供有关网格体元素的低级别信息。在此上下文中,VertexID 和 TriangleID 是整数。
在动态网格体中,删除顶点/三角形之后,VertexID或TriangleID范围中可能存在空缺,一些运算(如简化)可能返回存在空缺的网格体。ID范围中的空缺是使用 Compact Mesh 函数清理的。
| 节点名称 | 说明 |
|---|---|
| Get Vertex Count | 获取网格体中的顶点数量。 |
| Get Num Vertex IDs | 获取网格体中的顶点ID数量,如果网格体不密集,这可能大于顶点计数。例如,在删除顶点之后。 |
| Is Valid Vertex ID | 如果顶点ID引用的是有效顶点,则返回true。 |
| Get All Vertex IDs | 返回网格体中所有顶点ID的索引列表。 |
| Get Vertex Position | 按顶点ID获取网格体顶点的3D位置。 |
| Get All Vertex Positions | 返回所有网格体顶点位置的向量列表(可能很大!)。 |
| Get Triangle Count ()** | 返回网格体中的三角形数量。请注意,这是直接作用于动态网格体的函数。 |
| Get Num Triangle IDs | 获取网格体中三角形ID的数量。如果网格体不密集,即使在删除三角形之后,这也可能大于三角形计数。 |
| Is Valid Triangle ID | 如果三角形ID引用的是有效三角形,则返回true。 |
| Get All Triangle IDs | 返回网格体中所有三角形ID的索引列表。 |
| Get Triangle Indices | 返回三角形的三顶点索引组。 |
| Get All Triangle Indices | 返回网格体中所有三角形三索引组的三角形列表。 |
| Get TrianglePositions | 返回三角形的三个角位置。 |
| Get TriangleFace Normal | 返回三角形的面/面片法线。 |
| Get TriangleUVs | 返回三角形的三个角UV。 |
| Get Triangle Material ID | 返回三角形的当前材质ID。 |
| Get All Triangle Material IDs | 返回所有三角形材质ID的索引列表。 |
| Get Triangle Polygroup ID | 返回给定多边形组层中三角形的当前多边形组ID。 |
| Get Has Vertex ID Gaps | 如果顶点ID列表中有空缺,则返回true。例如,"Get Number of Vertex IDs"大于"Get Vertex Count"。 |
| Get Has Triangle ID Gaps | 如果三角形ID列表中有空缺,使得"Get Num Triangle IDs"大于"Get Triangle Count",则返回true。 |
| Get Is Dense Mesh | 如果网格体密集,则返回true。例如,顶点ID或三角形ID中没有空缺。 |
| Get Mesh Has Attribute Set | 如果网格体启用了属性集来存储UV、法线、材质ID和顶点颜色(通常默认启用),则返回true。 |
低级别网格体构建
这些函数用于逐个三角形构造网格体,以及执行其他低级别网格体编辑运算。
若网格体元素有成千上万个三角形,那么在涉及到循环的情况中使用这些函数,可能会在蓝图或Python脚本编写中运行相当缓慢。
| 节点名称 | 说明 |
|---|---|
| Set Vertex Position | 设置网格体顶点的3D位置。 |
| Add Vertex To Mesh | 将新顶点添加到网格体并返回新的顶点ID。 |
| Add Vertices To Mesh | 将顶点列表添加到网格体。 |
| Delete Vertex From Mesh | 从网格体删除顶点。 |
| Delete Vertices From Mesh | 从网格体删除顶点列表。 |
| Add Triangle To Mesh | 将一个三角形(3元素顶点ID元组)添加到网格体。 |
| Add Triangles To Mesh | 将三角形列表添加到网格体。 |
| Delete Triangle From Mesh | 从网格体删除一个三角形。 |
| Delete Triangles From Mesh | 从网格体删除三角形列表。 |
| Delete Triangles In Polygroup | 从网格体删除特定多边形组层中有特定多边形组的所有三角形。 |
| Append Buffers To Mesh | 将一组顶点/三角形添加到网格体,带有法线、UV等。类似于流程性网格体(Proc Mesh)组件中的创建网格体(Create Mesh)分段。 |
| Set Mesh Triangle Normals | 设置网格体三角形的法线。 |
| Set Mesh Triangle UVs | 设置网格体三角形的UV。 |
| Set Triangle Material ID | 设置网格体三角形的材质ID。 |
材质ID函数
这些函数用于操控网格体的材质ID。材质ID是每个三角形的整数,并不直接关联到特定材质。在与静态网格体之间转换时,每个材质ID与一个 网格体分段(Mesh Section) 相关联。
| 节点名称 | 说明 |
|---|---|
| Get Has Material IDs | 如果网格体提供/启用了材质ID,则返回true。 |
| Enable Material IDs | 启用网格体上的材质ID,初始化为0。 |
| Clear Material IDs | 将网格体上的所有材质ID重置为0。 |
| Get Max Material ID | 返回网格体上当前设置的最大材质ID。 |
| Remap Material IDs | 对于带有匹配给定值的材质ID的所有三角形,将材质ID设置为新值。 |
| Set All Triangle Material IDs | 将网格体中的所有三角形的材质ID设置为输入索引列表中的值。 |
| Set Polygroup Material ID | 将网格体中有指定多边形组ID(在给定多边形组层中)的所有三角形的材质ID设置为指定材质ID。 |
顶点颜色
这些函数用于操控网格体的 顶点颜色(Vertex Colors) 。
| 节点名称 | 说明 |
|---|---|
| Set Mesh Constant Vertex Color | 将所有顶点颜色设置为特定颜色。 |
| Set Mesh Per Vertex Colors | 使用颜色列表设置每个顶点的颜色。 |
UV函数
这些函数用于操控网格体的 UV 。
| 节点名称 | 说明 |
|---|---|
| Get Num UV Sets | 获取网格体上UV集/层的数量。 |
| Set Num UV Sets | 设置网格体上UV集/层的数量。 |
| Get UV Set Bounding Box | 获取UV集内所有UV的2D边界框。 |
| CopyUVSet | 将目标UV集替换为源UV集内的值。 |
| Translate Mesh UVs | 将2D平移应用于UV集内的UV。 |
| Scale Mesh UVs | 将2D缩放应用于UV集内的UV。 |
| Rotate Mesh UVs | 将2D旋转应用于UV集内的UV。 |
| Recompute Mesh UVs | 基于不同类型的定义明确的UV岛状区(例如现有UV岛状区、多边形组等),重新计算网格体的UV。 |
| Repack Mesh UVs | 将现有UV岛状区打包到标准UV空间中。 |
| Set Mesh UVs From Planar Projection | 使用平面投影设置网格体的UV。 |
| Set Mesh UVs From Box Projection | 使用盒体投影设置网格体的UV。 |
| Set Mesh UVs From Cylinder Projection | 使用圆柱体投影设置网格体的UV。 |
| Auto Generate Patch Builder Mesh UVs | 使用PatchBuilder方法计算新UV,并可选择打包。 |
| Auto Generate XAtlas Mesh UVs | 使用XAtlas计算新UV,并可选择打包。 |
多边形组函数
这些函数用于操控网格体的 多边形组(PolyGroup) 。多边形组是每个三角形的整数,在建模工具和一些几何体脚本运算中用于隐式定义三角形的区域和区块。但请注意,多边形组层最终只是每个三角形的数字,因此可用于其他所有用户定义的用途。
| 节点名称 | 说明 |
|---|---|
| Get Has Polygroups | 如果网格体有标准多边形组层,则返回true。 |
| Enable Polygroups | 启用网格体上的标准多边形组层。 |
| GetNum Extended Polygroup Layers | 返回扩展多边形组层的计数。请注意,扩展多边形组层尚未受到所有运算或建模工具的完全支持。 |
| Set Num Extended Polygroup Layers | 设置网格体上扩展多边形组层的数量。 |
| Clear Polygroups | 将三角形多边形组分配重置为给定多边形组层的常量值。 |
| Copy Polygroups Layer | 在不同层之间复制多边形组。 |
| Convert UV Islands To Polygroups | 为网格体的每个断开连接的UV岛状区创建并分配新多边形组。 |
| Convert Components To Polygroups | 为网格体的每个断开连接的组件创建并分配新多边形组。 |
| Compute Polygroups From Angle Threshold | 基于边缘皱褶/开度角分隔网格体来设置多边形组。 |
网格体几何查询
这些函数允许对网格体进行高级别几何查询。
| 节点名称 | 说明 |
|---|---|
| Get Mesh Bounding Box | 计算网格体顶点的边界框。 |
| Get Mesh Volume Area | 计算网格体的体积和面积。 |
| Get Is Closed Mesh | 如果网格体是封闭的,例如没有拓扑边界边缘,则返回true。 |
| Get Num Open Border Loops | 返回开放边界循环的数量,例如网格体中的"孔洞"数量。 |
| Get Num Open Border Edges | 返回网格体中拓扑边界边缘的数量。 |
| Get Num Connected Components | 返回网格体中单独的连接组件数量,例如通过共同边缘连接的"三角形区块"。 |
| Compute Mesh Convex Hull | 计算并返回输入网格体的凸包外壳,在单独的网格体中返回。 |
| Compute Mesh Swept Hull | 计算输入网格体的2D扫描外壳,并在单独的网格体中返回。 |
网格体比较
这些函数可用来比较两个网格体。使用这些节点时不会修改任一网格体。
| 节点名称 | 说明 |
|---|---|
| Is Same Mesh As | 如果两个输入网格体按照输入选项定义的比较条件等同,则返回true。 |
| Measure Distances Between Meshes | 测量两个网格体之间的最小/最大和平均最近点距离。 |
| Is Intersecting Mesh | 如果两个输入网格体(带可选的变换)在几何上相交,则返回true。 |
BVH/AABBTree和空间查询
这些函数用于创建和查询网格体的AABBTree对象。
| 节点名称 | 说明 |
|---|---|
| Build BVH For Mesh | 为网格体构建可以用于下方查询的边界体积层级(BVH)对象。该函数返回几何体脚本动态网格体BVH结构体。 |
| Is BVH Valid For Mesh | 检查BVH对象是否仍可以用于网格体,如果网格体已更改,通常会返回false。 |
| Rebuild BVH For Mesh | 为网格体就地重新构建BVH对象,相较于构建新的BVH,这可以减少内存分配。 |
| Find Nearest Point On Mesh | 查找网格体/BVH上到给定3D点的最近点。 |
| Find Nearest Ray Intersection With Mesh | 查找3D光线与网格体/BVH的最近相交。 |
| Is Point Inside Mesh | 使用Fast Winding Number查询来测试某个点是否在网格体/BVH内。 |
工具
这些辅助函数很适合几何体脚本网格体处理和流程性生成器。
| 节点名称 | 说明 |
|---|---|
| Create Dynamic Mesh Pool | 创建新的动态网格体池对象。 |
| Create Unique New Asset Path Name | 给定基础路径和基础资产名称,创建新的唯一资产名称,这很适合Create New Static Mesh Asset From Mesh等函数。请注意,该节点仅适用于编辑器。 |