0.x to 1.0
VRM-0.x
の個別のコンポーネントに機能を分散する設計を変更して
Vrm10Instance
にすべてを集約する方式になりました。
0.x | 1.0 |
---|---|
VRMBlendShapeProxy | VRMInstance.Runtime.Expression |
VRMLookAt | VRMInstance.Runtime.LookAt |
VRMSpringBone(各SpringのRoot) | VRMInstance.Runtime.SpringBone |
毎フレーム決まった順番で更新します。
- Control Rig
- Constraints
- Gaze control
- Expression
ポーズ付け、ポーズの加工を考慮すると
- [-2] ControlRig にポーズを付ける(Animator もしくは独自処理)
- [-1] ControlRig の修正。IK など
- [1] ControlRig 適用 から本体へのモーション転送
- [2] Constraints 解決
- [3] Gaze control 解決
- [4] Expression 適用
- [5] SpringBone 更新
となりそうです。 順番の制御が必要な場合は、VRMInstance の更新を手動に切り替えて手動で更新してください。
Expression
:class: info
ImmediatelySetValue と AccumulateValue は、SetWeight に一本化されました。
ImmediatelySetValue は無くなりました。
var proxy = root.GetComponent<VRMBlendShapeProxy>();
proxy.ImmediatelySetValue(BlendShapeKey.CreateFromPreset(BlendShapePreset.A), 0.5f);
👇
var vrm10 = root.GetComponent<Vrm10Instance>();
vrm10.Runtime.Expression.SetWeight(ExpressionKey.CreateFromPreset(ExpressionPreset.aa), 0.5f);
LookAt
:class: info
vrm10.Gaze.position か vrm10.Runtime.LookAt.SetLookAtYawPitch で予め更新しておいた値が、
後で vrm10.Runtime により適用されます。
Gaze
var lookAt = root.GetComponent<VRMLookAt>();
lookAt.LookWorldPosition(new Vector3(x, y, z));
👇
var vrm10 = root.GetComponent<Vrm10Instance>();
vrm10.LookAtTargetType = LookAtTargetTypes.CalcYawPitchToGaze;
vrm10.Gaze.position = new Vector3(x, y, z);
SetYawPitch
var lookAt = root.GetComponent<VRMLookAt>();
lookAt.ApplyRotations(yaw, pitch);
👇
var vrm10 = root.GetComponent<Vrm10Instance>();
vrm10.LookAtTargetType = LookAtTargetTypes.SetYawPitch;
vrm10.Runtime.LookAt.SetLookAtYawPitch(yaw, pitch);