[編集中]24時間でUnreal Engine4で #GearVR コンテンツを作る方法#vrfes2015spring

はじめに

明日のイベントまでにGear VR上で動くコンテンツを作る必要がある、現在進捗が0%の方向けの記事です。

【150名に増員!】HMDも唐揚げもバカ盛り! VRまつり2015春 #atnd #vrfes2015spring https://atnd.org/events/65955

またこの記事の対象は、ちょっとUE4の操作がわかるけど、実際にコンテンツ作ったことがない方になります。

環境

  • Windows 8.1
  • Unreal Engine 4.7.6

方針

サンプルを改造してGear VR向けに最適化を行って完成とします。

途中詰まったら

 >> UE4攻略wiki -Preview- – 情報の調べ方
http://www64.atwiki.jp/ue4wiki/pages/51.html

 

Step1. ベースとするサンプルを探す

ランチャーのラーニングやマーケットを眺めて探します。

他にはこちらもおすすめです。

 >> UE4攻略wiki -Preview- – おすすめ学習法
http://www64.atwiki.jp/ue4wiki/pages/23.html#id_2198648f

 

Step 2. Gear VR向けにプロジェクト設定

UE4でGear VR開発してみる 準備編 – ぼっちプログラマのメモ
http://pafuhana1213.hatenablog.com/entry/2015/04/25/223352

UE4でGear VR開発してみる ビルド(デバイス起動)編 – ぼっちプログラマのメモ
http://pafuhana1213.hatenablog.com/entry/2015/05/02/030304

エディタ設定

https://twitter.com/yasei_no_otoko/status/599483449854984192

実装中は描画レベルをモバイル/HTML5へ設定することにより、ライトの見た目や、実機と同じくボーンや頂点数制限を超えるモデルデータが表示されないなど、ある程度はエディタ上でも実機に近い見た目にできる。

ただし、GalaxyS6で実行してみたらPlayStartの向きが異なったりと挙動が異なることがあったり、実機特有の一定時間実行していると端末がスリープしてブラックアウト、画面がフェードアウトしたり(ゲームパッドの操作ではそのスリープは解除不可能で、Gear VRの横のタッチパッドで解除可能)、実機での確認も適宜行っていく必要がある。

また、Gear VRへ装着した場合の見え方もコンテンツを作る上では重要なので、最終調整以前にも適宜確認していきましょう。

Step 3. 改造

チュートリアル動画などで、UE4でどんなことができるのか把握します。

Unreal Engine 4 公式ビデオチュートリアルシリーズ

ブルーマン先生を入れ替え

Game Modeを複製

Default Pawn Classの虫眼鏡アイコンでコンテンツブラウザの対象物を見つけて複製

差し替える対象のアニメーションをうまいことやるために↓をやってMixamo_SWATのRigをHumanoidに設定

 >> Unreal Engine | アニメーション リターゲット(異なるスケルトン)
https://docs.unrealengine.com/latest/JPN/Engine/Animation/RetargetingDifferentSkeletons/index.html

設定後にブルーマン先生のAnimationBlueprintを元にSWATのAnimationBlueprintを生成

複製したBlueprintをダブルクリックで開いてMeshの差し替えと、AnimationBlueprintの設定。

ゲームモードで入れ替え

TODO: 自分の体

 >> VR Game Template
https://forums.unrealengine.com/showthread.php?12874-VR-Game-Template

後からFirst PersonやThird Person、Top Downなどのテンプレートを追加する

新規に欲しいテンプレートでプロジェクト作成して、コンテンツブラウザから○○フォルダ(例:ThirdPersonフォルダ)を選択して移行する。

 ゾンビAIの実装

 >> How to make zombie AI? – UE4 AnswerHub
https://answers.unrealengine.com/questions/55864/how-to-make-zombie-ai.html

FirstPersonCharacterの移動速度調整

 >> How can I change my character’s movement speed? – UE4 AnswerHub
https://answers.unrealengine.com/questions/45354/changing-movement-speed-mid-game-in-bp-third-perso.html

 

Step 4. チューニング

公式が公開しているベストプラクティスに沿って最適化していきます。

 >> Unreal Engine | Samsung Gear VR ベストプラクティス
https://docs.unrealengine.com/latest/JPN/Platforms/GearVR/BestPractices/index.html

プロファイリング

先ずは状況確認方法。

>> Unreal Engine | パフォーマンス ガイドライン
https://docs.unrealengine.com/latest/JPN/Engine/Performance/Guidelines/index.html

>> Unreal Engine | パフォーマンスおよびプロファイリング
https://docs.unrealengine.com/latest/JPN/Engine/Performance/index.html

以降は上記ページ見ながら

 >> Oculus向けのコンテンツをUE4で制作するためのノウハウ共有♪(Oculus向けの最適化とか品質向上とか) – Qiita http://qiita.com/junyash/items/3ba225d8a2f86046cd23

制約の特定

重い原因を特定していきます。

GPU: メモリ、トライアングル / 頂点 / ピクセル プロセシングなど
CPU: 複数の CPU 、メモリなど

