PhysX 3 2裡的布料模擬 1 基本概念

2021-06-13 03:22:46 字數 1981 閱讀 7004

最近剛好遇到了一些跟physx 3.2裡面布料模擬相關的問題,那就約架不如偶遇,介紹一下physx 3.2中的布料模擬吧。這一篇中,我們先概要的介紹一下physx 3.2中的布料的一些基本概念,後續的文章中再詳細介紹如何建立、控制等問題。

提到布料模擬,那麼我們可能會有這麼幾方面的問題:如何定義布料的模型;布料模型相鄰頂點之間的約束如何定義;布料是否會穿透自己,也就是自碰撞;以及布料跟物理世界中其他物體如何互動等。這一篇中,我們就重點介紹這些基礎問題。

首先,我們看布料模型。

跟很多遊戲相關的模型定義一樣,physx sdk中的布料模型都是通過三角形序列裡定義的。這沒什麼好說的。但是有一點需要注意的是,布料模型使用的三角網格,最好是很規整的三角網格,這樣能夠得到更平順的模擬結果。即便是我們的美術藝術品味達到了一定境界,做出來的衣服形狀看起來很有視覺衝擊,跟規規整整的衣服完全不搭邊,在生成布料網格的時候,也需要在不規整的外觀內,盡量生成規則的三角網格。之前就遇到過乙個實際的問題,某個布料在模擬中老是莫名的抖動,後來仔細分析布料的模型和引數,發現在布料模型的某個拐角處,有幾個三角形的連線看起來就是乙個扭曲的網格,調整到正常之後,模擬也就正常多了。

一般來說,布料模型的三角網格越細緻、精度越高,模擬效果也就越平滑,布料看起來也更軟,當然也需要更多的效能;反之,如果頂點越少,布料看起來也更生硬,效能方面的要求也更低。

然後,我們來說說布料相鄰頂點之間的約束。

相對於布料的模型,布料相鄰頂點之間的約束是加在模型的三角網格之上的,定義相鄰的頂點之間如何相互影響,決定布料的模擬表現是軟還是硬,是否容易拉伸和彎折等等。

在physx 3.2中,對約束的定義比上一代的版本(physx 2.8)要細緻一些。physx 3.2專門定義了乙個纖維(fiber)的概念來描述相鄰頂點之間的約束,並且對這些約束進行了詳細的分類(以一塊規則布料正常下垂為例):

-- pxclothfabricphasetype::estretching:上下方向相鄰頂點的約束

-- pxclothfabricphasetype::estretching_horizontal:水平方向相鄰頂點的約束

-- pxclothfabricphasetype::eshearing:對角線方向相鄰頂點的約束

-- pxclothfabricphasetype::ebending:邊的彎折約束(折出三角形所在的平面時)

-- pxclothfabricphasetype::ebending_angle:邊的彎折約束(折出三角形所在的平面時,基於角度計算)

並且,對拉伸(stretching)型別的約束, 還定義了兩種解法(solver)來解算布料的狀態供選擇,一種是gauss-seidel演算法(efast),效能更好,但是收斂的慢;另一種是semi-implicit演算法(estiff),布料可以更快的收斂,但是更費效能一些。一般來講,如果布料按照設計就是比較硬、有質感的,那麼用estiff,其他的,用efast。

接下來我們看布料碰撞方面的問題。

首先,布料的自碰撞在physx 3.2中是不支援的,現在正在開發中,將來應該會有支援。

然後,布料跟物理世界中其他物體也是沒有碰撞的,不僅如此,布料也僅在本地座標系內模擬。這一點我在之前介紹從physx 2.8公升級到3.2的文章中有提到過。在physx 3.2中,physx sdk選擇了將人物身上的服裝模擬作為布料特性的方向,因此去掉了布料跟物理世界內其他物體的碰撞。那麼怎麼解決角色在模擬的時候布料穿透身體的情況出現呢?physx 3.2提供了一種新的機制,支援在布料本地座標系內定義只跟布料碰撞的形體。想要給布料加上碰撞,比如跟人物的軀幹四肢的碰撞,我們只需要在布料的本地座標系內,加上一些碰撞形體來模擬人物的軀幹四肢,並且跟隨人物動作更新即可。

在3.2中,這樣的碰撞形體有兩大類,一類是球體(sphere)以及由球體構成的膠囊體(capsule);另一類是平面(plane)以及由這些平面拼接起來的凸包(convex)。這些碰撞形體該如何建立和控制,我們會在接下來的文章中詳細介紹。

physx 3.2裡的布料模擬(2) :建立

physx 3.2裡的布料模擬(3) :更新

physx 3.2裡的布料模擬(4) :運動控制

PhysX 3 2中的場景查詢 1 基礎

physx sdk一直都為遊戲開發提供高效可靠的場景查詢 scene query 功能,到了3.2中,也是如此。這乙個系列中,就給大家介紹physx 3.2中場景查詢功能的使用。這一篇中,我們重點介紹這一功能的一些基本概念和基礎用法。首先,physx 3.2中,場景查詢的種類支援三種,分別是rayc...

查詢檢測PhysX 3 2中的場景查詢 1 基礎

題記 寫這篇部落格要主是加深自己對查詢檢測的認識和總結實現演算法時的一些驗經和訓教,如果有錯誤請指出,萬分感謝。physx sdk直一都為遊戲開闢供提高效靠可的場景查詢 scene query 功能,到了3.2中,也是如此。這乙個系列中,就給大家分析physx 3.2中場景查詢功能的用使。這一篇中,...

查詢檢測PhysX 3 2中的場景查詢 1 基礎

題記 寫這篇部落格要主是加深自己對查詢檢測的認識和總結實現演算法時的一些驗經和訓教,如果有錯誤請指出,萬分感謝。physx sdk直一都為遊戲開闢供提高效靠可的場景查詢 scene query 功能,到了3.2中,也是如此。這乙個系列中,就給大家分析physx 3.2中場景查詢功能的用使。這一篇中,...