官方文獻: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會自動將導入的網格體三角化,但提前處理好網格幾何可以避免后續問題。