VRコンテンツのビルド、バージョン管理、ビジネスVRコンテンツの開発手順

2017年11月15日(水)
加藤 久之

はじめに

本連載も、いよいよ最終回となります。今回は、プロジェクトのパッケージングとバージョンの管理方法、UE4を使って実際に産業コンテンツを開発する際の開発手順について解説します。

プロジェクトをパッケージングする

前回までの解説でコンテンツの制作は終わりましたので、パッケージングして実行ファイルからコンテンツを起動できるようにしましょう!

まず、ビルドの前準備として、プロジェクト設定の「Start in VR」にチェックを入れてください(図1)。これがチェックされていないと、実行ファイルから起動した際にVRコンテンツとして起動されません。

図1:Start in VRをチェック

続けて実際にパッケージングを行っていくのですが、その前にパッケージング設定の「Blueprint Nativization Method」について少し説明します(今回設定する必要はありませんが、コンテンツのパフォーマンスに影響がある部分なので知識として知っておきましょう)。

Blueprint Nativization MethodはUE4 _4.15から追加された機能で、ビルド時にブループリントで書いた処理をC++に変換する機能です。

4.15以前のバージョンでは、ブループリントで処理を記述した場合、実行時にVirtual Machineでの処理を経由することによる処理の非効率「VMオーバーヘッド」が発生するという問題がありましたが、4.15以降のバージョンではBlueprint Nativization Methodを設定することでこの問題を回避できるようになりました(EpicGamesが開発したVRコンテンツ「RoboRecall」では、Blueprint Nativization Methodを利用することで処理速度が0.25ms以上向上したそうです)。

設定できるのは、以下の3つです(図2)。

  • Disabled:使用しない
  • Inclusive:適応可能なブループリント全てに適応する
  • Exclusive:選択されたブループリントにのみ適応する

図2:ブループリントをC++化する

パフォーマンスの最適化という点では、とりあえずInclusiveを選択しておけばOKですが、全てのブループリントをC++化した場合は実行ファイルのサイズが大きくなってしまうので、それを避けたい場合はExclusiveで処理負荷の高いブループリントだけをC++化しましょう。

ちなみに、「レベルブループリント」と「ブループリントマクロ」はこの機能の対象外なので、Blueprint Nativization Methodを使用した最適化を考慮する場合は、この部分に長大な処理を書くことは避けましょう。

その他の設定項目についてここでは書きませんが、詳しく知りたい場合は以下を参照ください。

●UNREAL ENGINE公式サイトプロジェクトのパッケージ化

説明が少し長くなりましたが、いよいよパッケージ化を行っていきましょう。「ファイル」の「プロジェクトをパッケージ化」から「Windows」を選択します(図3)。64bit、32bitはそれぞれ自分の環境に合ったものを選択してください。

図3:パッケージングを実行

パッケージの出力先を選択するダイアログが表示されるので、任意の場所を選択して「OK」ボタンをクリックするとパッケージングが開始されます(図4)。

図4:パッケージの出力先を選択

パッケージングが始まると、画面右下に「アウトプットログを表示」ボタンが表示されるので(図5)、クリックしてログを表示しましょう。図6のようなログが表示されます。

図5:アウトプットログを表示

図6:アウトプットログ

後はパッケージングの完了を待つだけです。暫くすると、図7のようにパッケージングの完了を示すログが出力され、パッケージングが完了します。

図7:アウトプットログ(完了)

なお、基本的にパッケージ化を行う際はログを表示しておきましょう。ログを表示しておけば、パッケージングが途中で落ちてしまった場合でも、どこで落ちたのかをすぐに確認できます。

パッケージングが完了すると、先程(図4)指定したパスに「WindowsNoEditor」というフォルダが作成され、その下にパッケージングされたプログラム一式が配置されます(図8)。

図8:実行ファイル

WindowsNoEditorフォルダ以下にある「プロジェクト名.exe」を実行して動作を確認しましょう。正常にコンテンツがプレイできればOKです(図9)。

図9:パッケージングされたプロジェクトの動作を確認

コンソールコマンドからパッケージングを行う

