今回はOculus Touchの開発ネタをやっていきます。
使う機材はOculus Questですが、Oculus Rift Sでもそのまま使うことができると思います。
OVR GrabberやDistanceGrabberでも登場した手について。
デフォルトですとマスターハンドよろしく普通の白い手になりますが、
見た目をいろいろカスタマイズしていきます。
開発環境
Windows 10
Unity 2018.4.5f
Oculus Integration ver1.39
Oculus Quest
ALVR
セットアップ
始めてVR開発をする方はこちらを参考にしてみてください
また流れ的には前回の続きとなります。前回はこちら!
サンプルシーンの確認
Assets/SampleFramework/Usageに様々なサンプルシーンがあります。
学習や挙動の確認にとても有益です。見てみましょう。
手を表示するシーンはたくさんありますが、前回と同じAvatarGrabシーンを使っていきます。
手が単体で置いてあるCustomHandsシーンでも問題ありません。
前回のメモでも登場した手のモデルですが、
モデル内にSkinnedMeshRendererがアタッチされているオブジェクトがあります。
左手の場合。l_hand_skeletal_lowers/hands:hands_geom/hands:Lhandがこれに該当します。
注目すべきはMaterialsです。ここのMaterialを変えるだけで手の見た目を変えることができます。
手用に用意されたシェーダー
OculusIntegrationには手用のシェーダーが既に用意されています。
2つあるのでそちらを見ていきましょう。
Oculus/Hands_DiffuseBump
Shininess
光沢感、この値が大きいほど手が輝いているように見えます
ShineColor
光沢の色
Oculus/Hands_Transparent
透過対応シェーダーです。Rimの値を変えることで手のアウトラインを強調することができます。
InnerColor
手のベース色
RimColor
手の縁であるアウトラインの色
RimPower
アウトラインの強さ。値が小さいほどはっきり表れる。
実際に手の見た目を変えてみる
適当な場所にマテリアルを作成します。
今回はHand_Matとという名前で作成しました
作成したマテリアルを手のSkinnedMeshRendererのMaterialsに設定します。
次にシェーダーを変更します。
Oculus/Hands_Transparent
最後にマテリアルのパラメータを調整するだけ
私の場合はInnerColorをグレー色に、RimColorを青くしました。
RimPowerを最低値にしてRimが目立つようにします。
実行してみるとこんな感じ、なんだがゴースト感が出てますね。
他のシェーダー
実は他にもシェーダーはいろいろあります。
手に応用できるものですと、AvatarSurfaceShader系でしょうか。
詳しくはこちら
Gray Avatar Hands instead of Transparent Blue? — Oculus
リアルな手にする
LeapMotion用のハンドモデルを使ったやり方があります。
詳しくはこちらをどうぞ。
こちらのアセットを使います
ダウンロード時に互換性の警告が出ますが関係ないので同意しましょう。
インポートするのはModelsだけです。他の所はチェックを外しておきましょう。
元記事の方ですとHandプレハブに置き換えたりしていますが、
手がアニメーションしなかったのでマテリアルだけ使います。
両手のSkinnedMeshrendererのMaterialsをHand_Diffuseに変更します。
これでリアルな手になりました。
アセットストア
きちんとした手を出したい場合は、アセットストアなどで探すことができます。
ほとんどが有料です。
もし購入するのであれば更新日時やレビューで動作するのかどうかを確認しましょう。
まとめ
・手の見た目を変えたい場合は、手モデルのMaterialを変える
・専用のシェーダーがあるため、それを使うと簡単に半透明な手などが出せる
・モデル自体を変えたい場合はアセットストアなどを活用する
他にも自分でシェーダーを書いたりテクスチャを張っていくと細かいカスタマイズもできそうです。
ぜひ自分好みにカスタマイズしていってください。
ALVRを使うと人差し指がアニメーションしない問題もそろそろ解決したいところ。
参考文献
他間違っている箇所がありましたらコメントにお願いします。