ControlRig 正規化されていないモデルを操作する
VRM-1.0 は正規化が仕様から除かれました。
正規化とは、ヒエラルキーからの 回転、スケールの除去。 その状態での Binding 行列再生成。 です。
すべてのノードの回転が 0 のときが初期姿勢(T-Pose)であるという仕様で、 プログラムから統一的にモデルを操作することが可能でした。
v0.103
正規化されていないモデルも含めて統一的にポーズを付けるインターフェスとして、 ControlRig
が新規に導入されました。
Vrm10RuntimeControlRig.GetBoneTransform が導入されました。
v0.104
で Animator.getBoneTransform が 使えるようになったので特に使う必要が無くなりました。
v0.104
UnityEngine.Animator.getBoneTransform
が ControlRig のボーンを返すようになりました。
ControlRigGenerationOption.Generate の時は、AvatarBuilder.BuildHumanAvatar の引き数にオリジナルのヒエラルキーでは無く、 ControlRig のボーンを渡します。
ControlRig は ランタイムロード時に生成されます
v0.103
現在この機能は Editor で Asset 生成されたモデルでは動作しません。
VRM モデルをセットアップするときに邪魔になってしまうので、Editor では生成しないようにしています。
デフォルトで ControlRig を生成 ControlRigGenerationOption.Generate
します。
ControlRigGenerationOption.None
は ControlRig を生成しません。
public static async Task<Vrm10Instance> Vrm10.LoadPathAsync(
string path,
bool canLoadVrm0X = true,
ControlRigGenerationOption controlRigGenerationOption = ControlRigGenerationOption.Generate, // 👈
bool showMeshes = true,
IAwaitCaller awaitCaller = null,
IMaterialDescriptorGenerator materialGenerator = null,
VrmMetaInformationCallback vrmMetaInformationCallback = null,
CancellationToken ct = default)
ControlRigGenerationOption.Generate
でロードしたモデルは、 Animator.getBoneTransform
が
ControlRig の該当ボーンを返します。
オリジナルのボーンを取得する方法は後述します。