Robo Recallで使われている 最新のVR開発テクニックをご紹介!

9K Views

April 25, 17

スライド概要

2017/04/15 (土)に開催された「UNREAL FEST WEST '17」で使用した資料です。

http://unrealevent.jp/unreal_fest_west_17/

動画はこちら https://youtu.be/LUD4gBwpqLY

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Robo Recallで使われている 最新のVR開発テクニックをご紹介! Epic Games Japan 岡田 和也 #ue4fest

2.

自己紹介 岡田 和也 (@pafuhana1213) • 昨年11月よりエピック・ゲームズ・ジャパンの サポートエンジニアに GDC2017、Epic Games本社・シアトル支社に 行ってきました! #ue4fest

3.

#ue4fest

4.

アジェンダ • Robo Recallについて • Robo Recallで使われたノウハウのご紹介 • VRコンテンツ開発テクニック • 最適化テクニック #ue4fest

5.

Robo Recallについて Epic Gamesの最新VRゲームタイトル 2016年 OculusConnect3で発表 2017年 3月1日 リリース Oculus Storeにて Touch購入者に対して 無料配信中 #ue4fest

6.

Robo Recall ModKit 全アセット・コード + Mod作成機能を無料配信 #ue4fest

7.

Robo Recall ModKit 作成したModはOculus Store版のRobo Recallに導入可能! #ue4fest

8.

Robo Recall ModKit Mod作成ドキュメントをご用意! • https://docs.unrealengine.com/latest/JPN/Modding/RoboRecall/index.html #ue4fest

9.

国内でRobo RecallのModが! 和牛先生 @3dcganimation #ue4fest

10.

UE4で何か作ったら、是非EpicFridayに! 毎週金曜 は #EpicFriday をつけて進捗ツイート! Epic Games Launcherで ご紹介! #ue4fest

11.

アジェンダ • Robo Recallについて • Robo Recallで使われたノウハウのご紹介 • VRコンテンツ開発テクニック • 最適化テクニック #ue4fest

12.

VRコンテンツ開発テクニック • Epic GamesにおけるVRの取り組み • Showdown, Bullet Trainで使われたテクニック • Robo Recallで使われたテクニック #ue4fest

13.

Epic GamesにおけるVRの取り組み #ue4fest

14.

Showdownについて 市街戦をスローモーションで体験する VRシネマティックコンテンツ 2014年 Oculus Connect で発表 Epic Games Launcherの ラーニングからプロジェクトを ダウンロード可能 #ue4fest

15.

Showdownの製作期間・人員構成 制作期間:6週間 人員構成 • • • • プログラマ:1 ゲームデザイナ:1 アーティスト:1 サウンド:1 (2週間) #ue4fest

16.

フェイク影 影の描画処理は重いため、擬似的な表現に レンダリング負荷を軽減 #ue4fest

17.

VRと相性のいいエフェクトの採用 従来のビルボードを使った手法は VRとは相性が悪い #ue4fest

18.

VRと相性のいいエフェクトの採用 3Dモデルを使った立体的なエフェクト #ue4fest

19.

Bullet Trainについて モーションコントローラ”Oculus Touch”を使った VRアクションゲーム 2015年 OculusConnect2で発表 OculusStoreにて無料配信中! #ue4fest

20.

Bullet Trainの製作期間・人員構成 制作期間:約10週間 人員構成 • 前半の3週間 • プログラマ:1 • ゲームデザイナ:1 • アーティスト:1 • 後半の7週間 • 12~16人 #ue4fest

21.

快適なVRアクションを実現するための工夫 • モノを掴める範囲の調整 • 投げたモノに対しての軌道アシスト #ue4fest

22.

テレポート移動の採用 「体感」と「視覚」の不一致によるVR酔いを回避 #ue4fest

23.

GDC2016 Going Off the Rails: The Making of 'Bullet Train' • 動画とスライド • https://www.youtube.com/watch?v=QIexGSksnPQ • https://www.slideshare.net/HuNing/going-off-the-rails • Someluさんによる翻訳記事 • http://qiita.com/Somelu01/items/7ad9e03adbbd2afee7e4 #ue4fest

24.

