Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,767 views

Published on

2017/04/15 (土)に開催された「UNREAL FEST WEST '17」で使用した資料です。
http://unrealevent.jp/unreal_fest_west_17/
動画はこちら https://youtu.be/LUD4gBwpqLY


Published in: Engineering
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

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

  1. 1. #ue4fest Robo Recallで使われている 最新のVR開発テクニックをご紹介! Epic Games Japan 岡田 和也
  2. 2. #ue4fest 自己紹介 岡田 和也 (@pafuhana1213) • 昨年11月よりエピック・ゲームズ・ジャパンの サポートエンジニアに GDC2017、Epic Games本社・シアトル支社に 行ってきました!
  3. 3. #ue4fest
  4. 4. #ue4fest アジェンダ • Robo Recallについて • Robo Recallで使われたノウハウのご紹介 • VRコンテンツ開発テクニック • 最適化テクニック
  5. 5. #ue4fest Robo Recallについて Epic Gamesの最新VRゲームタイトル 2016年 OculusConnect3で発表 2017年 3月1日 リリース Oculus Storeにて Touch購入者に対して 無料配信中
  6. 6. #ue4fest Robo Recall ModKit 全アセット・コード + Mod作成機能を無料配信
  7. 7. #ue4fest Robo Recall ModKit 作成したModはOculus Store版のRobo Recallに導入可能!
  8. 8. #ue4fest Robo Recall ModKit Mod作成ドキュメントをご用意! • https://docs.unrealengine.com/latest/JPN/Modding/RoboRecall/index.html
  9. 9. #ue4fest 国内でRobo RecallのModが! 和牛先生 @3dcganimation
  10. 10. #ue4fest UE4で何か作ったら、是非EpicFridayに! 毎週金曜 は #EpicFriday をつけて進捗ツイート! Epic Games Launcherで ご紹介!
  11. 11. #ue4fest アジェンダ • Robo Recallについて • Robo Recallで使われたノウハウのご紹介 • VRコンテンツ開発テクニック • 最適化テクニック
  12. 12. #ue4fest VRコンテンツ開発テクニック • Epic GamesにおけるVRの取り組み • Showdown, Bullet Trainで使われたテクニック • Robo Recallで使われたテクニック
  13. 13. #ue4fest Epic GamesにおけるVRの取り組み
  14. 14. #ue4fest Showdownについて 市街戦をスローモーションで体験する VRシネマティックコンテンツ 2014年 Oculus Connect で発表 Epic Games Launcherの ラーニングからプロジェクトを ダウンロード可能
  15. 15. #ue4fest Showdownの製作期間・人員構成 制作期間:6週間 人員構成 • プログラマ:1 • ゲームデザイナ:1 • アーティスト:1 • サウンド:1 (2週間)
  16. 16. #ue4fest フェイク影 影の描画処理は重いため、擬似的な表現に レンダリング負荷を軽減
  17. 17. #ue4fest VRと相性のいいエフェクトの採用 従来のビルボードを使った手法は VRとは相性が悪い
  18. 18. #ue4fest VRと相性のいいエフェクトの採用 3Dモデルを使った立体的なエフェクト
  19. 19. #ue4fest Bullet Trainについて モーションコントローラ”Oculus Touch”を使った VRアクションゲーム 2015年 OculusConnect2で発表 OculusStoreにて無料配信中!
  20. 20. #ue4fest Bullet Trainの製作期間・人員構成 制作期間:約10週間 人員構成 • 前半の3週間 • プログラマ:1 • ゲームデザイナ:1 • アーティスト:1 • 後半の7週間 • 12~16人
  21. 21. #ue4fest 快適なVRアクションを実現するための工夫 • モノを掴める範囲の調整 • 投げたモノに対しての軌道アシスト
  22. 22. #ue4fest テレポート移動の採用 「体感」と「視覚」の不一致によるVR酔いを回避
  23. 23. #ue4fest 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
  24. 24. #ue4fest VRコンテンツ開発テクニック • Epic GamesにおけるVRの取り組み • Showdown, Bullet Trainで使われたテクニック • Robo Recallで使われたテクニック
  25. 25. #ue4fest Robo Recallの製作期間と人員構成 制作期間:約1年 人員構成 • プログラマ:5 • ゲームデザイナ:2 • アーティスト:5 • サウンド:2 • QA:2
  26. 26. #ue4fest Robo Recallで使われたテクニック • より進化した、テレポート移動 • 様々なオブジェクトとのインタラクション • VRに特化したゲームデザイン・ワークフロー • 高速化のためのフェイク処理
  27. 27. #ue4fest Bullet Trainにおけるテレポート • 移動場所が固定 • Oculusセンサの死角問題への対応 ?
  28. 28. #ue4fest Bullet Trainにおけるテレポート テレポート後にレベルの中心を向くように ! 向きの変更により、自分の向きを見失う可能性あり
  29. 29. #ue4fest Robo Recallにおけるテレポート • 移動場所を指定 • テレポート後の向きを指定
  30. 30. #ue4fest Oculusセンサへの誘導UI
  31. 31. #ue4fest Robo Recallで使われたテクニック • より進化した、テレポート移動 • 様々なオブジェクトとのインタラクション • VRに特化したゲームデザイン・ワークフロー • 高速化のためのフェイク処理
  32. 32. #ue4fest オブジェクトとのインタラクション VRだと色んなものを触りたく、握りたくなる • もし触れなかったらガッカリする、没入感の欠如 ユーザが期待する動作と その期待を超える動作を実現する
  33. 33. #ue4fest Robo Recallにおけるインタラクション 物をつかむ、投げる 掴めるオブジェクトには 円状のUIを表示
  34. 34. #ue4fest Robo Recallにおけるインタラクション 銃弾を銃で弾き返す NVIDIA PhysX 3.4への対応 (4.14) CCD(連続したコリジョン検出)
  35. 35. #ue4fest Robo Recallにおけるインタラクション ロボットの頭・腕・足を引きちぎる インタラクション用の システム・コンポーネントを構築
  36. 36. #ue4fest Robo Recallにおけるインタラクション 物理による簡易インタラクション 作業コストと ゲームにおける重要度を考慮
  37. 37. #ue4fest Robo Recallで使われたテクニック • より進化した、テレポート移動 • 様々なオブジェクトとのインタラクション • VRに特化したゲームデザイン・ワークフロー • 高速化のためのフェイク処理
  38. 38. #ue4fest 非VRにおけるゲームデザイン 上下のカメラ向き調整が面倒 平面的なゲームデザイン
  39. 39. #ue4fest VRにおけるゲームデザイン ヘッドトラッキングによるカメラ向き調整 上下も考慮した3次元的なゲームデザイン
  40. 40. #ue4fest
  41. 41. #ue4fest
  42. 42. #ue4fest VRにおけるスケール感 VRにおいてスケール感は重要
  43. 43. #ue4fest VRにおけるスケール感 VRにおいてスケール感は重要 ・・・? 調整に失敗すると 没入感・プレゼンスが低下・消滅
  44. 44. #ue4fest VRにおけるスケール感 VRにおいてスケール感は重要 !? 調整に失敗すると 没入感・プレゼンスが低下・消滅
  45. 45. #ue4fest モニタとVRHMDの見え方の違い モデルが小さく見えるなぁ… 特定の角度から見ると 変に見えるなぁ…
  46. 46. #ue4fest モデルの最終チェックはVRで 実際のレベルにモデルを配置して、VR上で確認
  47. 47. #ue4fest
  48. 48. #ue4fest Robo Recall ステージ2との比較
  49. 49. #ue4fest GoogleMapを使ったレベルデザイン GoogleMapのジオメトリを スケール感のリファレンスに採用 • ゲームで使用しているモデルは全て作成したもの コンセプトアートも サンフランシスコで撮影した写真をベースに
  50. 50. #ue4fest Robo Recall 聖地巡礼リンク •ステージ1 •ステージ2
  51. 51. #ue4fest Robo Recallで使われたテクニック • より進化した、テレポート移動 • 様々なオブジェクトとのインタラクション • VRに特化したゲームデザイン・ワークフロー • 高速化のためのフェイク処理
  52. 52. #ue4fest アニメーションするフェイク影 単純な回転の場合、マテリアルで制御した方が処理負荷が低い
  53. 53. #ue4fest
  54. 54. #ue4fest 3ds Maxを用いた影用テクスチャの生成 UE4のライティング設定を反映したシーン + 対象となるモデルを使用
  55. 55. #ue4fest 3ds Maxを用いた影用テクスチャの生成 UE4のライティング設定を反映したシーン + 対象となるモデルを使用
  56. 56. #ue4fest CapsuleShadowを用いた簡易的な影 物理アセットのカプセルを影用のモデルに • 直接影・間接影をサポート
  57. 57. #ue4fest 窓を表現するためには • ガラス (半透明・屈折) • 内装のモデル • 反射 • etc… 処理負荷軽減のために、擬似的な表現を
  58. 58. #ue4fest Showdownにおける窓の表現 Parallax Occlusion Mapping (視差遮蔽マッピング) 実際は平面の板ポリ
  59. 59. #ue4fest Robo Recallにおける窓の表現
  60. 60. #ue4fest Robo Recall Modkitで全て見れちゃいます! M_BuildingWindows_Master M_InteriorMapping_ShopFront
  61. 61. #ue4fest 前半のまとめ オブジェクトとのインタラクション ユーザの期待に応えつつ、その期待を超える動作を実現
  62. 62. #ue4fest 前半のまとめ VRにおけるスケール感の問題 最終チェックは必ずVRで 現実世界をリファレンスにする
  63. 63. #ue4fest 前半のまとめ VRコンテンツにおいて有用な高速化テクニック 疑似表現による処理負荷の軽減
  64. 64. #ue4fest アジェンダ • Robo Recallについて • Robo Recallで使われたノウハウのご紹介 • VRコンテンツ開発テクニック • 最適化テクニック
  65. 65. #ue4fest Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化
  66. 66. #ue4fest Robo Recallの想定動作環境 GPU:GTX970 CPU:2.7GHz • VR Ready: 3.3GHz (Core i5-4590 ) FPS:90fps (11ms) • Compositorを考慮して約9ms
  67. 67. #ue4fest Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化
  68. 68. #ue4fest レギュレーションについて アセット・仕様などを作成する際の指針
  69. 69. #ue4fest レギュレーションについて アセット・仕様などを作成する際の指針 • モデルのポリゴン数
  70. 70. #ue4fest レギュレーションについて アセット・仕様などを作成する際の指針 • モデルのポリゴン数 • 各レベルにおけるドローコール
  71. 71. #ue4fest レギュレーションについて アセット・仕様などを作成する際の指針 • モデルのポリゴン数 • 各レベルにおけるドローコール • 各レベルに配置されるActorの数 など
  72. 72. #ue4fest レギュレーションがないとき (初期~中期) アーティスト ・ デザイナ とにかくハイクオリティなモデルを! いっぱい敵を出してゲームを面白く!
  73. 73. #ue4fest レギュレーションがないとき (初期~中期) アーティスト ・ デザイナ プログラマ フレームレート全然出てない… ロード時間長すぎ…
  74. 74. #ue4fest レギュレーションがないとき (初期~中期) アーティスト ・ デザイナ プログラマ
  75. 75. #ue4fest レギュレーションがないとき (リリース間近) もうこれ以上最適化できない… アセットのクオリティ落として…敵減らして… プログラマ
  76. 76. #ue4fest レギュレーションがないとき (リリース間近) プログラマ アーティスト ・ デザイナ せっかく良いモデル作ったのに… ゲームバランス調整しないと…
  77. 77. #ue4fest レギュレーションがないとき (リリース間近) プログラマ アーティスト ・ デザイナ 何とかリリース…
  78. 78. #ue4fest だれのせきにん? • 必要以上に高クオリティなアセットを作ったアーティスト? • 処理負荷の高い仕様を作ったデザイナ? • 最適化しきれなかったプログラマ? レギュレーションを作っていなかったチーム全体の責任
  79. 79. #ue4fest レギュレーションがあるとき アーティスト ・ デザイナ ポリゴン数に余裕あるから、この敵モデルは少しリッチに! 敵10体まで出せるから、配置はこんな感じにしよう! 指針があるので、無駄なく作業ができる! 保証されているので、安心して作業できる!
  80. 80. #ue4fest レギュレーションがあるとき 最適化担当プログラマ 処理が少し重いぞ…? レギュレーションを見ながらチェックしよう このモデルのポリゴン数が多い!5000まで削ってもらおう 調査・最適化作業をする際の指針にもなる! より具体的な修正依頼を出せる!
  81. 81. #ue4fest レギュレーションの策定タイミング・策定方法 初期~中期の段階で策定するのがベスト • アートの方向性・クオリティも同じ段階で確立させる ベンチマークとなるレベルを作り、その結果を元に策定 「ワークフローを必ず2週回す」 UE4極め本 第4章より
  82. 82. #ue4fest 1週目を最大限に活かす! レギュレーション策定
  83. 83. #ue4fest Robo Recallにおけるレギュレーション • Environment (合計) • ドローコール:900 • ポリゴン数:180万 • Characters (合計) • ドローコール:300 • ポリゴン数:40万 Bullet Trainをベンチマークに • Actor • 1600個 • Tick処理が動作するのは、250以下
  84. 84. #ue4fest レギュレーションの活用例 (敵ロボモデルの制作) 画面上に表示される敵ロボットは 最大5体になるよう調整します! デザイナ アーティスト レギュレーションは40万ポリゴンだから… 他のオブジェクトを考慮して、約4万で!
  85. 85. #ue4fest チェックフロー 1週間ごとに、1つのレベルで、QAがパフォーマンステスト QAによるテスト バグ発見! ヒッチ発生! 各担当者が調査・修正
  86. 86. #ue4fest 注意 : VRSDKによるフレーム固定(vsync)問題 処理が遅いと、90fpsから45fpsにフレームが固定される 固定が解除されるまで一定時間待つ必要あり 正常な処理時間を計測することができない
  87. 87. #ue4fest Emulate HMD performance VR描画を擬似的に再現することで フレーム固定問題を回避 • Launch with –emulatestereo • Set resolution to 2160x1200 • Set r.screenpercentage 140
  88. 88. #ue4fest
  89. 89. #ue4fest 疑似VR描画のもう一つの利点 プロファイルを取る度にHMDを着脱しなくていい!
  90. 90. #ue4fest HMD非接続時もプレイできるように
  91. 91. #ue4fest 最終チェックは必ずVRで!
  92. 92. #ue4fest Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化
  93. 93. #ue4fest レンダリング方式の変更 • Deferred Rendering • Gバッファを用いた様々な表現が可能 • Forward Rendering for VR (4.14) • Deferred Renderingよりも処理負荷が低い (約22%改善) • MSAAが使える! • Gバッファが使えない Robo RecallではForwardを採用
  94. 94. #ue4fest Forward Rendering for VR (4.14) 詳細・経緯などは以下のスライドで 「UE4.14で広がるVRの可能性」 https://www.slideshare.net/EpicGamesJapan/ue414vr
  95. 95. #ue4fest Instanced Stereoscopic Rendering (UE4.11) 両目の映像を同時にレンダリング • ドローコール削減 Bullet Trainの場合 • CPU:約14%改善 • GPU:約 7%改善
  96. 96. #ue4fest メッシュ結合機能 (UE4.14) 複数のActorを結合したStatic Meshを生成 • ドローコール削減
  97. 97. #ue4fest カリング処理について 視野外のものは描画しない 処理負荷を軽減!
  98. 98. #ue4fest カリング効率に注意! カリング効率が低下 処理負荷が逆に増える可能性が モデルを結合する際は カリング効率と天秤にかける
  99. 99. #ue4fest Precomputed Visibility Volumes カリング領域の事前計算 • ランタイムコストの削減 「動くオブジェクトは対象にしない」等の 制限があるため、 全てのプロジェクトで有効な手法というわけではない
  100. 100. #ue4fest Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化
  101. 101. #ue4fest BPの処理速度問題 VMオーバーヘッドの負荷問題 VM CPPBP
  102. 102. #ue4fest BPのネイティブ化 (UE4.15) 事前にBPをC++ (dll)に変換し 実行ファイルに埋め込み • VMオーバーヘッドを排除 Robo Recallの場合、0.25ms以上 高速化 処理速度の改善度合いは、BPの量・組み方に依存
  103. 103. #ue4fest ネイティブ化における注意事項 全てのBPをネイティブ化すると 実行ファイルのサイズが肥大化するので注意 • プロジェクト設定の Blueprint Nativization MethodをExclusiveに • 処理負荷の高いBPのみをネイティブ化対象に指定
  104. 104. #ue4fest ネイティブ化に関するドキュメント • ブループリントのネイティブ化 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
  105. 105. #ue4fest BlueprintとC++の理想的なバランス • Blueprint : • 高速なイテレーションが求められる部分 (プロトタイプ、パラメータ調整) • ゲームデザイナ、アーティスト • C++ : • BPでは実装が難しい複雑な処理 (システム部分、BaseClass) • プログラマ Robo Recallではこのバランスを実現 BPの数が多かったため、ネイティブ化はとても効果があった!
  106. 106. #ue4fest Robo Recallで使われた、最適化テクニック • 想定動作環境 • レギュレーション・チェックフロー • エンジン側における最適化 • レンダリング処理 • Game / System処理 • タイトル側における最適化
  107. 107. #ue4fest そのTickイベント、本当に必要? Tickイベント:毎フレーム呼ばれるイベント • 処理が繋がっていなくても、わずかな処理コストが発生 • 不要なら切る : Tick EnabledをOFF (デフォルト:ON) • 更新間隔を変更 : Tick Intervalを調整
  108. 108. #ue4fest オブジェクトのプール • 何かを生成(Spawn)する処理は重い! • GCによるメモリ回収処理の負荷 事前にオブジェクトを生成し そのオブジェクトを使いまわす
  109. 109. #ue4fest Robo Recallにおける実装箇所 OdinObjectPoolManager ( C++ )
  110. 110. #ue4fest 処理タイミングをずらして負荷分散 多数のオブジェクトをSpawnする場合 Spawnタイミングを複数フレームに分割 ① ② ③ 90fpsの場合、①と③の間は わずか0.02秒 → ばれない
  111. 111. #ue4fest インタラクション用コンポーネントシステムの問題 部位ごとに必要な要素 • 位置指定用のSceneComponent • 掴み判定用のCollisionComponent • 掴み可能UI用のSprite
  112. 112. #ue4fest インタラクション用コンポーネントシステムの問題 部位ごとに必要な要素 • 位置指定用のSceneComponent • 掴み判定用のCollisionComponent • 掴み可能UI用のSprite とある敵ロボットの場合 • 頭+胴体+両手+両足+武器+… = 50 Component!
  113. 113. #ue4fest 移動処理がボトルネックに… Move Actor Scene Component Scene Component Capsule Component Scene Component Capsule Component Update Transform() ! Update Transform() ! Update Transform() ! Update Transform() ! Update Transform() ! Update Transform() !
  114. 114. #ue4fest 移動処理がボトルネックに… Move Actor Scene Component Scene Component Capsule Component Scene Component Capsule Component コリジョンチェック!
  115. 115. #ue4fest 移動処理負荷問題の解決方法 プレイヤーと敵ロボットの位置関係 Player 高負荷 高負荷 高負荷 高負荷
  116. 116. #ue4fest 移動処理負荷問題の解決方法 離れている場合、インタラクション用コンポーネントを外す Player 高負荷 低負荷 低負荷 低負荷
  117. 117. #ue4fest 移動処理負荷問題の解決方法 改善結果 •GameThreadが約半分に! 実装箇所 • OdinInteractionCacheComponent(C++)の TickComponent
  118. 118. #ue4fest 導入予定の機能について
  119. 119. #ue4fest Super-Frustum Culling 両目のカリング処理を同時に実行 • テスト環境で、Render Threadが約1ms改善
  120. 120. #ue4fest Monoscopic Far-Field Rendering 目から遠くなるほど 視差は小さくなる 目から遠いオブジェクトは 右目と左目の描画結果がほぼ同じ
  121. 121. #ue4fest Monoscopic Far-Field Rendering モバイル版は4.15でリリース済 (実験的機能)
  122. 122. #ue4fest 後半のまとめ 開発初期・中期に策定すべきもの レギュレーション (アセット・仕様を作る上での指針)
  123. 123. #ue4fest 後半のまとめ エンジン側のCPU・GPU処理最適化 Blueprintのネイティブ化 Forwardの採用, 両眼を同時描画, メッシュ結合, カリング事前計算 全てのプロジェクトで有効、というわけではない
  124. 124. #ue4fest 後半のまとめ タイトル側の最適化 不要な処理は走らせないように制御 SpawnやGCによる重たい処理を回避
  125. 125. #ue4fest 本講演に関する質問はこちらからどうぞ! mail : kaz.okada@epicgames.com Twitter : @pafuhana1213

×