Upgrade to Pro — share decks privately, control downloads, hide ads and more …

UnityのHumanoidと共存する キャラクタジョイント制御と 制作ワークフロー

QualiArts
September 17, 2024

UnityのHumanoidと共存する キャラクタジョイント制御と 制作ワークフロー

Unityには「Humanoid」と呼ばれる人型キャラクタを動かすための機能が備わっており、リターゲットやIKなど、キャラクタを汎用的に扱うシステムが整っています。
しかし補助骨や揺れ骨など独自のジョイント制御を導入する際にHumanoid特有の挙動と相性が悪く、思い通りの実現ができずパフォーマンス的にも最適でない選択を取らざるを得ない場合があります。
そこで本セッションでは、Humanoidのメリットを活かしながら表現力やパフォーマンスを損なわないジョイント制御手法を説明します。
加えて補助骨を中心としてMayaとUnity間のワークフローについても紹介します。

QualiArts

September 17, 2024
Tweet

More Decks by QualiArts

Other Decks in Technology

Transcript

  1. アニメーションの再生 Update ProcessAnimation LateUpdate Animation C# Jobs 基本骨補正 小道具骨 補助骨

    揺れ骨 ゲームロジック... カメラ操作... 他のシステムに干渉しない再生タイミングで完結
  2. Muscleを使用した加算実装 public void ExecuteNodAdditive(AnimationStream stream) { AnimationHumanStream humanStream = stream.AsHuman();

    # アニメーションから指定されたMuscle値を取得 float currentMuscleValue = humanStream.GetMuscle(muscleHandle); # 加算したい回転値を、Muscle値に変換。(±40度のローカル回転を、±1のMuscle値とする) float additiveDegree = additiveDegree.GetFloat(stream); float additiveMuscleValue = additiveDegree / 40.0f; # 最終的なMuscleを設定 humanStream.SetMuscle(muscleHandle, currentMuscleValue + additiveMuscleValue); }
  3. 揺れ骨のサポート補助骨 基本骨補正の後、揺れ骨の前に行う必要がある Animation C# Job 基本骨補正 小道具骨 補助骨 揺れ骨 太腿の回転取得

    ステレオ投影法で 軸ごとの曲げ分解 前後曲げ連動計算 前後スカートの 回転設定 左右曲げ連動計算 左右スカートの 回転設定
  4. Muscleを使用した補助骨実装 public void ExecuteHandTwist(AnimationStream stream) { AnimationHumanStream humanStream = stream.AsHuman();

    # アニメーションから指定されたMuscle値を取得 float muscleValue = humanStream.GetMuscle(muscleHandle); # 駆動する回転値を、Muscle値から算出。(±66度のローカル回転を、±1のMuscle値とする) float handTwistDegree = muscleValue * 66; Quaternion driverQuat= Quaternion.Euler(handTwistDegree * driverCoefficient, 0, 0); # 最終的なMuscleを設定 driverHandle.SetLocalRotation(stream, driverQuat); }