プレイ中のゲームや気になるゲームとか

【Oculus Quest】VRの世界で動くキャラクターを眺めて触りたい!参考にした記事まとめ

2019.07.12(投稿日:2019.07.09)

コメントを書く

 
Oculus Questが楽しいです!
ゲームも面白いんですが、Unityを使うともっと楽しい!
 
自分で適当なアセットを配置して、その中を歩き回るだけでも楽しかったりします。
 
 
そんな楽しみ方の一つに「VRの世界でキャラクターを眺める」があります。(ありますよね?)
 
アニメやゲームが好きな人なら「目の前で動く等身大フィギュアに触れる」というのはインパクトあると思います。
 
 
けど、購入してから一ヶ月、やりたいことがうまくいかず試行錯誤の連続。
その都度、先人の方々の技術や情報を参考にさせて頂き、やりたいことが少しずつ出来てきました。
 
その中でも、これは便利で使える!と思った機能や設定をまとめてみました。
 



(1) MMDモデルをUnityにインポートする

UnityでMMDモデルを使う時、MMD4Mecanimが非常に便利です。
というよりは、これが無いと始まりません。
 
インポートする時は、pmxファイルだけでなく、配布されているMMDのフォルダそのものをUnityにD&Dします。pmxファイルだけをインポートしてしまうと、テクスチャが無いので真っ白になるので要注意。
 
以降の(2)から(4)もMMD4Mecanimの機能を使ってます。
 
このツールとMMDモデルがあれば、インポート後に少し設定するだけで、Oculus Questの世界でキャラを眺めることができてしまいます。
MMDファイルをお借りする時は、ライセンスや利用規約を良く読むことをお忘れなく。
 


(2) 揺れそうなものが揺れる

髪や服、アクセサリーなどの「揺れもの」が物理演算で動いてくれます。
すべてが物理演算になるワケではなく、あらかじめMMD側で設定されている箇所が揺れるようです。
 
[Inspector > MMD4 Mecanim Model > Physics]
・「Physics Engine」を Bullet Physics に変更する
・「Join Local World」のチェックを外す
・「Frame Per Second」を 75 に変更する
 
目の前で揺れて動くのは良いものです!
 

(3) 揺れものに触る

身体や服などに当たり判定用のColliderを自動的に作ってくれます。超便利。
物理演算をオンにして、コライダーを付けた後、コントローラ側に「適当なCollider、MMD4 Mecanim Rigid Body」を付けると、揺れものに触れるようになります。
 
[Inspector > MMD4 Mecanim Model > Physics]
・「Colliders > Generate Colliders」で Processボタン をクリックする
※と書いてましたが、触るだけならColliderを作らなくても良いみたいです。
 
コライダーが付いてますので、ある程度持ち上げることができます!
コントローラ側のコライダーのサイズを大き目にすると良いかも知れませんね。
 

(4) 表情を変える

いろいろ方法はあるようですが、設定だけで表情を変えるには、MMD4 Mecanim Morph Helperをアタッチするのが簡単です。
[MMD4 Mecanim Morph Helperのパラメータ]
・「Morph Speed」を 0.01 に変更する
 
・「Morph Name」に名前を入れる(”にっこり”など)
※「MMDモデルのHierarchy > U_Char > U_Char_1(なければ、U_Char_2とか) > BlendShapes」をクリックすると、変更できる表情のパターンが一覧表示されます。ここの文字を使います。
 
・「Morph Weight」を 1 に変更する
 
複数アタッチすると、表情を合成できます。
複雑な表情変更をしたい場合は、プログラムする必要がありそう。
 

(5) 離れたモノをつかむ

モノをつかむにはOculus標準のOVRGrabberがありますが、hecomiさんのVR Grabberを使うと、離れた場所にあるものをつかめます。
とにかく青いポインターがカッコいい。
 
これでMMDの揺れものがつかめると良いんですが、いろいろ試してもつかめません。
根本的な仕組みが違うのでしょうか?
これができると、また野望に一歩近づけるのに。。。
 
ちなみに、MMDモデル自体にVRGrabbleをアタッチすると、モデル自体をつかむことはできます。
これはこれで面白いんですけどね。
 

(6) 手のモデルを表示する

VRの中で自分の手がコントローラなのはちょっと寂しい。
この方法で動く手をゲットしました。
指がアニメーションするのもリアルです。
 
これとは別のモデルで、
Assets/Oculus/SampleFramework/Core/
にある CustomHands を使うと、指単位のアニメーション+スクリプト付きで便利なんですが、なぜか手の座標がずれてしまう。
良い方法がないか調査中。
 

(7) モデルの両手両足を直接動かす

UnityでAnimatorのIK機能を使います。
 
特別なアセットを追加しなくても、使えるのが良いですね。
VR内で、キャラクターを好きなポーズに変更できます。
 

(8) こっちを向いて欲しい

方法はいくつかあるようです。
 
  1. AnimatorのIKを使う
    目線だけでなく顔自体が動くのがリアル!

    Look Targetには OVRCameraRig の CenterEyeAnchor を設定します。
  2. アセット「Head Look Controller」を使う
    ちょっと設定は面倒ですが、確かにこっちを向いてくれました。
  3. MMDモデルのBlendShapesを使う
    MMDモデルによっては、BlendShapesの設定の一つとして「視線追跡」を準備してくれている場合があります。名前は「カメラ目線、コッチミンナ、こっちみんな、コッチミテ、カメラ、カムラ」などいろいろ。もしこんな名前のBlendShapesがあれば、オン(値を100)にして見てくださいね。
