---
title: 【出張ヒストリア2019】Oculus Quest フリーロームVRを実現するための技術的知見
tags:  #ue4 #ue4fest #unreal engine #unrealfest #historia #oculusquest #game #vr #unreal engine 4  
author: [株式会社ヒストリア](https://convert.docswell.com/user/historia_Inc)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/V87DK8L8JG.jpg?width=480
description: 2019年8月4日に行われた「出張ヒストリア！ ゲーム開発勉強会2019」にて発表させていただいた、 「”アスレチックVR PAC–MAN CHALLENGE（パックマンチャレンジ）”制作事例 ～Oculus Questを使用した我々の挑戦～」講演の技術的なパートの内容に、 UNREAL FEST EAST 2019で行った講演内容を書き加えたものです。  マーカーキャリブレーションの解説及びサンプルプロジェクトは以下のURLからDLできます。 https://historia.co.jp/distribution/docs/PC_MarkerCalibration.zip  イベント詳細 https://historia.co.jp/archives/12449/  講演者： 小倉 裕貴（エンジニア）  以下、セッション概要より抜粋。下記のセッションの技術パートのみとなっております。  MAZARIA（池袋）にて稼働中のOculus Quest（PCが必要無く、コードが無いタイプの新VRゴーグル）を使用した フィールドVRアクティビティ、”アスレチックVR PAC–MAN CHALLENGE（パックマンチャレンジ）”。 コードが無いというのは自由に歩き回れるというだけではなく、新たな価値を生み出していました。 前半では本タイトルを通じて得た、コードレスによりもたらされた新たなゲームデザインについてお話いたします。 また、後半ではハードウェアスペックとの戦いや、どのように複数人プレイを実現したかなどの技術的知見をシェア出来ればと思います。
published: March 25, 20
canonical: https://convert.docswell.com/s/historia_Inc/57EDJK-2019oculus-quest-vr-230838116
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/V87DK8L8JG.jpg)

Oculus Quest / フリーロームVR を
実現するための技術的知見
エンジニア
小倉 裕貴
historia Inc.


# Page. 2

![Page Image](https://bcdn.docswell.com/page/4VJPK82WE8.jpg)

スライド配布について
• 一部を配布予定
• プロジェクト配布
– https://historia.co.jp/distribution/docs/PC_MarkerCalibra
tion.zip
– UE4.22にて動作確認済み
はじめに
historia Inc.
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/L2EVVND9EQ.jpg)

略称について
• 「Unreal Engine 4」を「UE4」
• 「Oculus Quest」を「OQ」
• 「Head Mounted Display」を「HMD」
はじめに
historia Inc.
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/Z57GLKY4EL.jpg)

目次
• 開発環境と実装方針
• フリーロームVRのための機能
– 移動スケール
– プラットフォームごとのPawn
– マーカーによるキャリブレーション
• グラフィックスパフォーマンスについて
– 事前のパフォーマンス検証
– 描画オプション検証
– 終盤のパフォーマンス調整
はじめに
historia Inc.
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/V4EQYNMRJP.jpg)

自己紹介
• 小倉 裕貴（Ogura Yuki）
– エンジニア
– historiaブログ管理人
– 宴会ソムリエ
はじめに
historia Inc.
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/DKJ4WGVQ71.jpg)

目次
• 開発環境と実装方針
• フリーロームVRのための機能
– 移動スケール
– プラットフォームごとのPawn
– マーカーによるキャリブレーション
• グラフィックスパフォーマンスについて
– 事前のパフォーマンス検証
– 描画オプション検証
– 終盤のパフォーマンス調整
開発環境と実装方針
historia Inc.
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PLE1YD3L7G.jpg)

開発環境について
• Oculus VR配布のカスタムエンジン
– 最新のOculus SDKsによる実装
– OQ動作要件を満たすために使用
• 最終バージョン UE4.21.2
– 最終的に3回エンジンを変更
時期
プロトタイプ
パフォーマンス検証前
最終バージョン
Version
UE 4.20
UE 4.20
UE 4.21
開発環境と実装方針
historia Inc.
Distribution
EPIC Games
Oculus VR
Oculus VR
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/8GEWGYPQJ2.jpg)

実装方針について(1/2)
• Blueprintで実装
– プロトタイプのイテレーションを重視
– エンジン変更時の修正を減らす
• コードはプラグインとして実装
– Android固有機能でコードが必要
開発環境と実装方針
historia Inc.
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/W47ZLXK3J3.jpg)