VRコンテンツ開発テクニック • Epic GamesにおけるVRの取り組み • Showdown, Bullet Trainで使われたテクニック • Robo Recallで使われたテクニック #ue4fest

25.

Robo Recallの製作期間と人員構成 制作期間:約1年 人員構成 • • • • • プログラマ:5 ゲームデザイナ:2 アーティスト:5 サウンド:2 QA:2 #ue4fest

26.

Robo Recallで使われたテクニック • より進化した、テレポート移動 • 様々なオブジェクトとのインタラクション • VRに特化したゲームデザイン・ワークフロー • 高速化のためのフェイク処理 #ue4fest

27.

Bullet Trainにおけるテレポート • 移動場所が固定 • Oculusセンサの死角問題への対応 ? #ue4fest

28.

Bullet Trainにおけるテレポート テレポート後にレベルの中心を向くように 向きの変更により、自分の向きを見失う可能性あり ! #ue4fest

29.

Robo Recallにおけるテレポート • 移動場所を指定 • テレポート後の向きを指定 #ue4fest

30.

Oculusセンサへの誘導UI #ue4fest

31.

Robo Recallで使われたテクニック • より進化した、テレポート移動 • 様々なオブジェクトとのインタラクション • VRに特化したゲームデザイン・ワークフロー • 高速化のためのフェイク処理 #ue4fest

32.

オブジェクトとのインタラクション VRだと色んなものを触りたく、握りたくなる • もし触れなかったらガッカリする、没入感の欠如 ユーザが期待する動作と その期待を超える動作を実現する #ue4fest

33.

Robo Recallにおけるインタラクション 物をつかむ、投げる 掴めるオブジェクトには 円状のUIを表示 #ue4fest

34.

Robo Recallにおけるインタラクション 銃弾を銃で弾き返す NVIDIA PhysX 3.4への対応 (4.14) CCD(連続したコリジョン検出) #ue4fest

35.

Robo Recallにおけるインタラクション ロボットの頭・腕・足を引きちぎる インタラクション用の システム・コンポーネントを構築 #ue4fest

36.

Robo Recallにおけるインタラクション 物理による簡易インタラクション 作業コストと ゲームにおける重要度を考慮 #ue4fest

37.

Robo Recallで使われたテクニック • より進化した、テレポート移動 • 様々なオブジェクトとのインタラクション • VRに特化したゲームデザイン・ワークフロー • 高速化のためのフェイク処理 #ue4fest

38.

非VRにおけるゲームデザイン 上下のカメラ向き調整が面倒 平面的なゲームデザイン #ue4fest

39.

VRにおけるゲームデザイン ヘッドトラッキングによるカメラ向き調整 上下も考慮した3次元的なゲームデザイン #ue4fest

40.

#ue4fest

41.

#ue4fest

42.

VRにおけるスケール感 VRにおいてスケール感は重要 #ue4fest

43.

VRにおけるスケール感 VRにおいてスケール感は重要 ・・・? 調整に失敗すると 没入感・プレゼンスが低下・消滅 #ue4fest

44.

VRにおけるスケール感 VRにおいてスケール感は重要 調整に失敗すると 没入感・プレゼンスが低下・消滅 #ue4fest !?

45.

モニタとVRHMDの見え方の違い モデルが小さく見えるなぁ… 特定の角度から見ると 変に見えるなぁ… #ue4fest

46.

モデルの最終チェックはVRで 実際のレベルにモデルを配置して、VR上で確認 #ue4fest

47.

#ue4fest

48.

Robo Recall ステージ2との比較 #ue4fest

49.

GoogleMapを使ったレベルデザイン GoogleMapのジオメトリを スケール感のリファレンスに採用 • ゲームで使用しているモデルは全て作成したもの コンセプトアートも サンフランシスコで撮影した写真をベースに #ue4fest

50.

Robo Recall 聖地巡礼リンク • ステージ1 • ステージ2 #ue4fest

51.

Robo Recallで使われたテクニック • より進化した、テレポート移動 • 様々なオブジェクトとのインタラクション • VRに特化したゲームデザイン・ワークフロー • 高速化のためのフェイク処理 #ue4fest

52.

アニメーションするフェイク影 単純な回転の場合、マテリアルで制御した方が処理負荷が低い #ue4fest

53.

