Expressions/zh-hant: Difference between revisions

From VRChat Wiki
雨可韓韓 Yucohanhan (talk | contribs)
No edit summary
雨可韓韓 Yucohanhan (talk | contribs)
Created page with "Unity 的 Animator 系統在底層實際上使用 Float 來處理所有參數類型,而 VRChat 則會將已同步的自訂表情參數儲存為更精簡、適合網路傳輸的格式。Unity 與 VRCSDK 的使用者介面允許創作者為了方便而選擇不同的參數類型,但在底層仍可進行數值轉換。這代表參數並非以 C# 意義上的型別轉換方式運作,而是在不同系統之間以不相符的參數類型進行對應。這種行為也受..."
Line 125: Line 125:
表情參數不相符(Expression Parameter Mismatching)是指當表情參數與本機動畫控制(Animator Controller)參數之間使用不同的參數類型。雖然建議保持參數類型一致,但系統仍支援類型不相符的設定,並會依照特定規則在不同類型之間自動轉換數值。這種做法在某些 <u>Advanced</u> 配置中可能相當實用。同樣的轉換機制也適用於 VRChat 內建的動畫參數。
表情參數不相符(Expression Parameter Mismatching)是指當表情參數與本機動畫控制(Animator Controller)參數之間使用不同的參數類型。雖然建議保持參數類型一致,但系統仍支援類型不相符的設定,並會依照特定規則在不同類型之間自動轉換數值。這種做法在某些 <u>Advanced</u> 配置中可能相當實用。同樣的轉換機制也適用於 VRChat 內建的動畫參數。


<div lang="en" dir="ltr" class="mw-content-ltr">
Unity Animator 系統在底層實際上使用 Float 來處理所有參數類型,而 VRChat 則會將已同步的自訂表情參數儲存為更精簡、適合網路傳輸的格式。Unity 與 VRCSDK 的使用者介面允許創作者為了方便而選擇不同的參數類型,但在底層仍可進行數值轉換。這代表參數並非以 C# 意義上的型別轉換方式運作,而是在不同系統之間以不相符的參數類型進行對應。這種行為也受到熱門工具如 Av3Emulator Gesture Manager 的支援。
Unity's Animator system uses floats on the backend for all parameter types, while VRChat stores synced custom parameters in compact network-friendly formats. The user interface in Unity and the VRCSDK lets creators choose parameter types for convenience, but under the hood, value conversion is possible. This means that parameters are not being cast in the C# sense, but rather mismatched across systems. This behavior is also supported by popular tools such as Av3Emulator and Gesture Manager.
</div>


<div lang="en" dir="ltr" class="mw-content-ltr">
<div lang="en" dir="ltr" class="mw-content-ltr">

Revision as of 06:46, 4 June 2026

查看 · 編輯這是與 VRChat 官方資訊有關的頁面!
它已經由 VRCWiki 團隊審核並批准。透過閱讀貢獻指南,以瞭解如何為此頁面貢獻。
動作選單中的表情選單範例。

表情」(Expressions),是在 VRChat 中的角色(Avatar)功能之一,其由用戶自訂的選單所組成,可讓用戶在角色上啟用各種動作或切換功能,旨在以靈活且方便的方式快速存取角色的獨特功能。

更多資訊請參閱關於角色的創作者文件

表情選單

遊戲內的表情選單,可透過動作選單(Action Menu)存取,也可透過快速選單(Quick Menu)主選單(Main Menu)中的表情標籤頁存取。這種操作方式適用於所有平台的 VRChat。角色表情的變化會同步給同一平台上的其他用戶,並可設定跨平臺同步

SDK 中的表情

表情功能可透過 VRChat SDK 中的各種參數進行編輯。

基礎表情

當未設定任何表情功能時,系統會自動為角色加入包含基礎動畫的預設表情選單,其中包含以下動畫:

  • 揮手(Wave)
  • 鼓掌(Clap)
  • 指向(Point)
  • 歡呼(Cheer)
  • 跳舞(Dance)
  • 後空翻(Backflip)
  • 死亡(Die)
  • 悲傷(Sadness)

自訂表情

若要新增自訂表情,請先在 Unity 中建立 Expression Menu表情選單)資產與 Expression Parameters表情參數)資產,然後在 VRChat Avatar Descriptor 的 Expressions 區段中指派這些資產。Expression Menu 用於定義哪些控制項會顯示於遊戲內選單,而 Expression Parameters 則用於定義這些控制項所變更之數值的名稱、類型、預設值,以及同步行為。

