SlideShare une entreprise Scribd logo
1  sur  61
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

Contenu connexe

Tendances

5年後のデータサイエンティスト
5年後のデータサイエンティスト5年後のデータサイエンティスト
5年後のデータサイエンティスト
Drecom Co., Ltd.
 

Tendances (20)

5年後のデータサイエンティスト
5年後のデータサイエンティスト5年後のデータサイエンティスト
5年後のデータサイエンティスト
 
Interpretable ml
Interpretable mlInterpretable ml
Interpretable ml
 
【CGWORLDゼミ】ジェットスタジオ キャラメイクセミナー
【CGWORLDゼミ】ジェットスタジオ キャラメイクセミナー【CGWORLDゼミ】ジェットスタジオ キャラメイクセミナー
【CGWORLDゼミ】ジェットスタジオ キャラメイクセミナー
 
強化学習技術とゲーム AI 〜 今できる事と今後できて欲しい事 〜
強化学習技術とゲーム AI  〜 今できる事と今後できて欲しい事 〜強化学習技術とゲーム AI  〜 今できる事と今後できて欲しい事 〜
強化学習技術とゲーム AI 〜 今できる事と今後できて欲しい事 〜
 
Pycon reject banditアルゴリズムを用いた自動abテスト
Pycon reject banditアルゴリズムを用いた自動abテストPycon reject banditアルゴリズムを用いた自動abテスト
Pycon reject banditアルゴリズムを用いた自動abテスト
 
Pydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセス
Pydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセスPydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセス
Pydata_リクルートにおけるbanditアルゴリズム_実装前までのプロセス
 
リクルート式AIの活用法
リクルート式AIの活用法リクルート式AIの活用法
リクルート式AIの活用法
 
ゲーム体験を支える強化学習の実応用について
ゲーム体験を支える強化学習の実応用についてゲーム体験を支える強化学習の実応用について
ゲーム体験を支える強化学習の実応用について
 
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
Rancherを活用した開発事例の紹介 ~Rancherのメリットと辛いところ~
 
CEDEC2018『逆転オセロニア』におけるAI活用
CEDEC2018『逆転オセロニア』におけるAI活用CEDEC2018『逆転オセロニア』におけるAI活用
CEDEC2018『逆転オセロニア』におけるAI活用
 
FINAL FANTASY
 Record Keeper アニメーション制作の濃ゆい話
FINAL FANTASY
 Record Keeper アニメーション制作の濃ゆい話FINAL FANTASY
 Record Keeper アニメーション制作の濃ゆい話
FINAL FANTASY
 Record Keeper アニメーション制作の濃ゆい話
 
ML meetup20190327
ML meetup20190327ML meetup20190327
ML meetup20190327
 
ソフトウェアジャパン2018 ITフォーラムセッション(3)
ソフトウェアジャパン2018 ITフォーラムセッション(3)ソフトウェアジャパン2018 ITフォーラムセッション(3)
ソフトウェアジャパン2018 ITフォーラムセッション(3)
 
Spring “BigData”
Spring “BigData”Spring “BigData”
Spring “BigData”
 
AWSでのセキュリティ運用 ~ IAM,VPCその他
AWSでのセキュリティ運用 ~IAM,VPCその他AWSでのセキュリティ運用 ~IAM,VPCその他
AWSでのセキュリティ運用 ~ IAM,VPCその他
 
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
Struggling with BIGDATA -リクルートおけるデータサイエンス/エンジニアリング-
 
大規模SNSにおけるソーシャルアプリの運用とマネタイズ
大規模SNSにおけるソーシャルアプリの運用とマネタイズ大規模SNSにおけるソーシャルアプリの運用とマネタイズ
大規模SNSにおけるソーシャルアプリの運用とマネタイズ
 
OSSコンソーシアム記念講演(2017-07-10)
OSSコンソーシアム記念講演(2017-07-10)OSSコンソーシアム記念講演(2017-07-10)
OSSコンソーシアム記念講演(2017-07-10)
 
リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」リクルートのWebサービスを支える「RAFTEL」
リクルートのWebサービスを支える「RAFTEL」
 
ユーザー企業内製CSIRTにおける対応のポイント
ユーザー企業内製CSIRTにおける対応のポイントユーザー企業内製CSIRTにおける対応のポイント
ユーザー企業内製CSIRTにおける対応のポイント
 

Similaire à HoloLens参考書読書会 vol9