#ue4fest

54.

3ds Maxを用いた影用テクスチャの生成 UE4のライティング設定を反映したシーン + 対象となるモデルを使用 #ue4fest

55.

3ds Maxを用いた影用テクスチャの生成 UE4のライティング設定を反映したシーン + 対象となるモデルを使用 #ue4fest

56.

CapsuleShadowを用いた簡易的な影 物理アセットのカプセルを影用のモデルに • 直接影・間接影をサポート #ue4fest

57.

窓を表現するためには • ガラス (半透明・屈折) • 内装のモデル • 反射 • etc… 処理負荷軽減のために、擬似的な表現を #ue4fest

58.

Showdownにおける窓の表現 Parallax Occlusion Mapping (視差遮蔽マッピング) 実際は平面の板ポリ #ue4fest

59.

Robo Recallにおける窓の表現 #ue4fest

60.

Robo Recall Modkitで全て見れちゃいます! M_BuildingWindows_Master M_InteriorMapping_ShopFront #ue4fest

61.

前半のまとめ オブジェクトとのインタラクション ユーザの期待に応えつつ、その期待を超える動作を実現 #ue4fest

62.

前半のまとめ VRにおけるスケール感の問題 最終チェックは必ずVRで 現実世界をリファレンスにする #ue4fest

63.

前半のまとめ VRコンテンツにおいて有用な高速化テクニック 疑似表現による処理負荷の軽減 #ue4fest

64.

アジェンダ • Robo Recallについて • Robo Recallで使われたノウハウのご紹介 • VRコンテンツ開発テクニック • 最適化テクニック #ue4fest

65.

Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化 #ue4fest

66.

Robo Recallの想定動作環境 GPU:GTX970 CPU:2.7GHz • VR Ready: 3.3GHz (Core i5-4590 ) FPS:90fps (11ms) 約9ms • Compositorを考慮して #ue4fest

67.

Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化 #ue4fest

68.

レギュレーションについて アセット・仕様などを作成する際の指針 #ue4fest

69.

レギュレーションについて アセット・仕様などを作成する際の指針 • モデルのポリゴン数 #ue4fest

70.

レギュレーションについて アセット・仕様などを作成する際の指針 • モデルのポリゴン数 • 各レベルにおけるドローコール #ue4fest

71.

レギュレーションについて アセット・仕様などを作成する際の指針 • モデルのポリゴン数 • 各レベルにおけるドローコール • 各レベルに配置されるActorの数 など #ue4fest

72.

レギュレーションがないとき (初期~中期) とにかくハイクオリティなモデルを! いっぱい敵を出してゲームを面白く! アーティスト ・ デザイナ #ue4fest

73.

レギュレーションがないとき (初期~中期) フレームレート全然出てない… ロード時間長すぎ… アーティスト ・ デザイナ #ue4fest プログラマ

74.

レギュレーションがないとき (初期~中期) アーティスト ・ デザイナ #ue4fest プログラマ

75.

レギュレーションがないとき (リリース間近) もうこれ以上最適化できない… アセットのクオリティ落として…敵減らして… プログラマ #ue4fest

76.

レギュレーションがないとき (リリース間近) せっかく良いモデル作ったのに… ゲームバランス調整しないと… プログラマ #ue4fest アーティスト ・ デザイナ

77.

レギュレーションがないとき (リリース間近) 何とかリリース… プログラマ #ue4fest アーティスト ・ デザイナ

78.

だれのせきにん? • 必要以上に高クオリティなアセットを作ったアーティスト? • 処理負荷の高い仕様を作ったデザイナ? • 最適化しきれなかったプログラマ? レギュレーションを作っていなかったチーム全体の責任 #ue4fest

79.

レギュレーションがあるとき ポリゴン数に余裕あるから、この敵モデルは少しリッチに! 敵10体まで出せるから、配置はこんな感じにしよう! 指針があるので、無駄なく作業ができる! 保証されているので、安心して作業できる! アーティスト ・ デザイナ #ue4fest

80.

レギュレーションがあるとき 処理が少し重いぞ…? レギュレーションを見ながらチェックしよう このモデルのポリゴン数が多い!5000まで削ってもらおう 調査・最適化作業をする際の指針にもなる! より具体的な修正依頼を出せる! 最適化担当プログラマ #ue4fest

