物理骨骼 (PhysBones)
Last updated
Was this helpful?
Last updated
Was this helpful?
物理骨骼 (PhysBones) 是一組可讓你為角色添加輔助動態的組件,允讓你可以為頭髮、尾巴、耳朵、衣服等添加動態!用好這些會讓你的角色看起來更有活力和真實。
物理骨骼是動態骨骼的替代品。雖然這兩個系統有很多相同的理念,但與物理骨骼存在一些重大差異,因此並非所有角色都可以直接轉換成 VRChat 使用的系統。
定義要使用物理骨骼進行動畫處理的骨骼鏈。這些可用於模擬軟體和次要動態,像是頭髮、尾巴、鬆軟的耳朵等等!它有許多設定選項,可以通過多種方式進行設定。
此外,你和其他人可以和物理骨骼進行互動!如果你已授予其他玩家權限,其他人就可以抓住設在你的角色身上的物理骨骼,並在抓住物理骨骼的同時扣動扳機來「擺放」並將其固定。你也可以在設定中停用這項功能,來禁止擺放、禁止抓取或直接禁止碰撞。
雖然不是這樣設計的,但在我們實現我們自己的布料組件之前,物理骨骼也可以作為合理的布料替代品。
Root Transform
- 這個組件形變得開端。如果留空,我們將以這個遊戲物件作為開端。
Ignore Transforms
- 不受這個組件影響的忽略形變列表。忽略的形便會自動包含對形變的任何子級物件。
Endpoint Position
- 用於在骨骼鏈的每個端點創建附加骨骼的向量。只有在值不為零的時候使用。通常,你會希望沿著 +Y 增加這個值,這會讓骨骼指「向上」。
如果你使用的是單個骨骼,或具有多個子骨骼(但沒有孫骨骼)的單個骨骼,則你必須要定義 Endpoint Position!
例如,如果你將物理骨骼組件放在下面的任何一個母骨骼上,則必須定義一個 Endpoint Position 才能使物理骨骼正常運作。這與動態骨骼不同!
單個骨骼
母骨骼
多個子骨骼,單格母骨骼
母骨骼
子骨骼 1
子骨骼 2
子骨骼 3
子骨骼 4
你也可以通過在每個子骨骼之後添加「末端骨骼」來解決這個問題,但這將涉及到編輯骨架。
Integration Type 定義了用於模擬受到這個組件影響的任何形變動態的數學模型。根據你的選擇,你在「外力」部分中可用的選項將發生變化。你可以選擇以下兩種:
Simplified
是一種穩定的方法,但他會給人感覺有點慢,且對外部撞擊和力量與外力的反應更小,但更容易設定。
Advanced
不太穩定,但可以讓你使用更複雜的設定,並且往往對外部撞擊與外力更加敏感。在預設設定下,這兩種模式的行為非常相似,但調整設定並對它進行測試將很快地揭曉它們的不同之處。
Pull
- 用於將骨骼恢復到靜止位置的力。
Spring
- 試圖到達靜止位置時骨骼擺動的量。僅可在 Simplified Integration Type 中使用。
Momentum
- 試圖到達靜止位置時骨骼擺動的量。僅可在 Advanced Integration Type 中使用。儘管描述相同,但效果與 Spring 略有不同。
Stiffness
- 骨骼嘗試維持在靜止位置時的量。僅可在 Advanced Integration Type 中使用。
Immobile
- 減少移動對骨骼的影響。設為1意味著骨骼將始終保持在靜止位置,除非通過碰撞或抓取移動。
Gravity
- 添加於骨骼的重力量。正值將下拉骨骼,負值則上拉。
Gravity Falloff
- 僅在 Gravity 不為零時可用。它控制在靜止位置時要移除多少重力。設為 1.0 意味著重力在靜止位置時不會影響骨骼。這使你可以在骨骼從初始位置旋轉時獲得重力效果,而不會影響骨骼的靜止狀態。
使用 Gravity Falloff 參數的一種方法是,如果你的頭髮建模為正常站立時你想要的姿勢,則可以使用 1.0 Gravity Falloff。這樣,當你站直時,重力不會影響到你,並且你的頭髮將停留在其建模位置。如果你的頭髮建模時為 45 度直出,並且你希望它受重力影響足以具有漂亮的曲線(但不是完全直出或完全直下),滑條讓你可以拉動它到 0.5至0.8 來在靜止姿勢時只獲取一點點重力。
設定限制允許你限制物理骨骼鏈可以移動的量。當你不希望頭髮折在頭上時,這就很有用,並且比碰撞器的效能要好更多!
此外,在設定限制時,當你選擇了物理骨骼鏈,這些限制將會顯示在場景視窗中。這對微調限制時非常幫助!
Limit Type
有幾種模式。所有模式都可以根據俯仰(pitch)、偏擺(yaw)及翻滾(Roll)調整選轉 —— 也就是分別沿著 X、Y 和 Z 軸。
None
表示在這個骨骼鏈上沒有啟用限制。沒有設定選項。
Angle
表示骨骼鏈將被限制在某個最大角度,以旋轉定義的軸為中心。這在場景視圖中被視覺化成一個圓錐。
Hinge
表示骨骼鏈將被限制在沿旋轉定義的平面的某個最大角度。這在場景視圖中被視覺化成圓形的一部分,類似於比薩或餡餅。
Polar
有點複雜。如果你拿一個Hinge
並將它沿Yaw
掃過一定的量,你就會得到一個極坐標系中的球體片段。你可以設定 Max Pitch
和 Max Yaw
來調整片段的大小,並使用 Rotation
來定義片段在球體上的位置。Polar
的視覺化對編輯特別地有用。
不要過度使用 Polar
限制,因為它們的效能成本不成零。使用大量(超過 64)可能會導致一些問題。如果你的 Max Pitch
和 Max Yaw
的值相似或是相同,則使用 Angle
限制就足夠了,而且它的效能成本更低。
Radius
- 每個骨骼周圍的碰撞半徑,以公尺為單位。用於碰撞和抓取。
Allow Collision
- 允許與其它碰撞器發生碰撞。目前唯一的其他碰撞器是每個玩家的手和手指,由他們的角色進行定義。
Colliders
- 專門與這些骨骼發生碰撞的碰撞器列表。
Allow Grabbing
- 允許玩家抓取骨頭。
Allow Posing
- 允許玩家在抓取骨骼後擺放。
Grab Movement
- 控制抓取的骨骼要如何移動。設為0會導致骨骼使用拉力和彈性到達抓取的位置。設為 1 會導致骨骼瞬間移動到抓取的位置。
Max Stretch
- 骨骼在被抓取時可以拉伸的最大量。實際長度基於每個骨骼的原始靜止長度。
Parameter
- 用於為角色控制器提供的多個參數的前綴。在以下項目中,將 Parameter 設置為 Tail
會將 {parameter}
取代為 Tail
{parameter}_IsGrabbed
〔布林值〕骨頭是否正在被抓取。
{parameter}_Angle
〔浮點數〕範圍為 0.0 ~ 1.0。從其原始靜止位置開始的末端骨骼的間形成的標準化 180 度角。換句話說,如果你扭轉一個與它的起始方向完全相反的骨骼,這個參數的值將是 1.0。
{parameter}_Stretch
〔浮點數〕範圍為 0.0 ~ 1.0。骨骼與其最大拉伸長度的接近程度。
Is Animated
- 允許對骨骼形變進行動畫處理。每個框架骨骼靜止位置將根據動畫內容進行更新。
單個物理骨骼組件一次不能影響超過 256 個形變。這將計算母骨骼以及所有子項。這也會影響動態骨骼轉換。
你可以使用以人形骨骼為母的物理骨骼。確保你移除了所有你不想移動的骨頭,否則你最終會得到一個軟糖角色!從母形變開始,如果任何骨骼是人形身體的一部分,物理骨骼將沿著層次結構向下移動,直到找到第一個非人形形變。然後它將使用它作為母形變創建一個物理骨骼組件。值得注意的是,在轉換過程中,這可能會導致組件數量異常膨脹。
與動態骨骼不同,物理骨骼鏈的母骨骼可以旋轉。但是,它不能互換。這可能會對某些設定產生了一些影響 - 請自行嘗試來查看它的運作方式。
影響到參數時,不需要在 VRCExpressionParameters
定義同步參數。這些參數已經在本地和遠端上更新,因為它們都有物理骨骼。
動態骨骼的 Inert
值是基於組件的放置位置,而不是母形變。這可能是動態骨骼的問題。因此,物理骨骼的 Immobile
值是基於母形變。在某些情況下,這可能會影響它的運作方式。
由於物理骨骼的多線程特性,將所有骨骼放入單個鏈中並不總是最有效率的。多個組件使我們能跨線程分解運作。但是,你仍然應該努力減少組件數量……但是在你的角色上保留一些組件並不像在動態骨骼中那樣糟糕。
如果你真的想要一個確切的數字,當你有超過 128 個受單個組件影響的形變時,你應該考慮拆分整個鏈集。如果你有一件有 256 塊骨頭的衣服,並且從根部分開,那麼將它分成二到三個組件就可以了。但是,如果你只是在處理大約 32 塊骨頭的東西……別擔心。正如你可能知道的那樣,這些不是嚴格的規則!當某些東西看起來應該以不同的方式設定時,我們可能會在稍後引入一些軟警告。
定義影響正確設定的物理骨骼的碰撞器。
Root Transform
- 放置這個碰撞器的形變。如果為空,將使用這個遊戲物件的形變。
Shape Type
- 這個碰撞器使用的碰撞形狀。你可以在 Sphere、Capsule 或 Plane 之間進行選擇。
Inside Bounds
- 啟用時,骨骼將被包在碰撞器內,而不是將它們排除在外。
Radius
- 從原點延伸的的大小。
Height
- 膠囊沿 Y 軸的高度。
Position
- 從根形變的位置偏移量。
Rotation
- 從根形變的旋轉偏移量。
一組「標準碰撞器」在 Avatar Descriptor 中位於一個名為「碰撞器」的新部分中定義。本節讓你可以定義存在於每個角色身上的許多標準碰撞器。如果你不去碰它,那這些將會被自動設定,但它們也可能以拿來調整來完全符合你的角色。這些碰撞器不會影響性能評級。
頭
軀幹
手(左/右)
腳(左/右)
手指(左/右)
食指
中指
無名指
小指
在預設情況下,客戶端會自動將動態骨骼轉換為物理骨骼。這樣做是為了提高整體效能,並且對於角色之間的互動也是必要的。如果需要,你可以在主選單的「Performance Options」部分將它關掉,但你將失去效能提升以及其他人與你互動的能力。
在預設情況下,動態骨骼的轉換使用的是 Advanced 模式,因為我們在 Advanced integration 方式下能夠更精確地配對動態骨骼行為。此外,動態骨骼轉換對多子類型使用 Ignore。這可能會導致某些極端情況下的數值設定出現問題,但幾乎所有情況下在轉換過程中使用 First 或 Average 都會導致不想要的行為。
關閉轉換意味著你將不能與使用動態骨骼的角色骨骼進行任何互動。但是,原生使用物理骨骼和角色接觸的角色將不會受到影響。
動態骨骼和物理骨骼並不相同。在程式內的轉換過程並不完美,我們打算隨著時間的推移進行更多更新。但是,請記住:轉換永不完美!自動轉換的目標是讓大多數設定運行良好且不中斷,而不是完美地複制行為。預計所有玩家都將逐漸過渡到使用物理骨骼,前提是他們希望他們的角色能夠準確地呈現並經得起未來的考驗。
你可以選擇使用 SDK 將你的角色從動態骨骼轉換為物理骨骼。
這個過程會從你的角色中刪除舊的動態骨骼組件,並且無法輕鬆復原。因此,請在嘗試轉換之前備份你的角色。
你可以通過查看建置控制面板來使用這個工具,或者在 VRChat SDK/Utilities/Convert DynamicBones to PhysBones
下的 Unity 選單中找到它。 你必須事先選擇角色才能使用。
動態骨骼中的某些功能和行為在物理骨骼中並不存在,並且不會被遷移。
Force
-動態骨骼中 X 或 Z 方向上的 Gravity
和 Force
將被忽略,因為它們在物理骨骼中沒有相應的設定。
動態骨骼最終將從 VRChat 中完全刪除。屆時,所有仍在使用動態骨骼的舊角色都將被自動轉換。
之後,我們將給出一個有充足時間的棄用日期,來讓角色作者轉換他們想要轉換的內容。
最後,請記住物理骨骼對 Meta Quest 有硬性限制。你可以將這些限制視為「」文檔中描述的 Quest Very Poor 的限制。
這些碰撞器主要充當 Senders,其他人可以透過他們的角色偵測到。但是,手指和手部碰撞器也用於創建整體碰撞器,可用於影響其他人的物理骨骼。