対応していればIKがお手軽です。
 

(9) キャラクターを動かしたい

とりあえず動かしたい場合、Unityちゃんのアセットが便利です。
アセットをダウンロードしてインポートしておきましょう。
 
ここで1つ注意点があります。
 
インポートして、Unity上でプレイボタンを押すと、こんなエラーが起きると思います。
All compiler errors have to be fixed before you can enter playmode!
Assets\UnityChan\Scripts\AutoBlink.cs(8,23): error CS0234: The type or namespace name 'Policy' does not exist in the namespace 'System.Security' (are you missing an assembly reference?)
 
以下の記事を参考に AutoBlink.cs を修正しておきます。
1行をコメントアウトか削除すればOK!
 
これでやっと設定できます。
・動かしたいキャラの Inspector > Animator > Controller で UnityChanActionCheck を選択する
・「Add Component」ボタンをクリックして、Idle Changer.cs をアタッチする
 
VR内でYボタンを押すと、アニメーションを切り替えることができます。
 
Controllerで UnityChanARPose を選択すると、いろんなポーズをとってくれますよ。
 
 
ちなみにですが、今回のように別モデルのControllerを使う場合、MMDモデルの体格や作り方によってはうまく動かない場合もあります。やけに手足が細くなったり、つま先だけ地面に張り付いたようになったり、とにかく表示がおかしい。
そんな時は、別のMMDモデルにするか、別のAnimatorを探してみてくださいね。
自分で作成・修正できないうちは、いろんな組み合わせを試すしかありません。。。
 

(10) まばたきして欲しい

目を開けっぱなしでは不自然です。
 
モデルがBlendShapesを持っている場合、BlendShapeBlinkを使うと定期的にまばたきしてくれます。
 
BlendShapesが無い場合、MMD4MFaceBlinkが良いですね。
 
どちらもスクリプトをアタッチ後、設定するだけでまばたきしてくれます!
 
例えば、この記事で使っている「アリシア・ソリッド(ニコニ立体ちゃん)」の場合、BlendShapesの「まばたき」は 24番でした。この数値を Index に入れましょう。
 
だいぶん良い感じになってきました!
 

(11) ジャギーを無くして滑らかにする

パソコンのUnity上で見るとキレイに見えるのに、Oculus上で見るとジャギーがひどくて目がチカチカしてました。この設定を試すと、かなりジャギーが低減されました!
 
いまは、eyeTextureResolutionScaleを「1.5f」にしてます。
 

(12) 3Dモデルにギリギリまで寄る

これを設定すると、目の直前までポリゴンが透明化しなくなります。
 
[OVRCameraRig > TrackingSpace > CenterEyeAnchor > Camera > ClippingPlanes > Near]
0.01~0.03くらいにしてます。
 

(13) 負荷を下げる

普段は見る事が少ない「視野角の周辺部」の描画を荒くして、負荷を下げてくれます。
 
キャラクターの数が少ない場合など、負荷が気にならない場合は設定しなくて良いと思います。
 
負荷が高い時だけプログラムでオンにすると良いそうですよ。
 

まとめ

Oculus QuestでMMDモデルを眺める時、便利でこれは使える!と思ったものをまとめてみました。
 
今回参考にさせて記事は、どれも分かりやすく大変参考になりました。
ありがとうございます。
 
Oculus Quest+Unityでやりたいことはたくさんありますので、これからが楽しみです!
 
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

だーしゅ
IT関係のお仕事してます。
Oculus Quest+Unityが楽しい!

[当ブログについて]

カテゴリー

最近のコメント

  • User Avatarだーしゅ { Felizさん、コメントありがとうございます。 「3dfx Glide」モードの表示は良いですね。 } – 1月 31, 1:17 AM
  • User AvatarFeliz { 親切に有り難う御座いました! } – 1月 31, 12:02 AM
  • User Avatarだーしゅ { コメントありがとうございます。 PCの性能にもよると思いますが、そんな事もあるんですね。 確かにPS4のメモリは8GBと少な目なので、もっと多ければローディング回数・時間が有利になる気がします。 } – 1月 14, 10:24 AM
  • User Avatar { 同じゲームならPro+SSDよりPC+HDDの方が早いそうで… ストレージよりもCPUやメモリの限界なんでしょうかね } – 1月 13, 2:06 AM
  • User Avatarだーしゅ { じじいさん、コメントありがとうございます。 ゲームの種類や場合によって効果は変わりますが、SSDの方が速いですね。 もっと速くなると良いんですが。 } – 12月 26, 12:51 AM
  • User Avatarじじい { 80秒超え・・・初回読み込みで時間が掛かってるのかもね。 ノーマルPS4でSSDはSATAの違いであんまり効果無いってのたうち回ってるのが居るけど 単純に早くなるって証明して貰ってありがたい、ネットの効果無いって言葉だけ抜粋して自分の知識にするのが多くて困る、ちゃんとノーマルPS4でも十分な効果はあるって事をしってほしいですね わざわざ遅いのを付けるSONYも困ったもんです。 } – 12月 25, 12:28 AM