SlideShare a Scribd company logo
MRシミュレータ(仮)の技術的なハナシ
■ 自己紹介
湯浅 貴文 @gesyutapo
株式会社ティーアンドエス
THINK&SENSE所属
2017年10月 入社
Unityを本格的に触り始めたのはここから
現在は主にHoloLens案件担当
前職は家電メーカー
「新卒から12年間勤務していた会社を辞めました」
http://gesyutapo.hatenablog.com/entry/retirement_2017 4月28-29日 ニコニコ超会議
「複合現実のピルグリメイジ」
4月7日 Ingress Mission Day Fukuoka
「AR舞台挨拶」
「Softbank MR Intel Simulator(仮)」
No Image
「ブロックチェーン×HoloLens(仮)」
■ 開発環境
・Unity 2017.2.1p4
・MixedRealityToolkit
・Vuforia
・Zxing.Net
・OnlineMaps
・UniRx
・設計図共有サイト(GitHub)で共有
参考:Web出身のUnityエンジニアによる大規模ゲームの基盤設計
https://developers.cyberagent.co.jp/blog/archives/4262/
■ ソフトウェアアーキテクチャ / MVP
■ ソフトウェアアーキテクチャ / マルチシーン
■ 最適化 / なぜ最適化?
技術的な話・・・
何を喋ればいいんだ
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
■ 最適化 / なぜ最適化?
まだ開発中だし
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
■ 最適化 / なぜ最適化?
Unity完全に
理解してないし
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
■ 最適化 / なぜ最適化?
固有の話をしても
誰の役にも立たないし
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
■ 最適化 / なぜ最適化?
https://pixabay.com/en/light-bulb-current-light-glow-1042480/
あっ!
最適化の話なら
ちょっとは役に立つかも!?
■ 最適化 / なぜ最適化?
Photo by VisualHunt
https://visualhunt.com/photo/65568/
俺は
最適化の話で
行く!
■ 最適化 / なぜ最適化?
あれは
さかのぼる事
6か月前
Photo by Filip Bunkens
https://unsplash.com/photos/R5SrmZPoO40
。
■ 最適化 / なぜ最適化?
RGB分離 オブジェクトが激しく震える
■ 最適化 / なぜ最適化?
RGB分離 オブジェクトが激しく震える
これはきっと
処理落ち
のハズ
■ 最適化 / なぜ最適化?
まだ開発初期段階なのに・・・
Photo by Markus Spiske
https://unsplash.com/photos/vrbZVyX2k4I
■ 最適化 / なぜ最適化?
そうだ!最適化しよう!
http://gahag.net/004221-woman-advice/
■ 最適化 / どこを最適化?
でも、どこを最適化する?
Photo by Emily Morter
https://unsplash.com/photos/8xAA0f9yQnE
■ 最適化 / どこを最適化?
Photo by skeeze
https://pixabay.com/en/sailors-all-hands-navy-military-903044/
■ 最適化 / どこを最適化?
何かいっぱい出てくるやつ
Photo by skeeze
https://pixabay.com/en/sailors-all-hands-navy-military-903044/
■ 最適化 / どこを最適化?
■ 最適化 / どこを最適化?
■ 最適化 / 【候補1】ビルの描画高速化
【候補1】ビルの描画高速化
■ 最適化 / 【候補1】ビルの描画高速化
まず何をする?
https://www.pexels.com/photo/man-wearing-black-and-white-stripe-shirt-looking-at-white-printer-papers-on-the-wall-212286/
■ 最適化 / 【候補1】ビルの描画高速化
“計測できないものは、管理できない”
Tom DeMarco “Controlling Software Projects: Management, Measurement and Estimation”
Photo by Fleur Treurniet @yer_a_wizard
https://unsplash.com/photos/dQf7RZhMOJU
■ 最適化 / 【候補1】ビルの描画高速化
■ 最適化 / 【候補1】ビルの描画高速化
普通はどのくらい?
■ 最適化 / 【候補1】ビルの描画高速化
https://www.slideshare.net/decode2017/mr04-unity-hololens
de:code 2017
実践!Unityを使ったHoloLensアプリ開発
伊藤周さん
■ 最適化 / 【候補1】ビルの描画高速化
理想
100以内
現実
258
Photo by mohamed Abdelgaffar
https://www.pexels.com/photo/boy-wearing-brown-sweatshirt-784028/
■ 最適化 / 【候補1】ビルの描画高速化
2倍以上あるやんけ!
理想
100以内
現実
258
Photo by mohamed Abdelgaffar
https://www.pexels.com/photo/783510/
■ 最適化 / 【候補1】ビルの描画高速化
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
■ 最適化 / 【候補1】ビルの描画高速化
メッシュを結合する?
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
■ 最適化 / 【候補1】ビルの描画高速化
メッシュを結合する?
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
■ 最適化 / 【候補1】ビルの描画高速化
staticバッチングする?
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
メッシュを結合する?
■ 最適化 / 【候補1】ビルの描画高速化
staticバッチングする?
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
メッシュを結合する?
■ 最適化 / 【候補1】ビルの描画高速化
staticバッチングする?
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
メッシュを結合する?
テクスチャをまとめる?
■ 最適化 / 【候補1】ビルの描画高速化
staticバッチングする?
Photo by Inzmam Khan
https://www.pexels.com/photo/man-in-black-shirt-and-gray-denim-pants-sitting-on-gray-padded-bench-1134204/
メッシュを結合する?
テクスチャをまとめる?
■ 最適化 / 【候補1】ビルの描画高速化
あれ・・・?
でもビル全部、同じマテリアルしか使ってなくない・・・?
Photo by Sophieja23
https://pixabay.com/en/woman-question-mark-person-decision-687560/
■ 最適化 / 【候補1】ビルの描画高速化
それってひょっとして、
普通は動的バッチ(DynamicBatch)出来るんじゃない?
Photo by Sophieja23
https://pixabay.com/en/woman-question-mark-person-decision-687560/
■ 最適化 / 【候補1】ビルの描画高速化
なんで出来ていないんだろう?
Photo by Sophieja23
https://pixabay.com/en/woman-question-mark-person-decision-687560/
■ 最適化 / 【候補1】ビルの描画高速化
Window -> Frame Debugger マテリアルが異なるからバッチ出来なかった事がわかる
■ 最適化 / 【候補1】ビルの描画高速化
■ 最適化 / 【候補1】ビルの描画高速化
OnlineMaps
■ 最適化 / 【候補1】ビルの描画高速化
OnlineMaps
■ 最適化 / 【候補1】ビルの描画高速化
OnlineMaps
■ 最適化 / 【候補1】ビルの描画高速化
Photo by Fxq19910504
https://pixabay.com/en/the-wild-forest-get-lost-schoolboy-1833566/
if (material != null)
{
if (material.wall != null) building.wallMaterial = Instantiate(material.wall) as Material;
else building.wallMaterial = new Material(defaultShader);
if (material.roof != null) building.roofMaterial = Instantiate(material.roof) as Material;
else building.roofMaterial = new Material(defaultShader);
scale = material.scale;
}
Infinity CodeOnline mapsScriptsPluginsBuildingsOnlineMapsBuildingBuiltIn.cs
■ 最適化 / 【候補1】ビルの描画高速化
if (material != null)
{
if (material.wall != null) building.wallMaterial = Instantiate(material.wall) as Material;
else building.wallMaterial = new Material(defaultShader);
if (material.roof != null) building.roofMaterial = Instantiate(material.roof) as Material;
else building.roofMaterial = new Material(defaultShader);
scale = material.scale;
}
Infinity CodeOnline mapsScriptsPluginsBuildingsOnlineMapsBuildingBuiltIn.cs
■ 最適化 / 【候補1】ビルの描画高速化
Infinity CodeOnline mapsScriptsPluginsBuildingsOnlineMapsBuildingBuiltIn.cs
■ 最適化 / 【候補1】ビルの描画高速化
if (material != null)
{
if (material.wall != null) building.wallMaterial = material.wall;
else building.wallMaterial = new Material(defaultShader);
if (material.roof != null) building.roofMaterial = material.roof;
else building.roofMaterial = new Material(defaultShader);
scale = material.scale;
}
Instantiateしないように変更
その結果・・・
■ 最適化 / 【候補1】ビルの描画高速化
■ 最適化 / 【候補1】ビルの描画高速化
■ 最適化 / 【候補1】ビルの描画高速化
258
47100
SetpassCalls
最適化前 最適化後
約80%OFF
■ 最適化 / 【候補1】ビルの描画高速化
https://www.pexels.com/photo/sunset-beach-people-sunrise-40815/
■ 最適化 / 【候補2】ポータルの描画高速化
【候補2】ポータルの描画高速化
①
②
③
①②③
■ 最適化 / 【候補2】ポータルの描画高速化
①
②
③
■ 最適化 / 【候補2】ポータルの描画高速化
private void SetColorFromFaction(FactionType faction)
{
Color color = PortalColor[FactionType.Neutral];
PortalColor.TryGetValue(faction, out color);
PortalMeshRenderer.material.color = color;
}
■ 最適化 / 【候補2】ポータルの描画高速化
Material Mesh
【最適化前】マテリアルが1つで、色を入れ替える方式
private void SetColorFromFaction(FactionType faction)
{
Color color = PortalColor[FactionType.Neutral];
PortalColor.TryGetValue(faction, out color);
PortalMeshRenderer.material.color = color;
}
■ 最適化 / 【候補2】ポータルの描画高速化
Material Mesh
【最適化前】マテリアルが1つで、色を入れ替える方式
private void SetMaterialFromFaction(FactionType faction)
{
Material mat = PortalMaterials[FactionType.Neutral];
PortalMaterials.TryGetValue(faction, out mat);
PortalMeshRenderer.material = mat;
}
■ 最適化 / 【候補2】ポータルの描画高速化
【最適化後】マテリアルを3つ用意して、マテリアルを入れ替える方式
Material
Mesh
■ 最適化 / 【候補2】ポータルの描画高速化
■ 最適化 / 【候補2】ポータルの描画高速化
この2つが動的バッチされる(ハズ)
2つになるハズ
■ 最適化 / 【候補2】ポータルの描画高速化
しかし
■ 最適化 / 【候補2】ポータルの描画高速化
■ 最適化 / 【候補2】ポータルの描画高速化
■ 最適化 / 【候補2】ポータルの描画高速化
①
■ 最適化 / 【候補2】ポータルの描画高速化
①①
■ 最適化 / 【候補2】ポータルの描画高速化
①①
②
■ 最適化 / 【候補2】ポータルの描画高速化
①①
②
③
■ 最適化 / 【候補2】ポータルの描画高速化
減ってないやんけ!
Photo by mohamed Abdelgaffar
https://www.pexels.com/photo/783510/
■ 最適化 / 【候補2】ポータルの描画高速化
Photo by RossMannYYC
https://pixabay.com/en/why-questions-text-chalkboard-2547202/
■ 最適化 / 【候補2】ポータルの描画高速化
■ 最適化 / 【候補2】ポータルの描画高速化
頂点数多くてダメだった・・・
https://pixabay.com/en/portrayal-portrait-crying-cry-baby-89189/
●その他の最適化
・リフレクションプローブをOFF
・Light Probs
・Reflection Probs
・影をOFF
・Cast Shadows
・Receive Shadows
・ほぼ全てHoloToolkit/~のShaderへ変更
■ 最適化 / そのほか
で、
■ 解決編
■ 解決編
RGB分離 オブジェクトが激しく震える
■ 解決編
解決したの?
■ 解決編
Photo by ulleo
https://pixabay.com/en/no-stamp-cube-wood-used-old-3442954/
■ 解決編
https://www.pexels.com/photo/adult-alone-boy-building-236147/
■ 解決編
https://www.pexels.com/photo/adult-alone-boy-building-236147/
Unityも
■ 解決編
https://www.pexels.com/photo/adult-alone-boy-building-236147/
Unityも
HoloLensも
■ 解決編
https://www.pexels.com/photo/adult-alone-boy-building-236147/
Unityも
HoloLensも
なんもわからん…
■ 解決編
■ 解決編
■ 解決編
Unityのバグやんけ!
Photo by mohamed Abdelgaffar
https://www.pexels.com/photo/783510/
■ 解決編
FinPhoto by Belle Co
https://www.pexels.com/photo/silhouette-photography-of-group-of-people-jumping-during-golden-time-1000445/
■ 解決編 / おまけ
無駄だったか?
■ 解決編 / おまけ
・確実に動作は軽くなった
・ブラックボックスだった有料アセットの中を見る事が出来た
・それによって後の機能追加の際に役立った
■ 解決編 / おまけ
Photo by YesManPro
https://www.pexels.com/photo/black-haired-man-in-white-crew-neck-t-shirt-683381/
■ まとめ
・いっぱい出てくるものは動的バッチできれば結構高速化できる
・でも動的バッチされるには色々と条件があるので注意が必要
→ 頂点数が300以下
→ そのほか色々と条件有
→ 詳しくは https://docs.unity3d.com/ja/current/Manual/DrawCallBatching.html
・有料アセットの中も頑張って見れば意外とわかる
・Unityのバグには気を付けよう
→ おかしいと思ったらIssueを確認
・MRシミュレータ(仮)
・Pepper×Hololens
も出るかも!?
■ 最後に
ご清聴ありがとうございました