Ques12_自動テスト ✕ 機械学習 〜自動テスト結果分析は楽になるか?〜
Ques12_自動テスト ✕ 機械学習 〜自動テスト結果分析は楽になるか?〜Ques12_自動テスト ✕ 機械学習 〜自動テスト結果分析は楽になるか?〜
Ques12_自動テスト ✕ 機械学習 〜自動テスト結果分析は楽になるか?〜
Mao Yamaguchi
 
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチームはじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
勇 黒沢
 

Similaire à HoloLens参考書読書会 vol9 (20)

xRLT02_Holoで大量にモデルを出してみる
xRLT02_Holoで大量にモデルを出してみるxRLT02_Holoで大量にモデルを出してみる
xRLT02_Holoで大量にモデルを出してみる
 
ディープラーニングの社会実装の鍵となるエッジコンピューティング
ディープラーニングの社会実装の鍵となるエッジコンピューティングディープラーニングの社会実装の鍵となるエッジコンピューティング
ディープラーニングの社会実装の鍵となるエッジコンピューティング
 
DeNAのプログラミング教育の取り組み #denatechcon
DeNAのプログラミング教育の取り組み #denatechconDeNAのプログラミング教育の取り組み #denatechcon
DeNAのプログラミング教育の取り組み #denatechcon
 
UniRxHandsOnVol1
UniRxHandsOnVol1UniRxHandsOnVol1
UniRxHandsOnVol1
 
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...Database Encryption and Key Management for PostgreSQL - Principles and Consid...
Database Encryption and Key Management for PostgreSQL - Principles and Consid...
 
JSUG 2018 BTC
JSUG 2018 BTCJSUG 2018 BTC
JSUG 2018 BTC
 
第26回八子クラウド座談会当日メモ付き_20180407
第26回八子クラウド座談会当日メモ付き_20180407第26回八子クラウド座談会当日メモ付き_20180407
第26回八子クラウド座談会当日メモ付き_20180407
 
JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例JapanTaxi R&Dの取り組み事例
JapanTaxi R&Dの取り組み事例
 
Ques12_自動テスト ✕ 機械学習 〜自動テスト結果分析は楽になるか?〜
Ques12_自動テスト ✕ 機械学習 〜自動テスト結果分析は楽になるか?〜Ques12_自動テスト ✕ 機械学習 〜自動テスト結果分析は楽になるか?〜
Ques12_自動テスト ✕ 機械学習 〜自動テスト結果分析は楽になるか?〜
 
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチームはじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
はじめよう FinOps クラウドコスト最適化への第一歩とは 日本IBMカスタマーサクセスチーム
 
RHTN2018: エンジニアは何故、技術書を書くのか? 執筆のススメ
RHTN2018: エンジニアは何故、技術書を書くのか? 執筆のススメRHTN2018: エンジニアは何故、技術書を書くのか? 執筆のススメ
RHTN2018: エンジニアは何故、技術書を書くのか? 執筆のススメ
 
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたかリクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
リクルートはいかにして、ディープラーニング(深層学習)の導入を成功させたか
 
5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについて5月中旬の仮想通貨Re-orgについて
5月中旬の仮想通貨Re-orgについて
 
Computer Visionで見る新たな世界_IoTビジネス共創ラボ 第10回 勉強会
Computer Visionで見る新たな世界_IoTビジネス共創ラボ 第10回 勉強会 Computer Visionで見る新たな世界_IoTビジネス共創ラボ 第10回 勉強会
Computer Visionで見る新たな世界_IoTビジネス共創ラボ 第10回 勉強会
 
MANABIYA 2018 DB kinoshita DB for AItech
MANABIYA 2018 DB kinoshita DB for AItechMANABIYA 2018 DB kinoshita DB for AItech
MANABIYA 2018 DB kinoshita DB for AItech
 
アイデアを形にする ①プロダクト設計のイロハを学ぶ
アイデアを形にする ①プロダクト設計のイロハを学ぶアイデアを形にする ①プロダクト設計のイロハを学ぶ
アイデアを形にする ①プロダクト設計のイロハを学ぶ
 
3D depth sensor world
3D depth sensor world3D depth sensor world
3D depth sensor world
 
最新ゲームを支える文言
最新ゲームを支える文言最新ゲームを支える文言
最新ゲームを支える文言
 
【B-2】AI時代におけるエンジニアの生存戦略
【B-2】AI時代におけるエンジニアの生存戦略【B-2】AI時代におけるエンジニアの生存戦略
【B-2】AI時代におけるエンジニアの生存戦略
 
ソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティングソニーのディープラーニングツールで簡単エッジコンピューティング
ソニーのディープラーニングツールで簡単エッジコンピューティング
 

HoloLens参考書読書会 vol9

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