Copyright © 2018 TIS Inc. All rights reserved.
戦略技術センター
大島昇時
第9回 HoloLens参考書読書会@アカツキ
ch.10 デバッグとパフォーマンス
Copyright © 2018 TIS Inc. All rights reserved.
自己紹介
名前 : 大島昇時
ハンドル : さんすうP @Sansuusetto
所属 : TIS株式会社 戦略技術センター
1
Copyright © 2018 TIS Inc. All rights reserved.
・三菱のグループ会社で、組み込み系エンジニア約4年
・映像系の中小で、マネージャ、映像制作、VRゲーム制作約3年
・TISに2018/02入社。xRの研究開発を行う
組み込み系エンジニア・エンタメ系エンジニア・映像制作・
企画・ディレクションと、結構色々やってきたので、その辺
りの経験を交えつつ、お話していきたいと思います。
2
経歴
Copyright © 2018 TIS Inc. All rights reserved.
今日覚えて帰ること
• Debug
– Unity + Holo + 一般的な開発でのDebugの基本
• PerformanceTuning
– Profilerの見方
– Tuningの基本
3
Copyright © 2018 TIS Inc. All rights reserved.
Debug編
4
Copyright © 2018 TIS Inc. All rights reserved.
Debug
5
No Debug方法 重要度(5段階)
1 IDE(VisualStudio)でDebugする ★★★★★
2 HoloをRemoteでDebugする ★★★★★
3 Logを出力する ★★★★★
全部大事。この辺りを使いこなせないと確実に開発で躓きます。
Copyright © 2018 TIS Inc. All rights reserved.
IDE(VisualStudio)でDebug
VisualStudioでUnityEditorにアタッチしてステップ実行する
事ができる。
超使う。これが無いと始まらない。
上記赤枠を押下し、UnityEditorでPlayするだけ。
7
Copyright © 2018 TIS Inc. All rights reserved.
IDE(VisualStudio)でDebug
実行を中断したい行でF9を押下すると、ブレークポイントを
設定することができる。
実行中にブレークポイントの箇所が実行される直前に処理を
一時停止し、その時点の変数の値を確認することができる。
F10で次の行まで実行(ステップオーバー)
F11で当該行の中で実行される関数の中へ移動(ステップイン)
8
Copyright © 2018 TIS Inc. All rights reserved.
HoloをRemoteでDebugす
る
9
実機で動かしてDebugしたい場合は「Holographic
Remoting Player」を使います。
まずは、HoloLens本体に上記アプリをインストールしま
しょう。
Copyright © 2018 TIS Inc. All rights reserved.
HoloをRemoteでDebugす
る
Holo上でHolographicRemotingPlayerを立ち上げた状態で、
以下の通り実行すると、HoloとRemoteで繋がるので通常通
りDebugできます。ビルドしなくていいので楽。
10
IPアドレスを入力した後、
Enterを押下しないとつなが
りません
1
2
3
4
Copyright © 2018 TIS Inc. All rights reserved.
Logを出力する
問題の発生原因を特定するため、Logは重要です。
しかし、Logを入れなくても機能自体には影響しないため、
意外と軽視されがち。
11
Copyright © 2018 TIS Inc. All rights reserved.
Log出力関数の種類
12
↓いっぱいあるけどどれを使えば?
Copyright © 2018 TIS Inc. All rights reserved.
Log出力関数の種類
13
それぞれこんな感じで
出力されます。
GameObjectを指定すると、
Consoleのログをクリックしたとき
に、対象のオブジェクトが
Hieralky上でハイライトされる
Copyright © 2018 TIS Inc. All rights reserved. 14
Log出力関数の種類
この辺りの設定はDebug.Logで
出力した際にも有効となる
Copyright © 2018 TIS Inc. All rights reserved.
以上のように、Log出力関数自体はどれも大差ないので好き
な物を使えば良いと思います。
ただ、私は標準の機能では色々と不便なので、Log出力の
Helperクラスを作って使っています。
15
Log出力関数の種類
Copyright © 2018 TIS Inc. All rights reserved.
こんな感じ
16
以下の情報が自動的に付加される
・Tick
・ファイル名
・関数名
・行数
Copyright © 2018 TIS Inc. All rights reserved.
• C#5.0で追加されたCallerInfoを使うことにより
メソッドの呼び出し元の情報を取得し、
ログとして出力する
17
仕組み
.NETのバージョンが古いと
動かないので、ご注意
Copyright © 2018 TIS Inc. All rights reserved.
なんとなくLogを追加しても問題個所の特定にはあまり役に
立たないので、イイ感じにLogを出力したい。
どこで、どんな情報を出力すべきか。
18
Logで問題個所を特定するために
Copyright © 2018 TIS Inc. All rights reserved.
下記表の様に、出力すべきLogの種別を予めプロジェクト内
部で決めておきましょう。
それぞれがなんとなくLogを入れると、それが問題特定の妨
げになることが往々にして起こります。
19
LogLevelを設計する
No Level 出力内容 ビルド時
1 Trace Debug時に処理を追いかけるための詳細情報 ×
2 Info 正常系の重要な情報・処理結果 〇
3 Warning エラーっぽいけどほんとに大丈夫?という確認 〇
4 Assert 実行時に満たすべき条件の判定結果 ×
5 Error 異常系の重要な情報・処理結果 〇
6 Exception IOの失敗等、クリティカルなエラーのException情報 〇
※上記表は例であり、正解はありません
Copyright © 2018 TIS Inc. All rights reserved.
・パフォーマンス
- Update()で毎フレーム出力されるログを出力しない
・セキュリティ(作る物によるが、一般的に)
- パスワード等の重要な情報は出力しない
- 平文でLogを保持しない
・追跡のしやすさ
- 異常系だけではなく、正常系のログも残す
20
Loggingで考慮すべきこと
Copyright © 2018 TIS Inc. All rights reserved.
Performance
Tuning編
21
Copyright © 2018 TIS Inc. All rights reserved.
Tuningの分類
22
大きく分けて下記の2種類がある
・Script
・Graphics
↑
今回はGraphicsをメインに解説する
Copyright © 2018 TIS Inc. All rights reserved.
ここから難しい話をします
23
Copyright © 2018 TIS Inc. All rights reserved.
Unityの
RenderingPipelineの話
24
Copyright © 2018 TIS Inc. All rights reserved.
レンダリングするフレーム毎に、
CPUは次の作業を行う。
1. レンダリング対象の選定 ( 視錐台カリング ( Frustum culling ) )
2. 描画するオブジェクトの情報を収集し、描画コマンド(DrawCall)
順にソートする。このとき特定条件下でDrawCallをまとめる処理
を行う(Batching)
3. 各DrawCall呼び出し毎にBatchと呼ばれるデータのパケットを生
成する
DrawCall:グラフィックスAPI を使用して、
画面に描画を行う際に呼び出す命令の事
25
CPUとGPUの役割
Copyright © 2018 TIS Inc. All rights reserved.
Batch毎にCPUは次の作業を行う。
1. GPUに対して次のメッシュのレンダリングに使用する設定をGPU
に指示する(SetPassCall)この呼び出しは、次のメッシュが前の
メッシュからのレンダリング状態(RenderState)の変更を必要と
する場合にのみ送信される
2. DrawCallをGPUに送信する。DrawCallは、最新のSetPassCallで
定義された設定を使用して、指定されたメッシュをレンダリング
するようにGPUに指示する
3. Batchに複数のPassがある場合は、レンダリング状態への変更を
必要とするため、CPUは新しいSetPassCallを送信しなければな
らず、次にDrawCallを再度送信する必要がある
26
CPUとGPUの役割
Copyright © 2018 TIS Inc. All rights reserved.
GPUは次の作業を行う。
• GPUは、送信された順にCPUからのタスクを処理する
• 現在のタスクがSetPassCallである場合、GPUはレンダリング状態を
更新する
• 現在のタスクがDrawCallの場合、GPUはメッシュをレンダリングす
る
• 上記プロセスは、CPUから送信されたすべてのタスクがGPUによって
処理されるまで繰り返される
27
CPUとGPUの役割
Copyright © 2018 TIS Inc. All rights reserved.
CPU
• 描画対象の決定
• GPU用のコマンドの準備
• GPUにコマンドを送信する
GPU
• CPUから要求された通りレンダリング状態を更新し、
メッシュを描画する
まずは、CPUとGPUのどちらがボトルネックとなっ
ているのか調べることから始めましょう
28
まとめると
Copyright © 2018 TIS Inc. All rights reserved.
Profilerの見方
29
Ctrl+7 or Window->Profilerで出せる
Copyright © 2018 TIS Inc. All rights reserved. 30
Profilerの見方
DefaultではGPUのProfiler
が非表示なので出してお
くとよい
Copyright © 2018 TIS Inc. All rights reserved.
CPU/GPUのどちらに時間がかかっているかで、
ボトルネックが分かる
31
Profilerの見方
Copyright © 2018 TIS Inc. All rights reserved. 32
Profilerの見方
該当の関数、および
その関数によって呼
び出される全ての関
数が消費する時間
の合計
該当の関数自体
が消費する時間
どの処理で時間がかかっ
ているかグラフィカルに
確認できる
Copyright © 2018 TIS Inc. All rights reserved. 33
Profilerの見方
どのスレッドでどんな
処理をしているのか
確認できる
※重要※
どのスレッドがボトルネックになっているか確認すること
Copyright © 2018 TIS Inc. All rights reserved.
VSyncは描画の同期待ちなので、厳密にはCPUの処理ではありま
せん。なので気にしなくてよいです。
34
VSyncについて
Copyright © 2018 TIS Inc. All rights reserved. 35
HoloとProfilerを繋ぐ
ここにチェックを入れて
いつも通りビルドして、
Holoにデプロイする
Copyright © 2018 TIS Inc. All rights reserved. 36
HoloとProfilerを繋ぐ
Holoでアプリが動作した後、
HoloのIPアドレスを入力して、
Connectを押下すると実機の
パフォーマンスを見ることができる
Copyright © 2018 TIS Inc. All rights reserved.
お待たせしました
ここからTuningの話です
37
Copyright © 2018 TIS Inc. All rights reserved.
Tuningの基本
38
チューニング項目 デザイナー エンジニア 効果
DrawCallを減らす 〇 × ★★★★★
Meshを減らす 〇 × ★★★★★
Texture解像度を下げる 〇 × ★★★★
GameObject(Update)を減らす 〇 〇 ★★
Scriptを調整する × 〇 ★★
Shaderを調整する × 〇 ★★★★★★★★
★★★★★★★★
※これは個人の感想です
あと作るものによって大きく変わる
Copyright © 2018 TIS Inc. All rights reserved.
前述の表の補足
HoloLensでの開発における、ありがちなチューニング項目
を書いています。
当然、個々のアプリケーションでボトルネックは異なります。
なので表に無い項目がボトルネックとなっている可能性は十
分にあります。まずは、Profilerでボトルネックを見つける
ことが重要です。
あと、影響の大きいShadowとかLighting周りとか省いてい
ます。
この辺り書くと話が広がりすぎるし、Holoでそんなリッチ
な表現やらないですよね?
39
Copyright © 2018 TIS Inc. All rights reserved.
・可能な限りMaterialを減らす
→複数のTextureがある場合は、結合して一つのTextureにする
・SkinedMeshRenderを減らす
→理想は1キャラにつき1つ
・材質の違いはMapping用のTextureで表現する
→MetallicSmoothnessなんかはよく使う
ex.革と鉄の材質を1つのマテリアルで表現する等
・静的なオブジェクトはStaticにする
→StaticBatchingが行われることにより、DrawCallが減る
40
DrawCallを減らす
Copyright © 2018 TIS Inc. All rights reserved.
• 1キャラにつき、できれば5kポリゴン以内に収める
→作るものとデバイスによるので、何とも言いにくいが、
多くとも10k以内にしたい。
41
Meshを減らす
Copyright © 2018 TIS Inc. All rights reserved.
• 基本はメッシュの面積に比例してTexture解像度を
増減させ、妥協点を探る
→キャラクターの場合、人間は顔に注目しやすいため、
頭の解像度を高くして、それ以外を落とすというのも
よく使われている
42
Texture解像度を下げる
Copyright © 2018 TIS Inc. All rights reserved.
• 可能であれば、Modelに対して「OptimizeGameObject」
をかけてあげると良い
• Scriptは、可能な限りMonoBehaviourを継承しない
→Inspectorを使いたいがために、MonoBehaviourを継承するのは非常に無
駄
ちょっと、この辺話すと長くなるので割愛します
43
GameObject(Update)を減らす
Copyright © 2018 TIS Inc. All rights reserved. 44
その他
このチェックは外しておきましょう。
(DefaultはON)
これを有効にすると、メモリ消費量が
2倍になります。
有効にする必要があるのは以下の場合
-負のスケーリング((-1、1、 1)など)
- シアターランズフォーン(例えば、回転さ
せたメッシュにスケルトンした親トラック
フォームがある場合)
Copyright © 2018 TIS Inc. All rights reserved.
Script・Shaderの
調整は割愛します。
難易度高くなるし、
時間もたりないので。
45
Copyright © 2018 TIS Inc. All rights reserved.
こんな事は色々な場所で散々言わ
れてるから知ってるけど
具体的にどうやるんじゃ!
という人のために。
46
Copyright © 2018 TIS Inc. All rights reserved.
<題材>
Holoで
UnityChanを7体出してみる
47
Copyright © 2018 TIS Inc. All rights reserved.
調整前
48
※PC上でキャプチャした映像です
Batches : 265
SetPassCall: 22
Tris : 220k
Copyright © 2018 TIS Inc. All rights reserved. 49
調整前 ※Holo実機のProfilerです
Copyright © 2018 TIS Inc. All rights reserved.
結果
60FPSを下回る事が多々あり、
頭を動かすと結構カクつく
50
Copyright © 2018 TIS Inc. All rights reserved.
調整後
51
※PC上でキャプチャした映像です
Batches : 71
SetPassCall: 14
Tris : 67k
Copyright © 2018 TIS Inc. All rights reserved.
調整後
52
※Holo実機のProfilerです
Copyright © 2018 TIS Inc. All rights reserved.
結果
60FPS以上を保ちつつ、
見た目はほぼ変わらない
(目立つ破綻を直したのでむしろきれいになった)
53
Copyright © 2018 TIS Inc. All rights reserved.
何をしたか
54
Copyright © 2018 TIS Inc. All rights reserved.
↓前述の表とおなじもの
55
チューニング項目 デザイナー エンジニア 効果
DrawCallを減らす 〇 × ★★★★★
Meshを減らす 〇 × ★★★★★
Texture解像度を下げる 〇 × ★★★★
GameObject(Update)を減らす 〇 〇 ★★
Scriptを調整する × 〇 ★★
Shaderを調整する × 〇 ★★★★★★★★
★★★★★★★★
※これは個人の感想です
あと作るものによって大きく変わる
とりあえず上記3つはどんなプロ
ジェクトでもやっておく。
それでも解決しない場合は、色々
大変な思いをすることになる
Copyright © 2018 TIS Inc. All rights reserved.
最適化した結果
56
Batches : 40
SetPassCall: 13
Tris : 31.5k
Batches : 12
SetPassCall: 9
Tris : 9.6k
Before After
理想は
Batch/SetPass
それぞれ1です
Copyright © 2018 TIS Inc. All rights reserved.
具体的なやり方
57
Copyright © 2018 TIS Inc. All rights reserved.
お土産動画
58
お土産を用意したので
見たい方は下記からご覧ください
又は、YouTubeで「HoloLens参考書読書会」で検索
Copyright © 2018 TIS Inc. All rights reserved.
最後に
59
Copyright © 2018 TIS Inc. All rights reserved.
生兵法は大怪我の基です。
それぞれの責務範囲で
出来る事をやりましょう。
あと、仕様を見直すことも大事です。
無理なものは無理。
60
THANK YOU

