跳到內容

布料 (Cloth)

Unity 布料系統

布料 (Cloth) 元件與帶蒙皮的網格渲染器 (Skinned Mesh Renderer) 協同運作,從而提供基於物理的布料模擬解決方案。此元件是專為角色服裝設計的,僅對蒙皮網格有效。如果向非蒙皮網格中新增 Cloth 元件,則 Unity 會刪除非蒙皮網格並新增蒙皮網格。

因為布料與動骨是不同的系統,為了共存需要做相對應的處理。

大致為以下要求:

  • 單層網格

確保衣服是單層的。

  • 縫合網格

確保衣服是完整的。

  • 分離干擾

衣服上的小配件可能會對布料模擬有所干擾。

  • 四邊形網格

如果衣服為三角形網格,可能不會有太好的模擬效果。

在 Blender 中刪除合併重疊點。頂部選單網格-清理-按距離合併,左下角按間距合併,透過修改增大合併間距的數值讓兩個距離相鄰的點合併。快捷鍵:M

Inspector 視窗中按一下 Add Component 按鈕,然後選擇 Physics -> Cloth

您可以將約束套用於布料的特定頂點,以增加或減少這些頂點的移動自由度。

屬性選項功能
Visualization選擇要顯示的約束類型和粒子。
Max Distance僅顯示布料粒子的 Max Distance 值。
Surface Penetration僅顯示布料粒子的 Surface Penetration 值。
Manipulate Backfaces啟用此選項可以視覺化和操控可能隱藏在布料目前朝向部分後方的粒子。
[ 色譜 ]根據目前在整塊布料中應用的最小值和最大值,為上述選定的約束類型提供粒子顏色和約束值之間的對應關係。黑色始終表示粒子沒有約束。
Constraint Size代表布料粒子的球體顯示大小。在方便時可以調整此值以便簡化約束版本。這個屬性對約束本身沒有任何影響。
約束類型描述
Max Distance布料可以從頂點位置行進的最大距離
Surface Penetration布料粒子可穿透網格的深度

根據在 Visualization 所選的類型,粒子的顏色表示該粒子的約束在布料內的相對值。

一共可以使用三種不同模式來編輯布料的約束值:

將固定約束值套用於已選擇的粒子群組

使用滑鼠框選後,啟用要套用於選取項目的約束類型,然後設定一個值即可。

透過用筆刷繪製布料粒子來施加固定的約束值

根據需要調整 Brush Radius,啟用要套用的約束類型並設定一個繪製值後,用筆刷在粒子上繪製約束。

將約束值從左到右線性漸變套用於預先選擇的粒子群組

需先確保在「場景 (Scene)」視圖中開啟 2D 視圖

使用滑鼠框選後,設定範圍,然後選擇要套用的約束類型。

編輯自碰撞與互碰撞 (Edit cloth self/inter-collision)

Section titled “編輯自碰撞與互碰撞 (Edit cloth self/inter-collision)”
  • 自碰撞:防止布料穿透自身
  • 互碰撞:允許布料粒子相互碰撞
屬性選項功能
Visualization選擇要顯示的約束類型和粒子。
Self-Collision自碰撞
Inter-Collision互碰撞
Manipulate Backfaces啟用此選項可以視覺化和操控可能隱藏在布料目前朝向部分後方的粒子。
顏色描述
黑色未使用的粒子
藍色目前選中的粒子
綠色已套用碰撞粒子

選擇 Select,使用滑鼠框選後勾選 Self-Collision and Inter-Collision 即可。

在套用自碰撞與互碰撞後,Inspector 會多出此選項

此時「場景」中的粒子可能會消失,將 InspectorSelf-Collision Distance 調大即可看到。

屬性功能
Distance每個粒子的包裹球體直徑。Unity 確保這些球體在模擬過程中不會重疊。Distance 屬性的值應小於配置中兩個粒子之間的最小距離。如果距離較大,自碰撞可能會違反某些距離約束並導致抖動。
Stiffness粒子之間的分離衝力強度。此值由布料解算器進行計算,應足以保持粒子分離。

調整好 Brush Radius 後,在「場景」中滑動以新增或刪除用於碰撞的粒子。

指定粒子與自碰撞相同,不過設定是在 Edit -> Project Settings -> Physics 中勾選 Cloth Inter-Collision,然後設定 DistanceStiffness(功能與自碰撞相同)。

自碰撞和互碰撞可能需要大量的總模擬時間。請考慮縮小碰撞距離並使用自碰撞索引來減少彼此碰撞的粒子數。

自碰撞使用頂點,而不是三角形,因此對於三角形遠大於布料厚度的網格,不要指望碰撞能夠完美運作。

屬性功能
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膠囊體在物件區域空間中縱向方向的軸。

img

直接將碰撞所在的物件拖曳到 Cloth (布料)Capsule Colliders 處即可。

球形碰撞體是一種基本的球體形狀原始碰撞體。

在相對應的骨骼建立空物件,在 Inspector 視窗中按一下 Add Component 按鈕,慢著選擇 Physics -> Sphere Collider

屬性功能
Edit Collider選取即可在「場景」中視覺化編輯大小
Is Trigger如果啟用此屬性,則該碰撞體將用於觸發事件,並被物理引擎忽略
Material參照物理材質,可決定該碰撞體與其他物件的互動方式
Center碰撞體在物件區域空間中的位置
Radius碰撞體半徑的大小

Cloth (布料)Sphere CollidersSize 調整為非零值,每個元素可以放入兩個球體碰撞。

如果只放入一個,則為球體碰撞。

如果放入兩個,那麼兩個球體碰撞將自動相連為錐體碰撞。