夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Unityエディタ上でUnityがクラッシュした場合の原因特定 できそうでできなかった話

本日はUnity調査枠です。

現在先日のHoloLensHackathonVol.30で登壇したHoloLensを使用したBlenderのリアルタイムMRviewアプリを開発しています。

 HoloGraphicRemotingを使用して開発していますが、モデリング中にUnityがクラッシュしてしまうことが多発します。

 Unityがクラッシュすること自体は時々あるのですが、今回はクラッシュの原因を突き止めていきたいと思います。

 筆者環境でクラッシュする条件は次の通りです。

① MesySync×BlenderでBlenderのモデリング状況をリアルタイムにUnityに送信

②HoloGrahpicRemotingを有線接続しHoloLensで閲覧

上記の環境で5~10分ほど使用しているとUnityが突然クラッシュすることがありました。

〇Unityのログの場所

Unityのログは次の場所にあります。

これはUnityクラッシュ後に再起動してしまった場合などは上書きされてしまうことがあるため注意が必要です。

C:\Users\(ユーザー名)\AppData\Local\Unity\Editor

この中に存在するEditor.Logがログになります。

〇クラッシュした箇所の探し方

クラッシュした前後のログを確認するためにはログをメモ帳もしくはテキストエディタで開き、F3キーなどでcrashと検索をかけます。

クラッシュ後のログは開いていたファイルの場所とサイズなどの情報が記述されていますので、クラッシュ直前のログを追ってみます。

直前で行われている処理はScaning for USBであることがわかります。

XRTextureManager::RequestCreateTexture
XRTextureManager::SetupRenderTextureFromXRRequest (id: 2 col: 000001EA6B442078 d: 0000000000000000 sr: 0000000000000000)
RenderTexture::Create (id: 2)
IVRDeviceCallback_CreateEyeTextureResources 000001EA6B442078
Launched and connected shader compiler UnityShaderCompiler.exe after 0.11 seconds
XRTextureManager::RequestCreateTexture
XRTextureManager::SetupRenderTextureFromXRRequest (id: 3 col: 000001EA6B443578 d: 0000000000000000 sr: 0000000000000000)
RenderTexture::Create (id: 3)
IVRDeviceCallback_CreateEyeTextureResources 000001EA6B443578
Launched and connected shader compiler UnityShaderCompiler.exe after 0.13 seconds
Launched and connected shader compiler UnityShaderCompiler.exe after 0.11 seconds
Asset Pipeline Refresh: Total: 0.107 seconds - Initiated by RefreshV2(AllowForceSynchronousImport)
Scanning for USB devices : 2.026ms
Scanning for USB devices : 2.115ms
Scanning for USB devices : 2.182ms
Scanning for USB devices : 2.341ms
Scanning for USB devices : 2.613ms
Scanning for USB devices : 2.312ms
Scanning for USB devices : 2.319ms
Scanning for USB devices : 2.334ms
Scanning for USB devices : 2.322ms
Scanning for USB devices : 2.758ms
Scanning for USB devices : 2.480ms
Scanning for USB devices : 3.933ms
Scanning for USB devices : 2.152ms
Scanning for USB devices : 2.121ms
Scanning for USB devices : 2.478ms
Crash!!! ←ここでクラッシュ

これはその名の通りUSBデバイスの解析、つまりここでは接続しているデバイスはHoloLens 2のみであるためHoloLensの接続の解析という意味になるでしょうか?

このScanning for USB devicesはログを見る限り、定期的に動いており、その直前に予想ですが

その直前ではShaderのコンパイルが動き、

Asset Pipeline Refresh: Total: 0.107 seconds - Initiated by RefreshV2(AllowForceSynchronousImport)

Asset Pipeline のリフレッシュが行われていることがわかります。 以下の別サイト様の記事によるとAssets PipelineはUnity2019以降で使用されるキャッシュサーバーと呼ばれる同じプロジェクト内でアセット変換を抑える仕組みを指すようです。

framesynthesis.jp

記事はVR開発で有名なこりんさんのものですね…(さすが…)

筆者環境の場合はチーム開発はしていませんが、HolographicRemotingを使用しているためデバイスとしては複数台(2台)でUnityアプリを動かしていることになるため、変換が動いていると予想できます。

これらはUnity Acceleratorと呼ばれるUnity Teams Advanced のライセンスを保有している場合使用できるようです。

とりあえず今回のログ調査の結論としてはマシンパワーやUSBの接続などではなさそうという感じになります。

 はっきりと原因が分かったわけではありませんが、PCのスペックに関係なく発生する可能性があるといえます。(実際に別のデスクトップPCなどでも同様の環境でクラッシュ自体は発生しています。)

 HolographicRemotingに原因がありそうでもあるのでイシューなどを除いてみる必要があるかもしれません。

 一転気になる点としてクラッシュする前のScanning for USV devicesの後では

Android Extension - Scanning For ADB Devices 5790 ms

とAndroidに関するスキャンが行われています。しばらく該当PCではQuestなどAndroidデバイスを使用してはいないのですが、ログが残っているのでしょうか?