LV. 19
GP 102

【心得】Dynamic Bone (&乳搖) 研究筆記 (圖多)

樓主 落雨空空 kennussu
GP445 BP-

一、版本:

Unity 2019.2.4f1
Dynamic Bone 1.2.0

二、使用方式

以頭髮為例:
1. 將DynamicBone腳本掛上,掛在頭髮根部骨頭、頭部骨頭都可以,只影響在Select時的呈現層次。

2. 設定參數、碰撞器,說明如下。

三、參數


- Root
   Theroot of the transform hierarchy to apply physics.
從該物件以下的子體都會被套用物理模擬。請將要套用的那串骨頭的第1根拖入。
該物件及其子物件,如果本身有動畫,會進行混和,但有作用力(Gravity、Force)的情況下結果有點不容易控制。可以用SetWeight(floatw)調整混和權重。

- UpdateRate
   Internalphysics simulation rate, measures in frames per seconds.
每秒幾幀的物理更新頻率。低於遊戲幀數會卡卡的,只要不低於遊戲幀數,實際看起來差別很小。

- UpdateMode
Normal: Normal update.
AnimatePhysics: Updatesduring the physic loop in order to synchronized with the    physicsengine.
UnscaledTime: Updatesindependently of Time.timeScale.
更新模式,分為一般 / 物理引擎同步 / 獨立計算更新3種,目前還沒碰到這塊。

-Damping (阻力)
How much the bones sloweddown.
數值越大每個節點被拉扯、甩動的速度越慢,體感上就是節點越重。也會影響甩動幅度。
可以看到數值小(節點輕),被甩動的幅度就大、動作頻率高(靈敏度高)。


- Elasticity (彈性)
How much the force appliedto return each bone to original orientation.
回彈、甩動的幅度。0會像是無重力亂飄,1整條會鎖住不動(幅度=0)。

-Damping Distrib, ElasticityDistrib, Stiffness Distrib, Inert Distrib, Radius Distrib
How parameters change overhierarchy chain. Curve values are multiplied to correspondingparameters.
參數隨根部到尾端的變化曲線,舉例來說,給上圖的彈性加上一個1→0.2的下降直線,第一根骨頭彈性0.3,到第三根骨頭彈性就變0.06,就會出現上上面Damp例圖裙擺飄飛的效果。

- Stiffness (剛性)
How much bone's originalorientation are preserved.
骨頭間速度繼承的多寡,也就是節點間變形的程度,可以想像成這整條有多硬。

偶爾低數值會看不出差異,但在受重力作用垂落時就會有所差別,比如下圖左半Stiffness設為0.3,右半0.6,受向下作用力的位移就有所不同。

- Inert
How much character'sposition change is ignored in physics simulation.
數值越高,因人物移動(位移,旋轉不算)時產生的物理效應越低(圖中僅頭髮)。

-Radius
Each bone can be a sphere tocollide with colliders. Radius describe sphere's size.
每個節點的碰撞器大小,也就是前面圖中白色的圓球。因為模型有放大100倍,所以我調的數值都很小。
碰撞的時候只有骨頭兩端的白球會有效,如果目標碰撞器從白球中間沒接觸通過,將不會發生任何事。

-End Length
If End Length is not zero,an extra bone is generated at the end of transform hierarchy, lengthis multiplied by last two bone's distance.
有設長度,將於末端產生一根新骨頭參與物理模擬,長度為設定值x 最後兩骨頭距離。

-End Offset
If End Offset is not zero,an extra bone is generated at the end of transform hierarchy, offsetis in character's local space.
有設長度,將於末端產生一根新骨頭參與物理模擬,骨頭x,y,z方向為局部座標。
以上兩項可以將短的模擬成長的,具體用途還想不太出來。

-Gravity
The force apply to bones, inworld space. Partial force apply to character's initial pose iscancelled out.
對骨頭施加作用力,但在初始動作下不予作用,所以可以保留原始角度。
-Force
The force apply to bones, inworld space.
對骨頭施加作用力,任何情況下都會作用,一定給你拉直。