HoloLens参考書読書会 vol9

  • 1.
    Copyright © 2018TIS Inc. All rights reserved. 戦略技術センター 大島昇時 第9回 HoloLens参考書読書会@アカツキ ch.10 デバッグとパフォーマンス
  • 2.
    Copyright © 2018TIS Inc. All rights reserved. 自己紹介 名前 : 大島昇時 ハンドル : さんすうP @Sansuusetto 所属 : TIS株式会社 戦略技術センター 1
  • 3.
    Copyright © 2018TIS Inc. All rights reserved. ・三菱のグループ会社で、組み込み系エンジニア約4年 ・映像系の中小で、マネージャ、映像制作、VRゲーム制作約3年 ・TISに2018/02入社。xRの研究開発を行う 組み込み系エンジニア・エンタメ系エンジニア・映像制作・ 企画・ディレクションと、結構色々やってきたので、その辺 りの経験を交えつつ、お話していきたいと思います。 2 経歴
  • 4.
    Copyright © 2018TIS Inc. All rights reserved. 今日覚えて帰ること • Debug – Unity + Holo + 一般的な開発でのDebugの基本 • PerformanceTuning – Profilerの見方 – Tuningの基本 3
  • 5.
    Copyright © 2018TIS Inc. All rights reserved. Debug編 4
  • 6.
    Copyright © 2018TIS Inc. All rights reserved. Debug 5 No Debug方法 重要度(5段階) 1 IDE(VisualStudio)でDebugする ★★★★★ 2 HoloをRemoteでDebugする ★★★★★ 3 Logを出力する ★★★★★ 全部大事。この辺りを使いこなせないと確実に開発で躓きます。
  • 7.
    Copyright © 2018TIS Inc. All rights reserved. IDE(VisualStudio)でDebug VisualStudioでUnityEditorにアタッチしてステップ実行する 事ができる。 超使う。これが無いと始まらない。 上記赤枠を押下し、UnityEditorでPlayするだけ。 7
  • 8.
    Copyright © 2018TIS Inc. All rights reserved. IDE(VisualStudio)でDebug 実行を中断したい行でF9を押下すると、ブレークポイントを 設定することができる。 実行中にブレークポイントの箇所が実行される直前に処理を 一時停止し、その時点の変数の値を確認することができる。 F10で次の行まで実行(ステップオーバー) F11で当該行の中で実行される関数の中へ移動(ステップイン) 8
  • 9.
    Copyright © 2018TIS Inc. All rights reserved. HoloをRemoteでDebugす る 9 実機で動かしてDebugしたい場合は「Holographic Remoting Player」を使います。 まずは、HoloLens本体に上記アプリをインストールしま しょう。
  • 10.
    Copyright © 2018TIS Inc. All rights reserved. HoloをRemoteでDebugす る Holo上でHolographicRemotingPlayerを立ち上げた状態で、 以下の通り実行すると、HoloとRemoteで繋がるので通常通 りDebugできます。ビルドしなくていいので楽。 10 IPアドレスを入力した後、 Enterを押下しないとつなが りません 1 2 3 4
  • 11.
    Copyright © 2018TIS Inc. All rights reserved. Logを出力する 問題の発生原因を特定するため、Logは重要です。 しかし、Logを入れなくても機能自体には影響しないため、 意外と軽視されがち。 11
  • 12.
    Copyright © 2018TIS Inc. All rights reserved. Log出力関数の種類 12 ↓いっぱいあるけどどれを使えば?
  • 13.
    Copyright © 2018TIS Inc. All rights reserved. Log出力関数の種類 13 それぞれこんな感じで 出力されます。 GameObjectを指定すると、 Consoleのログをクリックしたとき に、対象のオブジェクトが Hieralky上でハイライトされる
  • 14.
    Copyright © 2018TIS Inc. All rights reserved. 14 Log出力関数の種類 この辺りの設定はDebug.Logで 出力した際にも有効となる
  • 15.
    Copyright © 2018TIS Inc. All rights reserved. 以上のように、Log出力関数自体はどれも大差ないので好き な物を使えば良いと思います。 ただ、私は標準の機能では色々と不便なので、Log出力の Helperクラスを作って使っています。 15 Log出力関数の種類
  • 16.
    Copyright © 2018TIS Inc. All rights reserved. こんな感じ 16 以下の情報が自動的に付加される ・Tick ・ファイル名 ・関数名 ・行数
  • 17.
    Copyright © 2018TIS Inc. All rights reserved. • C#5.0で追加されたCallerInfoを使うことにより メソッドの呼び出し元の情報を取得し、 ログとして出力する 17 仕組み .NETのバージョンが古いと 動かないので、ご注意
  • 18.
    Copyright © 2018TIS Inc. All rights reserved. なんとなくLogを追加しても問題個所の特定にはあまり役に 立たないので、イイ感じにLogを出力したい。 どこで、どんな情報を出力すべきか。 18 Logで問題個所を特定するために
  • 19.
    Copyright © 2018TIS Inc. All rights reserved. 下記表の様に、出力すべきLogの種別を予めプロジェクト内 部で決めておきましょう。 それぞれがなんとなくLogを入れると、それが問題特定の妨 げになることが往々にして起こります。 19 LogLevelを設計する No Level 出力内容 ビルド時 1 Trace Debug時に処理を追いかけるための詳細情報 × 2 Info 正常系の重要な情報・処理結果 〇 3 Warning エラーっぽいけどほんとに大丈夫?という確認 〇 4 Assert 実行時に満たすべき条件の判定結果 × 5 Error 異常系の重要な情報・処理結果 〇 6 Exception IOの失敗等、クリティカルなエラーのException情報 〇 ※上記表は例であり、正解はありません
  • 20.
    Copyright © 2018TIS Inc. All rights reserved. ・パフォーマンス - Update()で毎フレーム出力されるログを出力しない ・セキュリティ(作る物によるが、一般的に) - パスワード等の重要な情報は出力しない - 平文でLogを保持しない ・追跡のしやすさ - 異常系だけではなく、正常系のログも残す 20 Loggingで考慮すべきこと
  • 21.
    Copyright © 2018TIS Inc. All rights reserved. Performance Tuning編 21
  • 22.
    Copyright © 2018TIS Inc. All rights reserved. Tuningの分類 22 大きく分けて下記の2種類がある ・Script ・Graphics ↑ 今回はGraphicsをメインに解説する
  • 23.
    Copyright © 2018TIS Inc. All rights reserved. ここから難しい話をします 23
  • 24.
    Copyright © 2018TIS Inc. All rights reserved. Unityの RenderingPipelineの話 24
  • 25.
    Copyright © 2018TIS Inc. All rights reserved. レンダリングするフレーム毎に、 CPUは次の作業を行う。 1. レンダリング対象の選定 ( 視錐台カリング ( Frustum culling ) ) 2. 描画するオブジェクトの情報を収集し、描画コマンド(DrawCall) 順にソートする。このとき特定条件下でDrawCallをまとめる処理 を行う(Batching) 3. 各DrawCall呼び出し毎にBatchと呼ばれるデータのパケットを生 成する DrawCall:グラフィックスAPI を使用して、 画面に描画を行う際に呼び出す命令の事 25 CPUとGPUの役割
  • 26.
    Copyright © 2018TIS Inc. All rights reserved. Batch毎にCPUは次の作業を行う。 1. GPUに対して次のメッシュのレンダリングに使用する設定をGPU に指示する(SetPassCall)この呼び出しは、次のメッシュが前の メッシュからのレンダリング状態(RenderState)の変更を必要と する場合にのみ送信される 2. DrawCallをGPUに送信する。DrawCallは、最新のSetPassCallで 定義された設定を使用して、指定されたメッシュをレンダリング するようにGPUに指示する 3. Batchに複数のPassがある場合は、レンダリング状態への変更を 必要とするため、CPUは新しいSetPassCallを送信しなければな らず、次にDrawCallを再度送信する必要がある 26 CPUとGPUの役割
  • 27.
    Copyright © 2018TIS Inc. All rights reserved. GPUは次の作業を行う。 • GPUは、送信された順にCPUからのタスクを処理する • 現在のタスクがSetPassCallである場合、GPUはレンダリング状態を 更新する • 現在のタスクがDrawCallの場合、GPUはメッシュをレンダリングす る • 上記プロセスは、CPUから送信されたすべてのタスクがGPUによって 処理されるまで繰り返される 27 CPUとGPUの役割
  • 28.
    Copyright © 2018TIS Inc. All rights reserved. CPU • 描画対象の決定 • GPU用のコマンドの準備 • GPUにコマンドを送信する GPU • CPUから要求された通りレンダリング状態を更新し、 メッシュを描画する まずは、CPUとGPUのどちらがボトルネックとなっ ているのか調べることから始めましょう 28 まとめると
  • 29.
    Copyright © 2018TIS Inc. All rights reserved. Profilerの見方 29 Ctrl+7 or Window->Profilerで出せる
  • 30.
    Copyright © 2018TIS Inc. All rights reserved. 30 Profilerの見方 DefaultではGPUのProfiler が非表示なので出してお くとよい
  • 31.
    Copyright © 2018TIS Inc. All rights reserved. CPU/GPUのどちらに時間がかかっているかで、 ボトルネックが分かる 31 Profilerの見方
  • 32.
    Copyright © 2018TIS Inc. All rights reserved. 32 Profilerの見方 該当の関数、および その関数によって呼 び出される全ての関 数が消費する時間 の合計 該当の関数自体 が消費する時間 どの処理で時間がかかっ ているかグラフィカルに 確認できる
  • 33.
    Copyright © 2018TIS Inc. All rights reserved. 33 Profilerの見方 どのスレッドでどんな 処理をしているのか 確認できる ※重要※ どのスレッドがボトルネックになっているか確認すること
  • 34.
    Copyright © 2018TIS Inc. All rights reserved. VSyncは描画の同期待ちなので、厳密にはCPUの処理ではありま せん。なので気にしなくてよいです。 34 VSyncについて
  • 35.
    Copyright © 2018TIS Inc. All rights reserved. 35 HoloとProfilerを繋ぐ ここにチェックを入れて いつも通りビルドして、 Holoにデプロイする
  • 36.
    Copyright © 2018TIS Inc. All rights reserved. 36 HoloとProfilerを繋ぐ Holoでアプリが動作した後、 HoloのIPアドレスを入力して、 Connectを押下すると実機の パフォーマンスを見ることができる
  • 37.
    Copyright © 2018TIS Inc. All rights reserved. お待たせしました ここからTuningの話です 37
  • 38.
    Copyright © 2018TIS Inc. All rights reserved. Tuningの基本 38 チューニング項目 デザイナー エンジニア 効果 DrawCallを減らす 〇 × ★★★★★ Meshを減らす 〇 × ★★★★★ Texture解像度を下げる 〇 × ★★★★ GameObject(Update)を減らす 〇 〇 ★★ Scriptを調整する × 〇 ★★ Shaderを調整する × 〇 ★★★★★★★★ ★★★★★★★★ ※これは個人の感想です あと作るものによって大きく変わる
  • 39.
    Copyright © 2018TIS Inc. All rights reserved. 前述の表の補足 HoloLensでの開発における、ありがちなチューニング項目 を書いています。 当然、個々のアプリケーションでボトルネックは異なります。 なので表に無い項目がボトルネックとなっている可能性は十 分にあります。まずは、Profilerでボトルネックを見つける ことが重要です。 あと、影響の大きいShadowとかLighting周りとか省いてい ます。 この辺り書くと話が広がりすぎるし、Holoでそんなリッチ な表現やらないですよね? 39
  • 40.
    Copyright © 2018TIS Inc. All rights reserved. ・可能な限りMaterialを減らす →複数のTextureがある場合は、結合して一つのTextureにする ・SkinedMeshRenderを減らす →理想は1キャラにつき1つ ・材質の違いはMapping用のTextureで表現する →MetallicSmoothnessなんかはよく使う ex.革と鉄の材質を1つのマテリアルで表現する等 ・静的なオブジェクトはStaticにする →StaticBatchingが行われることにより、DrawCallが減る 40 DrawCallを減らす
  • 41.
    Copyright © 2018TIS Inc. All rights reserved. • 1キャラにつき、できれば5kポリゴン以内に収める →作るものとデバイスによるので、何とも言いにくいが、 多くとも10k以内にしたい。 41 Meshを減らす
  • 42.
    Copyright © 2018TIS Inc. All rights reserved. • 基本はメッシュの面積に比例してTexture解像度を 増減させ、妥協点を探る →キャラクターの場合、人間は顔に注目しやすいため、 頭の解像度を高くして、それ以外を落とすというのも よく使われている 42 Texture解像度を下げる
  • 43.
    Copyright © 2018TIS Inc. All rights reserved. • 可能であれば、Modelに対して「OptimizeGameObject」 をかけてあげると良い • Scriptは、可能な限りMonoBehaviourを継承しない →Inspectorを使いたいがために、MonoBehaviourを継承するのは非常に無 駄 ちょっと、この辺話すと長くなるので割愛します 43 GameObject(Update)を減らす
  • 44.
    Copyright © 2018TIS Inc. All rights reserved. 44 その他 このチェックは外しておきましょう。 (DefaultはON) これを有効にすると、メモリ消費量が 2倍になります。 有効にする必要があるのは以下の場合 -負のスケーリング((-1、1、 1)など) - シアターランズフォーン(例えば、回転さ せたメッシュにスケルトンした親トラック フォームがある場合)
  • 45.
    Copyright © 2018TIS Inc. All rights reserved. Script・Shaderの 調整は割愛します。 難易度高くなるし、 時間もたりないので。 45
  • 46.
    Copyright © 2018TIS Inc. All rights reserved. こんな事は色々な場所で散々言わ れてるから知ってるけど 具体的にどうやるんじゃ! という人のために。 46
  • 47.
    Copyright © 2018TIS Inc. All rights reserved. <題材> Holoで UnityChanを7体出してみる 47
  • 48.
    Copyright © 2018TIS Inc. All rights reserved. 調整前 48 ※PC上でキャプチャした映像です Batches : 265 SetPassCall: 22 Tris : 220k
  • 49.
    Copyright © 2018TIS Inc. All rights reserved. 49 調整前 ※Holo実機のProfilerです
  • 50.
    Copyright © 2018TIS Inc. All rights reserved. 結果 60FPSを下回る事が多々あり、 頭を動かすと結構カクつく 50
  • 51.
    Copyright © 2018TIS Inc. All rights reserved. 調整後 51 ※PC上でキャプチャした映像です Batches : 71 SetPassCall: 14 Tris : 67k
  • 52.
    Copyright © 2018TIS Inc. All rights reserved. 調整後 52 ※Holo実機のProfilerです
  • 53.
    Copyright © 2018TIS Inc. All rights reserved. 結果 60FPS以上を保ちつつ、 見た目はほぼ変わらない (目立つ破綻を直したのでむしろきれいになった) 53
  • 54.
    Copyright © 2018TIS Inc. All rights reserved. 何をしたか 54
  • 55.
    Copyright © 2018TIS Inc. All rights reserved. ↓前述の表とおなじもの 55 チューニング項目 デザイナー エンジニア 効果 DrawCallを減らす 〇 × ★★★★★ Meshを減らす 〇 × ★★★★★ Texture解像度を下げる 〇 × ★★★★ GameObject(Update)を減らす 〇 〇 ★★ Scriptを調整する × 〇 ★★ Shaderを調整する × 〇 ★★★★★★★★ ★★★★★★★★ ※これは個人の感想です あと作るものによって大きく変わる とりあえず上記3つはどんなプロ ジェクトでもやっておく。 それでも解決しない場合は、色々 大変な思いをすることになる
  • 56.
    Copyright © 2018TIS Inc. All rights reserved. 最適化した結果 56 Batches : 40 SetPassCall: 13 Tris : 31.5k Batches : 12 SetPassCall: 9 Tris : 9.6k Before After 理想は Batch/SetPass それぞれ1です
  • 57.
    Copyright © 2018TIS Inc. All rights reserved. 具体的なやり方 57
  • 58.
    Copyright © 2018TIS Inc. All rights reserved. お土産動画 58 お土産を用意したので 見たい方は下記からご覧ください 又は、YouTubeで「HoloLens参考書読書会」で検索
  • 59.
    Copyright © 2018TIS Inc. All rights reserved. 最後に 59
  • 60.
    Copyright © 2018TIS Inc. All rights reserved. 生兵法は大怪我の基です。 それぞれの責務範囲で 出来る事をやりましょう。 あと、仕様を見直すことも大事です。 無理なものは無理。 60
  • 61.