さて、今回は問題なくパッケージングできましたが、パッケージングはちょっとした参照情報のエラーなどで簡単に失敗してしまいます。

ログを見ればすぐに原因を特定できることもありますが、一度エラーに嵌まってしまうと原因特定のために数日を要する、ということにもなりかねません。

そのため、実際に業務でUE4によるコンテンツ開発を行う場合は、Jenkinsなどで定期ビルド(パッケージング)を行い、日々プロジェクトが正常にパッケージングできることを確認すべきです。そうすれば、パッケージングが失敗してもどのタイミングでエラーが発生したのかを特定できるため、スピーディに問題を解決できます。

そこで、定期ビルドを行うために必要な、コマンドラインからパッケージ化を行う手順を解説します。

UE4でコマンドによるビルドを行う際は、\インストールフォルダ\Epic Games\4.15\Engine\Binaries\DotNETに保存されている「AutomationTool.exe」を使用します。

具体的に言うと、コンソールからAutomationTool.exeへ適切なパラメータを渡して実行することでパッケージングを行うことができます。

この時渡すパラメータは、アウトプットログからコピーできます。パッケージング開始時に「COOK COMMAND STARTED」と表示される箇所の少し上にある「Automation.ParseCommandLine」から始まる行の「BuildCookRun -」~「CrashReporter -utf8output」までをコピーして(図10)、コンソールからAutomationTool.exeを実行する際にパラメータとして渡してください。

図10:アウトプットログからコマンドを抜き出し

なお、図10では赤枠部で囲んだ部分をすべて表示できていませんので、下記に記載しておきます。

UATHelper: パッケージ化 (Windows (64ビット)): Automation.ParseCommandLine:
Parsing command line:
-ScriptsForProject=C:/Users/ユーザー名/Desktop/industrialVR/IndustrialVR.uproject
BuildCookRun -nocompile -nocompileeditor -installed -nop4
-project=C:/Users/ユーザー名/Desktop/industrialVR/IndustrialVR.uproject
-cook -stage -archive -archivedirectory=C:/Users/ユーザー名/Desktop
–package -clientconfig=Development -ue4exe=UE4Editor-Cmd.exe -pak
-prereqs -nodebuginfo -targetplatform=Win64 -CrashReporter -utf8output

これだけでコマンドからパッケージングを行うことができます。実に簡単ですね(これだけでは分かりにくいと思いますので、下記のパッケージングコマンドのサンプルを参考にしてください)!

・パッケージングコマンドサンプル
cd C:\Program Files (x86)\Epic Games\4.15\Engine\Binaries\DotNET AutomationTool.exe BuildCookRun -nocompile -nocompileeditor -installed -nop4 -project=C:/Users/ユーザー名/Desktop/industrialVR/IndustrialVR.uproject -cook -stage -archive -archivedirectory=C:/Users/ユーザー名/Desktop -packag e -clientconfig=Development -ue4exe=UE4Editor-Cmd.exe -pak -prereqs -nodebuginfo -targetplatform=Win64 -CrashReporter -utf8output

コンソールコマンドが正常に実行されると(図11)、図12のような形でパッケージングが行われます。

図11:コンソールコマンドからパッケージングを開始

図12:コンソールコマンドからパッケージングに成功

後は、このコマンドを定期的に実行すれば定期ビルドが実現できます。

SVNでバージョン管理

実際に業務でUE4を使う場合はバージョン管理を行うことになると思いますので、その管理方法について解説します。

UE4は「Perforce」「SVN」「Git」の3つのバージョン管理ツールに対応していますが、現時点でGitについてはベータ版となっているため、業務で使う場合はPerforceかSVNのどちらかになると思います。今回は、日本の開発者に馴染みの深いSVNでのバージョン管理方法を紹介します(ちなみに、Perforceは主に大規模なゲーム開発に用いられるバージョン管理ツールで、SVNよりも高速であると言われています)。

UE4とSVNを連携させる方法は極めて簡単です。まず、SVNでチェックアウト済みのプロジェクト(図13)を用意してください(SVNの使い方の説明は割愛します)。

図13:チェックアウト済みのプロジェクト