每個自訂參數都可以設定是否 Saved儲存)及 Synced同步)。已同步的自訂參數會計入角色的 256 位元同步預算,而單一角色最多可定義 8192 個自訂參數。此資產中的參數也可以由 Contact ReceiverParameter DriverPhysBone 以及 OSC 進行變更。

SDK 也提供了一個 Default Parameters預設參數)按鈕。按鈕會還原 VRChat 預設 AV3 控制器所使用的三個別名參數:VRCEmoteVRCFaceBlendHVRCFaceBlendV

控制

每個頁面最多可建立 8 個控制項。建立控制項時,可選擇以下類型:

  • Button按鈕):按下時瞬間設定指定數值,並在 VRChat 傳送變更後立即自動重設。
  • Toggle切換):啟用時設定指定數值,停用時則重設該數值。
  • Sub Menu子選單):下設另一個表情選單,並可選擇在該子選單開啟期間設定特定參數。
  • Two Axis Puppet雙軸控制):透過水平與垂直輸入控制兩個浮點數參數,通常範圍為 -1.01.0
  • Four Axis Puppet四軸控制):控制四個浮點數參數,分別對應四個方向,通常範圍為 0.01.0
  • Radial Puppet環形控制):以環狀滑塊控制一個浮點數參數,範圍為 0.01.0

控制選單範例
動作選單與臉部鏡子的使用範例。(動畫 GIF)

當你向不同方向移動搖桿、觸控板或滑鼠時,將會改變其動畫參數,以此來表現不同表情,或在不同表情之間進行混合(例如「開心」與「驚訝」)。任何參數都可以透過此選單進行控制。

你可以在任一隻手上開啟一個選單(或同時在兩隻手上開啟)。預設情況下,可透過快速撥動來選擇選項;你也可以在動作選單設定中改為使用扳機鍵進行選擇。若要返回表情選單的上一層,請按下扳機鍵。

當屬於控制類型的控制項被開啟時,VRChat 會使用較快速的 IK 同步模式即時同步其數值。控制項關閉後,當前數值會維持不變,直到再次被修改為止。

表情參數

表情參數Expression Parameters)可透過表情選單、Contact ReceiverOSCParameter DriverPhysBone 元件來控制角色功能。這些參數接著會對應至角色 FX、手勢(Gesture)或動作控制器中的 Animator Controller 參數。

設定

Expression Parameters 資產中的每個項目都會儲存以下資訊:

  • Name名稱):必須與 Animator 參數名稱完全一致。
  • Type類型):可為 BoolIntFloat
  • Default預設):當角色重設時的預設值。
  • Saved儲存):控制該數值是否會在不同工作階段之間保留。
  • Synced同步):控制該數值是否會傳送給其他用戶。

預設情況下,自訂參數會使用 VRChat 的 Playable 同步模式進行同步。當控制類型的控制項處於被開啟狀態時,則會暫時改用較快速的 IK 同步模式。

內建參數

VRChat 也提供內建的 Animator 參數。這些參數不需要額外加入 Expression Parameters 資產中,且不會計入自訂參數的預算限制。

內建參數處於唯讀模式,無法由用戶任意修改。要觸發內建參數,只需在 Playable Layer可播放層)的 Animator Controller 中使用對應名稱建立參數,VRChat 便會在執行期間自動更新其數值。這些參數不會被設定到子 AnimatorSub-Animator)上,而只會設定於 Playable Layer 的 Animator。

其他內建參數包括:

  • Viseme(Int):由唇形同步(Lip Sync)控制,數值範圍從 0(靜音)到 14(母音「u」)。當 Avatar Descriptor 的 Lip Sync 設定為 Viseme Blend ShapeViseme Parameter Only 時啟用。
  • Voice(Float):感知到的麥克風音量,範圍從 0.01.0,會受到距離及音罩(Earmuffs)設定影響。
  • VelocityXVelocityYVelocityZVelocityMagnitude(Float):沿各軸向及總體的移動速度(單位為公尺 / 秒)。本地端不會計算遊玩空間移動,而遠端則會計算。
  • Upright(Float):趴臥時為 0,站立時為 1
  • Grounded(Bool):表示用戶是否接觸地面。
  • MuteSelf(Bool):表示用戶是否已將自己的麥克風靜音。
  • Earmuffs(Bool):表示用戶是否已啟用耳罩功能。
  • IsOnFriendsList(Bool):表示檢視者是否為角色穿戴者的好友(在本地端永遠顯示為 False)。
  • ScaleFactorScaleFactorInverseEyeHeightAsMetersEyeHeightAsPercent(Float):與角色縮放相關的參數。由於 EyeHeightAsMeters 為線性數值,且不受上傳時身高影響,因此建議用於需要感知角色尺寸的系統。