More Related Content

Similar to MRシミュレータ(仮)の技術的なハナシ

気ままに勉強会 第30回 Google Apps Scriptやってる鰹🐟の初めてのPower Apps
気ままに勉強会 第30回 Google Apps Scriptやってる鰹🐟の初めてのPower Apps気ままに勉強会 第30回 Google Apps Scriptやってる鰹🐟の初めてのPower Apps
気ままに勉強会 第30回 Google Apps Scriptやってる鰹🐟の初めてのPower Apps
Demodori Gatsuo - A Certain Citizen Developers Association
 

Similar to MRシミュレータ(仮)の技術的なハナシ (20)

.NET の過去、現在、そして未来
.NET の過去、現在、そして未来.NET の過去、現在、そして未来
.NET の過去、現在、そして未来
 
エンジニアカフェ1周年イベント:WebAR/VR開発入門
エンジニアカフェ1周年イベント:WebAR/VR開発入門エンジニアカフェ1周年イベント:WebAR/VR開発入門
エンジニアカフェ1周年イベント:WebAR/VR開発入門
 
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)
Material DesignをPolymerで表現しよう(神戸ITフェスティバル × HTML5fun@神戸)
 
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
Building 3D mobile apps using Power Apps Mixed Reality controls, Azure SQL Da...
 
