VR制作でこだわっていること
VRでは、プレゼンス(実在感・Sense of Presence)の維持が体験の質に大きな影響を与えます。これを維持するための方策は各所で論じられたり、講演されたりもしていますが、自分が気にしていることを書いて行きたいと思います。
なぜ実在感を気にしているのか
実在感と言えば、VRにおいて「自分はこの仮想空間に存在するんだ」と脳が信じてしまうような感覚のことですね。頭の片隅ではわかっていても、目の前に本物の人や、ロボットや、コップが存在するかのように感じて、体験者はそれらの動きから大きな影響を受けます。逆に、何らかの不出来でこのプレゼンスが失われてしまう瞬間があります。これを、プレゼンスが剥がれる、と表現します。とっても萎えてしまう、残念な瞬間です。
プレゼンスが剥がれると、体験者がコンテンツの演出から受ける感情の揺さぶりは、著しくその振幅を小さくしてしまいます。平たく言うと、つまらなくなってしまいます。アーリーマジョリティが飽きてしまう前に、もう2眼立体視の驚きだけで感動させるフェーズは終わらねばなりません。
私は、プレゼンスの維持された VR 体験が大好きなので、プレゼンスをできるだけ維持したいと考えています。多くの人に、凄まじいまでに衝撃的な VR 体験をして欲しいのです。そんな凄いものがポンポン作れるわけではありませんが、自分が気にしている事をつらつら書いていきたいと思います。
立体視の効果を最大化する
現在の VR ヘッドセットは、2眼立体視を行うことによって物体の奥行き・距離・立体感(以下、立体感に統一)を感じる事ができます。しかし、どんなビジュアルの場合でも、これだけで立体感を得られるわけではありません。原因はいくつかありますが、大きいところは解像度の不足です。これはソフトウェアでは対処に限界があるため、いくつか工夫をして可能な限り立体感を感じられるようにします。
人間は、いくつかの手がかりを元に、立体感を知覚しています。
- 視差
- 遮蔽
- 陰影
- 大気とその構成物質による光の減衰
- 対比(例:あの物体はこのくらいの大きさであるはずなので、このくらいの距離だろう)
- 運動視差
- 水晶体の調節や輻輳
他にもありそうですが、これらのうち、対策可能なものにできるだけ対処を行います。
立体視の手がかりを増やす
立体視のためには、上記の手がかりがなるべく揃っている方が好都合です。まずは、多くの距離位置に物体を配置します。
例えば、自分の1m前と、100m前に物体が存在するとします。しかし、100m先の物体の距離を、すぐに知覚できるでしょうか。現状の VR ヘッドセットの不十分な解像度も相まって、これはうまくいきません。そこで、5m、10m、15m…と間にも何か物体を置いてみます。
すると近い距離間同士で補完しあって、遠くのものがよりしっかりと遠くにあると感じられるようになります。
あたかもヘッドセットが高解像度化したかのように見せる
現状(2018年初頭)の VR ヘッドセットは、十二分に高解像度とは言えません。しかし、これを若干改善するテクニックがあります。それは、アンチエイリアシングです。
そんなん誰でもやってるよと言う話はあるかもしれませんが、最も効果があるのは、スーパーサンプリングと呼ばれる方法です。これは、本来より高い解像度で描画しておき、それをダウンサンプル(縮小)して表示するという方法です。これは非常に高品質な結果が得られます。潰れて読めなかったはずの文字が読めるようになるレベルです。
Unity では、UnityEngine.XR の XRSettings.eyeTextureResolutionScale で倍率を指定します。
ただしこれはピクセルシェーダーの処理回数を爆増させることになるため、大変負荷が高いです。パフォーマンスを見ながら使いましょう。また、Deffered レンダリングでは使用できません。
スーパーサンプリングができなくとも、なんらかのアンチエイリアシングは設定しておきましょう。モバイルであれば、Unity 標準の MSAA が 2x ならほぼノーコストで使用できます。4x でもモバイルで十分動きます。ただし、MSAA はポリゴンのエッジには効果が高いものの、テクスチャ上のみのエイリアシングには効果がありません。そこで、Post-Processing Stack v2 の FXAA、または高負荷ですが非常にきれいに仕上がる TAA を使用するのも良いアイデアです。ガビガビだと実在感も何もあったものではありません。
なぜか固まっている生物を自然に動かす
植物や水、人間や動物、風に吹かれれば飛ぶような軽いものが鉄のようにカチコチなのはどう考えても不自然です。メデューサにでも会ったのかという感じです。とにかくなんらかの動きを与えます。
- 人間・動物 → ループに見えないよう、色々とランダムなモーション。プレイヤーの視線に気づいたりするとなお良い。息をさせたり、瞬きさせたり。
- 植物 → ちゃんと揺らす。ただし草自体もある程度ボリュームのあるメッシュがないとペラペラが一瞬でバレて不自然。ビルボードも避ける。
- 水 → サイズによって波立たせる。
- ホコリ類 → 砂埃のパーティクルを飛ばしたり、空中を泳ぐダストを表現。
できるだけ多く、正しく触れるようにする
できる限り多くのものと相互作用できるようにします。動かせそうなものは内容や世界観が破綻しない範囲で投げたり負いたりできたほうが良いです。壊れてないならテレビは付いたほうがいいし、牛乳が置いてあるなら注ぎたくなるのが人情というものです。もちろん全部作っていたらきりがないので、どこまでやるのかは非常に難しいのですが…
でもめり込んだりするのはナシ
LONE ECHO がマジで素晴らしくて脱帽なのですが、どんな壁に触ったり物をつかんでも、「つかみ方」が自然な形になります。ちゃんと物の形に合わせて手の形が変わるように作りこまれており、萎えなさがすさまじいです。
ちゃんと音を入れる
音はマジで大事です。空間の広さを知覚したり、体験者の感受リソースを情報で埋め尽くす(現実の情報で水を差さない)ためにも音を使用します。だいたい以下のように音を重ねます。
- 大気が作る環境音(風の音など)
- 近くの物体が出す環境音(冷蔵庫の音、虫の声、草の音など)
- 体験者のインタラクションによる音(物に触れた音)
音源が小さい物に関しては、できるだけ3Dオーディオとします。体験者が向きを変えた時に説得力が低下することを防ぎます。音源が大きい・不定(風など)の場合は、あまりこだわらずにそのまま流してもいいかもしれません。と言うのも、Volumetric な(体積を持った)音源処理はまだ十分に普及していないためです。ただ、Oculus が大きさを持った音源を再現するライブラリを公開していますので、これを試す手はありそうです。
2018年5月1日