每個內建參數都有其對應的同步類型,用來決定何時將數值傳送給遠端用戶:

  • IK:用於由追蹤資料衍生的數值,例如手勢、移動速度及是否接觸地面等。
  • Speech:用於與語音相關的數值,例如唇形同步及語音音量。
  • Playable:用於表示用戶狀態的數值,例如麥克風靜音、音罩、追蹤類型及角色縮放等。
  • None:用於僅限本地端使用的數值,例如 IsLocalPreviewMode

網路同步

只有已被同步的表情參數以及部分內建參數會透過網路傳送。每個角色所同步的完整資料包括:

  • IK 目標:包含頭部、下顎與雙手的位置資料;桌面模式與三點追蹤皆會同步這些資料。全身追蹤則額外同步臀部與雙腳的位置資料。使用 Index 控制器的用戶還會同步手指位置。
  • 已同步的表情參數:只有標記為 Synced 的參數會被傳送。數值會經過量化處理:Int 類型以 0 至 255 的範圍同步;Float 類型以 −1 至 1 之間、每 1/127 為單位的數值同步;Bool 類型則同步為 true 或 false。
  • 內建 VRC 參數:包括手勢、移動速度、語音以及其他執行期間參數。
  • PhysBones:姿勢位置資料會傳送給稍後加入房間的用戶。

為了確保後加入房間的用戶也能正確看到角色狀態,建議採用以 IsLocal 參數分離 Animator 邏輯的設計模式:本地端(IsLocal = True)圖層負責處理 Contact、Parameter Driver 以及所有邏輯運算,並將結果寫入已同步參數;遠端(IsLocal = False)圖層則只讀取這些已同步參數,並根據其值播放正確的視覺表現。這種做法可避免依賴不會同步的本地事件或邏輯,同時確保後加入房間的用戶能夠正確還原並顯示角色目前的狀態。

手勢與臉部表情

內建的 GestureLeftGestureRight 參數用於識別用戶的手勢,而 GestureLeftWeightGestureRightWeight 則提供類比扳機鍵的按壓程度。在 Humanoid 角色上,Gesture Playable Layer手勢可播放層)通常用於控制手勢,而臉部表情則通常透過 FX 圖層中的 Blendshape、材質屬性或其他非 Humanoid 動畫來驅動。

在具備手指追蹤功能的控制器上,由於手指追蹤預設會覆蓋動畫的效果,因此創作者可使用 Tracking Control 狀態行為(State Behavior),在需要時將相關手指的控制方式由 Tracking追蹤)切換為 Animation動畫)模式。

表情參數不符

表情參數不相符(Expression Parameter Mismatching)是指當表情參數與本機動畫控制(Animator Controller)參數之間使用不同的參數類型。雖然建議保持參數類型一致,但系統仍支援類型不相符的設定,並會依照特定規則在不同類型之間自動轉換數值。這種做法在某些 Advanced 配置中可能相當實用。同樣的轉換機制也適用於 VRChat 內建的動畫參數。

Unity 的 Animator 系統在底層實際上使用 Float 來處理所有參數類型,而 VRChat 則會將已同步的自訂表情參數儲存為更精簡、適合網路傳輸的格式。Unity 與 VRCSDK 的使用者介面允許創作者為了方便而選擇不同的參數類型,但在底層仍可進行數值轉換。這代表參數並非以 C# 意義上的型別轉換方式運作,而是在不同系統之間以不相符的參數類型進行對應。這種行為也受到熱門工具如 Av3Emulator 與 Gesture Manager 的支援。

Expression Parameter Bool

Animator Controller Parameter
Type Expression Bool = False Expression Bool = True
Bool → Bool Bool = False Bool = True
Bool → Int Int = 0 Int = 1
Bool → Float Float = 0.0 Float = 1.0

Expression Parameter Int

Animator Controller Parameter
Type Behaviour
Int → Bool Any Int value that isn't 0 sets bool to True
Int → Int Expected Behaviour
Int → Float Straight Conversion: e.g. Int = 2 → Float = 2.0

Expression Parameter Float

Animator Controller Parameter
Type Behaviour
Float → Bool Any Float value that isn't 0 sets bool to True
Float → Int Rounded Conversion: ≥0.5 → 1 ; <0.5 → 0
Float → Float Expected Behaviour

官方資源

參見

參考資料