次に、チェックアウト済みのプロジェクトを開き、画面上部にあるソースコントロールボタンをクリックします(図14)。

図14:ソースコントロールボタン

利用するソースコントロールを選択するダイアログが表示されるので、「Subversion」を選択して「設定を承認」ボタンをクリックしてください(図15)。

図15:ログインするソースコントロールを選択

ログイン情報入力ダイアログが表示されるので、ここにリポジトリのパスなど必要な情報を入力し、「設定を承認」ボタンをクリックします(図16)。

図16:必要情報を入力して設定を承認

以上で、バージョン管理のための設定は完了です。

ソースコントロールに接続した状態でブループリントなどのファイルに変更を加え、「ソースコントロール」ボタン右のプルダウンにある「ソースコントロールにサブミット」ボタンをクリックすると(図17)、サブミットダイアログ(図18)が立ち上がります。ここで変更を反映できます。

図17:変更をサブミット(1)

図18:変更をサブミット(2)

The Unreal Way

ここまでで、UE4の開発について十分な知識を得ることができたと思いますが、実際にUE4で開発を行うとなると、何から手を付けたら良いか迷ってしまうことも多いと思います。そこで、Unreal Engineの開発元であるEpic Gamesが推奨するコンテンツの開発手法「The Unreal Way」を紹介します。

The Unreal Wayは、以下の7ステップからなる開発手法です。UEでの開発を無駄なくスムーズに行うために策定されたものです。もし、どういった手順でコンテンツ開発を進めれば良か迷うようであれば、The Unreal Wayを参考にしましょう。

ステップ1:ハイレベルコンセプト
ステップ2:ブレインストーミングミーティング
ステップ3:ホワイトボックス
ステップ4:メッシング
ステップ5:スクリプティングパス
ステップ6:ライティング
ステップ7:ファイナルポリッシュ

ステップ1:ハイレベルコンセプト
「どのようなレベルを作るのか」「このコンテンツで何を実現するか」といった基本的な構想を練る段階です。一般的に言う企画段階です。

ステップ2:ブレインストーミングミーティング
開発チームのメンバーや顧客と協議しながら、ハイレベルコンセプトで固まったイメージをより具体化する段階です。「どういった処理を実装するのか」「コンテンツを楽しんでもらうためにはどのような機能が必要か」といった内容を定義します。受託開発の場合などは、ここできっちりとお客様と認識のすり合わせなどをしておきましょう。

ステップ3:ホワイトボックス
コンテンツの大まかな方向性を決めるステップで、The Unreal Wayで最も重要なところです。特別な3Dオブジェクトやテクスチャを使わずにレベルを作成し、ブループリントによる簡単な動作を実装します。

要するに簡単なプロトタイプです。このプロトタイプをもとに「どこにどのオブジェクトを配置するか」「どのような機能を追加するか」「このコンテンツで実現したいことを実現できるか」といった確認を行います。

コンテンツの主要部分は全てここで検証するぐらいの勢いで作りましょう。ここで良いコンテンツができるようであれば、完成品も良いものになるはずです。例えば、今回のショールームでホワイトボックスを作成すると図19のような感じになります(ちなみに、ブループリントによりプロトタイプをスピーディに作成できるのは、UE4の大きな利点の1つです)。

図19:ホワイトボックス

ステップ4:メッシング
レベルに配置する主要な3Dモデルを本番に使うものに置き換え、マテリアルもある程度作り込んだものを適応します。

3Dモデル等を外注している場合、この段階でモデルの頂点数が多すぎるなどの問題点を洗い出し、修正依頼をかけることが望ましいです。

ステップ5:スクリプティングパス
本格的に処理を実装する段階です。ここまでの段階でコンテンツの基本的な部分はほぼ完成となります。

ステップ6:ライティング
ライティングやポストプロセスを入れて、本格的な絵作りを行う段階です。ライティングやポストプロセスはものによってかなり処理負荷が高いので、パフォーマンスに気を使いながら作業を進めましょう(業務系SE的視点で見ると、根本的な仕様との関わりが薄く技術者の調達も難しい分野のため適当に済ませてしまおうと考えがちですが、VRコンテンツにおいて絵作りは極めて重要です。力を入れて取り組んでください)。