モバイルプレビューでコンソール起動(`キー)

stat unit
stat fps

Frameの数字を小さくしていけばOK

実際の
・Frame(フレーム時間)

・Game(CPUゲームスレッド)
・Draw(CPUレンダリングスレッド)
・GPU(GPU)
の3つ。

GameDrawGPU一番高いものが負荷の原因

GPUが16.15msと高いのでGPUの最適化を行います。

GPUの最適化

>> Unreal Engine | GPU プロファイリング
https://docs.unrealengine.com/latest/JPN/Engine/Performance/GPU/index.html

ProfileGPU

モバイルプレビューやスタンドアローンゲームでの実行では正常に行えないようです。(UE4.7.6)

選択ビューポートでProfileGPU実行

 

EarlyZPass

当社ではデフォルトで z パスを使います。DBuffer デカールはフルの Z パスを要求します。これは、 r.EarlyZPassr.EarlyZPassMovable でカスタム化が可能です。

TODO: 壁に張り付いてるアレ?その位置の精度の話かも?
r.EarlyZPass とr.EarlyZPassMovableの設定値で精度の変更ができて負荷に影響あるのでコンソールから設定を変えて確認していくということ、かな?

Config/DefaultEngine.ini(「プロジェクト設定」で設定した内容)

TODO: 設定の意味と値のとりうる範囲

r.EarlyZpass

r.EarlyZpassMovable

 

現在の設定値の確認はコンソールでそのまま確認したい設定名を入力。
コンソールの全画面表示?(`キー2回)で確認できた。

TODO: いろいろ試す

 

ゴールは、

r.EarlyZPass を調整して、フルの Early Z パスをシーンにうまく使えているかどうかを確認します (ベース パス中にドローコールが増加しオーバードローは減少)。

→ TODO:自分の理解で書く

>> もんしょの巣穴blog [UE4] Deferred Decal
http://monsho.blog63.fc2.com/blog-entry-139.html

 >> Decals not rendered without direct lighting? – UE4 AnswerHub
https://answers.unrealengine.com/questions/25508/decals-not-rendered-without-direct-lighting.html

 

基本のパス

 

ディファードを使用すると、単純なマテリアルは帯域幅の制約を受ける可能性があります。実際の頂点とピクセル シェーダーは、マテリアル グラムで定義されます。動的オブジェクト上に間接光がある場合、負荷が増加します。

 

 シャドウマップのレンダリング

 

 シャドウ プロジェクション/ フィルタリング

 

オクルージョン カリング

 

ディファード ライティング

 

タイル処理されたディファード ライティング

 

環境反射

 

アンビエント オクルージョン

 

ポストプロセス

 

GPUのボトルネックはピクセル数に比例することが多い

  • r.SetRes を使ってレンダリング解像度を変更

・・・

頂点減らす

いろいろ原因を切り分ける以前に、頂点が多いことがPC向けのアセットを使っているためわかっているので、どうやってレンダリングされる頂点を減らせばよいか考える

オブジェクトを削って表現の簡略化

カメラのNear-Far

遠くを暗がりで隠してレンダリングする対象物を減らします。

Near(近く)

Far(遠く)

https://twitter.com/tempkinder/status/599422591896395776

https://twitter.com/aizen76/status/599425108545933312

 

 

 TODO:

ライト、影設定

ステーショナリーライトは実機では動かなかったため削除(数制限?)

表示範囲とクオリティ、反射

カリング

 

モデルのリトポロジ

何か

 

 ===

Mobile HDR

OFF(もともとOFF)

ポストプロセス

シーン輝度を増減するAuto Exposureのみ使用可。

 >> Unreal Engine | ポストプロセスのエフェクト
https://docs.unrealengine.com/latest/JPN/Engine/Rendering/PostProcessEffects/index.html

→ 本作では使用しない方向で。のちに削除。

マテリアル、マテリアル シェーディング モデル、マテリアル ブレンドモード、モバイル用マテリアル設定

TODO: カスタム仕様の UV

  >> Unreal Engine | モバイル プラットフォーム向けのマテリアル https://docs.unrealengine.com/latest/JPN/Platforms/Mobile/Materials/index.html#

 >> Unreal Engine | カスタム仕様の UV https://docs.unrealengine.com/latest/JPN/Engine/Rendering/Materials/CustomizedUVs/index.html

最終ビルド時の設定

ライティング品質をプロダクションへ

apk認証

 

エラー

RunUAT.bat ERROR: AutomationTool was unable to run successfully.

BuildCommand.Execute: ERROR: BUILD FAILED
Program.Main: ERROR: AutomationTool terminated with exception:
Program.Main: ERROR: Exception in AutomationTool: Failed to delete directory ‘C:\Users\yuji\AppData\Local\Temp\C+Program+Files+Epic+Games+4.7\Logs’
Program.Main: ERROR: Failed to delete directory ‘C:\Users\yuji\AppData\Local\Temp\C+Program+Files+Epic+Games+4.7\Logs’
RunUAT.bat ERROR: AutomationTool was unable to run successfully.