去る9/14(日) Ocufes名古屋 http://ocufesnagoya.jimdo.com/ に表題の物を作って展示してきました。
このエントリは備忘録と技術要素が半々くらいです
製作動機
お世話になっているフィーバー柳橋 https://ja-jp.facebook.com/fever.yanagibashi のオーナーさんが、中古で鉄騎コントローラを入手したと連絡があり、僕自身もロボット物が好きなので、鉄騎リスペクトなコンテンツを作ろうと言うのが最初の取っ掛かりです。
コンテンツ設計指針
酔わない、没入感がある。と言うのを意識して設計しました。
VR酔い対策
例えば高速で飛び回るアーマードコア系のゲームをゲームパッド+OculusRiftでプレイすると、大体酔うことが先行研究から明らかになっています。また、乗り物に乗って移動する系のコンテンツはVR酔いを起こしやすい傾向があります。
今回は「なるべくVR酔いを起こす要素を消していく」「ゲームとして成立させる」と言うのが主な設計指針です。
ゲーム展開速度
一般にVR上でプレーヤーが高速で移動する場合は、人の目から得た加速度と、体が感じている加速度(停止してる)の差が大きいと酔います。なので今回は「鈍重なロボットを操作する」というゲームに仕立てました。イメージ的には鉄騎の第一世代くらいです。
注視点の設計
Ocufesで展示するということは、普段VR-HMDを被っていない人が多く遊ぶ可能性があります。この時に全周を見渡せると言う事実で調子に乗ってグルグル首を振って遊ぶと一気に酔います。
なので今回はコクピットに座って、前の方(視野角で言うと水平70度程度)だけ外の景色が見えるようにして、横や後ろはコクピット内部を表示していました。
これによって自然にプレーヤーが前を見続けるように仕向けています。
操作の複雑さ
これは棚から牡丹餅的な部分もありますが、鉄騎コントローラは両手両足を使うコントローラで、初見のプレーヤーは操作するのに精一杯になる傾向にあります。逆に言うと、それだけ操作に集中して、前方を注視しているとVR酔いが起きにくいという効果が期待できます。
また、Twitter上で仮説として教えてもらったのが、「足を使って操作すると酔いにくい」という説があります。足を動かして操作すると体が揺れて、それが見た目と体感の加速度差という違和感の解消に役立つかもしれない。とのことです。
75FPSの死守
OculusRift DK2のSDK0.4.2時点では、少しでも75FPSを切ると、ジャイロセンサによる先読み遅延軽減を行った遅れ補償描画が機能しなくなります。
これは有ると無いでは大幅な差があるので、Unity上で色々と小細工をしてFPSを稼いでいます。
(大体200万ポリゴン、1000ドローコールです)
負荷計測してCPUが厳しくてGPUに余裕ありそうだったのでGPU-skinningをさせたり、differed lightingにしてDx11にしてやると、 75FPS出ました>< pic.twitter.com/j54bz7rsWO
— izm@ 9/14ocufes名古屋 (@izm) 2014, 9月 13
没入感
プレーヤーの描画
プレーヤーの分身としてキャラクターを一人称視点位置に描画しています。
株式会社インフィニットループ様の「あいえるたん」を使用しました。 (可愛いです!!!!デモ使用に許諾が不要でとても有難かったです。 http://www.infiniteloop.co.jp/special/iltan/3d-dl.php )
また、椅子に座ったプレーヤーの頭と両手首の位置を斜め前に設置したKinect v2でトラッキングして、このあいえるたんの動きを同期させています。
これで自分の手の動きに合わせてCGの自キャラの絵も動くので、没入感を稼げるのではないか、と思い採用しました。
Kinect v2がベストの解だったわけではなく、指の形等が取得できないので、大雑把になってしまっています。このデバイス選定については調査結果を先日のエントリでまとめています。
http://izm-11.hatenablog.com/entry/2014/08/09/172147
また、Kinect v2で取得できる細かい関節をそのまま使うのではなく、一旦頭と両手先だけを使い、時分割でフィルタを掛けて鈍らせて、Unity上でFinal IKと言うアセットを使って、IK GoalとしてKinectからの値を使っています。これによってCGモデルのポーズ破綻を防いでいます。
DK2とFinalIKの手と足、先日やった頭のOculusを用いてあいえるたんになりきっていた訳ですが、HMD外した瞬間の離脱症状がヤバい。
後、有益な話として、直接ジョイント位置を指定するよりFinalIKで末端を当て込む、6フレーム平均を取ると、結構滑らか
— izm@ 9/14ocufes名古屋 (@izm) 2014, 9月 12
余談ですが鉄騎コントローラ自体もCGでコクピット内に描画しています。
座面の振動
ロボットに乗ってガションガションと歩き回るのに足元が一切揺れないと、没入感を損ないます。
なので座面をロボットの歩行に合わせて揺らしてやる事で、これに対処しました。
どちらかと言うと、「正確なフィードバックで没入感を足す」と言うより「それっぽく揺らしてやることで無振動の違和感を消す」と言う意図です。
今回は 50Wハイパワー振動ユニット ボディソニック トランスデューサ
http://www.donya.jp/item/23738.html を椅子の座面裏に固定しています。
こういった振動ユニットの素晴らしい点は、ゲーム内で低音のSE(ロボットのガションガション言う音や、武器の発射音)を再生すると、ノンコーディングで勝手にブルブルと、「それっぽく」震えてくれる事です。
この製品は50Wと比較的パワーがあり、同等製品は軒並み1万円以上する中で、わずか4000円で購入出来て非常にコストパフォーマンスが高い逸品です。お勧めします。
反省
良かったこと
- 会場では鉄騎プレイ済みのオジサマがいっぱい来てくれて、同窓会みたいになりました。
刺さる人には刺さるコンテンツになったのではないかと思います。 - プレイ後に汗をかいている人が多かったのは、会場の気温を別にしても没入してプレイをしてもらえたのだと思います。
- ヒアリングした限りでは、VR酔いになっている人はいませんでした。良かったです。
- ロボット操縦するの楽しい!!!
(体験中に目元は分からないけど口元に笑みを浮かべてくれる人が割と居てくれたのは、やったぜ感あります)
— izm@ 9/14ocufes名古屋 (@izm) 2014, 9月 14
悪かったこと
- 会場の体験時間制限を大幅に超過するコンテンツになってしまって、スタッフさんやお客さんに迷惑を掛けました。(導入とロボットの操作説明をフルボイスで収録したらこれだけで4分ありました…)
- 上記対策の為、操作方法を僕が口頭で説明していきなり戦闘、と言う形になってしまって、慌ただしくなってしまいました。
- 当日、僕の体調が良くないおかげで、説明が投げやりになってしまっていた可能性があります。不快に思われた方がいたら申し訳なかったです。
- 敵のAIがしょぼいので、もっと緊張感を与えられるようにすべきでした。
- 制作スケジュールが完全に修羅場っぽくてかなり汚いコードになってしまって、改修が困難になっています。リファクタリングします…