布料 (Cloth)
Unity 布料系統
布料 (Cloth) 元件與帶蒙皮的網格渲染器 (Skinned Mesh Renderer) 協同運作,從而提供基於物理的布料模擬解決方案。此元件是專為角色服裝設計的,僅對蒙皮網格有效。如果向非蒙皮網格中新增 Cloth 元件,則 Unity 會刪除非蒙皮網格並新增蒙皮網格。
網格與骨骼權重處理
Section titled “網格與骨骼權重處理”因為布料與動骨是不同的系統,為了共存需要做相對應的處理。
大致為以下要求:
- 單層網格
確保衣服是單層的。
- 縫合網格
確保衣服是完整的。
- 分離干擾
衣服上的小配件可能會對布料模擬有所干擾。
- 四邊形網格
如果衣服為三角形網格,可能不會有太好的模擬效果。
如何縫合網格?
Section titled “如何縫合網格?”在 Blender 中刪除合併重疊點。頂部選單網格-清理-按距離合併,左下角按間距合併,透過修改增大合併間距的數值讓兩個距離相鄰的點合併。快捷鍵:M
在 Inspector 視窗中按一下 Add Component 按鈕,然後選擇 Physics -> Cloth。
編輯約束 (Edit cloth constraints)
Section titled “編輯約束 (Edit cloth constraints)”您可以將約束套用於布料的特定頂點,以增加或減少這些頂點的移動自由度。
Cloth Constraints
Section titled “Cloth Constraints”| 屬性 | 選項 | 功能 |
|---|---|---|
| Visualization | 選擇要顯示的約束類型和粒子。 | |
| Max Distance | 僅顯示布料粒子的 Max Distance 值。 | |
| Surface Penetration | 僅顯示布料粒子的 Surface Penetration 值。 | |
| Manipulate Backfaces | 啟用此選項可以視覺化和操控可能隱藏在布料目前朝向部分後方的粒子。 | |
| [ 色譜 ] | 根據目前在整塊布料中應用的最小值和最大值,為上述選定的約束類型提供粒子顏色和約束值之間的對應關係。黑色始終表示粒子沒有約束。 | |
| Constraint Size | 代表布料粒子的球體顯示大小。在方便時可以調整此值以便簡化約束版本。這個屬性對約束本身沒有任何影響。 |
約束類型與顏色
Section titled “約束類型與顏色”| 約束類型 | 描述 |
|---|---|
| Max Distance | 布料可以從頂點位置行進的最大距離 |
| Surface Penetration | 布料粒子可穿透網格的深度 |
根據在 Visualization 所選的類型,粒子的顏色表示該粒子的約束在布料內的相對值。
約束編輯模式
Section titled “約束編輯模式”一共可以使用三種不同模式來編輯布料的約束值:
1)Select
Section titled “1)Select”將固定約束值套用於已選擇的粒子群組
使用滑鼠框選後,啟用要套用於選取項目的約束類型,然後設定一個值即可。
2)Paint
Section titled “2)Paint”透過用筆刷繪製布料粒子來施加固定的約束值
根據需要調整 Brush Radius,啟用要套用的約束類型並設定一個繪製值後,用筆刷在粒子上繪製約束。
3)Gradient
Section titled “3)Gradient”將約束值從左到右線性漸變套用於預先選擇的粒子群組
需先確保在「場景 (Scene)」視圖中開啟 2D 視圖
使用滑鼠框選後,設定範圍,然後選擇要套用的約束類型。
編輯自碰撞與互碰撞 (Edit cloth self/inter-collision)
Section titled “編輯自碰撞與互碰撞 (Edit cloth self/inter-collision)”- 自碰撞:防止布料穿透自身
- 互碰撞:允許布料粒子相互碰撞
Cloth Self-Collision and Inter-Collision
Section titled “Cloth Self-Collision and Inter-Collision”| 屬性 | 選項 | 功能 |
|---|---|---|
| Visualization | 選擇要顯示的約束類型和粒子。 | |
| Self-Collision | 自碰撞 | |
| Inter-Collision | 互碰撞 | |
| Manipulate Backfaces | 啟用此選項可以視覺化和操控可能隱藏在布料目前朝向部分後方的粒子。 |
| 顏色 | 描述 |
|---|---|
| 黑色 | 未使用的粒子 |
| 藍色 | 目前選中的粒子 |
| 綠色 | 已套用碰撞粒子 |
選擇 Select,使用滑鼠框選後勾選 Self-Collision and Inter-Collision 即可。
Self-Collison
Section titled “Self-Collison”在套用自碰撞與互碰撞後,
Inspector會多出此選項
此時「場景」中的粒子可能會消失,將 Inspector 中 Self-Collision Distance 調大即可看到。
| 屬性 | 功能 |
|---|---|
| Distance | 每個粒子的包裹球體直徑。Unity 確保這些球體在模擬過程中不會重疊。Distance 屬性的值應小於配置中兩個粒子之間的最小距離。如果距離較大,自碰撞可能會違反某些距離約束並導致抖動。 |
| Stiffness | 粒子之間的分離衝力強度。此值由布料解算器進行計算,應足以保持粒子分離。 |
Paint 與 Erase
Section titled “Paint 與 Erase”調整好 Brush Radius 後,在「場景」中滑動以新增或刪除用於碰撞的粒子。
指定粒子與自碰撞相同,不過設定是在 Edit -> Project Settings -> Physics 中勾選 Cloth Inter-Collision,然後設定 Distance 與 Stiffness(功能與自碰撞相同)。
自碰撞和互碰撞可能需要大量的總模擬時間。請考慮縮小碰撞距離並使用自碰撞索引來減少彼此碰撞的粒子數。
自碰撞使用頂點,而不是三角形,因此對於三角形遠大於布料厚度的網格,不要指望碰撞能夠完美運作。
Inspector 屬性
Section titled “Inspector 屬性”| 屬性 | 功能 |
|---|---|
| Stretching Stiffness | 布料的伸展剛性 |
| Bending Stiffness | 布料的彎曲剛性 |
| Use Tethers | 施加約束以協助防止移動的布料粒子離開固定粒子的距離太遠。此屬性有助於減少過度拉伸。 |
| Use Gravity | 重力是否影響布料的模擬 |
| Damping | 布料運動時的阻尼 |
| External Acceleration | 施加在布料上的恆定外部加速度。在布料上固定的外部加速度,主要用於模擬風的效果,可設定 XYZ 方向 |
| Random Acceleration | 施加在布料上的隨機外部加速度。在布料上隨機的外部加速度,讓布料產生不規則的擺動 |
| World Velocity Scale | 角色多大程度的世界空間移動會影響布料頂點。 |
| World Acceleration Scale | 角色多大的世界空間加速度會影響布料頂點。 |
| Friction | 布料與角色碰撞時的摩擦力。設定布料的摩擦係數 |
| Collision Mass Scale | 碰撞粒子的質量增加量。 |
| Use Continuous Collision | 啟用連續碰撞來提高碰撞安全性。 |
| Use Virtual Particles | 每個三角形新增一個虛擬粒子,從而提高碰撞安全性。 |
| Solver Frequency | 解算器每秒迭代次數。 |
| Sleep Threshold | 布料的睡眠閾值。 |
| Capsule Colliders | 應與此 布料 (Cloth) 實例碰撞的 膠囊碰撞體 (Capsule Collider) 陣列。 |
| Sphere Colliders | 應與此 布料 (Cloth) 實例碰撞的 球形碰撞體 (Sphere Collider) 陣列。 |
| virtual Particle Weights | 虛擬粒子權重 |
參考數據
Stretching Stiffness:0.8
Bending Stiffness:0.2
Damping:0.2
World Velocity Scale:0(若想移動時晃動,改為 0.2)
World Acceleration Scale:0(若想移動時晃動,改為 0.2)
Friction:0
Collision Mass Scale:0
資料來源:https://www.bilibili.com/video/BV1ob411e7Q8
布料僅可以與膠囊碰撞體或球形碰撞體相互作用,其中兩個球形碰撞體可以相連形成錐體碰撞。
碰撞體記得勾選 Is Trigger (是觸發器),不然遊戲裡移動或跳躍會產生一種腳踩腳的感覺,而且還會旋轉。
膠囊碰撞體由兩個半球與一個圓柱體連接在一起組成。
在相對應的骨骼建立空物件,在 Inspector 視窗中按一下 Add Component 按鈕,然後選擇 Physics -> Capsule Collider。
| 屬性 | 功能 |
|---|---|
| Edit Collider | 選取即可在「場景」中視覺化編輯大小 |
| Is Trigger | 如果啟用此屬性,則該碰撞體將用於觸發事件,並被物理引擎忽略 |
| Material | 參照物理材質,可決定該碰撞體與其他物件的互動方式 |
| Center | 碰撞體在物件區域空間中的位置 |
| Radius | 碰撞體的區域寬度半徑 |
| Height | 碰撞體的總高度 |
| Direction | 膠囊體在物件區域空間中縱向方向的軸。 |

直接將碰撞所在的物件拖曳到 Cloth (布料) 的 Capsule Colliders 處即可。
球形碰撞體與錐體
Section titled “球形碰撞體與錐體”球形碰撞體是一種基本的球體形狀原始碰撞體。
在相對應的骨骼建立空物件,在 Inspector 視窗中按一下 Add Component 按鈕,慢著選擇 Physics -> Sphere Collider。
| 屬性 | 功能 |
|---|---|
| Edit Collider | 選取即可在「場景」中視覺化編輯大小 |
| Is Trigger | 如果啟用此屬性,則該碰撞體將用於觸發事件,並被物理引擎忽略 |
| Material | 參照物理材質,可決定該碰撞體與其他物件的互動方式 |
| Center | 碰撞體在物件區域空間中的位置 |
| Radius | 碰撞體半徑的大小 |
在 Cloth (布料) 的 Sphere Colliders 將 Size 調整為非零值,每個元素可以放入兩個球體碰撞。
如果只放入一個,則為球體碰撞。
如果放入兩個,那麼兩個球體碰撞將自動相連為錐體碰撞。