htc viveが発売されて3ヶ月、そろそろ遊ぶだけでは物足りなくなってきたところだ。そこで試しに自作VRソフトを作ってみた。自宅の来客用に作成した体験型のVRソフトだが折角なので本サイトでも公開する。ウォーミングアップとして作成したタイトルでボリュームはないが、Unityを使えば、コードを1行も書かなくても数日でVRソフトが簡単に作れるという制作事例である。興味がある方はダウンロード・体験して頂けると幸いだ。
高所体験型VR「Tokyo skywalker VR」
内容は大都会の高所体験と遊覧飛行のセット構成となっている。なるべくVR酔いの少ない飛行コースを設定しているが、飛行中にめまい、吐き気を感じた場合はVRを終了することをお勧めする。
2016/9/9 一部データが正しく反映されてなかった部分を修正
・動作確認環境
CPU:core i7 6700
GPU:GTX980ti 又は Radeon R9 nano
*動作確認環境より低いスペックでも快適に動作すると思われるが、個人ではチェック環境が限られてるため上記を推奨スペックとしている。
遊び方
1:SteamVRを予め起動しておく。
本ソフトを実行するとSteamVRも起動するが時間を要するため間に合わない事が多い。予めSteamVRを起動しておくことで安定動作する。
コントローラーは利用しないので電源が入ってなくても問題ない
2:tokyo_sky.exeを実行する
ダウンロードした「tokyo_sky.zip」を任意の場所に展開する。展開した「tokyo_sky」フォルダ内の「tokyo_sky.exe」を実行する。(環境や管理権限によってはファイルの実行確認ダイアログが出るかもしれない)
3:VR内の案内に従ってゴンドラで待機しているとブザーが鳴り、数秒後上昇する。
4:コンテンツ自体は自動進行になっている。ゴンドラに乗車していると遊覧飛行のスタート地点まで連れて行ってくれる
5:数分間、大都会の上空を遊覧飛行する。終盤少しだけアクロバットな動きをするので目眩いや立ちくらみを感じる場合は中断して頂いたほうが良い。
メイキング
以下メイキング的なもの。技術的な手法やオペレーションは個別記事化するとして省略している。またメインキングと記載しているが、崇高な内容のものは一切ない。個人開発にありがちな「完成させられない病」に陥ってる筆者の生態観察程度に捉えて読んでいただきたい。
個人開発ゲームの99%は完成しない
今回製作したソフトがゲームであるかは疑問だが、個人開発ゲームの最大の難関は「完成しない」事だろう。100本の個人制作タイトルがあっても完成するのは1本程度といった所ではないだろうか。壮大なストーリー、練り込んだゲームシステム、凝ったグラフィック、気の合う同士・・・、夢と構想は膨らむが完成しなければ、そのゲームは0点である。
そこで今回は短時間で「完成させる」ことを最大の目標として制作に挑んだ。まずは完成させる癖を身につける事が重要である。0点では前に進めない。
締め切りを強引に設定する
Unityの開発環境が優れてるとはいえ、制作作業は基本地味でありモチベーションだけでは継続が難しい。また工数に上限がないため無限に作業が膨らむ一方だ。これらを解決するには強制的な「締め切り」が必要になる。
そこで来客に「今度ウチに来た時に自作のVR作ったから遊んでみない?」と宣言することにした。これで後には引けない状況と締め切り、工数上限が生まれ、作成できるコンテンツも絞られる。来訪日時から逆算して以下のようなスケジュールを引いた
1日目 モックアップ作成(8時間)
2日目 グラフィックアセット作成 (8時間)
3日目 組み込み・調整 (8時間)
かなりザックリとした予定だが、この範囲内で制作可能なコンテンツとして仕上げる事を目標とした。尚コードは1行も書かず、マウスのドラッグ&ドロップだけで制作している。キーボードの使用はファイル名を変更した程度だ。
1日目 モックアップ作成
プロトタイプと称したほうが正確だろうか。工数3日程度で作成できるVRコンテンツとして真っ先に思い浮かんだのが「ジェットコースター」系か「ホラー」系。どちらもスマホVRやPC VRでは鉄板ネタでVRが初めての体験者なら無難に楽しめる。複雑な入力や制御もなく制作難度も低い。
しかし「ホラー」はグラフィック作業を1日で完了させるのは厳しい。そこで今回は「ジェットコースタ」としてモックアップの制作に入った。
筆者は未だUnityに慣れていないので、基本3dsmaxやmayaといったDCCツール上でコンテンツ制作を進めて、Unity上では基礎的な組み立てのみを担う事に絞った。
ジェットコースターという事で3dsmaxのパスラインでアニメーションの軌道(コース軌道)を設定し、そのパスラインを利用してレールメッシュの生成や周辺オブジェの配置などを行えば効率よく制作できるのでは・・・といった狙いだ。
思惑どおり3dsmaxで書きだされたデータがUnity上で動作し順調のように見える。しかし「StemVR」プラグインを組み込んでVR動作テストしたところ、強い「立ちくらみ」と「目眩」が発生した。いわゆる「VR酔い」という奴である。
こんな適当なモデルでも「重力(G)」を錯覚するような感覚に陥るのはVRの凄さだが、来客がVR酔いでダウンしてしまうのは問題だ。また周囲の物体との相対速度によって迫力が増すので、グラフィック視点が接写気味になり、1日という工数を踏まえると厳しい。
様々なコースを試してると、斜めや回転が発生するとVR酔いが誘発されるようであるが、上昇や下降では殆ど感じない事に気づいた。試しに上昇や下降をメインとして高所を飛ばしてみたところ、高所の恐怖感と飛行の気持ちよさが体験できそうな手応えはあった。
そこでドローンのような垂直、平行移動しても違和感のない乗り物に乗車して、高所を遊覧飛行するコンテンツとする事に決定。また高所への期待感を煽るため、エレベーターに乗って、徐々に高い箇所に上昇してから遊覧する構成にした。
モックアップで起動コースまで詰めるべきだったが、この時点で1日目を消費。コースはグラフィックの兼ね合いもあるので、後はアセットを組み込みつつアドリブで進める事になった。(この妥協が後の作業時間のロスに繋がる)
2日目 グラフィックアセット作成
グラフィックに凝るあまり、コンテンツが完成しないのが筆者の個人開発のパターンだ。中途半端に3Dツールが触れるため、この罠に陥りやすい。今回は3Dツールの制作経験はクオリティではなく「短時間で、そこそこに見える感じに仕上げる事に使う」をスローガンに作業を進める事とする。
モデリングし出すと作業時間が無限に吸収されてしまう。そのため基本的にBOXのみで作れる形状に絞った。この制約なら最初から諦めがつき、ダラダラとモデリングする事を防げる。パフォーマンスチューニングが肝となるVRでは負荷にも優しそうだ。
画面を主に占めるアセットはビル郡。高所を体験するコンテンツなので普段から馴染みのあるオブジェの方が、経験から相対的なサイズや距離が図りやすく臨場感や恐怖感が出るのでは・・といった狙いだ。ボックスで配置して各面にテクスチャを貼り付けるだけなので作業時間も短い。数種作ってコピーで済ませている。
同パーツの連続なのでパフォーマンスが厳しくなった際にインスタンス処理に切り替えたりカリング対応し易い。一部ボックス以外の形状を編集し始めた所、UVの編集時間が加わり一気に時間がワープしてしまった。割り切りは大事だ。
低層から高層に上昇するエレベーターは鉄骨のクレーンのようなデザインにした。作業的に鉄骨を2本作って組み合わせるだけで見た目もなんとなく成立するためである。プレイヤーを誘導するためにゴンドラ内にはフットマークを表示した。ルームスケールVRなのでプレイヤーを中央部分に誘導する意図だ。
最後にドローンの制作にとりかかる。これだけはボックス形状だとドローンに見えないので円柱メインで仕上げる事にした。また接写モデルで流石にプレーン過ぎるので、乗る場所のみディティールを加えた。この時点で予定の2日目の計8時間は軽く超過している。あげく作業時間の割合が最も高くなったドローンは後述する理由でボツになっている。個人開発とはいえ計画は重要だ。
3日目 組み込み
Unityの組み込みは順調に進む。世界中の多くのユーザーに揉まれたUnityのインターフェイスや操作性はよく出来ており、ツクールのように簡単に組み立てられる。インハウスのゲームエンジンやツールを体験した事のある開発者なら鼻血が出そうなくらい快適だ。作ったファイルをそのままUnityにドラッグ&ドロップして放り込むだけでツール内にガンガン組み込まれていく。
前半道路に車を走らせようとしていたのだが電柱や街路樹がないと不自然に見える。また車の動きも複雑化し工数が肥大化する。とても当日中に収まる気がしなかったので道路自体をばっさりとカットした。元々存在しなければ気にならないと割り切る。
水面はUnityに専用シェーダーがあるが今回は利用していない。内部の処理を把握する時間がなく、パフォーマンスのボトルネックになると厄介なためだ。PBRベースの値調整でそれっぽく見えるモノで代替する。
UVスクロールを組みこもうとした所、スクリプト記述が必要のようである。この他にも簡単なシェーダー処理の追加がスクリプト依存になっている事に気づく。今回のようなチープグラフィックなら気にならないが、今後のタイトルで作りこむ際の障害になりそうな気配だ。この辺りは他エンジンと比べるとグラフィッカーに優しくない。
ドローンの飛行コースを3dsmaxで詰める。回転軌道が入るとVR酔いを誘発するのでなるべく、上下移動をベースに構成し、回転する際も角度が浅くなるように調整する。ただVRで重力を感じるような錯覚も味わって欲しいので終盤のみ、ややアクロバットな飛行を加えた。終わる寸前なら体験者も酔ってしまう事もないだろうといった具合だ。
このコース調整が難しく、3日目中に終わりそうにない状態に陥る。変更した結果を確認するフローが冗長化してしまい、MAX上で作成した結果をUnityに取り込むといった方法が仇となってしまった状況だ。
並行してライトマップのベイク対応を進めていたのだが、コレが全く終わる気配がない。CPUはXeon E5-2640V3を2基という個人開発にしてはリッチな環境なので、スペック不足というよりシーンの設定が不味いはずだ。
そこでResolution関連を片っ端から最低値にし、GI関連のオプションを徹底的にカットしたが計算時間に変化はない。試しにオブジェスケールを1/10に設定した所、短時間完了した。面積が悪さをしてるなら何処かの項目設定で見逃しがあるのだろう。
ワークアラウンド的に全データのスケールを1/10に変更して進めようとしたところ、アニメーションのスケールトラブルが発生する。根本的に解決する必要に迫られるがこの時点で3日目の24時を回っており、来客訪問の当日になっていた。
当日 応急処置
ライトマップも問題解決に時間を費やす必要があるがタイムリミットを迎える。リアルタイムシャドウとライトではシーン規模的にVRでは厳しそうだ。状況的に以下の二者択一を迫られる
1:ライトマップを諦め、シャドウ・ライトを一切ない状態で遊覧飛行を優先する
2:ライトマップを優先し、遊覧飛行を諦める
グラフィックは元々優先度を下げていたので、本来「1」を選択すべきところだが、影とライトがないと全く雰囲気が出ない。というかスマホVR以下のルックで全くPCVRの価値がない。結論から述べると最終的には「2」を選択した。来客はVR初体験であり、高所体験だけでもVRコンテンツとして成立するだろうといった判断である。
そこで高所にゴンドラに移動した後に「カイジの鉄骨渡り」の様な体験をしてもらうVRソフトとしてまとめる応急処置を施した。
当日、主に「The Lab」を体験してもらう予定だったが、先に良作なVRソフトを体験されると筆者のコンテンツが見劣りする。チュートリアル完了後、即本ソフトを体験してもらうというセコい作戦で進行した。反応は上々で高いところが苦手な来客は本気で怖がっていた模様である。(反応が良すぎたのでサービス対応だったのかもしれない)
サイト公開用に仕上げる
予定より大幅に縮小されたが、一応「来客に自作VRを体験してもらう」という体裁は保たれた。この時点では自己啓蒙活動のために一人の来客専用VRソフトであったが、折角なのでサイトに公開する事にした。来客と違い、口頭での指示案内はできないので追加アセットを作成した。(そしてVRで細かい文字を読ませるのは厳しい事に気づく)
途中でトロッコからドローンに乗り換える構成では、ルームスケールの範囲が厳しくなりシャペロン境界が露呈しやすくなる。プレイヤーを中央に再移動させるというシステムは厄介で良いアイデアが思い浮かばない
仕方ないのでドローンは諦めて、気球に置き換えた。さらにエレベータートロッコと気球のカゴを強引に共有した。違和感はあるが無料のソフトなので説明不要でコンテンツをシンプルに進行させる事の方が優先度は高い。
ライトマップ問題を無理やり解決するため、アニメーションスケールは元アセットも10分の1にする事で強引に収めた。来客に遊んで貰うという締め切りが完了した時点で、本ソフトの制作モチベーションは大幅に低下し、早く次のソフト制作に移りたいという心境になっていたためである。諸々の課題は次回までに解決しておく事とする。
来客用に配慮して飛行コースはかなり大人しいものに設定しているが、ワークフローは固まってるのでジェットコースターのような激しい軌道も容易に追加できる。そこで2周目以降に激しくアクロバットになっていくエクストリーム版も途中まで作ってみたが、作業に飽きて途中でやめてしまった。個人開発は制作の動機付けが難しい。
まとめ
来客訪問までは当初の志どおり短いスケジュールで収まっていたが、公開対応はダラダラとした進行で作業密度も極薄になってしまった。やはり個人開発はモチベーションと目的が重要である。
今回制作したソフトはVR初体験以外の方にとっては特に価値のないコンテンツだ。UnityによってVR制作のハードルは大幅に低下しているが、良作を作るハードルが低くなる事は勿論ない。優れたプログラミング能力かグラフィック制作能力、そして根気がなければ、プレイに値する価値があるソフトに仕上がらないのは、従来の個人ゲーム制作と何ら変わりないだろう。
しかし、この様なシンプルなソフトでも1本制作した事で得られる事は大きい。完成させようとするプロセスの中でこそ、得られるノウハウも多々ある。筆者のように「完成させられない病」に陥ってる人は、一度短期間で小規模なソフトを作成しては如何だろうか。未完成の習作やテストデータを10本つくる以上の価値があると思える。
http://indiegame-japan.com/blog/2016/09/09/post-1355/