ARコンテンツ作成勉強会 in 宮崎: はじめようARCore
ARコンテンツ作成勉強会 in 宮崎: はじめようARCoreARコンテンツ作成勉強会 in 宮崎: はじめようARCore
ARコンテンツ作成勉強会 in 宮崎: はじめようARCore
 
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
2020/06/16 tsjp-azure-staticwebapps-vs_codespaces
 
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
点群を使いこなせ! 可視化なんて当たり前、xRと点群を組み合わせたUnityの世界 【Interact , Stipple】
 
気ままに勉強会 第30回 Google Apps Scriptやってる鰹🐟の初めてのPower Apps
気ままに勉強会 第30回 Google Apps Scriptやってる鰹🐟の初めてのPower Apps気ままに勉強会 第30回 Google Apps Scriptやってる鰹🐟の初めてのPower Apps
気ままに勉強会 第30回 Google Apps Scriptやってる鰹🐟の初めてのPower Apps
 
デ部会 プロトタイプ
デ部会 プロトタイプデ部会 プロトタイプ
デ部会 プロトタイプ
 
Android案件見積りに現れる要素、あるいは丁寧に埋設された地雷たち
Android案件見積りに現れる要素、あるいは丁寧に埋設された地雷たちAndroid案件見積りに現れる要素、あるいは丁寧に埋設された地雷たち
Android案件見積りに現れる要素、あるいは丁寧に埋設された地雷たち
 
