本日は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以降で使用されるキャッシュサーバーと呼ばれる同じプロジェクト内でアセット変換を抑える仕組みを指すようです。
記事は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デバイスを使用してはいないのですが、ログが残っているのでしょうか?