実装方針について(2/2)
• 完全なゲームプレイには広いスペースが必要
– 常時使用はできない
– 使用準備に時間がかかる
スペースでの確認を最小限にする
エディタで確認しやすいようにする
開発環境と実装方針
historia Inc.
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/KYJ6W4QZJV.jpg)

目次
• 開発環境と実装方針
• フリーロームVRのための機能
– 移動スケール
– プラットフォームごとのPawn
– マーカーによるキャリブレーション
• グラフィックスパフォーマンスについて
– 事前のパフォーマンス検証
– 描画オプション検証
– 終盤のパフォーマンス調整
フリーロームVRのための機能
historia Inc.
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/5GJ5MQR9J4.jpg)

移動スケール(1/2)
• 自席や狭いスぺースで実機テストしたい
➢HMDの移動量を増やし、少しの移動で大きく動かす機能
Move Scale = 1.0
フリーロームVRのための機能-移動スケール-
historia Inc.
Move Scale = 4.0
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/4LE3WVP2E5.jpg)

移動スケール(2/2)
• CameraコンポーネントのLocationを変更できない
➢HMDの移動に応じて
親コンポーネントの位置をオフセット
オフセットのためのSceneを追加
Locationを変更できない
フリーロームVRのための機能-移動スケール-
historia Inc.
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/V8EDK8L67G.jpg)

移動スケール(2/2)
• CameraコンポーネントのLocationを変更できない
➢HMDの移動に応じて
親コンポーネントの位置をオフセット
HMDの位置から
オフセットを取得
親となるコンポーネントの
位置を調整
フリーロームVRのための機能-移動スケール-
historia Inc.
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/4V7PK84ZJ8.jpg)

目次
• 開発環境と実装方針
• フリーロームVRのための機能
– 移動スケール
– プラットフォームごとのPawn
– マーカーによるキャリブレーション
• グラフィックスパフォーマンスについて
– 事前のパフォーマンス検証
– 描画オプション検証
– 終盤のパフォーマンス調整
フリーロームVRのための機能
historia Inc.
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/L2JVVNXMJQ.jpg)

プラットフォームごとのPawn (1/2)
• エディタと実機で同等のゲームプレイ
– VR空間のプレイヤーと同じ挙動を再現する
➢実行時にプラットフォームによってPawnを切り替える
フリーロームVRのための機能-プラットフォームごとのPawn-
historia Inc.
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/Z5EGLKVXJL.jpg)

プラットフォームごとのPawn (2/2)
• OQで使われるPawn
– VRプロジェクトテンプレートのPawnを改造
• Windowsで使われるPawn
– Default Pawnを改造
– PIEではOQのPawnと同等の挙動を行う
フリーロームVRのための機能-プラットフォームごとのPawn-
historia Inc.
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/V4JQYN657P.jpg)

プラットフォームごとに同等の挙動の実現
➢ インターフェースにより異なる処理を同じように振る舞わせる
➢ 「手で握る」などの固有の処理は、Pawnごとにテストが必要
手で握った物に対して
「Pickup」を実行
何であっても「Pickup」されたら
このフルーツを取得する
コリジョンに触れた物に対して
「Pickup」を実行
フリーロームVRのための機能-プラットフォームごとのPawn-
historia Inc.
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/DK74WG4VE1.jpg)

プラットフォームごとのPawnの切り替え (1/3)
1. 実行プラットフォームを確認
フリーロームVRのための機能-プラットフォームごとのPawn-
historia Inc.
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/PLJ1YD44EG.jpg)

プラットフォームごとのPawnの切り替え (2/3)
2. 実行プラットフォームに応じたDevice Pawn Classを取得
3. Default Pawn Classと異なる場合のみ切り替える
フリーロームVRのための機能-プラットフォームごとのPawn-
historia Inc.
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/8GJWGYXZ72.jpg)

プラットフォームごとのPawnの切り替え (3/3)
4. Device Pawn ClassをSpawnActor
5. Possess
6. 切り替え前のPawnをDestory
フリーロームVRのための機能-プラットフォームごとのPawn-
historia Inc.
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/W4EZLX6L73.jpg)