PUN2 × OculusQuest でハンドトラッキング同期実装(プロジェクト公開しました)
PUN2 × OculusQuest でハンドトラッキング同期実装(プロジェクト公開しました)PUN2 × OculusQuest でハンドトラッキング同期実装(プロジェクト公開しました)
PUN2 × OculusQuest でハンドトラッキング同期実装(プロジェクト公開しました)
 
TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介TypeScript製フレームワーク「Nest」のご紹介
TypeScript製フレームワーク「Nest」のご紹介
 
みんなが安全にクラウドを使うために色々考えた結果
みんなが安全にクラウドを使うために色々考えた結果みんなが安全にクラウドを使うために色々考えた結果
みんなが安全にクラウドを使うために色々考えた結果
 
東北大学 先端技術の基礎と実践_深層学習による画像認識とデータの話_菊池悠太
東北大学 先端技術の基礎と実践_深層学習による画像認識とデータの話_菊池悠太東北大学 先端技術の基礎と実践_深層学習による画像認識とデータの話_菊池悠太
東北大学 先端技術の基礎と実践_深層学習による画像認識とデータの話_菊池悠太
 
Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
 Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
Azure Digital TwinとUnreal Engineを統合するADTLink Pluginについて
 
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみたタクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
タクシードライブレコーダーの動画処理MLパイプラインにkubernetesを使ってみた
 
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
 
