Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

【Oculus Touch開発メモ】手の見た目をカスタマイズする 付属シェーダー編【Unity】

 

今回はOculus Touchの開発ネタをやっていきます。
使う機材はOculus Questですが、Oculus Rift Sでもそのまま使うことができると思います。

 

OVR GrabberDistanceGrabberでも登場した手について。
デフォルトですとマスターハンドよろしく普通の白い手になりますが、
見た目をいろいろカスタマイズしていきます。

f:id:Raspberly:20190809230058p:plain



 

 

 

開発環境

Windows 10

Unity 2018.4.5f

Oculus Integration ver1.39

Oculus Quest

ALVR

 

 

 

 

セットアップ

始めてVR開発をする方はこちらを参考にしてみてください

raspberly.hateblo.jp

 

また流れ的には前回の続きとなります。前回はこちら!

raspberly.hateblo.jp

 

 

 

 

 

 

 

 

サンプルシーンの確認

Assets/SampleFramework/Usageに様々なサンプルシーンがあります。
学習や挙動の確認にとても有益です。見てみましょう。

手を表示するシーンはたくさんありますが、前回と同じAvatarGrabシーンを使っていきます。
手が単体で置いてあるCustomHandsシーンでも問題ありません。

f:id:Raspberly:20190809102327p:plain



前回のメモでも登場した手のモデルですが、
モデル内にSkinnedMeshRendererがアタッチされているオブジェクトがあります。

左手の場合。l_hand_skeletal_lowers/hands:hands_geom/hands:Lhandがこれに該当します。

f:id:Raspberly:20190809211044p:plain



注目すべきはMaterialsです。ここのMaterialを変えるだけで手の見た目を変えることができます。

f:id:Raspberly:20190809105526p:plain

 

 

 

 

 

 

手用に用意されたシェーダー

OculusIntegrationには手用のシェーダーが既に用意されています。
2つあるのでそちらを見ていきましょう。

Oculus/Hands_DiffuseBump

f:id:Raspberly:20190809134022p:plain

Shininess

光沢感、この値が大きいほど手が輝いているように見えます

f:id:Raspberly:20190809223105g:plain

ShineColor

光沢の色

f:id:Raspberly:20190809223152g:plain



 

 

 

 

 

Oculus/Hands_Transparent

透過対応シェーダーです。Rimの値を変えることで手のアウトラインを強調することができます。

f:id:Raspberly:20190809112125p:plain

InnerColor

手のベース色

f:id:Raspberly:20190809223238g:plain

RimColor

手の縁であるアウトラインの色

f:id:Raspberly:20190809223311g:plain

RimPower

アウトラインの強さ。値が小さいほどはっきり表れる。

f:id:Raspberly:20190809223347g:plain



 

 

 

実際に手の見た目を変えてみる

適当な場所にマテリアルを作成します。
今回はHand_Matとという名前で作成しました

f:id:Raspberly:20190809210013p:plain

 

作成したマテリアルを手のSkinnedMeshRendererのMaterialsに設定します。

f:id:Raspberly:20190809230524p:plain

 

次にシェーダーを変更します。
Oculus/Hands_Transparent

f:id:Raspberly:20190809225007p:plain



最後にマテリアルのパラメータを調整するだけ
私の場合はInnerColorをグレー色に、RimColorを青くしました。
RimPowerを最低値にしてRimが目立つようにします。

f:id:Raspberly:20190809230654p:plain



実行してみるとこんな感じ、なんだがゴースト感が出てますね。

f:id:Raspberly:20190809223728g:plain

 

 

 

 

 

他のシェーダー

実は他にもシェーダーはいろいろあります。
手に応用できるものですと、AvatarSurfaceShader系でしょうか。

f:id:Raspberly:20190809170511p:plain

詳しくはこちら

Gray Avatar Hands instead of Transparent Blue? — Oculus

 

 

 

 

 

 

 

 

リアルな手にする

LeapMotion用のハンドモデルを使ったやり方があります。
詳しくはこちらをどうぞ。

zabaglione.info

 

 

こちらのアセットを使います

ダウンロード時に互換性の警告が出ますが関係ないので同意しましょう。

f:id:Raspberly:20190809232714p:plain

インポートするのはModelsだけです。他の所はチェックを外しておきましょう。

f:id:Raspberly:20190809232814p:plain 

 

元記事の方ですとHandプレハブに置き換えたりしていますが、
手がアニメーションしなかったのでマテリアルだけ使います。

両手のSkinnedMeshrendererのMaterialsをHand_Diffuseに変更します。

f:id:Raspberly:20190809233734p:plain

これでリアルな手になりました。

f:id:Raspberly:20190809233702p:plain

 

f:id:Raspberly:20190809235505g:plain

 

 

 

 

 

アセットストア

きちんとした手を出したい場合は、アセットストアなどで探すことができます。
ほとんどが有料です。

もし購入するのであれば更新日時やレビューで動作するのかどうかを確認しましょう。

 

 

 

 

 

まとめ

・手の見た目を変えたい場合は、手モデルのMaterialを変える

・専用のシェーダーがあるため、それを使うと簡単に半透明な手などが出せる

・モデル自体を変えたい場合はアセットストアなどを活用する

 

他にも自分でシェーダーを書いたりテクスチャを張っていくと細かいカスタマイズもできそうです。
ぜひ自分好みにカスタマイズしていってください

 

 

ALVRを使うと人差し指がアニメーションしない問題もそろそろ解決したいところ。

 

 

参考文献

bibinbaleo.hatenablog.com

 

qiita.com

 

 

 

 

他間違っている箇所がありましたらコメントにお願いします。