目次
• 開発環境と実装方針
• フリーロームVRのための機能
– 移動スケール
– プラットフォームごとのPawn
– マーカーによるキャリブレーション
• グラフィックスパフォーマンスについて
– 事前のパフォーマンス検証
– 描画オプション検証
– 終盤のパフォーマンス調整
フリーロームVRのための機能
historia Inc.
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/KY76W42M7V.jpg)

マーカーによるキャリブレーション
• アニメーションを残すためにスライドを分割
• スライドは配布プロジェクト内に添付
https://historia.co.jp/distribution/docs/PC_MarkerC
alibration.zip
はじめに
historia Inc.
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/5G75MQ2Q74.jpg)

まとめ(フリーロームVRのための機能)
• 制作のイテレーションを止めないために
移動スケールやプラットフォームごとのPawnを制作した
• 広いスペースにおけるキャリブレーション問題に対し
マーカーを用いた高精度で運営負担の少ない
キャリブレーション機能を制作した
フリーロームVRのための機能
historia Inc.
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/V9J29P4WER.jpg)

目次
• 開発環境と実装方針
• フリーロームVRのための機能
– 移動スケール
– プラットフォームごとのPawn
– マーカーによるキャリブレーション
• パフォーマンス検証について
– 事前のパフォーマンス検証
– 描画オプション検証
– 終盤のパフォーマンス調整
パフォーマンス検証について
historia Inc.
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/5DEY45M9JM.jpg)

今回目指すパフォーマンスについて
OQの最大フレームレート
72FPSの維持
パフォーマンス検証について
historia Inc.
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/2VJNYNWD78.jpg)

事前のパフォーマンス検証 (1/7)
• OQで可能なグラフィックス表現の目安
◼ポリゴン数
◼テクスチャ枚数
◼半透明 etc ……
企画の仕様に基づいたモックアップで検証
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/GYE9PRX8J3.jpg)

事前のパフォーマンス検証 (2/7)
• ブランクプロジェクトから開始
Mobile向け
Scalable 3D
(Mobile HDR off)
Multi Viewのみ
有効に変更
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/5GE8DW2ZED.jpg)

事前のパフォーマンス検証 (3/7)
• 企画時点の仕様
◼ 8 x 7[m]のスペース
◼ 50 x 50 x 50[cm]のブロックで
床や壁を作る
256個のブロックで
検証レベルを作成
一辺のブロック数
16[個] ≒ 8[m]
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/MLELMN217R.jpg)

事前のパフォーマンス検証 (4/7)
• なぜ床だけ？
◼ オクルージョンカリングで
壁に隠れたブロックが消える
◼ 床が全て見えるとき
最大の描画負荷
実際には……
壁がある方が負荷は大きくなる
（オクルージョンカリングが有効でないため）
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/54JMYX85JW.jpg)

事前のパフォーマンス検証 (5/7)
• 計測方法
1. stat fpsの値を計測
2. 2視点の最悪値を記録
3. メッシュとマテリアル
の組み合わせを変える
全ブロックが映る
真上からの視点
プレイヤーの身長ベースの
斜め俯瞰視点
複数のメッシュと
マテリアルの傾向を調べ
現実的なスペックを求める
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
30


# Page. 31

