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.

【出張ヒストリア2019】Oculus Quest フリーロームVRを実現するための技術的知見

80 views

Published on

「出張ヒストリア! ゲーム開発勉強会2019」(https://historia.co.jp/archives/12449/)で行った「”アスレチックVR PAC–MAN CHALLENGE(パックマンチャレンジ)”制作事例 ~Oculus Questを使用した我々の挑戦~」講演の技術的なパートの内容に、UNREAL FEST EAST 2019で行った講演内容を書き加えたものです。

マーカーキャリブレーションの解説及びサンプルプロジェクトは以下のURLからDLできます。
https://historia.co.jp/distribution/docs/PC_MarkerCalibration.zip

講演者:
小倉 裕貴(エンジニア)

以下、セッション概要より抜粋。下記のセッションの技術パートのみとなっております。
MAZARIA(池袋)にて稼働中のOculus Quest(PCが必要無く、コードが無いタイプの新VRゴーグル)を使用したフィールドVRアクティビティ、”アスレチックVR PAC–MAN CHALLENGE(パックマンチャレンジ)”。
コードが無いというのは自由に歩き回れるというだけではなく、新たな価値を生み出していました。
前半では本タイトルを通じて得た、コードレスによりもたらされた新たなゲームデザインについてお話いたします。
また、後半ではハードウェアスペックとの戦いや、どのように複数人プレイを実現したかなどの技術的知見をシェア出来ればと思います。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

【出張ヒストリア2019】Oculus Quest フリーロームVRを実現するための技術的知見

  1. 1. historia Inc. エンジニア 小倉 裕貴 Oculus Quest / フリーロームVR を 実現するための技術的知見
  2. 2. historia Inc. スライド配布について • 一部を配布予定 • プロジェクト配布 – https://historia.co.jp/distribution/docs/PC_MarkerCalibra tion.zip – UE4.22にて動作確認済み はじめに 2
  3. 3. historia Inc. 略称について • 「Unreal Engine 4」を「UE4」 • 「Oculus Quest」を「OQ」 • 「Head Mounted Display」を「HMD」 はじめに 3
  4. 4. historia Inc. 目次 • 開発環境と実装方針 • フリーロームVRのための機能 – 移動スケール – プラットフォームごとのPawn – マーカーによるキャリブレーション • グラフィックスパフォーマンスについて – 事前のパフォーマンス検証 – 描画オプション検証 – 終盤のパフォーマンス調整 はじめに 4
  5. 5. historia Inc. 自己紹介 • 小倉 裕貴(Ogura Yuki) – エンジニア – historiaブログ管理人 – 宴会ソムリエ はじめに 5
  6. 6. historia Inc. 目次 • 開発環境と実装方針 • フリーロームVRのための機能 – 移動スケール – プラットフォームごとのPawn – マーカーによるキャリブレーション • グラフィックスパフォーマンスについて – 事前のパフォーマンス検証 – 描画オプション検証 – 終盤のパフォーマンス調整 開発環境と実装方針 6
  7. 7. historia Inc. 開発環境について • Oculus VR配布のカスタムエンジン – 最新のOculus SDKsによる実装 – OQ動作要件を満たすために使用 • 最終バージョン UE4.21.2 – 最終的に3回エンジンを変更 開発環境と実装方針 7 時期 Version Distribution プロトタイプ UE 4.20 EPIC Games パフォーマンス検証前 UE 4.20 Oculus VR 最終バージョン UE 4.21 Oculus VR
  8. 8. historia Inc. 実装方針について(1/2) • Blueprintで実装 – プロトタイプのイテレーションを重視 – エンジン変更時の修正を減らす • コードはプラグインとして実装 – Android固有機能でコードが必要 開発環境と実装方針 8
  9. 9. historia Inc. 実装方針について(2/2) • 完全なゲームプレイには広いスペースが必要 – 常時使用はできない – 使用準備に時間がかかる 開発環境と実装方針 9 スペースでの確認を最小限にする エディタで確認しやすいようにする
  10. 10. historia Inc. 目次 • 開発環境と実装方針 • フリーロームVRのための機能 – 移動スケール – プラットフォームごとのPawn – マーカーによるキャリブレーション • グラフィックスパフォーマンスについて – 事前のパフォーマンス検証 – 描画オプション検証 – 終盤のパフォーマンス調整 フリーロームVRのための機能 10
  11. 11. historia Inc. 移動スケール(1/2) • 自席や狭いスぺースで実機テストしたい HMDの移動量を増やし、少しの移動で大きく動かす機能 フリーロームVRのための機能-移動スケール- 11 Move Scale = 1.0 Move Scale = 4.0
  12. 12. historia Inc. 移動スケール(2/2) • CameraコンポーネントのLocationを変更できない HMDの移動に応じて 親コンポーネントの位置をオフセット フリーロームVRのための機能-移動スケール- 12 Locationを変更できない オフセットのためのSceneを追加
  13. 13. historia Inc. 移動スケール(2/2) • CameraコンポーネントのLocationを変更できない HMDの移動に応じて 親コンポーネントの位置をオフセット フリーロームVRのための機能-移動スケール- 13 親となるコンポーネントの 位置を調整 HMDの位置から オフセットを取得
  14. 14. historia Inc. 目次 • 開発環境と実装方針 • フリーロームVRのための機能 – 移動スケール – プラットフォームごとのPawn – マーカーによるキャリブレーション • グラフィックスパフォーマンスについて – 事前のパフォーマンス検証 – 描画オプション検証 – 終盤のパフォーマンス調整 フリーロームVRのための機能 14
  15. 15. historia Inc. プラットフォームごとのPawn (1/2) • エディタと実機で同等のゲームプレイ – VR空間のプレイヤーと同じ挙動を再現する 実行時にプラットフォームによってPawnを切り替える フリーロームVRのための機能-プラットフォームごとのPawn- 15
  16. 16. historia Inc. プラットフォームごとのPawn (2/2) • OQで使われるPawn – VRプロジェクトテンプレートのPawnを改造 • Windowsで使われるPawn – Default Pawnを改造 – PIEではOQのPawnと同等の挙動を行う フリーロームVRのための機能-プラットフォームごとのPawn- 16
  17. 17. historia Inc. プラットフォームごとに同等の挙動の実現  インターフェースにより異なる処理を同じように振る舞わせる  「手で握る」などの固有の処理は、Pawnごとにテストが必要 フリーロームVRのための機能-プラットフォームごとのPawn- 17 手で握った物に対して 「Pickup」を実行 コリジョンに触れた物に対して 「Pickup」を実行 何であっても「Pickup」されたら このフルーツを取得する
  18. 18. historia Inc. プラットフォームごとのPawnの切り替え (1/3) 1. 実行プラットフォームを確認 フリーロームVRのための機能-プラットフォームごとのPawn- 18
  19. 19. historia Inc. プラットフォームごとのPawnの切り替え (2/3) 2. 実行プラットフォームに応じたDevice Pawn Classを取得 3. Default Pawn Classと異なる場合のみ切り替える フリーロームVRのための機能-プラットフォームごとのPawn- 19
  20. 20. historia Inc. プラットフォームごとのPawnの切り替え (3/3) 4. Device Pawn ClassをSpawnActor 5. Possess 6. 切り替え前のPawnをDestory フリーロームVRのための機能-プラットフォームごとのPawn- 20
  21. 21. historia Inc. 目次 • 開発環境と実装方針 • フリーロームVRのための機能 – 移動スケール – プラットフォームごとのPawn – マーカーによるキャリブレーション • グラフィックスパフォーマンスについて – 事前のパフォーマンス検証 – 描画オプション検証 – 終盤のパフォーマンス調整 フリーロームVRのための機能 21
  22. 22. historia Inc. マーカーによるキャリブレーション • アニメーションを残すためにスライドを分割 • スライドは配布プロジェクト内に添付 https://historia.co.jp/distribution/docs/PC_MarkerC alibration.zip はじめに 22
  23. 23. historia Inc. まとめ(フリーロームVRのための機能) • 制作のイテレーションを止めないために 移動スケールやプラットフォームごとのPawnを制作した • 広いスペースにおけるキャリブレーション問題に対し マーカーを用いた高精度で運営負担の少ない キャリブレーション機能を制作した フリーロームVRのための機能 23
  24. 24. historia Inc. 目次 • 開発環境と実装方針 • フリーロームVRのための機能 – 移動スケール – プラットフォームごとのPawn – マーカーによるキャリブレーション • パフォーマンス検証について – 事前のパフォーマンス検証 –描画オプション検証 – 終盤のパフォーマンス調整 パフォーマンス検証について 24
  25. 25. historia Inc. 今回目指すパフォーマンスについて パフォーマンス検証について 25 OQの最大フレームレート72FPSの維持
  26. 26. historia Inc. 事前のパフォーマンス検証 (1/7) パフォーマンス検証について-事前のパフォーマンス検証- 26 • OQで可能なグラフィックス表現の目安 ポリゴン数 テクスチャ枚数 半透明 etc …… 企画の仕様に基づいたモックアップで検証
  27. 27. historia Inc. 事前のパフォーマンス検証 (2/7) パフォーマンス検証について-事前のパフォーマンス検証- 27 • ブランクプロジェクトから開始 Mobile向け Scalable 3D (Mobile HDR off) Multi Viewのみ 有効に変更
  28. 28. historia Inc. 事前のパフォーマンス検証 (3/7) パフォーマンス検証について-事前のパフォーマンス検証- 28 • 企画時点の仕様  8 x 7[m]のスペース  50 x 50 x 50[cm]のブロックで 床や壁を作る 一辺のブロック数 16[個] ≒ 8[m] 256個のブロックで 検証レベルを作成
  29. 29. historia Inc. 事前のパフォーマンス検証 (4/7) パフォーマンス検証について-事前のパフォーマンス検証- 29 • なぜ床だけ?  オクルージョンカリングで 壁に隠れたブロックが消える  床が全て見えるとき 最大の描画負荷 壁がある方が負荷は大きくなる (オクルージョンカリングが有効でないため) 実際には……
  30. 30. historia Inc. 事前のパフォーマンス検証 (5/7) パフォーマンス検証について-事前のパフォーマンス検証- 30 • 計測方法 1. stat fpsの値を計測 2. 2視点の最悪値を記録 3. メッシュとマテリアル の組み合わせを変える プレイヤーの身長ベースの 斜め俯瞰視点 全ブロックが映る 真上からの視点 複数のメッシュと マテリアルの傾向を調べ 現実的なスペックを求める
  31. 31. historia Inc. 事前のパフォーマンス検証 (6/7) • 使用するブロック Verticesなどが異なる12種類 パフォーマンス検証について-事前のパフォーマンス検証- 31 SM1 Triangles:12 Vertices:24 SM4 Triangles:360 Vertices:216 SM6 Triangles:620 Vertices:402 SM12 Triangles:1404 Vertices:816
  32. 32. historia Inc. 事前のパフォーマンス検証 (7/7) • 使用するマテリアル Instructions, Texture Lookupsなどが異なる12種類 BlendModeを変えたものをそれぞれずつ用意 パフォーマンス検証について-事前のパフォーマンス検証- 32 M_Cube01O BlendMode:Opaque M_Cube04O BlendMode:Opaque M_Cube07T BlendMode:Translucent M_Cube12M BlendMode:Masked
  33. 33. historia Inc. 事前のパフォーマンス検証 (1/6) パフォーマンス検証について-事前のパフォーマンス検証- 33 緑のセル:FPS≥70 赤のセル:FPS<40 行:使用マテリアル 列:使用メッシュ
  34. 34. historia Inc. 事前のパフォーマンス検証 (2/6) パフォーマンス検証について-事前のパフォーマンス検証- 34 量が多い床・壁には Opaque TranslucentはOpaqueよりも重い
  35. 35. historia Inc. 事前のパフォーマンス検証 (3/6) パフォーマンス検証について-事前のパフォーマンス検証- 35 ブロックあたりポリゴン数 150~250 「軽量」なマテリアルのとき FPSを維持できる妥当なスペック
  36. 36. historia Inc. 事前のパフォーマンス検証 (4/6) パフォーマンス検証について-事前のパフォーマンス検証- 36 半透明を使うなら Unlit 「軽量」なUnlitなマテリアルは Opaqueなら負荷は低い
  37. 37. historia Inc. 事前のパフォーマンス検証 (5/6) パフォーマンス検証について-事前のパフォーマンス検証- 37 • Texture Lookup(PS)でソートした結果(昇順)
  38. 38. historia Inc. 事前のパフォーマンス検証 (6/6) パフォーマンス検証について-事前のパフォーマンス検証- 38 • Texture Lookup(PS)でソートした結果(昇順) 量の多い床や壁のテクスチャは 1枚 Texture Lookupが1枚以下は 2枚以上より軽い傾向
  39. 39. historia Inc. 目次 • 開発環境と実装方針 • フリーロームVRのための機能 – 移動スケール – プラットフォームごとのPawn – マーカーによるキャリブレーション • グラフィックスパフォーマンスについて – 事前のパフォーマンス検証 – 描画オプション検証 – 終盤のパフォーマンス調整 パフォーマンス検証について 39
  40. 40. historia Inc. 描画オプション検証 (1/12) パフォーマンス検証について-描画オプション検証- 40  OpenGL ES3.1  Vulkan  FFR Level  Mobile MSAA  Mobile Multi-View etc…… 負荷軽減する描画オプションを調査して Mobile HDRを使用する余地を探る Mobile HDRを使用したい……
  41. 41. historia Inc. 描画オプション検証 (2/12) • 検証方法 MARZA様制作のテストレベルを使用 プレイヤー想定の4アングルを用意 描画オプションを変えてFPSを測定 パフォーマンス検証について-描画オプション検証- 41
  42. 42. historia Inc. 描画オプション検証 (3/12) パフォーマンス検証について-描画オプション検証- 42 • Support OpenGL ES3.1 ハイエンドモバイル向けシェーダー機能の拡張 テクスチャ枚数制限の緩和 Angle 1 Angle 2 Angle 3 Angle 4 Disable 43(23.199ms) 40(24.141ms) 27(35.748ms) 72(14.033ms) Enable 38(26.171ms) 37(26.684ms) 24(41.766ms) 71(14.153ms) 結果 有効にすると最大6msほど悪化
  43. 43. historia Inc. 描画オプション検証 (4/12) パフォーマンス検証について-描画オプション検証- 43 • Support Vulkan  オーバーヘッドを低減し、描画・電力効率を改善する  Mobile HDRが必要?  Mobile Multi-View / Mobile Multi-View Directと併用できない? 結果 他のオプションと競合し、 起動しない・画面がチラつくなど 安定して使えない(※検証当時の結果)
  44. 44. historia Inc. 描画オプション検証 (5/12) パフォーマンス検証について-描画オプション検証- 44 • FFRLevel 視点中央から離れるほど解像度を下げる Angle 1 Angle 2 Angle 3 Angle 4 ETiled Multi Res Level Off 43(23.204ms) 41(24.390ms) 25(39.687ms) 72(13.934ms) ETiled Multi Res Level LMSLow 48(20.881ms) 44(22.727ms) 31(32.004ms) 72(13.918ms) ETiled Multi Res Level LMSMedium 50(19.993ms) 48(20.833ms) 36(27.846ms) 72(13.903ms) ETiled Multi Res Level LMSHigh 56(17.628ms) 47(21.276ms) 36(27.845ms) 72(13.924ms) 結果 タイプによって最大8msほど改善
  45. 45. historia Inc. 描画オプション検証 (6/12) パフォーマンス検証について-描画オプション検証- 45 • Disable Vertex Fogging in mobile shaders 有効にするとモバイルで大気フォグを省略する Angle 1 Angle 2 Angle 3 Angle 4 Enable 43(23.204ms) 41(24.141ms) 25(39.687ms) 72(13.934ms) Disable 39(25.505ms) 39(25.526ms) 24(41.774ms) 71(14.117ms) 結果 有効にすると1~2msほど改善
  46. 46. historia Inc. 描画オプション検証 (7/12) パフォーマンス検証について-描画オプション検証- 46 • Mobile MSAA モバイルで使用できるアンチエイリアシング 結果 目立った改善は見られない 見た目も変化なし → 4x MSAA固定? Angle 1 Angle 2 Angle 3 Angle 4 No MSAA 43(23.204ms) 41(24.141ms) 25(39.687ms) 72(13.934ms) 2x MSAA 43(23.44ms) 41(24.366ms) 25(39.443ms) 72(13.925ms) 4x MSAA 41(24.137ms) 41(24.127ms) 24(40.827ms) 71(14.151ms) 8x MSAA 42(23.902ms) 41(24.592ms) 27(36.803ms) 72(13.928ms)
  47. 47. historia Inc. 描画オプション検証 (8/12) パフォーマンス検証について-描画オプション検証- 47 • Mobile Multi-View / Mobile Multi-View Direct  CPU負荷を下げるVR最適化用のオプション  Mobile版のステレオレンダリングのようなもの  Mobile HDRと併用できない Angle 1 Angle 2 Angle 3 Angle 4 Disable 38(26.221ms) 40(25.301ms) 21(48.734ms) 48(20.884ms) Enable 43(23.199ms) 40(24.141ms) 27(35.748ms) 72(14.033ms) 結果 有効にすると最大6msほど改善
  48. 48. historia Inc. 描画オプション検証 (9/12) パフォーマンス検証について-描画オプション検証- 48 • Monoscopic Far Field Rendering  両眼用に2回必要な遠景の描画を1回にまとめる  Mobile HDRと併用できない  Mobile Multi-View / Mobile Multi-View Directと併用できない? 結果 Oculusカスタムエンジンでのみ 該当のオプションが存在しない
  49. 49. historia Inc. 描画オプション検証 (10/12) パフォーマンス検証について-描画オプション検証- 49 • Mask-based Foveated Rendering – 視点中央から離れるほど解像度を下げる ≒ FFRLevel • Anti Aliasing Method – 使用するアンチエイリアシング手法 ≒ Mobile MSAA • Instanced Stereo – 両眼用に2回必要なレンダリングを1回にする ≒ Mobile MultiView 結果 Mobileでは効果がない(Desktop向け機能)
  50. 50. historia Inc. 描画オプション検証 (11/12) パフォーマンス検証について-描画オプション検証- 50 • Mobile HDR ハイエンドモバイル向けの機能を使えるようにする マテリアルで実現できる表現が拡張される Angle 1 Angle 2 Angle 3 Angle 4 Disable 43(23.204ms) 41(24.141ms) 25(39.687ms) 72(13.934ms) Enable 34(29.721ms) 32(31.534ms) 18(54.909ms) 48(20.655ms) 結果 有効にすると最大7msほど悪化
  51. 51. historia Inc. 描画オプション検証 (12/12) パフォーマンス検証について-描画オプション検証- 51 • Mobile HDRを使用するか? MobileHDR前提の機能は多い パフォーマンスの低下が著しい • OQのサンプルゲーム「First Steps」を参考に 半透明による発光表現の代替など Mobile HDRなしで可能な表現で作りこむ方針へ
  52. 52. historia Inc. 最終設定 パフォーマンス検証について-描画オプション検証- 52 オプション名 設定 PixelDensity 0.95 MobileHDR False Disable vertex fogging in mobile shaders True Maximum number of CSM cascades to render 1 Support movable light CSM shader culling True Mobile Multi-View / Mobile Multi-View Direct True Support Combined Static and CSM Shadowing False Support Distance Field Shadows False Support Movable Directional Light False Max Movable Point Light 0 Support OpenGL ES3.1 False FFRLevel ETiledMultiRes Level_LMSHighTop
  53. 53. historia Inc. 目次 • 開発環境と実装方針 • フリーロームVRのための機能 – 移動スケール – プラットフォームごとのPawn – マーカーによるキャリブレーション • グラフィックスパフォーマンスについて – 事前のパフォーマンス検証 – 描画オプション検証 – 終盤のパフォーマンス調整 パフォーマンス検証について 53
  54. 54. historia Inc. 終盤のパフォーマンス調整 パフォーマンス検証について-終盤のパフォーマンス調整- 54 • 中盤も最適化を続ける 頂点数の削減 マテリアルの改善 etc...... 負荷の大きい部分を調査 しかし、部分的に負荷が大きい……
  55. 55. historia Inc. Merge Actor (1/2) パフォーマンス検証について-終盤のパフォーマンス調整- 55 • 複数のメッシュを1つにまとめる機能 Draw Callがまとまり、Draw負荷が下がる Cullingが効き難くなり、GPU負荷が上がる Merge Actor前 Merge Actor後
  56. 56. historia Inc. Merge Actor (1/2) パフォーマンス検証について-終盤のパフォーマンス調整- 56 • 複数のメッシュを1つにまとめる機能 Draw Callがまとまり、Draw負荷が下がる Cullingが効き難くなり、GPU負荷が上がる Merge Actor前 Merge Actor後 DrawとGPUの負荷バランスが最良となる Merge Actorの組み合わせを調べる
  57. 57. historia Inc. Merge Actor (2/2) パフォーマンス検証について-終盤のパフォーマンス調整- 57 • ラウンドのMerge Actor 床・壁を小分けの 区画としてMerge Actor マテリアルLODを設定 ラウンドの床・壁を全て一つにMerge Actor 区画の大きさを変えてもDraw負荷が優勢……
  58. 58. historia Inc. Software Occlusion Culling (1/2) パフォーマンス検証について-終盤のパフォーマンス調整- 58 • Software Occlusion Culling  MobileでOcclusion Cullingを行うための代替機能  遮蔽物となるメッシュを事前にOccluderに設定し Occluderに遮蔽されたメッシュのみCullingする機能 Occlusion Cullingが動作していない
  59. 59. historia Inc. Software Occlusion Culling (2/2) パフォーマンス検証について-終盤のパフォーマンス調整- 59  Opaque以外のマテリアルが割り振られていたため  床・壁とネオン管のメッシュを 分離する必要がある Occlusion Cullingは断念 終盤での修正は困難…… Software Occlusion Cullingも効いていない
  60. 60. historia Inc. Use Lightmap Directionalityの無効化 パフォーマンス検証について-終盤のパフォーマンス調整- 60 • Use Lightmap Directionality 負荷が小さくなる ライトマップからのライティングがフラットになる Pixel Shader(マテリアル)の負荷が高い ライティング対象の 一部マテリアルで無効化 見た目への影響は小さかった 描画負荷は僅かに改善
  61. 61. historia Inc. Texture Sampleの削減 パフォーマンス検証について-終盤のパフォーマンス調整- 61 背景の負荷が高め Normal MapとPanner Noiseを削除 シーン全体で1ms改善 Texture Sampleが多い
  62. 62. historia Inc. Reflection Captureの範囲縮小 パフォーマンス検証について-終盤のパフォーマンス調整- 62 背景全域を包むような範囲 Reflection Captureの範囲が広い 範囲を縮小 プレイエリアの外周を覆う程度まで縮小 僅かにパフォーマンス向上
  63. 63. historia Inc. 大気フォグの代替 パフォーマンス検証について-終盤のパフォーマンス調整- 63 • 大気フォグの使用 遠近感を出すために必要 Disable Vertex Foggingを 無効にして使用 天球への焼きこみに代替 Disable Vertex Fogging in mobile shaders の有効化により負荷軽減
  64. 64. historia Inc. Pixel Densityの変更 パフォーマンス検証について-終盤のパフォーマンス調整- 64 • Pixel Densityを0.95に変更 ゲームのどこを見ても72FPSを維持 少しボヤっとした見た目になる よりよいゲーム体験の実現のため 最後の詰めにPixel Densityを調整
  65. 65. historia Inc. まとめ(グラフィックスパフォーマンスについて) • プロジェクト初期から検証を行い 表現可能な指標を決めてから制作し 現実的に可能な表現を模索した • 定期的なパフォーマンスチェックも行いつつ 終盤では最後の詰めとなる調整を行い より良いゲーム体験を実現した パフォーマンス検証について 65
  66. 66. historia Inc. まとめ • ルームスケールVRという制約の多い制作において 制作の手を止めないためのデバッグ機能や 広いスペースに由来する問題に対処する機能を制作した • Oculus Questという新しいデバイスに対し 事前検証を十分に行い、出来ること・出来ないことを 明確にしてから制作を行った おわりに 66

×