はじめましておぐらです。
今回はVRMモデルの設定で忘れられがちな、目の可動範囲の設定方法をまとめます。
目の可動範囲がデフォルト設定のままだと、VRM対応アプリでこんな風に目が動く現象が起こり得ます。
目が動きすぎてちょっと気持ち悪いですね。
これではせっかくのアバターが台無しなので、VRMLookAtBoneApplyer
の設定を変えて、目の可動範囲を適切に設定してあげましょう。
<2019/06/28追記>
バーチャルキャスト等でVIVE Pro eyeを使用した視線制御を行う場合、ちょっと大げさな可動範囲設定の方が魅力的に動くかもしれません。いろいろ試してみてください。
公式のドキュメントにもこのコンポーネントについては記載されていますが、こちらは動作確認の仕方などの説明がありませんので、目の動きを確認しながら設定していく方法を紹介します。
https://vrm.dev/univrm/components/univrm_lookat/
ちなみに、今回の目の可動範囲設定は視線をボーンで制御するモデルで行います。
BlendShapeで視線制御を行うモデルの場合、可動範囲の設定はVRMのBlendShape設定にあるLookUp
, LookDown
, LookLeft
, LookRight
を設定し、VRMLookAtBoneApplyer
を消してVRMLookAtBlendShapeApplyer
を追加する…などの作業をする必要があります。
BlendShapeでの視線制御についてはこちらを見てみてください。
1. VRMを読み込む
まずはUnity2017か2018で空のプロジェクトを用意し、最新のUniVRMをインポートします。もちろん、VRMを書き出した過去のプロジェクトを開いても構いません。
Unity2019もリリースされていますが、Shaderの仕様がやや変わっているらしく、表示が崩れることがあるので今回はUnity2018.2.21f1を使います。
VRMモデルをProjectにドラッグ&ドロップで配置します。
書き出されたPrefabをシーン上に配置しましょう。
同時にCameraやLightもいい感じに設定しておきます。
Cameraはモデルの前に移動、180度回転させてFieldOfViewを小さくしました。
LightはColorを白にし、回転させて前から光がさすようにしています。
2. VRMLookAtBoneApplyerを確認する
シーンに置いたモデルを選択して、Inspectorを確認します。
下の方までスクロールしていくと…
ありました。コレです。
Degree Mapping
の下にある4つの▶を開きましょう。
この設定値がそれぞれ90
と10
なら、それは初期設定のまま、という事です。
では、目線の様子を確認しながらいじっていきましょう。
3. 目の動きを確認しながらパラメータを編集する
VRMLookAtBoneApplyer
の数値をそのまま編集してもいいですが、実際にどう目が動くかはよく分かりません。
実際に目の動きを確認しながら設定しましょう。
3-1 VRMモデルが「見る」オブジェクトを配置する
Hierarchyに適当にCubeを生成します。
(※Hierarchyで「何も選択していない状態」でCubeを生成してください。何かが選択されていると選択されたオブジェクトの子に配置されてしまいます。)
適当な位置にCubeが置かれるので、InspectorからTransformを操作してPositionをすべて0、Scaleをすべて0.1にします。
すると、Scene上ではモデルの足元にCubeが配置されます。
次に、このCubeをモデルの目の前まで移動させましょう。
3-2 VRMLookAtHeadにCubeを設定する
シーン上のVRMモデルを選択して、InspentorでVRMLookAtHead
を探します。
ありました。
ここのTarget
に、先程配置したCubeをドラッグ&ドロップで設定します。
3-3 目の動きを確認しながらパラメータを編集する
実行中にCubeの位置を動かすと、モデルの視線がCubeを追うはずです。
Cubeを向かって左端に移動させると、こんな感じになります。
デフォルトでは左目がやや内側に行き過ぎている気がするので、モデルのVRMLookAtBoneApplyer
を編集します。
(まだUnityを停止させないでください)
内側に向きすぎている、という事は、Horizontal Inner
のCurve Y Range Degree
の値を操作してやればOKです。
10
→3
にしたら左目がいい感じになりました。
右目もちょっと外に向き過ぎですね。
では次は、Horizontal Outer
のCurve Y Range Degree
を操作します。
10
→7
にしたらいい感じになりました。
かわいい。OK!
今は左右の設定をしました。次は上下の設定です。
Cubeを中央の高い位置に移動させます。
ちょっと上を向きすぎですね。目のハイライトが隠れるとアレなので、もう少し小さい値にしてあげます。
操作するのはVertical Up
のCurve Y Range Degree
。
10
→5
にするといい感じになりました。
では最後に、Cubeを移動させて下の方に配置します。
う~ん、カワイクない!
ので、これも調整。残ったVertical Down
のCurve Y Range Degree
値を操作します。
これも10
→5
くらいでいい感じになりました。
4. 最終確認をして値を適用する
まだUnityを停止しないでくださいね!
最後に、Cubeをぐるぐる動かして目の動きを確認しましょう。
お疲れ様でした。
最後に、VRMLookAtBoneApplyer
に編集した値を適用します。
Unityに慣れた方は分かるかと思いますが、実行中に編集したパラメータは一時的なもので、停止すると編集した値はすべて実行前の状態にリセットされてしまいます。
なので、まずはVRMLookAtBoneApplyer
の右上にある歯車アイコンからCopy Component
をクリックして値を保持しておきます。
では、シーンを停止します。
VRMLookAtBoneApplyer
を見ると、値がすべて10
になっていますね。
でも大丈夫。右上の歯車アイコンからPaste Component Values
をすることで、値が復活します。
5. VRMファイルを書き出す
これで設定は完了です!
あとはVRMをExportしてお楽しみください!
…そういえば、Curve Y Range Degree
ばかりでCurve X Range Degree
の設定は触りませんでしたね。あの90
になっていた方のスライダーです。
こちらの値は、見る対象物に視線を向ける速さみたいなものです。値を小さくするほど速くなったかと…(曖昧)
可動域には影響しないので、説明を省きました。スミマセン!