![Page Image](https://bcdn.docswell.com/page/ZPJR9N5Z79.jpg)

事前のパフォーマンス検証 (6/7)
• 使用するブロック
◼Verticesなどが異なる12種類
SM1
Triangles:12
Vertices:24
SM4
Triangles:360
Vertices:216
SM6
Triangles:620
Vertices:402
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
SM12
Triangles:1404
Vertices:816
31


# Page. 32

![Page Image](https://bcdn.docswell.com/page/NPEXQNK1JX.jpg)

事前のパフォーマンス検証 (7/7)
• 使用するマテリアル
◼Instructions, Texture Lookupsなどが異なる12種類
◼BlendModeを変えたものをそれぞれずつ用意
M_Cube01O
BlendMode:Opaque
M_Cube04O
BlendMode:Opaque
M_Cube07T
BlendMode:Translucent
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
M_Cube12M
BlendMode:Masked
32


# Page. 33

![Page Image](https://bcdn.docswell.com/page/63EK9N5MED.jpg)

事前のパフォーマンス検証 (1/6)
列：使用メッシュ
緑のセル：FPS≥70
行：使用マテリアル
赤のセル：FPS&lt;40
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
33


# Page. 34

![Page Image](https://bcdn.docswell.com/page/4L73WVK275.jpg)

事前のパフォーマンス検証 (2/6)
TranslucentはOpaqueよりも重い
量が多い床・壁には
Opaque
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
34


# Page. 35

![Page Image](https://bcdn.docswell.com/page/V87DK836JG.jpg)

事前のパフォーマンス検証 (3/6)
「軽量」なマテリアルのとき
FPSを維持できる妥当なスペック
ブロックあたりポリゴン数
150～250
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
35


# Page. 36

![Page Image](https://bcdn.docswell.com/page/4VJPK8PZE8.jpg)

事前のパフォーマンス検証 (4/6)
「軽量」なUnlitなマテリアルは
Opaqueなら負荷は低い
半透明を使うなら
Unlit
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
36


# Page. 37

![Page Image](https://bcdn.docswell.com/page/L2EVVN2MEQ.jpg)

事前のパフォーマンス検証 (5/6)
• Texture Lookup(PS)でソートした結果(昇順)
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
37


# Page. 38

![Page Image](https://bcdn.docswell.com/page/Z57GLKRXEL.jpg)

事前のパフォーマンス検証 (6/6)
• Texture Lookup(PS)でソートした結果(昇順)
Texture Lookupが1枚以下は
2枚以上より軽い傾向
量の多い床や壁のテクスチャは
1枚
パフォーマンス検証について-事前のパフォーマンス検証-
historia Inc.
38


# Page. 39

![Page Image](https://bcdn.docswell.com/page/V4EQYNV5JP.jpg)

目次
• 開発環境と実装方針
• フリーロームVRのための機能
– 移動スケール
– プラットフォームごとのPawn
– マーカーによるキャリブレーション
• グラフィックスパフォーマンスについて
– 事前のパフォーマンス検証
– 描画オプション検証
– 終盤のパフォーマンス調整
パフォーマンス検証について
historia Inc.
39


# Page. 40

![Page Image](https://bcdn.docswell.com/page/DKJ4WGMV71.jpg)

描画オプション検証 (1/12)
Mobile HDRを使用したい……
負荷軽減する描画オプションを調査して
Mobile HDRを使用する余地を探る
◼
◼
◼
◼
◼
OpenGL ES3.1
Vulkan
FFR Level
Mobile MSAA
Mobile Multi-View etc……
パフォーマンス検証について-描画オプション検証-
historia Inc.
40


# Page. 41

![Page Image](https://bcdn.docswell.com/page/PLE1YD847G.jpg)

描画オプション検証 (2/12)
• 検証方法
◼MARZA様制作のテストレベルを使用
◼プレイヤー想定の4アングルを用意
◼描画オプションを変えてFPSを測定
パフォーマンス検証について-描画オプション検証-
historia Inc.
41


# Page. 42

![Page Image](https://bcdn.docswell.com/page/8GEWGYZZJ2.jpg)

描画オプション検証 (3/12)
• Support OpenGL ES3.1
◼ハイエンドモバイル向けシェーダー機能の拡張
◼テクスチャ枚数制限の緩和
結果
有効にすると最大6msほど悪化
Angle 1
Disable 43(23.199ms)
Enable 38(26.171ms)
Angle 2
40(24.141ms)
37(26.684ms)
Angle 3
Angle 4
27(35.748ms) 72(14.033ms)
24(41.766ms) 71(14.153ms)
パフォーマンス検証について-描画オプション検証-
historia Inc.
42


# Page. 43

![Page Image](https://bcdn.docswell.com/page/W47ZLX1LJ3.jpg)

描画オプション検証 (4/12)
• Support Vulkan
◼ オーバーヘッドを低減し、描画・電力効率を改善する
◼ Mobile HDRが必要?
◼ Mobile Multi-View / Mobile Multi-View Directと併用できない?
結果
他のオプションと競合し、
起動しない・画面がチラつくなど
安定して使えない（※検証当時の結果）
パフォーマンス検証について-描画オプション検証-
historia Inc.
43


# Page. 44

![Page Image](https://bcdn.docswell.com/page/KYJ6W4LMJV.jpg)

描画オプション検証 (5/12)
• FFRLevel
◼視点中央から離れるほど解像度を下げる
結果
タイプによって最大8msほど改善
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)
パフォーマンス検証について-描画オプション検証-
historia Inc.
44


# Page. 45

![Page Image](https://bcdn.docswell.com/page/5GJ5MQ1QJ4.jpg)

描画オプション検証 (6/12)
• Disable Vertex Fogging in mobile shaders
◼有効にするとモバイルで大気フォグを省略する
結果
有効にすると1～2msほど改善
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)
パフォーマンス検証について-描画オプション検証-
historia Inc.
45


# Page. 46

![Page Image](https://bcdn.docswell.com/page/V9E29P1W7R.jpg)

描画オプション検証 (7/12)
• 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)
パフォーマンス検証について-描画オプション検証-
historia Inc.
46


# Page. 47

![Page Image](https://bcdn.docswell.com/page/5D7Y45Z9EM.jpg)

描画オプション検証 (8/12)
• Mobile Multi-View / Mobile Multi-View Direct
◼ CPU負荷を下げるVR最適化用のオプション
◼ Mobile版のステレオレンダリングのようなもの
◼ Mobile HDRと併用できない
結果
有効にすると最大6msほど改善
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)
パフォーマンス検証について-描画オプション検証-
historia Inc.
47


# Page. 48

![Page Image](https://bcdn.docswell.com/page/2VENYN3DJ8.jpg)

描画オプション検証 (9/12)
• Monoscopic Far Field Rendering
◼ 両眼用に2回必要な遠景の描画を1回にまとめる
◼ Mobile HDRと併用できない
◼ Mobile Multi-View / Mobile Multi-View Directと併用できない?
結果
Oculusカスタムエンジンでのみ
該当のオプションが存在しない
パフォーマンス検証について-描画オプション検証-
historia Inc.
48


# Page. 49

![Page Image](https://bcdn.docswell.com/page/GY79PR98E3.jpg)

描画オプション検証 (10/12)
• Mask-based Foveated Rendering
– 視点中央から離れるほど解像度を下げる ≒ FFRLevel
• Anti Aliasing Method
– 使用するアンチエイリアシング手法 ≒ Mobile MSAA
• Instanced Stereo
– 両眼用に2回必要なレンダリングを1回にする ≒ Mobile MultiView
結果
Mobileでは効果がない（Desktop向け機能）
パフォーマンス検証について-描画オプション検証-
historia Inc.
49


# Page. 50

![Page Image](https://bcdn.docswell.com/page/5G78DW9Z7D.jpg)

描画オプション検証 (11/12)
• Mobile HDR
◼ハイエンドモバイル向けの機能を使えるようにする
◼マテリアルで実現できる表現が拡張される
結果
有効にすると最大7msほど悪化
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)
パフォーマンス検証について-描画オプション検証-
historia Inc.
50


# Page. 51

![Page Image](https://bcdn.docswell.com/page/ML7LMNW1JR.jpg)

描画オプション検証 (12/12)
• Mobile HDRを使用するか？
MobileHDR前提の機能は多い
パフォーマンスの低下が著しい
• OQのサンプルゲーム「First Steps」を参考に
◼半透明による発光表現の代替など
Mobile HDRなしで可能な表現で作りこむ方針へ
パフォーマンス検証について-描画オプション検証-
historia Inc.
51


# Page. 52

![Page Image](https://bcdn.docswell.com/page/54EMYX95EW.jpg)

最終設定
オプション名
設定
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
パフォーマンス検証について-描画オプション検証-
historia Inc.
52


# Page. 53

![Page Image](https://bcdn.docswell.com/page/ZPER9NGZJ9.jpg)

目次
• 開発環境と実装方針
• フリーロームVRのための機能
– 移動スケール
– プラットフォームごとのPawn
– マーカーによるキャリブレーション
• グラフィックスパフォーマンスについて
– 事前のパフォーマンス検証
– 描画オプション検証
– 終盤のパフォーマンス調整
パフォーマンス検証について
historia Inc.
53


# Page. 54

![Page Image](https://bcdn.docswell.com/page/NP7XQNX1EX.jpg)

終盤のパフォーマンス調整
• 中盤も最適化を続ける
◼頂点数の削減
◼マテリアルの改善 etc......
しかし、部分的に負荷が大きい……
負荷の大きい部分を調査
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
54


# Page. 55

![Page Image](https://bcdn.docswell.com/page/637K9NWM7D.jpg)

Merge Actor (1/2)
• 複数のメッシュを1つにまとめる機能
Draw Callがまとまり、Draw負荷が下がる
Cullingが効き難くなり、GPU負荷が上がる
Merge Actor前
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
Merge Actor後
55


# Page. 56

![Page Image](https://bcdn.docswell.com/page/4LJ3WV12J5.jpg)

Merge Actor (1/2)
• 複数のメッシュを1つにまとめる機能
Draw Callがまとまり、Draw負荷が下がる
Cullingが効き難くなり、GPU負荷が上がる
DrawとGPUの負荷バランスが最良となる
Merge Actorの組み合わせを調べる
Merge Actor前
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
Merge Actor後
56


# Page. 57

![Page Image](https://bcdn.docswell.com/page/V8JDK8X6EG.jpg)

Merge Actor (2/2)
• ラウンドのMerge Actor
◼床・壁を小分けの
区画としてMerge Actor
◼マテリアルLODを設定
区画の大きさを変えてもDraw負荷が優勢……
ラウンドの床・壁を全て一つにMerge Actor
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
57


# Page. 58

![Page Image](https://bcdn.docswell.com/page/4VEPK8KZ78.jpg)

Software Occlusion Culling (1/2)
Occlusion Cullingが動作していない
• Software Occlusion Culling
◼ MobileでOcclusion Cullingを行うための代替機能
◼ 遮蔽物となるメッシュを事前にOccluderに設定し
Occluderに遮蔽されたメッシュのみCullingする機能
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
58


# Page. 59

![Page Image](https://bcdn.docswell.com/page/L27VVNVM7Q.jpg)

Software Occlusion Culling (2/2)
Software Occlusion Cullingも効いていない
◼ Opaque以外のマテリアルが割り振られていたため
◼ 床・壁とネオン管のメッシュを
分離する必要がある
終盤での修正は困難……
Occlusion Cullingは断念
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
59


# Page. 60

![Page Image](https://bcdn.docswell.com/page/Z5JGLKLX7L.jpg)

Use Lightmap Directionalityの無効化
Pixel Shader（マテリアル）の負荷が高い
• Use Lightmap Directionality
負荷が小さくなる
ライトマップからのライティングがフラットになる
ライティング対象の
一部マテリアルで無効化
見た目への影響は小さかった
描画負荷は僅かに改善
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
60


# Page. 61

![Page Image](https://bcdn.docswell.com/page/V47QYNY5EP.jpg)

Texture Sampleの削減
背景の負荷が高め
◼Texture Sampleが多い
Normal MapとPanner Noiseを削除
シーン全体で1ms改善
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
61


# Page. 62

![Page Image](https://bcdn.docswell.com/page/DKE4WGWVJ1.jpg)

Reflection Captureの範囲縮小
Reflection Captureの範囲が広い
◼背景全域を包むような範囲
範囲を縮小
プレイエリアの外周を覆う程度まで縮小
僅かにパフォーマンス向上
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
62


# Page. 63

![Page Image](https://bcdn.docswell.com/page/PL71YDY4JG.jpg)

大気フォグの代替
• 大気フォグの使用
◼遠近感を出すために必要
◼Disable Vertex Foggingを
無効にして使用
天球への焼きこみに代替
Disable Vertex Fogging in mobile shaders の有効化により負荷軽減
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
63


# Page. 64

![Page Image](https://bcdn.docswell.com/page/8G7WGYGZE2.jpg)

Pixel Densityの変更
• Pixel Densityを0.95に変更
ゲームのどこを見ても72FPSを維持
少しボヤっとした見た目になる
よりよいゲーム体験の実現のため
最後の詰めにPixel Densityを調整
パフォーマンス検証について-終盤のパフォーマンス調整-
historia Inc.
64


# Page. 65

![Page Image](https://bcdn.docswell.com/page/W4JZLXLLE3.jpg)

まとめ(グラフィックスパフォーマンスについて)
• プロジェクト初期から検証を行い
表現可能な指標を決めてから制作し
現実的に可能な表現を模索した
• 定期的なパフォーマンスチェックも行いつつ
終盤では最後の詰めとなる調整を行い
より良いゲーム体験を実現した
パフォーマンス検証について
historia Inc.
65


# Page. 66

![Page Image](https://bcdn.docswell.com/page/KYE6W4WMEV.jpg)

まとめ
• ルームスケールVRという制約の多い制作において
制作の手を止めないためのデバッグ機能や
広いスペースに由来する問題に対処する機能を制作した
• Oculus Questという新しいデバイスに対し
事前検証を十分に行い、出来ること・出来ないことを
明確にしてから制作を行った
おわりに
historia Inc.
66


