1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Final IK】3Dキャラクターを一人称視点で動かす

Last updated at Posted at 2022-05-16

Oculus Quest 2のトラッキングで3Dモデルを自由に動かす方法、Camera位置をオフセットして快適な1人称視点にする方法を解説します。

環境

macOS Monterey 12.3.1
Unity 2021.3.2f1
Oculus Integration 39.0
Final IK 2.1
Oculus Quest 2

準備

インポートしておくもの

  • Oculus Integration
    アセットストアにて無料で公開されています。

  • Final IK
    有料アセットですが、セールのタイミングで購入するとお得に入手できます。

  • 3D人物モデル
    お好きなものをご用意ください。今回はBOOTHで販売されている「QuQuさんちのネコちゃん」と「エトワーニュ」を使用させて頂いています。

3DモデルとOVRPlayerControllerを配置する

ヒエラルキービューへドラッグ&ドロップし、シーン上に配置します。
イメージ (2)-1.jpg
OVRPlayerController > OVRCameraRig > CentreEyeAnchorにあるCameraコンポーネントが、HMD用のカメラとして使用されます。
元々あったMain Cemeraは不要なので削除しておきましょう。

Final IKで3点トラッキング

トラッキング用に空のオブジェクトを作る

OVRPlayerControllerの中にある CentreEyeAnchor, LeftHandAnchor, RightHandAnchor それぞれの中に空のオブジェクトを作成します。オブジェクトの名前は HeadTarget, LeftHandTarget, RightHandTargetとしました。
スクリーンショット 2022-05-15 午後2.54.35.PNG

3DモデルにVR IKをアタッチし、トラッキングターゲット3点を設定

3DモデルにVR IKをAdd Componentした後、Head Targetと左右のHand Targetに先程作った空のオブジェクトをアタッチします。これだけで3DモデルをOculusの動きに対応させることができます。
イメージ (6)-1.jpg

カメラの調整

モデルの大きさをプレイヤーに合わせる

TransformのScaleで、3Dモデルの大きさを調整します。腕の長さを基準にすると良い操作感になりやすいです。
人の腕の長さは身長と大体同じなので、自分の身長と同じ大きさのCubeを用意して2Dモードで前後に並べると調整しやすくなります。
スクリーンショット 2022-05-16 午後9.40.48.PNG
腕が短めのモデルだったので、腕の長さを寄せつつ身長とのバランスを取りました。
後に実機で確認しながら再調整したい項目です。

Oculus Quest 2 におけるカメラ座標

OVRPlayerController > OVRCameraRig に入っているOVR ManagerコンポーネントのTracking Origin Typeを、Floor Levelに設定します。選択項目3つを軽く解説すると下記のようになります。

  • Eye Level
    ユーザーの身長に関わらず、指定した高さにカメラが設置されます。空から見下ろす場合などに選択します。

  • Floor Level
    足元を原点としたカメラ座標になります。
    身長が180cmの人では地上から180cmの高さに、身長が130cmの人では地上から130cmの高さにカメラが設置されます。地面に立っている場合などに選択します。

  • Stage
    FloorLevelと同様に足元を原点としてカメラが設置されます。また、ユーザーによるセンタリングが反映されないという特徴があります。
    決まった方向が前とみなされるので、現実のプレイエリアとリンクさせたアプリ開発などに使用できます。

モデルの頭がカメラに映らないように設定

現在の状態で実行するとモデルの頭の内側が描画されてしまうので、対策が必要となります。
モデルの頭と体が別のオブジェクトになっている場合は、レイヤーで頭を指定してカメラから非表示にする方法が確実です。Culling Maskの項目からカメラに描画されるレイヤーを選択出来ます。

  1. 頭のオブジェクトのインスペクターで、Layer > Add Layer… をクリック
  2. 新規に専用のレイヤーを作成
  3. 頭のオブジェクトに戻り、先程作成した専用のレイヤーをアタッチ
  4. OVRPlayerController > OVRCameraRig > CenterEyeAnchorにあるCameraコンポーネントのCulling Maskのチェックボックスを開き、頭のオブジェクトにアタッチしたレイヤーのチェックを外す

IMG_0233.jpg

頭が別になっていないモデルの場合は、次のレンダリング範囲の設定で改善できます。
エトワーニュのように頭の大きいモデルの場合はCulling Mask必須となりますが、頭の小さいモデルの場合は次の設定だけでも問題ありません。

レンダリングの範囲を設定

OVRPlayerController > OVRCameraRig > CenterEyeAnchorにあるCameraコンポーネントのClipping Planes > Nearを設定します。
「カメラから何m以内は描画しない」という意味の設定項目です。
モデルの体型や頭の大きさにより最適値が異なりますが、仮に0.2とします。
後に実機で確認しながら調整したい項目です。

現在の視点と目標とする視点

現在のカメラ座標は画像のように首の真上になっている為、下を見ると体の断面が覗く状態です。
カメラを本来の目の位置に合わせてオフセットする必要があります。

イメージ-1 3.JPG

イメージ (1)-1.JPG

ただし細身のモデルの場合は調整がほとんど不要な場合もあります。
モデルの体型により最適値が異なるので、こちらも確認しながらの調整が必要な項目です。

カメラ座標のオフセット

CenterEyeAnchorの中に作った空のオブジェクトHeadTargetのTransformから、Positionを調整します。

イメージ-1 2.JPG

イメージ (1)-1 2.JPG

画像のように、現在の視点と目標とする視点の差分を反転させた座標にオフセットします。
後ろにモデルが引っ張られることで、相対的にカメラが前に出たような位置関係を作ることができます。

スクリーンショット 2022-05-16 午後3.36.47.PNG

↑こちらのモデルは細身なので、小さめの値で十分でした。

スクリーンショット 2022-05-16 午後3.39.19.PNG

↑こちらのモデルは体の厚みがある為、大きめの値にします。

IMG_9128.jpg


以上で、Oculus Quest 2で操作できる一人称視点の実装ができました。 理想的な視点になりましたが、こちらのモデルは手の角度が捩れてしまっているので続けて調整が必要です。


参考にさせて頂きました

モデルの体の捩れを調整する内容を含む、Final IKの解説記事です

こちらの記事で、ものを掴む機能の実装ができます

地形に合わせて足を設置させる方法が解説されています



下記記事も大変参考にさせて頂きました
https://qiita.com/pira/items/7121764bba7fc605426f
https://shinrinmusic.com/final-ik/
https://light11.hatenadiary.com/entry/2019/11/05/220200

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?