官方文献:https://dev.epicgames.com/community/learning/tutorials/pv7x/unreal-engine-panel-cloth-editor
这背后的核心是一种常见的计算机图形学技术,通常称为代理绑定 (Proxy Binding) 或 表面变形传递 (Surface Deformation Transfer)。
关联机制 (How they are linked):
这种关联通常在布料设置阶段(例如在 UE 的 Panel Cloth Editor 的 Dataflow 图表中)建立,而不是在运行时动态计算。过程大致如下:
-
空间邻近性计算: 系统会分析渲染网格体 (Render Mesh) 上的每一个顶点。
-
寻找参考点/面: 对于 Render Mesh 上的每个顶点,系统会在模拟网格体 (Sim Mesh) 上找到最接近的几个顶点或最接近的那个三角面片 (Triangle)。
-
计算绑定信息 (权重或坐标): 最关键的一步是计算并存储一种“绑定信息”,它定义了 Render Mesh 顶点如何根据 Sim Mesh 的变形来移动。最常用的方法是重心坐标 (Barycentric Coordinates):
-
对于 Render Mesh 上的一个顶点 P,系统找到它在 Sim Mesh 上的投影点所在的那个三角面片 (假设顶点为 A, B, C)。
-
系统计算出 P 点相对于 Sim Mesh 三角面片 A, B, C 的重心坐标 (u, v, w)。这意味着 P 的位置可以表示为 P = u*A + v*B + w*C,其中 u + v + w = 1。
-
这个 (u, v, w) 坐标就被存储下来,作为 Render Mesh 顶点 P 和 Sim Mesh 三角面片 ABC 之间的绑定关系。
-
-
存储绑定数据: 这个计算出来的绑定信息(每个 Render Mesh 顶点对应的 Sim Mesh 参考点/面以及相应的权重或重心坐标)会作为布料资产的一部分被存储起来。
工作原理 (Why Sim Mesh can drive Render Mesh):
一旦这种绑定关系建立并存储好,驱动过程就变得相对直接:
-
模拟计算: 在运行时,Unreal Engine 的 Chaos Physics 解算器只对模拟网格体 (Sim Mesh) 进行物理计算。这意味着它会根据力(如重力、风力)、碰撞(与角色身体或其他物体)以及约束来更新 Sim Mesh 上每个顶点的位置。这个过程因为 Sim Mesh 的低面数和优化结构而相对高效。
-
变形传递: 在每一帧,当 Sim Mesh 的顶点位置被物理模拟更新后:
-
系统会查找之前存储的绑定信息。
-
对于 Render Mesh 上的每一个顶点 P,它会找到其对应的 Sim Mesh 参考三角面片 (A, B, C) 和对应的重心坐标 (u, v, w)。
-
它获取 Sim Mesh 顶点 A, B, C 当前帧被模拟更新后的新位置 (A', B', C')。
-
使用相同的重心坐标 (u, v, w),计算出 Render Mesh 顶点 P 在当前帧的新位置:P' = u*A' + v*B' + w*C'。
-
-
更新渲染网格体: 所有 Render Mesh 顶点的位置都通过这种方式基于 Sim Mesh 的当前状态计算出来后,整个 Render Mesh 就呈现出被驱动的变形效果。
总结来说:
-
关联: 通过在设置阶段计算并存储 Render Mesh 顶点相对于 Sim Mesh 表面的位置关系(通常是重心坐标)来建立。
-
驱动: 在运行时,物理引擎只模拟 Sim Mesh。然后,利用预先计算好的绑定关系,将 Sim Mesh 的变形实时地、插值地传递给 Render Mesh 的每一个顶点,从而让高细节的 Render Mesh 跟随低多边形的 Sim Mesh 运动。
这种方法的核心优势在于:
-
性能: 物理模拟在低多边形、优化的 Sim Mesh 上运行,速度快。
-
质量: 最终显示的是高多边形、包含细节的 Render Mesh,视觉效果好。
-
解耦: 将复杂的物理计算与最终的视觉表现分离,简化了流程和优化。
在 UE 的 Panel Cloth Editor 中,像 TransferSkinWeights 这样的节点是将角色骨骼动画影响传递给 Sim Mesh 的一部分,而 Sim Mesh 和 Render Mesh 之间的这种驱动关系则是在 Dataflow 图表构建布料资产(Cloth Asset)的过程中通过特定的节点或内部逻辑建立起来的。
对于在UE5.3 Panel Cloth Editor中使用的"Simulation Mesh"(模拟网格体),有以下几点几何要求:
几何结构要求
三角形面
-
是允许的,实际上Unreal Engine在导入时会自动将所有多边形面三角化7
-
但需要避免"退化三角形",即具有重合顶点的三角形,这会导致错误提示"Failed to generate clothing sim mesh due to degenerate triangle"2
五边形面(N-gons)
-
不建议使用,因为任何超过四边的多边形(n-gons)在引擎中都会被自动三角化37
-
N-gons可能在三角化过程中造成歧义和不可预测的结果3
-
建议在导入Unreal Engine之前,在3D建模软件中将所有五边形或更高边数的面转换为四边形或三角形3
其他几何要求
网格体质量
-
模拟网格体通常应比渲染网格体更加简化,密度较低6
-
例如,在示例中衬衫的渲染网格体密度为12,而模拟网格体密度为18(数值越大密度越低)6
避免的几何问题
-
非平面多边形:所有面应当尽量平坦3
-
重叠的顶点/边:这些会导致三角化过程产生意外结果3
-
无效几何体:损坏或非流形几何体(边缘和顶点不正确对齐)会导致三角化错误3
推荐做法
-
使用"薄壁、焊接"(thin welded)版本作为模拟网格体6
-
保持模型干净,没有内部细节,使解算更容易处理6
-
使用静态网格体(Static Mesh)作为模拟网格体59
总结来说,模拟网格体最好由四边形和三角形组成,避免使用五边形及更高边数的多边形,并确保几何体质量良好,没有重合顶点和非流形结构。在大多数情况下,Unreal Engine会自动将导入的网格体三角化,但提前处理好网格几何可以避免后续问题。