建模 — 变形与变换
前置条件:先阅读 unreal-modeling。
库
| 库 |
CDO |
| 变形 |
/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshDeformFunctions |
| 变换 |
/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshTransformFunctions |
TargetMesh 为 UDynamicMesh* 路径字符串。Debug 省略。需要 FGeometryScriptMeshSelection 的函数,用 MeshOperationLibrary 桥接。
变形函数
| 函数 |
关键参数 |
说明 |
ApplyBendWarpToMesh |
TargetMesh, Options, BendOrientation(FTransform), BendAngle(float), BendExtent(float) |
弯曲变形 |
ApplyTwistWarpToMesh |
TargetMesh, Options, TwistOrientation, TwistAngle, TwistExtent |
扭曲变形 |
ApplyFlareWarpToMesh |
TargetMesh, Options, FlareOrientation, FlarePercentX, FlarePercentY, FlareExtent |
膨胀/收缩变形 |
ApplyMathWarpToMesh |
TargetMesh, WarpOrientation, WarpType, Options |
数学函数变形(正弦等) |
ApplyIterativeSmoothingToMesh |
TargetMesh, Selection, Options |
迭代平滑(拉普拉斯风格) |
ApplyDisplaceFromTextureMap |
TargetMesh, Texture, Selection, Options, UVLayer |
纹理位移 |
ApplyPerlinNoiseToMesh2 |
TargetMesh, Selection, Options |
Perlin 噪声位移 |
ApplyDisplaceFromPerVertexVectors |
TargetMesh, Selection, VectorList, Magnitude |
按顶点向量位移 |
变换函数
| 函数 |
关键参数 |
说明 |
TransformMesh |
TargetMesh, Transform, bFixOrientationForNegativeScale |
应用完整变换 |
InverseTransformMesh |
TargetMesh, Transform, bFixOrientationForNegativeScale |
应用逆变换 |
TranslateMesh |
TargetMesh, Translation(FVector) |
平移 |
RotateMesh |
TargetMesh, Rotation(FRotator), RotationOrigin(FVector) |
旋转 |
ScaleMesh |
TargetMesh, Scale(FVector), ScaleOrigin, bFixOrientationForNegativeScale |
缩放 |
TransformMeshSelection |
TargetMesh, Selection, Transform |
变换选中区域 |
TranslateMeshSelection |
TargetMesh, Selection, Translation |
平移选中区域 |
RotateMeshSelection |
TargetMesh, Selection, Rotation, RotationOrigin |
旋转选中区域 |
ScaleMeshSelection |
TargetMesh, Selection, Scale, ScaleOrigin |
缩放选中区域 |
TranslatePivotToLocation |
TargetMesh, PivotLocation |
移动枢轴点(等效于平移 mesh 到 -PivotLocation) |
JSON 中 FTransform:{"Rotation":{"X":0,"Y":0,"Z":0,"W":1},"Translation":{"X":0,"Y":0,"Z":0},"Scale3D":{"X":1,"Y":1,"Z":1}}
JSON 中 FRotator:{"Pitch":0,"Yaw":90,"Roll":0}
结构体与枚举
FGeometryScriptBendWarpOptions
| 字段 |
类型 |
默认值 |
说明 |
bSymmetricExtents |
bool |
true |
对称范围 |
LowerExtent |
float |
10 |
非对称时的下界 |
bBidirectional |
bool |
true |
双向弯曲 |
BendAngle、BendExtent 是函数参数,不在 Options 内。
FGeometryScriptTwistWarpOptions
同弯曲:bSymmetricExtents、LowerExtent、bBidirectional。TwistAngle、TwistExtent 是函数参数。
FGeometryScriptFlareWarpOptions
| 字段 |
类型 |
默认值 |
说明 |
bSymmetricExtents |
bool |
true |
对称范围 |
LowerExtent |
float |
10 |
非对称时的下界 |
FlareType |
EGeometryScriptFlareType |
SinMode |
膨胀曲线类型 |
EGeometryScriptFlareType
| 值 |
说明 |
SinMode |
正弦曲线 sin(pi*x) |
SinSquaredMode |
正弦平方(更平滑过渡) |
TriangleMode |
分段线性(三角形轮廓) |
FGeometryScriptIterativeMeshSmoothingOptions
| 字段 |
类型 |
默认值 |
说明 |
NumIterations |
int |
10 |
迭代次数 |
Alpha |
float |
0.2 |
平滑系数 |
EmptyBehavior |
EGeometryScriptEmptySelectionBehavior |
FullMeshSelection |
空选择行为 |
FGeometryScriptPerlinNoiseOptions
| 字段 |
类型 |
说明 |
BaseLayer |
struct |
包含 Magnitude(5.0)、Frequency(0.25)、FrequencyShift(FVector)、RandomSeed(0) |
bApplyAlongNormal |
bool |
沿法线方向位移 |
EmptyBehavior |
enum |
空选择行为 |
FGeometryScriptDisplaceFromTextureOptions
| 字段 |
类型 |
默认值 |
说明 |
Magnitude |
float |
1 |
位移幅度 |
UVScale |
FVector2D |
(1,1) |
UV 缩放 |
UVOffset |
FVector2D |
(0,0) |
UV 偏移 |
Center |
float |
0.5 |
中心值(低于此值为负位移) |
ImageChannel |
int |
0 |
采样通道 |
EmptyBehavior |
enum |
FullMeshSelection |
空选择行为 |
EGeometryScriptEmptySelectionBehavior
| 值 |
说明 |
FullMeshSelection |
空选择 = 选择全部 |
EmptySelection |
空选择 = 不选择任何东西 |
JSON 示例
迭代平滑(全 mesh,5 次迭代):
{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshDeformFunctions","function":"ApplyIterativeSmoothingToMesh","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","Selection":{},"Options":{"NumIterations":5,"Alpha":0.15,"EmptyBehavior":"FullMeshSelection"}}}
缩放 mesh(2 倍均匀缩放,原点为中心):
{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshTransformFunctions","function":"ScaleMesh","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","Scale":{"X":2,"Y":2,"Z":2},"ScaleOrigin":{"X":0,"Y":0,"Z":0},"bFixOrientationForNegativeScale":true}}
Perlin 噪声位移:
{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshDeformFunctions","function":"ApplyPerlinNoiseToMesh2","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","Selection":{},"Options":{"BaseLayer":{"Magnitude":10,"Frequency":0.1,"FrequencyShift":{"X":0,"Y":0,"Z":0},"RandomSeed":42},"bApplyAlongNormal":true,"EmptyBehavior":"FullMeshSelection"}}}
发现
对上述 CDO 路径调用 DescribeObject 可查看完整函数列表和参数签名。
1---2name: unreal-modeling-deform3description: GeometryScript 变形与变换操作。当用户要求弯曲、扭曲、平滑、噪声、位移、平移、旋转、缩放网格时使用。4---56# 建模 — 变形与变换78前置条件:先阅读 `unreal-modeling`。910## 库1112| 库 | CDO |13|----|-----|14| 变形 | `/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshDeformFunctions` |15| 变换 | `/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshTransformFunctions` |1617`TargetMesh` 为 `UDynamicMesh*` 路径字符串。`Debug` 省略。需要 `FGeometryScriptMeshSelection` 的函数,用 `MeshOperationLibrary` 桥接。1819## 变形函数2021| 函数 | 关键参数 | 说明 |22|------|----------|------|23| `ApplyBendWarpToMesh` | `TargetMesh`, `Options`, `BendOrientation`(FTransform), `BendAngle`(float), `BendExtent`(float) | 弯曲变形 |24| `ApplyTwistWarpToMesh` | `TargetMesh`, `Options`, `TwistOrientation`, `TwistAngle`, `TwistExtent` | 扭曲变形 |25| `ApplyFlareWarpToMesh` | `TargetMesh`, `Options`, `FlareOrientation`, `FlarePercentX`, `FlarePercentY`, `FlareExtent` | 膨胀/收缩变形 |26| `ApplyMathWarpToMesh` | `TargetMesh`, `WarpOrientation`, `WarpType`, `Options` | 数学函数变形(正弦等) |27| `ApplyIterativeSmoothingToMesh` | `TargetMesh`, `Selection`, `Options` | 迭代平滑(拉普拉斯风格) |28| `ApplyDisplaceFromTextureMap` | `TargetMesh`, `Texture`, `Selection`, `Options`, `UVLayer` | 纹理位移 |29| `ApplyPerlinNoiseToMesh2` | `TargetMesh`, `Selection`, `Options` | Perlin 噪声位移 |30| `ApplyDisplaceFromPerVertexVectors` | `TargetMesh`, `Selection`, `VectorList`, `Magnitude` | 按顶点向量位移 |3132## 变换函数3334| 函数 | 关键参数 | 说明 |35|------|----------|------|36| `TransformMesh` | `TargetMesh`, `Transform`, `bFixOrientationForNegativeScale` | 应用完整变换 |37| `InverseTransformMesh` | `TargetMesh`, `Transform`, `bFixOrientationForNegativeScale` | 应用逆变换 |38| `TranslateMesh` | `TargetMesh`, `Translation`(FVector) | 平移 |39| `RotateMesh` | `TargetMesh`, `Rotation`(FRotator), `RotationOrigin`(FVector) | 旋转 |40| `ScaleMesh` | `TargetMesh`, `Scale`(FVector), `ScaleOrigin`, `bFixOrientationForNegativeScale` | 缩放 |41| `TransformMeshSelection` | `TargetMesh`, `Selection`, `Transform` | 变换选中区域 |42| `TranslateMeshSelection` | `TargetMesh`, `Selection`, `Translation` | 平移选中区域 |43| `RotateMeshSelection` | `TargetMesh`, `Selection`, `Rotation`, `RotationOrigin` | 旋转选中区域 |44| `ScaleMeshSelection` | `TargetMesh`, `Selection`, `Scale`, `ScaleOrigin` | 缩放选中区域 |45| `TranslatePivotToLocation` | `TargetMesh`, `PivotLocation` | 移动枢轴点(等效于平移 mesh 到 -PivotLocation) |4647JSON 中 `FTransform`:`{"Rotation":{"X":0,"Y":0,"Z":0,"W":1},"Translation":{"X":0,"Y":0,"Z":0},"Scale3D":{"X":1,"Y":1,"Z":1}}`4849JSON 中 `FRotator`:`{"Pitch":0,"Yaw":90,"Roll":0}`5051## 结构体与枚举5253### `FGeometryScriptBendWarpOptions`5455| 字段 | 类型 | 默认值 | 说明 |56|------|------|--------|------|57| `bSymmetricExtents` | bool | `true` | 对称范围 |58| `LowerExtent` | float | `10` | 非对称时的下界 |59| `bBidirectional` | bool | `true` | 双向弯曲 |6061`BendAngle`、`BendExtent` 是函数参数,不在 Options 内。6263### `FGeometryScriptTwistWarpOptions`6465同弯曲:`bSymmetricExtents`、`LowerExtent`、`bBidirectional`。`TwistAngle`、`TwistExtent` 是函数参数。6667### `FGeometryScriptFlareWarpOptions`6869| 字段 | 类型 | 默认值 | 说明 |70|------|------|--------|------|71| `bSymmetricExtents` | bool | `true` | 对称范围 |72| `LowerExtent` | float | `10` | 非对称时的下界 |73| `FlareType` | `EGeometryScriptFlareType` | `SinMode` | 膨胀曲线类型 |7475### `EGeometryScriptFlareType`7677| 值 | 说明 |78|----|------|79| `SinMode` | 正弦曲线 sin(pi*x) |80| `SinSquaredMode` | 正弦平方(更平滑过渡) |81| `TriangleMode` | 分段线性(三角形轮廓) |8283### `FGeometryScriptIterativeMeshSmoothingOptions`8485| 字段 | 类型 | 默认值 | 说明 |86|------|------|--------|------|87| `NumIterations` | int | `10` | 迭代次数 |88| `Alpha` | float | `0.2` | 平滑系数 |89| `EmptyBehavior` | `EGeometryScriptEmptySelectionBehavior` | `FullMeshSelection` | 空选择行为 |9091### `FGeometryScriptPerlinNoiseOptions`9293| 字段 | 类型 | 说明 |94|------|------|------|95| `BaseLayer` | struct | 包含 `Magnitude`(5.0)、`Frequency`(0.25)、`FrequencyShift`(FVector)、`RandomSeed`(0) |96| `bApplyAlongNormal` | bool | 沿法线方向位移 |97| `EmptyBehavior` | enum | 空选择行为 |9899### `FGeometryScriptDisplaceFromTextureOptions`100101| 字段 | 类型 | 默认值 | 说明 |102|------|------|--------|------|103| `Magnitude` | float | `1` | 位移幅度 |104| `UVScale` | FVector2D | `(1,1)` | UV 缩放 |105| `UVOffset` | FVector2D | `(0,0)` | UV 偏移 |106| `Center` | float | `0.5` | 中心值(低于此值为负位移) |107| `ImageChannel` | int | `0` | 采样通道 |108| `EmptyBehavior` | enum | `FullMeshSelection` | 空选择行为 |109110### `EGeometryScriptEmptySelectionBehavior`111112| 值 | 说明 |113|----|------|114| `FullMeshSelection` | 空选择 = 选择全部 |115| `EmptySelection` | 空选择 = 不选择任何东西 |116117## JSON 示例118119**迭代平滑**(全 mesh,5 次迭代):120121```json122{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshDeformFunctions","function":"ApplyIterativeSmoothingToMesh","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","Selection":{},"Options":{"NumIterations":5,"Alpha":0.15,"EmptyBehavior":"FullMeshSelection"}}}123```124125**缩放 mesh**(2 倍均匀缩放,原点为中心):126127```json128{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshTransformFunctions","function":"ScaleMesh","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","Scale":{"X":2,"Y":2,"Z":2},"ScaleOrigin":{"X":0,"Y":0,"Z":0},"bFixOrientationForNegativeScale":true}}129```130131**Perlin 噪声位移**:132133```json134{"object":"/Script/GeometryScriptingCore.Default__GeometryScriptLibrary_MeshDeformFunctions","function":"ApplyPerlinNoiseToMesh2","params":{"TargetMesh":"/Engine/Transient.DynamicMesh_0","Selection":{},"Options":{"BaseLayer":{"Magnitude":10,"Frequency":0.1,"FrequencyShift":{"X":0,"Y":0,"Z":0},"RandomSeed":42},"bApplyAlongNormal":true,"EmptyBehavior":"FullMeshSelection"}}}135```136137## 发现138139对上述 CDO 路径调用 `DescribeObject` 可查看完整函数列表和参数签名。