81.

レギュレーションの策定タイミング・策定方法 初期~中期の段階で策定するのがベスト • アートの方向性・クオリティも同じ段階で確立させる ベンチマークとなるレベルを作り、その結果を元に策定 「ワークフローを必ず2週回す」 UE4極め本 第4章より #ue4fest

82.

1週目を最大限に活かす! レギュレーション策定 #ue4fest

83.

Robo Recallにおけるレギュレーション • Environment (合計) • ドローコール:900 • ポリゴン数:180万 • Characters (合計) • ドローコール:300 • ポリゴン数:40万 • Actor • 1600個 • Tick処理が動作するのは、250以下 #ue4fest Bullet Trainをベンチマークに

84.

レギュレーションの活用例 (敵ロボモデルの制作) 画面上に表示される敵ロボットは 最大5体になるよう調整します! デザイナ #ue4fest レギュレーションは40万ポリゴンだから… 他のオブジェクトを考慮して、約4万で! アーティスト

85.

チェックフロー 1週間ごとに、1つのレベルで、QAがパフォーマンステスト バグ発見! ヒッチ発生! QAによるテスト #ue4fest 各担当者が調査・修正

86.

注意 : VRSDKによるフレーム固定(vsync)問題 処理が遅いと、90fpsから45fpsにフレームが固定される 固定が解除されるまで一定時間待つ必要あり 正常な処理時間を計測することができない #ue4fest

87.

Emulate HMD performance VR描画を擬似的に再現することで フレーム固定問題を回避 • Launch with –emulatestereo • Set resolution to 2160x1200 • Set r.screenpercentage 140 #ue4fest

88.

#ue4fest

89.

疑似VR描画のもう一つの利点 プロファイルを取る度にHMDを着脱しなくていい! #ue4fest

90.

HMD非接続時もプレイできるように #ue4fest

91.

最終チェックは必ずVRで! #ue4fest

92.

Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化 #ue4fest

93.

レンダリング方式の変更 • Deferred Rendering • Gバッファを用いた様々な表現が可能 • Forward Rendering for VR (4.14) • Deferred Renderingよりも処理負荷が低い (約22%改善) • MSAAが使える! • Gバッファが使えない Robo RecallではForwardを採用 #ue4fest

94.

Forward Rendering for VR (4.14) 詳細・経緯などは以下のスライドで 「UE4.14で広がるVRの可能性」 https://www.slideshare.net/EpicGamesJapan/ue414vr #ue4fest

95.

Instanced Stereoscopic Rendering (UE4.11) 両目の映像を同時にレンダリング • ドローコール削減 Bullet Trainの場合 • CPU:約14%改善 • GPU:約 7%改善 #ue4fest

96.

メッシュ結合機能 (UE4.14) 複数のActorを結合したStatic Meshを生成 • ドローコール削減 #ue4fest

97.

カリング処理について 視野外のものは描画しない 処理負荷を軽減! #ue4fest

98.

カリング効率に注意! カリング効率が低下 処理負荷が逆に増える可能性が モデルを結合する際は カリング効率と天秤にかける #ue4fest

99.

Precomputed Visibility Volumes カリング領域の事前計算 • ランタイムコストの削減 「動くオブジェクトは対象にしない」等の 制限があるため、 全てのプロジェクトで有効な手法というわけではない #ue4fest

100.

Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化 #ue4fest

101.

BPの処理速度問題 VMオーバーヘッドの負荷問題 BP #ue4fest VM CPP

102.

BPのネイティブ化 (UE4.15) 事前にBPをC++ (dll)に変換し 実行ファイルに埋め込み • VMオーバーヘッドを排除 Robo Recallの場合、0.25ms以上 高速化 処理速度の改善度合いは、BPの量・組み方に依存 #ue4fest

103.

ネイティブ化における注意事項 全てのBPをネイティブ化すると 実行ファイルのサイズが肥大化するので注意 • プロジェクト設定の Blueprint Nativization MethodをExclusiveに • 処理負荷の高いBPのみをネイティブ化対象に指定 #ue4fest

104.