- Colliders
Collider objects interactwith the bones.
要碰撞的物件列表。舉例來說,要防止頭髮穿入頭部,先將DynamicBone Collider掛上頭部骨頭,再調整碰撞器黃色球體大小,確定與頭髮白色碰撞器接觸妥當,
再將頭部物件分別拖入每根頭髮的Colliders列表,就會做物理碰撞了。

但如果位移量達到一定程度,碰撞將會滑開(兩圓球交錯滑開),即使設定Height弄成長條也照樣失效,非常不方便。
下圖左側是碰撞失效的情況,看得出裙子向兩側滑開,右側是製作第一根骨頭的動畫給定大方向,來混合勉強改善。如果還有啥好辦法還拜託大佬解惑><

========= BaconEgg 大佬建議 ============
用 Inside 的 Colider 包住什麼的,披了一張皮沒認出來,一研究才發現,這特麼不就是IK嗎!4你呀老K,咱倆熟啊~步驟如下:
1. 在腿骨上建一個空物件(如圖中下Locker)掛新Colider(紫色),設為Inside並調整Center位置到腿骨前方。
2. 看一下裙骨的位置,讓Colider落在下方,裙骨兩根以上可以用X方向Height調為圓柱區域,大概4醬:
3. 將新Colider放入右前兩條裙骨的碰撞器列表,如上圖左。

如此一來,兩條裙骨會被紫色區域限制住位移,也就會一直指向紫色碰撞器的區域,達到近乎IK的效果,就不怕噴出去惹

而且還不怕大位移時,會無效穿出去,根本是救星來著

-*在此感謝BaconEgg大大建議

- Exclusions
Bones exclude from physicssimulation.
排除要套用的骨頭。如裙子一條有7根骨頭,穿短裙時要取消後面超出的4根,才會有正確長度的物理模擬,此時就可以將第4根骨頭放入本列表。

-Freeze Axis
Constrain bones to move onspecified plane.
限制移動於指定平面(局部座標的X,Y,Z)。

-Distant Disable, ReferenceObject, Distance To Object
Disable physics simulationautomatically if character is far from camera or player.
If there is no referenceobject, default main camera is used.
啟用時,當參照物(無則默認主鏡頭)與本物件超過指定距離,自動停止作用。

DynamicBone script reference:
- public voidUpdateParameters();
  Update parameters atruntime, call this funtion after modifing parameters.
於執行時Call它來更新參數。

人體乳房之物理模擬研究


之前在Blender做晃動模擬,是採用兩根骨頭相錯位移達到波動的效果,旋轉其實做很少。

但在DynamicBone只能用旋轉來做物理模擬,骨頭間無法位移,拿上圖的骨架來套會變下圖這樣,像是一個球體在旋轉表面,僵硬而失去軟Q感。

但官方DEMO影片卻能做到軟Q的模擬,又是如何達成呢?
經過苦思,想到一個近似作法,就是將根部那個骨頭往後拉很長,再將權重從後半截乳房改為全區域,如此一來旋轉的移動圓周就會近似上下位移的效果:


上圖中,長骨是帶動整個胸部的上下甩動,短骨是利用旋轉效果增幅乳房前半端的甩動幅度,以及達成小幅度晃動的模擬。

參數設定的目標:
  1. 幅度要明顯可見。
  2. 靈敏度高,小幅動作就能晃。
  3. 頻率合理,不過高或低。

參數設定的邏輯:
    幅度要明顯,Elasticity不能太高,超過0.2開始幅度就會很明顯減小(題外話,如果胸部有作Blendshape縮小,倒是可以藉此控制幅度)。
    小幅動作靈敏度要高,前端Damp不能太高,不然節點重、阻力大,小幅度動作帶不動節點,就不會晃。大幅動作要晃的開,後端Damp要大,所以調高為0.6,再給它一個遞減曲線讓前端Damp降低。為了加強前端幅度,同樣給彈性加上遞減曲線。
    Elasticity= 0.12~0.024,Damp= 0.6~0.12,效果大概4醬:

這圖最後的晃動是用位移動畫帶動的,整個製作過程心情都很愉悅。

以上謝謝收看,還請看倌大佬不吝指教。


最後....




什麼? 你說你hen嚴格? 那只能來硬的惹








445
-
未登入的勇者,要加入 2 樓的討論嗎?
板務人員:

212 筆精華,11/08 更新
一個月內新增 3
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】