World Locking Tools でAzure Spatial Anchorsが使えるようになった
World Locking Tools でAzure Spatial Anchorsが使えるようになったWorld Locking Tools でAzure Spatial Anchorsが使えるようになった
World Locking Tools でAzure Spatial Anchorsが使えるようになった
 
データビジュアライゼーションの作り方
データビジュアライゼーションの作り方データビジュアライゼーションの作り方
データビジュアライゼーションの作り方
 
UnityのフリーライセンスでPC-Android通信を実装するまで
UnityのフリーライセンスでPC-Android通信を実装するまでUnityのフリーライセンスでPC-Android通信を実装するまで
UnityのフリーライセンスでPC-Android通信を実装するまで
 

Recently uploaded

FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (14)

【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 

MRシミュレータ(仮)の技術的なハナシ

Editor's Notes

  1. 自己紹介
  2. MVPで作ってます
  3. モデルやマネージャなど常に居て欲しい、かつデバッグ時にどの画面からでも始められるようにしたいと思い マルチシーン機能を使って常にベースシーンがあって、その上でシーン遷移するようにしています。
  4. ここで具体的な機能とかの話をしたいと思っていたのですが、
  5. まだ開発中のアプリですし
  6. Unity完全に理解していないし
  7. MRシミュレータ固有の話過ぎても、みなさんの役には立たない話になってしまう と悩んでしまいました。
  8. ここに居る皆さんには釈迦に説法みたいな話になってしまうかもですが・・・ 最適化した時の話って他の人の役にも立ちそう!?
  9. ということで、俺は最適化の話で行いきます。
  10. ちょうど半年くらい前、12月とか1月とかの話です。
  11. HoloLensの実機でアプリを実行するとRGBが分離して見えたり、オブジェクトが激しく震え出したりし出しました。 生まれたての小鹿のように。
  12. これはきっと処理落ちのハズ
  13. メッシュは地図情報から自動的に生成されるものなので、結合は難しいです。
  14. 地図のスクロールと共に動くものですし、自動的に生成されるものなのでstaticも無理です
  15. テクスチャをまとめる、といってもそもそもテクスチャはひとつしかありませんし、ビル用のマテリアルもひとつしかありませんでしたのでダメです
  16. こういう時に便利なものがUnityにありまして。 フレームデバッガーというものなのですが、Window の中にあります。 フレームデバッガーで見ると、なぜバッチ処理されなかったか?という理由がメッシュ単位でわかります。 これで見るとビルの場合はマテリアルが異なるからダメだったみたいです。 こちらから指定しているマテリアルはひとつなので、ビルのマテリアルが実際どのように設定されているかを調べなくてはいけません。
  17. しかし、ここでひとつ課題があります。 ビルの生成を行っているのはオンラインマップスという有料アセットの中なのです。
  18. これまでこいつはブラックボックスとして扱っていたので、中身がよくわかっていません。
  19. ヘタに開けてしまうと、
  20. なんか怖いものが出てきそうで・・・ なんかソースコードもいっぱいありますし・・・
  21. とは言え、中身を見ないと始まらないので迷子になりながらも色々とソースを解析していたところ、
  22. ビルのマテリアルを設定している場所を見つける事ができました。
  23. マテリアルを必ずInstantiateしているために、それぞれが異なるマテリアルとして設定されてしまっていました。
  24. MRシミュレータでは全て同じ色、テクスチャなのでInstantiateする必要はありません。 よってInstantiateしないように変更しました。
  25. セットパスコールが47になりました。
  26. 最適化前に比べると、80%程度削減することが出来ました。
  27. めでたし、めでたし・・・
  28. ビルのドローコールが削減できたので、その調子で候補2のポータルの方も高速化しようとしました。
  29. まず、現状どうなっているのかをフレームデバッガーで見ると、3つポータルがあれば3回描画されているようです。
  30. ①と②は同じ色のポータルなので一緒に描画されてもよさそうですが、そうなっていません。 理由をみると、ビルの時と同様にマテリアルが違うからという事みたいです。
  31. 最適化前、ポータルの方はどのように色を変更しているのかというと、ポータルのメッシュにひとつのマテリアルを設定しておいて、そのマテリアルの色を変更していました。
  32. しかしなんとこのColorをいれて色を変更すると、マテリアルが複製されてしまうようなのです。 そのため、異なるマテリアルとなり、バッチ処理されなかったものだと思われます。
  33. ポータルはエンライテッド、レジスタンス、どちらにも所属していないという3色しか設定されません。 そのためそれぞれの色のマテリアルを作成しておき、そのマテリアルを付け替える事で、少なくとも同じ色であればバッチ処理されるのではないかと考えました。
  34. そうすればこの画面の場合、緑がひとつ、青がふたつなので
  35. このふたつの青いポータルが一緒になって
  36. Portal_meshのドローコールが2つになるはず
  37. しかし、実際に実行してみたところ
  38. これが最適化後のフレームデバッガーで見た表示なのですが、これだとちょっと遠いのであまりわかりませんね・・・
  39. ちょっと拡大してみます
  40. いち
  41. にぃ
  42. さん
  43. なんで?
  44. フレームデバッガーを見ると「頂点数が300を超えている」とバッチされないようです。 そうです、このポータルのモデルは頂点数が「500」だったため、動的バッチが効かなかったのです。
  45. というわけで、ポータルの描画高速化は失敗に終わりました。
  46. また、ビルの高速化、ポータルの高速化のほかにも色々と最適化を行いました。
  47. 結局、これらの問題、
  48. しませんでした。 いろいろと頑張ったのですが、ダメでした。
  49. しかしそこに、救世主が現れます これちさんがTwitterでこんなことをつぶやいていました。 MixedRealityToolkitのイシューを見てみても症状としては似ているみたいです。 実際、この対処法を試したら、現象は収まりました。
  50. そしてこのイシュー、続きをみてみると、Unity Bugのタグが付けられてます
  51. おしまい。 これはこれで解決したので良いのですが、ちょっとおまけを続けます。
  52. 結局、最適化は無駄だったのか?