ネイティブ化に関するドキュメント • ブループリントのネイティブ化 https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/Technical Guide/NativizingBlueprints/index.html • 高度なブループリントのネイティブ化 https://docs.unrealengine.com/latest/JPN/Engine/Blueprints/Technical Guide/NativizingBlueprints/Advanced/index.html #ue4fest

105.

BlueprintとC++の理想的なバランス • Blueprint : • 高速なイテレーションが求められる部分 (プロトタイプ、パラメータ調整) • ゲームデザイナ、アーティスト • C++ : • BPでは実装が難しい複雑な処理 (システム部分、BaseClass) • プログラマ Robo Recallではこのバランスを実現 BPの数が多かったため、ネイティブ化はとても効果があった! #ue4fest

106.

Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化 #ue4fest

107.

そのTickイベント、本当に必要? Tickイベント:毎フレーム呼ばれるイベント • 処理が繋がっていなくても、わずかな処理コストが発生 • 不要なら切る • 更新間隔を変更 #ue4fest : Tick EnabledをOFF (デフォルト:ON) : Tick Intervalを調整

108.

オブジェクトのプール • 何かを生成(Spawn)する処理は重い! • GCによるメモリ回収処理の負荷 事前にオブジェクトを生成し そのオブジェクトを使いまわす #ue4fest

109.

Robo Recallにおける実装箇所 OdinObjectPoolManager ( C++ ) #ue4fest

110.

処理タイミングをずらして負荷分散 多数のオブジェクトをSpawnする場合 Spawnタイミングを複数フレームに分割 ① ② 90fpsの場合、①と③の間は わずか0.02秒 → ばれない ③ #ue4fest

111.

インタラクション用コンポーネントシステムの問題 部位ごとに必要な要素 • 位置指定用のSceneComponent • 掴み判定用のCollisionComponent • 掴み可能UI用のSprite #ue4fest

112.

インタラクション用コンポーネントシステムの問題 部位ごとに必要な要素 • 位置指定用のSceneComponent • 掴み判定用のCollisionComponent • 掴み可能UI用のSprite とある敵ロボットの場合 • 頭+胴体+両手+両足+武器+… = 50 Component! #ue4fest

113.

移動処理がボトルネックに… Update Transform() ! Update Transform() ! Update Transform() ! Capsule Component Scene Component Update Transform() ! Scene Component Move Actor #ue4fest Update Transform() ! Update Transform() ! Scene Component Capsule Component

114.

移動処理がボトルネックに… コリジョンチェック! Capsule Component Scene Component Scene Component Move Actor Scene Component #ue4fest Capsule Component

115.

移動処理負荷問題の解決方法 プレイヤーと敵ロボットの位置関係 高負荷 高負荷 Player 高負荷 高負荷 #ue4fest

116.

移動処理負荷問題の解決方法 離れている場合、インタラクション用コンポーネントを外す 低負荷 低負荷 Player 高負荷 低負荷 #ue4fest

117.

移動処理負荷問題の解決方法 改善結果 • GameThreadが約半分に! 実装箇所 • OdinInteractionCacheComponent(C++)の TickComponent #ue4fest

118.

導入予定の機能について #ue4fest

119.

Super-Frustum Culling 両目のカリング処理を同時に実行 • テスト環境で、Render Threadが約1ms改善 #ue4fest

120.

Monoscopic Far-Field Rendering 目から遠くなるほど 視差は小さくなる 目から遠いオブジェクトは 右目と左目の描画結果がほぼ同じ #ue4fest

121.

Monoscopic Far-Field Rendering モバイル版は4.15でリリース済 (実験的機能) #ue4fest

122.

後半のまとめ 開発初期・中期に策定すべきもの レギュレーション (アセット・仕様を作る上での指針) #ue4fest

123.

後半のまとめ エンジン側のCPU・GPU処理最適化 Blueprintのネイティブ化 Forwardの採用, 両眼を同時描画, メッシュ結合, カリング事前計算 全てのプロジェクトで有効、というわけではない #ue4fest

124.

後半のまとめ タイトル側の最適化 不要な処理は走らせないように制御 SpawnやGCによる重たい処理を回避 #ue4fest

125.

本講演に関する質問はこちらからどうぞ! mail : [email protected] Twitter : @pafuhana1213 #ue4fest