巴哈姆特

哈啦區 Unity3D 遊戲引擎
查看全文

【心得】Dynamic Bone (&乳搖) 研究筆記 (110.5.25被GP叫來更新乳搖骨架)

技術分享
落雨空空AoiSora (kennussu) 2019-09-26 02:32:44
#1

109.2.20 Dynamic Bone 研究筆記-2 (109.2.20被GP叫來分享一個小玩法)

109.3.28 Dynamic Bone 研究筆記-3 碰撞器的幾個使用心得


一、版本:

Unity 2019.2.4f1
Dynamic Bone 1.2.0
(要$20在Asset Store:https://assetstore.unity.com/packages/tools/animation/dynamic-bone-16743)

二、使用方式

以頭髮為例:
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.
每秒幾幀的物理更新頻率。低於遊戲幀數會卡卡的,只要不低於遊戲幀數,有時看起來差別很小,
60幀更新頻率會明顯高於30幀,但有可能會顯得很過動,不一定越高越好。

- UpdateMode
Normal: Normal update.
AnimatePhysics: Updatesduring the physic loop in order to synchronized with the    physicsengine.
UnscaledTime: Updatesindependently of Time.timeScale.
更新模式,分為一般(Update) / 物理引擎同步(FixedUpdate) / 不受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嚴格? 那只能來硬的惹







================= 2021.3.28 更新乳搖概念 =================
經過長時間的觀察,我發現了過去錯誤的實作,最好還是回來更正一下
上面在Blender裡的搖動是對的,但用Dynamic bone模擬近似的結果,
乳尖大幅度上下甩動是錯誤的,如下圖所示
往上的時候乳尖大致上還是指向前方,且移動幅度小,大幅移動的是後面的肉團

往下的時候一樣,乳尖指向前小幅往下,後面的肉團大幅下移
詳細影片可以看我之前發的文(偷渡推特,我不會說裡面有本次更新的無箭頭版
https://twitter.com/AoiSora98114466/status/1296112167196925954

以上可以總結成一個口訣:
肉動頭不動!!

於是,我換了骨架結構:
效果大概4醬

相較於原本的設定,頭會甩得亂七八糟比對圖

2021/5/25 偷偷更新,一邊拆成兩根Dynamic Bone效果更讚喔ww
想要很有彈性卻又怕太軟動作一大甩到破圖? 用個Inside collider包起來吧XD

2022/1/8 怕誤人子弟再來偷偷更新,我後來用了Magica cloth,兩者各有優缺,相較於Magica cloth是用最大旋轉角度限制,DB勝在他的外包式碰撞器某些場合不錯用。
至於物理參數什麼的,兩者有點差異但MC有範本可以套,套下去再小調很快就OK了也不錯。
其他方面兩者效果幾乎都可以調得差不多,但就差在MC直接有風場可以用,也有可以處理長裙的Mesh動態模擬,所以簡單來說只想挑一個買的可以直接選MC,不差錢或是已經兩個都買的可以跟我一樣直接看狀況混用,大概4醬。

以上。

看較舊的 58 則留言

LoliKami: B65 2020-07-27 05:42

是說胸部如果不去加骨頭的話能用End Length模擬嗎?

落雨空空AoiSora: B66 2020-07-27 07:33 編輯

我是不知道有沒內建功能啦,我猜還沒有吧ww end length 是模擬尾端還有一根的物理行為,跟多綁一根骨頭能兩段變形還是不一樣喔

黑色的雨龍: B67 2021-01-07 00:09

插件400多台幣 好貴

你老媽怒拔網路線: B68 2021-03-27 19:26

GP啦哪次不GP [joshua0113:恩]UniVRM應該也能做到

Z ZAKU 可脫模式: B69 2022-01-24 10:30

還在想KK的骨頭要怎麼搞,看到這篇就瞭了,感謝

延伸閱讀

心得Dynamic Bone 研究筆記-3 碰撞器的幾個使用心得

2021-03-28 16:27:18

心得使用 2D Sprite 製作角色,達成接近 3D

2019-08-18 20:29:58

問題角色骨架動畫在輸出成執行檔後變形問題(已解決)

2019-04-11 19:00:45

問題TImeline使用AnimatorType不是Humanoid的模型位置問題

2018-10-09 12:04:06

情報整理給 Unity 初學者的起步資源

2021-07-25 09:10:53

問題關於Humanoid骨架的人物移動與動畫位移

2018-08-28 20:21:08

團戰

看更多

古戰場 DAY2

主題

古戰場辛苦了

插畫

2022水有利古戰場

插畫

開啟 APP

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

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