依賴包
Magica Cloth 使用 Job System 和 Burst compiler 加快布料模拟,是以需要先安裝這兩個依賴包

Burst 可以直接下載下傳
在這裡插入圖檔描述
Job System 得通過 URL 添加,輸入com.unity.jobs,設定中也要開啟Enable Pre-release Packages
另外為了看到模型的骨骼節點,還要下載下傳Animation Rigging
元件
名稱 | 圖示 | 介紹 |
---|---|---|
MagicaPhysicsManager | | 管理器,使用時會自動建立 |
MagicaBoneCloth | | 控制骨骼(Transform)進行布料模拟,帶骨骼的衣服和頭發都可以用 |
MagicaBoneSpring | | 控制骨骼(Transform)進行彈簧模拟,适合胸部抖動 |
MagicaRenderDeformer | | 渲染變形器,用于對模型的網格進行變形,當使用 MeshCloth / MeshSpring 時需要,性能消耗大 |
MagicaVirtualDeformer | | 虛拟變形器,通過結合多個渲染變形器進行頂點縮減,并重構為一個虛拟網格。使用MeshCloth / MeshSpring時需要,性能消耗大 |
MagicaMeshCloth | | 對網格頂點進行布料模拟,适用于無骨骼的模型,可以實作比Bone Cloth更加精細的控制,是控制裙裝的理想選擇,與虛拟變形器一起工作,性能消耗大 |
MagicaMeshSpring | | 對網格頂點進行彈簧模拟 |
MagicaSphereCollider / MagicaCapsuleCollider / MagicaPlaneCollider | | 球形,膠囊形,平面形碰撞器,防止穿模,球形和膠囊形主要用于人體,膠囊形消耗更大,平面形主要用于地面 |
MagicaDirectionalWind / MagicaAreaWind | | 全局的風,區域的風 |
Magica Cloth的實體引擎完全獨立于Unity的實體學引擎,是以,它完全不幹擾Unity的實體系統。
MagicaPhysicsManager
MagicaPhysicsManager這個prefab是插件中自帶的,運作時使用插件相關的元件後就會自動建立
Update Per Second | 實體引擎每秒更新次數 |
---|---|
Update Mode | Unscaled Time - 重新整理率不受 Unity 的 time scale 影響 |
Update Mode | Once Per Frame - 每幀更新一次,當使用這種模式時,Update Per Second 需要根據遊戲的幀率來調整。 |
Update Mode | Delay Unscaled Time - 延遲執行,與 Unscaled Time 一樣,但在渲染時也能進行布料模拟,能大幅提高性能,但結果會晚一幀,這個延遲是通過未來預測來插值的 |
Update Location | 在 Late Update 之前或之後更新 |
Faster Write | 使用 Unity 的新 Mesh API 更新網格頂點,提高網格更新速度,版本要大于 2021.2 |
OnPreUpdate / OnPostUpdate | 在布料模拟之前或之後注冊事件 |
MagicaBoneCloth 模拟頭發,衣服飄動
MagicaBoneCloth 和 MagicaBoneSpring 都是通過改變骨骼節點Transform的位置和旋轉來實作飄動效果
把模型拖入場景,點選模型,選擇Bone Render Setup顯示模型的骨骼,友善選擇對應骨骼
這個模型後面有長發和兩邊的側發,長發和側發的參數設定不同,這裡以長發示範
右鍵建立一個 Magica Bone Cloth,并改名為長發
這裡有錯誤提示是因為還沒有生成資料,将長發的根節點添加到Root List,點選Start Point Selection進入節點編輯模式
紅色表示固定節點(Fixed Point),它不會移動,但是會旋轉,一般就是根節點,每個可移動的骨骼鍊上,第一個節點必須是固定節點。
綠色表示活動節點(Move Point),受實體系統影響
還有一種灰色節點表示無效節點(Invalid Point),不參與實體運算
如果需要修改節點類型,先選擇節點類型,按住左鍵在場景中拖動即可改變節點顔色
調整完後, 點選 End Point Selection 結束編輯
下面就是實體模拟相關的參數,這裡提供了一些預設,點選Preset選擇長發類型的預設,會自動修改适合長發的參數
頭發相關的預設:前發(FrontHair),長發(LongHair),臉兩側頭發(SideHair),馬尾(PonyHair),短發(ShortHair)
衣服相關的預設:柔軟的裙子(SoftSkirt),硬裙(HardSkirt),長開衩連衣裙(LongSlitDress)
尾巴或身上飄動的裝飾物:Tail
最後點選Create生成資料
上面的錯誤提示消失,顯示了一些參數。現在運作時拖動角色,長發會有抖動的實體效果,但是會有穿模的情況,是以還需要處理下穿模的問題。
Magica Cloth提供了兩種穿模的解決方法,表面穿模(Surface Penetration)和碰撞體穿模(Collider Penetration)。
如果衣服(頭發)與身體上的骨骼有關聯的話,衣服會随着身體動作跟着運動,如圖腿動的時候,裙子也會跟着動,這種情況可以選擇表面穿模,表現力更好。
如果衣服(頭發)與身體上的骨骼沒有關聯,衣服(頭發)完全由自己的骨骼控制,如圖腿動的時候,裙子不會動,這種情況使用碰撞體穿模。
模型屬于第二種情況,是以選擇碰撞體穿模
正常情況下,應該在頭部,軀幹,四肢都加上球形(MagicaSphereCollider)或膠囊形碰撞體(MagicaCapsuleCollider),這裡為了省事兒隻在軀幹上添加膠囊形碰撞體
為了長發和碰撞體進行碰撞檢測,還需要把這個碰撞體添加到長發的ColliderList中,再次點選Create生成資料,運作檢視效果
下面處理下裙子
模型前面的裙擺和後面的裙擺被處理成了幾個獨立的片,這裡隻處理下後擺,建立一個MagicaBoneCloth改名為後擺
将後擺的幾個根節點添加到Root List,并修改連接配接模式(Connection Mode)為Mesh Sequential No Loop,表示這幾個骨骼鍊形成一個不閉合的網格面,連接配接模式指定Root List中骨骼鍊的連接配接方式。
Connection Mode | Line - 表示單條骨骼鍊從父級到子級是線性結構的,兩條骨骼鍊是獨立的 |
---|---|
Connection Mode | Mesh Automatic - 自動連接配接附近的骨骼節點建立一個網格結構并進行連接配接,它不受Transform的父-子關系的影響,不适合太複雜的結構 |
Connection Mode | Mesh Sequential Loop - 按照在RootList中的順序生成網格,并連接配接第一條和最後一條骨骼鍊 |
Connection Mode | Mesh Sequential No Loop - 按照在RootList中的順序生成網格,但不連接配接第一條和最後一條骨骼鍊 |
Same Surface Angle | 隻在連接配接模式為網格時有,表示生成網格法線的角度(0-90) |
連接配接模式選擇Line,那麼裙子上的每條骨骼鍊就分别單獨進行碰撞檢測,這樣物體可能從兩條骨骼鍊之間的縫隙穿過産生穿模
首尾相連的裙子選擇Mesh Sequential Loop,生成閉合的網格面,這樣碰撞檢測更加精确
有的裙子不是閉合的就選擇Mesh Sequential No Loop
在腿上建立碰撞體添加到Collider List,預設選擇NormalSkirt,點選Create生成資料,運作檢視效果
MagicaBoneSpring 模拟胸部抖動
與 MagicaBoneCloth 基本類似,Create Other -> Magica Cloth -> MagicaBoneSpring,右鍵先建立一個 MagicaBoneSpring 并改名為胸部
找到模型身上的胸部節點添加到 Root List
預設選擇Breast,點選Create生成資料,運作時檢視效果
MagicaMeshCloth 模拟裙子飄動
參考官方示例,使用Unity Chan模拟
首先,必須開啟模型上的Read/Write選項,這是為了讀取并修改模型身上的頂點,MagicaCloth不支援具有4個或更多頂點的多邊形,是以Keep Quads必須關閉
在裙子,上衣,拉鍊這三個Mesh Renderer上都添加 MagicaRenderDeformer(渲染變形器),它能對網格進行變形,添加後會自動建立資料,如果上一步Read/Write選項沒有開啟,這裡會報錯
Create Other -> Magica Cloth -> MagicaVirtualDeformer,然後建立一個MagicaVirtualDeformer(虛拟變形器),把之前三個 MagicaRenderDeformer(渲染變形器)添加到Render Deformer List中,點選Create生成資料,如果這裡報錯,點選渲染變形器上的Create重新生成資料。MagicaVirtualDeformer的作用是将一個或多個MagicaRenderDeformer轉換為一個虛拟網格,減少頂點,将高多邊形網格轉換為低多邊形網格。這個虛拟網格隻用于布料模拟,是以實際模型網格不會被減少。從Cloth Monitor中可以看到虛拟網格的頂點數和三角面數
Reduction Setting 調整下面的參數可以減少頂點數量,簡化網格,修改後重新點選Create
參數 | 描述 |
---|---|
Merge Vertex Distance | 在這個距離内合并頂點,忽略網格的連接配接性 |
Merge Triangle Distance | 在這個距離内合并三角面,考慮網格的連接配接性 |
Same Surface Angle | 如果兩個連接配接的多邊形小于此角度,則認為它們是相連的 |
Use Skinning | 勾選會對所有頂點的骨骼權重進行重新指派,取消勾選減少實體計算的負擔 |
點選Open Cloth Monitor可以看到這個虛拟網格
Create Other -> Magica Cloth -> MagicaMeshCloth,然後建立一個MagicaMeshCloth并改名為衣服
這幾個元件之間的關系
接下來的操作和MagicaBoneCloth差不多。添加虛拟變形器的引用,點選Start Point Selection修改頂點類型
這一步比較麻煩,它沒有自動幫我們設定類型,需要手動設定,把裙子部分設定活動節點(Move Point),活動節點需要連接配接固定節點(Fixed Point)
在腿部添加兩個膠囊形碰撞器并添加到Collider List中
預設選擇Skirt,點選Create生成資料,運作時檢視效果
MagicaMeshSpring 模拟胸部抖動
前面和MagicaMeshCloth差不多,先給胸部附近的Mesh Renderer添加MagicaRenderDeformer(渲染變形器)
Create Other -> Magica Cloth -> MagicaVirtualDeformer,建立一個MagicaVirtualDeformer,添加胸部附近的MagicaRenderDeformer,點選Create生成資料,可以調整參數适當簡化網格
Create Other -> Magica Cloth -> MagicaMeshSpring,建立一個 MagicaMeshSpring 并改名為左胸
添加MagicaVirtualDeformer的引用,Center Transform 就是 MeshSpring 擺動的中心,選擇左胸節點,如何沒有合适的節點可以建立一個Transform節點,調整位置到中心,黃色箭頭是擺動的前方向,差不多是z軸正向,是以Direction Axis選擇Z
預設選擇Breast,點選Create生成資料,右胸的處理一樣
運作時發現擺幅比較大,還需要調整下Spring參數,參考下面參數說明
MagicaDirectionalWind / MagicaAreaWind
MagicaDirectionalWind 是控制全局的風
參數 | 描述 |
---|---|
Main | 風量 |
Turbulence | 風的湍流率,在0.0時,風總是從某一方向流動,在1.0時,風向會随機變化 |
Frequency | 風向變化的速度,你可以改變湍流變化的速度 |
Direction Angle X/Y | 繞X/Y軸旋轉的角度 |
需要配合Unity的WindZone元件使用,修改MagicaDirectionalWind風量Main會同步修改Wind Zone的風量Main,可以将兩者做成一個預制體在場景中使用
衣服,頭發受到的風力通過External Force參數設定,參考下面的參數說明
MagicaAreaWind控制局部區域的風,可以設定方形或球形區域,用它可以實作爆炸時猛烈的氣流效果
參數 | 描述 |
---|---|
Main | 風量 |
Turbulence | 風的湍流率,在0.0時,風總是從某一方向流動,在1.0時,風向會随機變化 |
Frequency | 風向變化的速度,你可以改變湍流變化的速度 |
Shape Type | 方形或球形 |
Direction Type | 球形時有效,One Direction - 風吹向某一個方向,Radial - 風從中心徑向吹來 |
Attenuation | 球形徑向風時有效,風從中心到四周的衰減率 |
Is Addition | 當處于多個風場疊加的區域時,勾選表示疊加這幾個風的影響,不勾選會選擇區域最小的風場 |
這是官方示例中示範的爆炸氣流效果,在紅球上添加了MagicaAreaWind,設定為球形徑向風,調整風量到最大并勾選Is Addition,這樣紅球出現時就會伴随強烈的氣流,這時再配合爆炸的特效就有不錯的表現效果
參數說明
下面補充下其他其他參數的說明
Update Mode
指定模拟的更新時間
選項 | 描述 |
---|---|
Normal | 根據幀率更新 |
Unity Physics | 基于 Unity 的實體更新,如果角色在 FixedUpdate 内移動,可以通過選擇此項來抑制抖動 |
Culling
Culling是剔除相關的設定,當角色移出螢幕後如何影響實體系統的更新
首先需要将模型上的網格元件(Mesh Renderer或Skinned Mesh Renderer)添加到Cull Renderer List中,點選Auto Select即可自動添加,然後設定剔除模式
Culling Mode | 描述 |
---|---|
OFF | 不剔除,始終進行模拟 |
Reset | 離開螢幕,停止模拟,再次出現時,會重置模拟 |
Pause | 離開螢幕,停止模拟,再次出現時,從停止的狀态繼續模拟 |
Animator和Animation上也有類似的剔除設定
Culling Mode | 描述 |
---|---|
Always Animate | 不剔除,始終運作動畫 |
Cull Update Transforms | 離開螢幕,内部動畫仍在運作,但不會更新Transform元件 |
Cull Completely | 離開螢幕,停止模拟,再次出現時,從停止的狀态繼續模拟 |
Culling Type | 描述 |
---|---|
Always Animate | 不剔除,始終運作動畫 |
Based On Renderers | 與Animator的Cull Update Transforms一樣,離開螢幕,内部動畫仍在運作,但不會更新Transform元件 |
建議動畫的剔除和 MagicaBoneCloth 的剔除模式相比對,確定實體模拟與動畫更好地同步
下面是推薦的比對模式
Animator Culling Mode | MagicaCloth Culling mode | 描述 |
---|---|---|
Always Animate | OFF | 不剔除,始終進行模拟和動畫 |
Cull Update Transforms | Reset | 離開螢幕,停止模拟和動畫,再次出現時,會重置模拟和動畫 |
Cull Completely | Pause | 離開螢幕,停止模拟和動畫,再次出現時,從停止的狀态繼續運作 |
Animation Culling Type | MagicaCloth Culling mode | 描述 |
---|---|---|
Always Animate | OFF | 不剔除,始終進行模拟和動畫 |
Based On Renderers | Reset | 離開螢幕,停止模拟和動畫,再次出現時,會重置模拟和動畫 |
Algorithm
Algorithm中老的算法已經不再維護,新的算法解決了老算法的一些問題,一般就預設Algorithm 2算法
Radius
每個由實體引擎控制的點都被稱為粒子(particle),Radius就是控制這些粒子的大小,從骨骼鍊的根節點到末端節點的大小變化
點選Open Cloth Monitor,勾選Particle Position和Particle Radius,就可以看到長發上的粒子,根節點是黃色,子節點是白色,粒子的大小會影響碰撞檢測的判斷
Mass
Mass 就是控制粒子的重量,較重的粒子更難移動,基本上,如果開始點比較重,結束點比較輕,MagicaBoneCloth 的模拟會更穩定
Gravity
Gravity 設定重力加速度的大小和方向,設定重力讓衣服下垂,不容易飄起了會顯得更自然一點
External Force
External Force 設定外力(如風)的影響
名稱 | 描述 |
---|---|
Depth Influence | 根據粒子在骨骼鍊上的深度指定受到外力的比率。1.0表示100%受外力影響,0.0表示完全不受外力影響 |
Wind Influence | 風的影響率,1.0是100%受影響,0.0完全不受風的影響 |
Wind Synchronization | 風的同步率,增加同步率,每個粒子将以同樣的方式移動。降低同步率會使每個粒子更容易受到幹擾 |
Wind Random Scale | 風的随機率,增加随機性,也會增加運動的不規則性 |
Drag
Drag 設定粒子的空氣阻力,阻力越大,粒子的慣性衰減越快
Max Velocity 粒子最大速度(m/s)
World Influence
World Influence 設定身體運動時,粒子受影響程度
名稱 | 描述 |
---|---|
Influence Target | 檢測運動的主體,如果不設定,就會選擇該元件所附加的Transform |
Max Move Speed | 粒子最大移動速度 |
Movement Influence | 身體運動對粒子的影響程度 |
Rotation Influence | 身體旋轉對粒子的影響程度 |
Reset After Teleport | 在一幀内大幅度移動或旋轉稱為Teleport,該選項設定是否在檢測到Teleport時重置粒子的位置 |
Teleport Mode | Reset - Teleport後重置一次模拟。Keep - Teleport後保持模拟狀态 |
Teleport Distance | 一幀内移動多遠距離算一個Teleport |
Teleport Rotation | 一幀内旋轉多大角度算一個Teleport |
Stabilization Time After Reset | 重置時執行穩定化處理的時間(秒) |
Distance Disable
Distance Disable 根據身體與指定對象(通常是錄影機)之間的距離,禁用/啟用模拟
名稱 | 描述 |
---|---|
Reference Object | 指定要測量距離的目标,如果沒有指定,将選擇主錄影機 |
Distance | 指定關閉模拟的距離 |
Fade Distance | 淡化距離,如果Distance是20,FadeDistance是5,則在15到20的距離之間進行淡入淡出效果 |
Clamp Distance
Clamp Distance 設定粒子離根節點的距離範圍,作為參考距離,設定從根節點到粒子的直線距離為1.0,并将距離增加或減少的程度設定為百分比。舉例來說,當Min Distance Ratio為0.7,Max Distance Ratio為1.1時,移動限制範圍如下
末端粒子隻能在圖中兩條紅線之間的範圍内移動
Velocity Influence 速度效應,将此設定為低值可以減少粒子因突然運動而移動的問題。然而,粒子的慣性也會丢失。
Clamp Position
Clamp Position 限制粒子從原點移動的距離,原點是粒子的原始位置
名稱 | 描述 |
---|---|
Clamp Position Ratio X/Y/Z | 可以相對于原點X/Y/Z軸移動的百分比(1.0=100%) |
Velocity Influence | 同上 |
Clamp Rotation
Clamp Rotation 限制相對于父節點的旋轉角度,上圖直線表示根節點(固定粒子)不能彎曲,尖端可以彎曲25度
Restore Distance
Restore Distance 恢複距離,縮放連接配接的粒子之間的距離,使它們保持在原來的距離,其作用是保持原始形狀。
有以下三種粒子連接配接方式:
類型 | 描述 |
---|---|
Struct | 根據原始結構連接配接粒子,在Bone Cloth中,是由Transform的父子結構建構的,在Mesh Cloth中,是由Mesh多邊形的連接配接資訊建構的。必選的 |
Bend | 從原始結構中連接配接更多的結構型粒子,可以使形狀不容易坍塌。可選的 |
Near | 忽略原始結構,僅連接配接那些靠近的粒子,這種連接配接可以保持形狀的強度,但也使其不容易變形。可選的 |
參數名稱 | 描述 |
---|---|
Struct Stiffness | Struct 連接配接強度,該值越高,恢複速度越快 |
Bend Point | 是否使用Bend連接配接 |
Bend Max Connection | 一個粒子的最大連接配接數,連接配接數越多,形狀穩定性越強,但負荷也更大 |
Bend Stiffness | Bend 連接配接強度,該值越高,恢複速度越快 |
Near Point | 是否開啟Near連接配接 |
Near Max Connection | 一個粒子的最大連接配接數 |
Near Max Depth | 進行Near連接配接的粒子最大深度,骨骼鍊上起點深度為0,終點深度為1 |
Near Point Length | 要連結的粒子之間的距離 |
Near Stiffness | Near連接配接強度,該值越高,恢複速度越快 |
Velocity Influence | 同上 |
Restore Rotation
Restore Rotation 恢複旋轉,當粒子産生旋轉後恢複到相對于父節點的角度
參數名稱 | 描述 |
---|---|
Restore Power | 恢複的強度 |
Velocity Influence | 同上 |
Triangle Bend
Triangle Bend 三角形彎曲,當Connection Mode設定為Mesh相關的選項,或者使用Mesh Cloth時會顯示該參數
兩個連接配接三角形受外力變形後,兩個三角形的角度恢複到其原始角度
參數名稱 | 描述 |
---|---|
Bend Power | 恢複的強度,基本上設定為1.0就行,但具三角形數量比較少的時候,嘗試降低該值 |
Twist Correction | 會建立特殊的限制資料以防止扭曲問題,它會增加消耗,是以不建議使用它,除非有扭曲的問題 |
Twist Recovery Power | 恢複扭曲的強度,如果值太高,形狀可能會變得很硬 |
Collider Collision
Collider Collision 碰撞檢測
參數名稱 | 描述 |
---|---|
Dynamic Friction | 動态摩擦系數,與碰撞機接觸的粒子很難移動,增加該值将增加摩擦力并減慢運動速度 |
Static Friction | 靜态摩擦系數,與碰撞器接觸的粒子靜止的強度,增加該值将導緻粒子在碰撞器上立即停止 |
Penetration
Penetration 穿模
參數名稱 | 描述 |
---|---|
Penetration Mode | 碰撞體穿模/表面穿模 |
Max Connection Depth | 最大連接配接深度 |
Penetration Axis | 粒子可以穿透哪個軸 |
Connection Distance | 搜尋粒子所連接配接的碰撞器時,最大搜尋距離 |
Penetration Distance | 粒子可以穿透的距離 |
Moving Radius | 粒子可以移動的最大半徑,粒子隻能在這個半徑的球體内移動 |
Penetration Ignore Collider List | 要忽略的碰撞器清單 |
Rotation Interpolation
Rotation Interpolation 旋轉插值
參數名稱 | 描述 |
---|---|
Fixed Non-Rotation | 固定不旋轉,當打開時,固定粒子(根節點)将完全不旋轉 |
Line Avarage Rotation | 根據連接配接線的平均角度調整粒子的旋轉,将此功能打開會産生更平滑的結果 |
Spring
MagicaMeshSpring上調整彈簧的參數,指定彈簧運動的一個球形範圍
參數名稱 | 描述 |
---|---|
Spring Radius | 球形區域的半徑 |
Spring Radius Scale X/Y/Z | 三個軸影響的比例 |
Spring Power | 彈簧力 |
Spring Direction Atten | 彈簧力阻尼率取決于與球體前端的角度,左邊是前面的方向,右邊是後面的方向 |
Spring Distance Atten | 彈簧力的衰減率取決于與球中心的距離,左邊是球的中心,右邊是球的外緣 |
Spring Atten Intensity | 阻尼率的整體調整 |
Adjust Rotation
可以根據彈簧移動的距離為根節點添加旋轉
參數名稱 | 描述 |
---|---|
Adjust Mode | 指定檢測運動的軸,通常是Direction Axis之外的兩個軸 |
Adjust Rotation Power | 旋轉強度 |
性能優化建議
- Update Mode選擇Delay Unscaled Time,實際的實體模拟會比畫面慢一幀,為了解決這個問題,它通過上一幀和目前幀的實體模拟結果進行插值
- 盡量選擇BoneCloth和BoneSpring進行模拟,如果裙子使用BoneCloth效果達不到預期就改成MeshCloth,但注意要簡化網格
Unity 布料,頭發模拟插件Magica Cloth - Virtual Deformer元件上需要關注的是Use Skinning選項,如果勾選了Use Skinning,則需要對所有頂點的骨骼權重進行重新指派,取消Use Skinning可以極大地減少實體計算的負擔。它的限制在于當取消了Use Skinning選項後,網格隻會受到影響程度最大的Virtual Deformer的影響,可能在一定程度上會影響最終的表現,但是如果對于一個網格的Render Deformer隻在一個Virtual Deformer中使用的情況下則可以放心地取消該選項的勾選
參考
up主IGBeginner0116
官方文檔
【博物納新】Magica Cloth