ステップ7:ファイナルポリッシュ
最終的な調整段階です。VRコンテンテンツをテストプレイしながら細かなパフォーマンスの検証などを行い、より良いものになるよう磨きをかけていきましょう。

ここでは1ステップずつ解説しましたが、要は細かな作り込みをする前に早い段階でプロトタイプを作り、レビューして問題点の洗い出しや修正を行い、実際に作り込む段階になってからの修正や手戻りを最小限にしましょう、というものです。

おわりに

今回で全12回にわたった「Unreal Engine 4で取り組む ビジネス系VRコンテンツ開発」の連載は終了です。ここまで読んでくださった皆さん、お疲れ様でした!

本連載はゲーム系エンジニアの方でなくても理解しやすいよう、画像を多く使いながら丁寧に説明することを意識しました。本連載を通じて、UE4によるVRコンテンツ開発を行う上での基礎的な内容は解説できたと思います。

連載当初4.15だったUE4のバージョンも、現在では4.18(本連載では4.15を使用)となっています。幸いなことに今回の連載に影響するようなアップデートはありませんでしたので、本連載の内容を4.18で試していただいても問題ありません。

最後に、長い間ここまでお付き合いいただきありがとうございました。また何かの記事でお目にかかれれば幸いです。

~コラム:VRで「めんどくさい」をなくそう~

基本的に、技術の進歩とは「めんどくさい」をなくすというのが目的です(経済紙などでは「問題を解決する」とも表現しますね)。

地図を持ち歩いて開く「めんどくさい」を「Googleマップ」がなくし、大量の本を整理する「めんどくさい」を「電子書籍」がなくし、店に買い物に行く「めんどくさい」を「Amazon」がなくし、電話する「めんどくさい」を「LINE」がなくし……といった具合に、技術の進歩は私達の周りから「めんどくさい」をどんどんなくしています。あと10年もすれば、車を運転する「めんどくさい」も自動運転技術によってなくなることでしょう。

では、VRはどんな「めんどくさい」をなくしてくれるのでしょうか? 私が思うにそれは、体験する「めんどくさい」です。

例えば、一流の英語学習塾でレッスンを受けるのがどの程度「めんどくさい」ことであるか考えてみてください。高額な月謝を支払い、時間通りに教室に出向き、レッスンで疲れた後も帰宅しなくてはなりません。とても「めんどくさい」ですね。しかしVRを通してレッスンを受けるのであれば話は全く違ってきます。リーズナブルなレッスン料金を支払い、自分の部屋でヘッドセットを被る。ただそれだけで良いのです。もちろん体験の質自体は実体験に劣るかもしれませんが、圧倒的に「めんどくさくない」ですね。

英語学習塾は一例に過ぎません。私達が生涯で現実に体験できるものは、世界にある無数の体験のうちのほんの一部です。その理由は、体験には時間的、距離的、金銭的コストが付き物で、それらを用意するのは非常に「めんどくさい」(手間がかかる)からです。

しかし、VRであればそれらが手軽に、さらに現実には不可能な体験もできるので、人が一生で体験できる物事の量と種類を大幅に増やすことができます。そこにVRの大きな可能性があります。

VRはまだまだ出始めの技術で、「体験の質」という面では現実に大きく劣ります。しかし今後技術が進み、VRで提供できる体験が現実の半分程度にまで達すれば、様々な体験を求める消費者とそれを提供する企業やクリエイターによる巨大な市場が形成されるのではないか、と私は考えています。

富士ソフト株式会社
富士ソフト株式会社で業務系のSEをしています。2015年から業務外でVRに取り組み始め、Oculus RiftやHTC Vive、スマートフォン等でVRコンテンツを開発し、イベントでデモを行ったり、Oculus StoreやGooglePlayでVR作品のリリースをしたりしています。そんな活動について社内のSNSで発言していたところ、「メディアでコラムを書いてみないか」という話になり、今回の連載を書かせていただくことになりました。日本VR学会認定 VR技術者。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています