[Unite]Unityによる最新PSVRの事例(後編):「Fate/Grand Order VR」でマシュをどう動かしたのか
2017年5月9日,都内で開催された「Unite 2017 Tokyo」の2日めに「最新 PSVR コンテンツ制作事例紹介 with Unity」と題して,PSVRのコンテンツの現状を知る講演が行われた。すでに「360度動画」「空間を活用した動画素材利用」コンテンツについては前半で紹介したので,ここではその続きとなる「フルCG世界・実在体験」をテーマにしたVRコンテンツの現状が語られた講演を紹介していきたい。
ディライトワークスで本作を担当したプログラマの荻野 洋氏と3Dジェネラリストとしてグラフィックス全般を担当した潘 志浩氏が登壇し,「Fate/Grand Order VR feat.マシュ・キリエライト(以下Fate/GO VR)」の制作過程を解説してくれた。これは,スマホアプリ「Fate/Grand Order」のメインヒロインであるマシュと,同じ空間内で過ごす体験ができるPSVRソフトとしてAnimeJpan 2017にて先行体験会が行われていた作品だ。
簡単にタイトルの紹介をしたあと,制作事例に関して荻野氏が話を続けた。まずは,「Fate/GO VR」ができるまでを時系列で説明した。今回,VRデモというカテゴリのタイトルを作るということで,字コンテ,絵コンテを作りその企画開始段階からSIEに相談したという。
今回,Unityを採用した理由としては,マシュに会えるVRを作るための表現ができるかということと,開発期間を考慮し,いくつかのゲームエンジンでの検証を踏まえたうえでの結果だと荻野氏は語る。
さらに,もともとディライトワークスが手がけている「Fate/Grand Order」の開発でUnityを使っており,社内に知見が溜まっている安心感があったことも決め手になったようだ。別エンジンを使うという選択肢もあったが,慣れない環境で問題が起きたときのリカバリなども考慮して,可能な限りリスクが少ない手段を選んだという具合だ。
このあと,講演ではプログラム編,グラフィックス編に分けて「Fate/GO VR」がどのように作られていったかが解説され,まずプログラム編として荻野氏が,「一般のUnityとどのような違いがあるか,自分のUnityスキルが使えるかどうか気になる方もいらっしゃるかもしれません。そのあたり,実際どうなんだろうという話をちょっとしてみたいと思います」と語り,まずは,Unity for PS4を使ってみての雑感を話してくれた。
結論から言うと,ほぼ完全にUnityであり,とくにPS4だからと意識することもなく「Unityである」とのこと。当たり前といえば当たり前だが,ハードウェアネイティブに関る部分も概ね動く印象で,独自のコントローラへのアクセスもプラグインが提供されているので,荻野氏は本当にあまり苦労せず使うことができるという印象を受けたようだ。
VRのサポートが進むUnityでは,VRタイトルの制作もPCであろうとPS4であろうと変わらず対応できているという。とはいえ,やはり専用ハードということで,いろいろなお作法があり,開発中は,デバイス関連のイベント処理,例えばカメラやHMDが物理的に外れたなどのエラー処理には少しはまってしまったようだ。しかし,これらのこともサンプルプロジェクトにちゃんと書かれているので,きちんと読んでおけば問題なしということだ。総じて(一部Oculus Riftを使いもしたが),想像以上に快適な開発環境だったという。
次にざっくりとはしているが,全体構成から使用アセットや作業フローといったことが紹介された。制御のメインで使っているのは,ステートマシンの状態遷移を視覚で分かりやすく見せてくれる,ビジュアルスクリプティングの定番アセット「PlayMaker」だ。
全体のシステムを司るPlayMakerでVRや各初期化処理が終わるのを待ち,マイルームであるとか,体育館とかシーンごとに用意されたPlayMakerに制御を移す。そのなかで,カットシーンなどのために作られたuSequencerを再生し,終わったらPlayMakerへ戻って分岐,また次のuSequencerを再生したりするといった流れになっているという。
使用しているタイムラインはuSequencerによるものだが,現在は更新が止まっている模様だ。これから使うならUnity5.6から実装されるUnityのTimeLineエディタを利用するのがいいだろうと,荻野氏は語ってくれた。
VRということで,両目に対応するカメラそれぞれに対して描画されるのが基本となる。結構負荷がきつくなる印象があったというが,実際にかなりシビアな設計が必要だったと荻野氏は振り返る。今回のタイトルでは,モデルのポリゴン数が全体でおよそ14万とのことだが,最終的な描画負荷は50万ポリゴンくらいになったという。この描画負荷を考慮してモデルなどをあらかじめ軽くしておかないと,あっという間にフレームレートの低下を招く自体になるそうだ。
シェーダは,ノードベースのシェーダエディタ「Shader Forge」を使い,ユニティちゃんトゥーンシェーダを参考に作り起こしたという。ここは最終的なビジュアルを決める重要なパートなので,多少描画負荷が多少上がってもよしとしたようだ。そして,ビジュアル以外のところ,つまりプログラム的な負荷はほぼないという。やったことは,せいぜいシーン途中でオブジェクトをinstantiateしなかったり,意外に負荷のかかるオブジェクトのON/OFFの切り替えをしないといった基本的なことばかりのようだ。
PSVRでのコンテンツ制作でSIEがデベロッパに提供しているVRコンサルテーションサービス。VRコンテンツを評価し,いわゆるVR酔いをしない快適なVR体験するために必要なことをチェック,フィードバックしてくれるサービスだ。そこでいくつかの問題が出たが,やはり一番問題なのは,フレームレートだったという。60fpsでの実行が必須なので,負荷のところでも紹介してくれたように,結構シビアな設計が必要だと痛感したという。
酔い自体は,基本的に移動しないタイトルだったのでほとんど問題はない。ただ,冒頭のタイトル部分で不快感を感じるという指摘があったので演出方法を変更したという。細かいところでは,UnityでHMDのポジションと方向を中心に戻すInputTracking.Recenter()を実行した際に,向いている方向が正面となってしまう標準挙動がVRコンサルテーションで引っかかったため,回転をさせない処理を加える必要があったようだ。
次にデザイン編ということで,まずはグラフィックス担当の潘氏からワークフローが紹介された。与えられた制作期間は短く,その中でいかに効率よく作業を進め,さらにクオリティを追求していくために環境を整え,さらに実装から最適化まで一通りの作業を担当したという。
制作自体は,3Dソフトの3ds MaxとMayaでモデルを制作してFBXをUnityにインポート,タイムラインエディタのuSequencerを使い,ときにはデザイナー自体がモーションに合わせてエフェクトを入れたりという演出を加え,場合によっては音声やセリフのタイミングも調整していたりしていたという。
姿勢と視線の制御には,リアルタイムでボーンを考慮した自然な動きを実現できるFinal IKアセットのLookAtIK機能を使用したという。注視点さえ与えてやれば,より自然なモーションを自動で作成して優れたアセットなのだが,やはりそれだけだとロボットじみた動きになってしまうので,最終的には手付けアニメーションとのハイブリッドで対応したという。具体的には,LookAtIKの変化をカーブにしてアニメーションを作り,後ろから振り向いたとき,うつむいたとき,恥ずかし気に目をそらしたときには,アニメーションカーブの変化を調整する。こうして,微妙な感情の変化を実現しているようだ。
そして話題は男の子が大好きな揺れモノ関係の話へ。服や髪の揺れはボーンや関節に物理挙動をつけることができるDynamic Boneアセットを使用して実現し,胸の揺れは3ds Maxでシミュレーションを行ってアニメーションをベイクしたという。揺れる仕組みを分けた理由は,最初から最後まですべてをシミュレーションしてしまうと破綻しやすいのと,細かくシミュレーションすればするほど,制限をかけたりボーンの数も増えてしまい,当然のことながら処理の負荷へとつながっていくためだ。リアルタイムで制御しないと違和感のある動きになってしまう髪の毛のシミュレーションはリアルタイムで行い,インタラクションに関係しない部分は,モーションをベイクするという具合に使うべきところとそうでないところはきっちり分けたようだ。
エフェクトは,基本的にShuriken+Shader Forgeを使用している。演出として登場するダ・ヴィンチちゃんのウィンドウは,普通のスプライトアニメーションを利用したという。VR空間の中に板ポリやビルボードを出すことに気を使う向きもあるが,出し方に気をつければそれほど違和感はないようだ。あくまで,見ているプレイヤーに「そういうものだ」と思わせることが重要なのだろう。
そして,エフェクト同様にUIもシステムとしては特別なものは使っていないと潘氏は続けた。UIといえばデザイナーがPhotoshopなどで画面全体をデザインするのだが,VRでは画面全体という概念はなく,その代わり空間全体をどうやって表現していったらいいかを意識してUIをデザインする必要があるという。とくに2Dでデザインされたボタンなどをそのまま置いただけでは,違和感を感じてしまうので,扱いには気をつけたようだ。ただの2Dパーツでもメニューの文字,キャラクター,背景と分けて,それぞれ奥行きを考慮して並べたり,傾けたりして空間を意識させる作りにすることで,プレイヤーが感じる違和感を減らせるという。
ディライトワークスの講演が終わり,全体講演終了のアナウンスが流れている途中「まだ終わっていませんよ」とSIEの秋山氏が再び登壇し,昨年行われた「Made With Unity Contest with PSVR」で佳作として開発をサポートしているタイトルの紹介をしてくれた。販売などは未定だが,イベントなどで体験できる日も近い……かもしれないということなので,さまざまな試みが行われている2018年,PSVRがさらなる飛躍ができるか期待したい。
フルCG世界・実在体験できる「Fate/Grand Order VR feat.マシュ・キリエライト」
簡単にタイトルの紹介をしたあと,制作事例に関して荻野氏が話を続けた。まずは,「Fate/GO VR」ができるまでを時系列で説明した。今回,VRデモというカテゴリのタイトルを作るということで,字コンテ,絵コンテを作りその企画開始段階からSIEに相談したという。
今回,Unityを採用した理由としては,マシュに会えるVRを作るための表現ができるかということと,開発期間を考慮し,いくつかのゲームエンジンでの検証を踏まえたうえでの結果だと荻野氏は語る。
Fate/GO VR」を取り巻く制作環境ープログラム編
結論から言うと,ほぼ完全にUnityであり,とくにPS4だからと意識することもなく「Unityである」とのこと。当たり前といえば当たり前だが,ハードウェアネイティブに関る部分も概ね動く印象で,独自のコントローラへのアクセスもプラグインが提供されているので,荻野氏は本当にあまり苦労せず使うことができるという印象を受けたようだ。
UnityでのVR開発も設定のチェックボックス一つで完了
VRのサポートが進むUnityでは,VRタイトルの制作もPCであろうとPS4であろうと変わらず対応できているという。とはいえ,やはり専用ハードということで,いろいろなお作法があり,開発中は,デバイス関連のイベント処理,例えばカメラやHMDが物理的に外れたなどのエラー処理には少しはまってしまったようだ。しかし,これらのこともサンプルプロジェクトにちゃんと書かれているので,きちんと読んでおけば問題なしということだ。総じて(一部Oculus Riftを使いもしたが),想像以上に快適な開発環境だったという。
アプリケーションの全体構造について
次にざっくりとはしているが,全体構成から使用アセットや作業フローといったことが紹介された。制御のメインで使っているのは,ステートマシンの状態遷移を視覚で分かりやすく見せてくれる,ビジュアルスクリプティングの定番アセット「PlayMaker」だ。
全体のシステムを司るPlayMakerでVRや各初期化処理が終わるのを待ち,マイルームであるとか,体育館とかシーンごとに用意されたPlayMakerに制御を移す。そのなかで,カットシーンなどのために作られたuSequencerを再生し,終わったらPlayMakerへ戻って分岐,また次のuSequencerを再生したりするといった流れになっているという。
使用しているタイムラインはuSequencerによるものだが,現在は更新が止まっている模様だ。これから使うならUnity5.6から実装されるUnityのTimeLineエディタを利用するのがいいだろうと,荻野氏は語ってくれた。
描画負荷にはシビアに対応
VRということで,両目に対応するカメラそれぞれに対して描画されるのが基本となる。結構負荷がきつくなる印象があったというが,実際にかなりシビアな設計が必要だったと荻野氏は振り返る。今回のタイトルでは,モデルのポリゴン数が全体でおよそ14万とのことだが,最終的な描画負荷は50万ポリゴンくらいになったという。この描画負荷を考慮してモデルなどをあらかじめ軽くしておかないと,あっという間にフレームレートの低下を招く自体になるそうだ。
SIEによるVRコンサルテーション
PSVRでのコンテンツ制作でSIEがデベロッパに提供しているVRコンサルテーションサービス。VRコンテンツを評価し,いわゆるVR酔いをしない快適なVR体験するために必要なことをチェック,フィードバックしてくれるサービスだ。そこでいくつかの問題が出たが,やはり一番問題なのは,フレームレートだったという。60fpsでの実行が必須なので,負荷のところでも紹介してくれたように,結構シビアな設計が必要だと痛感したという。
酔い自体は,基本的に移動しないタイトルだったのでほとんど問題はない。ただ,冒頭のタイトル部分で不快感を感じるという指摘があったので演出方法を変更したという。細かいところでは,UnityでHMDのポジションと方向を中心に戻すInputTracking.Recenter()を実行した際に,向いている方向が正面となってしまう標準挙動がVRコンサルテーションで引っかかったため,回転をさせない処理を加える必要があったようだ。
Fate/GO VR」を取り巻く制作環境ーデザイン編
制作自体は,3Dソフトの3ds MaxとMayaでモデルを制作してFBXをUnityにインポート,タイムラインエディタのuSequencerを使い,ときにはデザイナー自体がモーションに合わせてエフェクトを入れたりという演出を加え,場合によっては音声やセリフのタイミングも調整していたりしていたという。
マシュをどうやってかわいく見せるか
姿勢と視線の制御には,リアルタイムでボーンを考慮した自然な動きを実現できるFinal IKアセットのLookAtIK機能を使用したという。注視点さえ与えてやれば,より自然なモーションを自動で作成して優れたアセットなのだが,やはりそれだけだとロボットじみた動きになってしまうので,最終的には手付けアニメーションとのハイブリッドで対応したという。具体的には,LookAtIKの変化をカーブにしてアニメーションを作り,後ろから振り向いたとき,うつむいたとき,恥ずかし気に目をそらしたときには,アニメーションカーブの変化を調整する。こうして,微妙な感情の変化を実現しているようだ。
常に優雅たりえる揺れを目指す
そして話題は男の子が大好きな揺れモノ関係の話へ。服や髪の揺れはボーンや関節に物理挙動をつけることができるDynamic Boneアセットを使用して実現し,胸の揺れは3ds Maxでシミュレーションを行ってアニメーションをベイクしたという。揺れる仕組みを分けた理由は,最初から最後まですべてをシミュレーションしてしまうと破綻しやすいのと,細かくシミュレーションすればするほど,制限をかけたりボーンの数も増えてしまい,当然のことながら処理の負荷へとつながっていくためだ。リアルタイムで制御しないと違和感のある動きになってしまう髪の毛のシミュレーションはリアルタイムで行い,インタラクションに関係しない部分は,モーションをベイクするという具合に使うべきところとそうでないところはきっちり分けたようだ。
エフェクトやUI,2D要素をVR空間内に置くために気をつけたこと
エフェクトは,基本的にShuriken+Shader Forgeを使用している。演出として登場するダ・ヴィンチちゃんのウィンドウは,普通のスプライトアニメーションを利用したという。VR空間の中に板ポリやビルボードを出すことに気を使う向きもあるが,出し方に気をつければそれほど違和感はないようだ。あくまで,見ているプレイヤーに「そういうものだ」と思わせることが重要なのだろう。
そして,エフェクト同様にUIもシステムとしては特別なものは使っていないと潘氏は続けた。UIといえばデザイナーがPhotoshopなどで画面全体をデザインするのだが,VRでは画面全体という概念はなく,その代わり空間全体をどうやって表現していったらいいかを意識してUIをデザインする必要があるという。とくに2Dでデザインされたボタンなどをそのまま置いただけでは,違和感を感じてしまうので,扱いには気をつけたようだ。ただの2Dパーツでもメニューの文字,キャラクター,背景と分けて,それぞれ奥行きを考慮して並べたり,傾けたりして空間を意識させる作りにすることで,プレイヤーが感じる違和感を減らせるという。
ディライトワークスの講演が終わり,全体講演終了のアナウンスが流れている途中「まだ終わっていませんよ」とSIEの秋山氏が再び登壇し,昨年行われた「Made With Unity Contest with PSVR」で佳作として開発をサポートしているタイトルの紹介をしてくれた。販売などは未定だが,イベントなどで体験できる日も近い……かもしれないということなので,さまざまな試みが行われている2018年,PSVRがさらなる飛躍ができるか期待したい。