トラブルシューティング
このページでは、Azure Remote Rendering に影響を及ぼす一般的な問題とその解決方法の一覧を示します。
クライアントがサーバーに接続できない
(デバイス上やルーター内などの) ファイアウォールがシステム要件で指定されているポートをブロックしていないことを確認します。
モデルを読み込めない
BLOB 構成が正しいにもかかわらず、(Unity サンプル経由などで) モデルの読み込みが失敗する場合は、BLOB ストレージが適切にリンクされていない可能性があります。 正しいリンクは、ストレージ アカウントのリンクのチャプターで説明されています。 正しくリンクした後、変更が有効になるまで最大 30 分かかる場合があります。
ストレージアカウントを ARR アカウントにリンクできない
ストレージ アカウントのリンク中に、Remote Rendering アカウントが一覧に表示されない場合があります。 この問題を解決するには、Azure portal の ARR アカウントに移動し、左側の [設定] グループの下にある [ID] を選択します。 [状態] が [オン] に設定されていることを確認してください。
SAS トークンを使用してモデルを読み込むことができない
クライアント アプリケーションが有効な SAS トークンを介してストレージからモデルを読み込めない場合、BLOB ストレージに構成されたパブリック ネットワーク アクセス レベルが原因である可能性があります。 SAS トークンからの ARR モデルの読み込みは、[すべてのネットワークから有効] オプションを使用して構成されている場合にのみ機能します:
プライベート エンドポイントへの制限が必要な場合は、ストレージ アカウントをリンクする必要があり、ここで説明されているように、SAS 以外のコード パスを使用してモデルを読み込む必要があります。
エラー 'Disconnected: VideoFormatNotAvailable
'
GPU でハードウェアによる動画のデコードがサポートされていることを確認します。 「開発用 PC」をご覧ください。
GPU を 2 基搭載したノート パソコンで作業している場合、既定で実行されている方の GPU がハードウェアによる動画のデコード機能を提供していない可能性があります。 その場合は、アプリで強制的にもう一方の GPU を使用するようにしてください。 GPU ドライバーの設定では、多くの場合、使用されている GPU を変更できます。
セッション/変換状態の取得の失敗
REST API コマンドを頻繁に送信しすぎると、サーバーでスロットルが発生し、最終的にエラーが返されます。 スロットリングが発生した場合の HTTP 状態コードは 429 ("要求が多すぎます") になります。 経験則として、次の呼び出しとの間に 5 秒から 10 秒の間隔が必要です。
この制限は、直接呼び出した場合に REST API の呼び出しに影響するだけでなく、Session.GetPropertiesAsync
、Session.RenewAsync
、または Frontend.GetAssetConversionStatusAsync
などの C#/C++ の対応するものにも影響します。 また、一部の関数では、再試行のための保存のときは情報が返されることもあります。 たとえば、RenderingSessionPropertiesResult.MinimumRetryDelay
は、別のチェックを試みる前に待機する秒数を指定します。 可能な場合は、そのような戻り値を使用するのが最善です。これにより、調整されることなく、可能な限り頻繁にチェックを行うことができます。
サーバー側のスロットリングが発生する場合は、呼び出しの頻度を減らすようにコードを変更してください。 サーバーによって 1 分ごとにスロットリングの状態がリセットされるため、1 分後に安全にコードを再実行できます。
H265 コーデックが使用できない
codec not available
というエラーでサーバーが接続を拒否する可能性のある理由は 2 つあります。
H265 コーデックがインストールされていない:
最初に、システム要件の「ソフトウェア」セクションに記載されている HEVC Video Extensions を必ずインストールしてください。
それでも問題が発生する場合は、使用しているグラフィックス カードで H265 がサポートされていて、最新のグラフィックス ドライバーがインストールされていることを確認してください。 ベンダー固有の情報については、システム必要条件の「開発用 PC」セクションをご覧ください。
H265 コーデックがインストールされているが、使用できない:
この問題の原因は、DLL のセキュリティ設定が正しくないことです。 H265 でエンコードされた動画を視聴しようとした場合、この問題は発生しません。 コーデックを再インストールしても問題は解決されません。 代わりに、次の手順を実行してください。
管理者権限を使用して PowerShell を開き、次のコマンドを実行します
Get-AppxPackage -Name Microsoft.HEVCVideoExtension*
(一部のパッケージ インストール バージョンでは名前が
HEVCVideoExtension
ではなくHEVCVideoExtensions
であるため、'*' であることに注意してください)。 このコマンドによって、次のようなコーデックのInstallLocation
が出力されます。InstallLocation : C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtension_1.0.23254.0_x64__5wasdgertewe
Windows エクスプローラーでそのフォルダーを開きます
x86 と x64 のサブフォルダーがあります。 いずれかのフォルダーを右クリックして、[プロパティ] を選択します
- [セキュリティ] タブを選択し、[詳細設定] ボタンを選択します
- [所有者] で [変更] を選択します
- テキスト フィールドに「Administrators」と入力します
- [名前の確認]、[OK] の順に選択します
もう一方のフォルダーについて、上記の手順を繰り返します
同様に、両方のフォルダー内の DLL ファイルごとに上記の手順を繰り返します。 全部で 4 つの DLL があります。
設定が正しいことを検証するには、4 つの DLL ごとに次のステップを実行します:
- [プロパティ] > [セキュリティ] > [編集] の順に選択します
- すべてのグループまたはユーザーの一覧を 1 行ずつ確認し、それぞれに [読み取りと実行] 権限が設定されていることを確認します ([許可] 列のチェックマークがオンになっている必要があります)
動画の画質が低下している
動画の画質は、ネットワーク品質または H265 動画コーデックの欠落によって低下する可能性があります。
- ネットワークに関する問題を特定するための手順をご覧ください。
- 最新のグラフィックス ドライバーのインストールについては、「システム要件」をご覧ください。
MRC で記録された動画にライブ エクスペリエンスの品質が反映されていない
動画は Mixed Reality Capture (MRC) を介して HoloLens に記録できます。 ただし、結果として得られる動画の画質は、次の 2 つの理由により、ライブ エクスペリエンスよりも低くなります。
- 動画のフレームレートが 60 Hz ではなく 30 Hz に制限されている。
- 動画の画像に Late Stage Reprojection の処理ステップが実行されないため、動画が途切れているように見える。
どちらも記録技法に固有の制限事項です。
モデルの読み込みが成功した後にブラック スクリーンが発生する
レンダリング ランタイムに接続し、モデルが正常に読み込まれましたが、その後、ブラック スクリーンしか表示されない場合は、いくつかの明確な原因が考えられます。
詳細な分析を行う前に、次の点をテストすることをお勧めします。
- H265 コーデックがインストールされているか確認してください。 H264 コーデックへのフォールバックは用意されていますが、このフォールバックが正しく機能しなかったケースも生じています。 最新のグラフィックス ドライバーのインストールについては、「システム要件」をご覧ください。
- Unity プロジェクトを使用している場合は、Unity を閉じて、プロジェクト ディレクトリ内の一時ライブラリと obj フォルダーを削除してから、プロジェクトを再度読み込むかビルドしてください。 場合によっては、明確な理由もなく、キャッシュ データによってサンプルが正しく機能しなくなることがあります。
これらの 2 つの手順で問題が解決しなかった場合は、ビデオ フレームがクライアントで受信されているかどうかを確認する必要があります。 これは、「サーバー側のパフォーマンス クエリ」の章で説明しているように、プログラムでクエリできます。 FrameStatistics struct
には、受信したビデオ フレームの数を示すメンバーがあります。 この数が 0 より大きく、時間の経過と共に増加している場合、クライアントは実際のビデオ フレームをサーバーから受信しています。 そのため、これはクライアント側の問題のはずです。
変換設定の拡大縮小値がモデルに適用されない
モデルが Showcase または Quickstart に拡大縮小の変更なしで表示されるが、拡大縮小が変換設定のジオメトリ パラメーターの一部として適用されている場合、これはサンプルの組み込みの自動拡大縮小機能が原因である可能性があります。 つまり、サンプルは、入力の拡大縮小に関係なく、ビューの視錐台に最適になるようにモデルを拡大縮小します。
Showcase の場合、自動拡大縮小を無効にするには、models.xml ファイル内のモデルの Transform
セクションで 0 の MaxSize
を指定します。 このデータドリブン手法では、最初にモデルが XML を介して読み込まれる必要があります。これは、他のすべての場合、MaxSize
の既定値は 1 メートルであるためです。 既定で 0.5 メートルに設定されている MinSize
プロパティもあり、より小さいモデルはすべて拡大されます。
Showcase のモデルを読み込む方法の詳細については、Showcase ドキュメントの「ARR Showcase への 3D モデル アセットの追加」章を参照してください。
クライアント側の一般的な問題
モデルは、選択されている VM の制限、具体的には、プリミティブの最大数を超えている:
特定のサーバー サイズの制限を確認してください。
モデルがカメラの視錐台の外側にある:
多くの場合、そのモデルは正しく表示されますが、カメラの視錐台の外側にあります。 一般的な理由の 1 つは、そのモデルが中心から外れた遠くのピボットを使用してエクスポートされたために、カメラの遠クリップ面で切り取られてしまうことです。 これは、モデルの境界ボックスに対してプログラムでクエリを実行し、Unity でそのボックスを線のボックスとして視覚化したり、その値をデバッグ ログに出力したりするのに役立ちます。
さらに、変換処理では、変換されたモデルと共に出力 json ファイルが生成されます。 モデル ポジショニングの問題をデバッグするには、outputStatistics セクションの boundingBox
エントリを参照してください。
{
...
"outputStatistics": {
...
"boundingBox": {
"min": [
-43.52,
-61.775,
-79.6416
],
"max": [
43.52,
61.775,
79.6416
]
}
}
}
境界ボックスは、3D 空間での min
と max
の位置として、メートル単位で示されます。 したがって、座標が 1000.0 の場合は、原点から 1 キロメートル離れていることを意味します。
この境界ボックスには、ジオメトリの非表示につながる 2 つの問題があります。
- ボックスが中心から遠く離れている場合がある。このため、遠方平面クリッピングによりオブジェクトが完全に切り取られる。 この場合の
boundingBox
値は、min = [-2000, -5,-5], max = [-1990, 5,5]
のようになります。ここでは、例として、x 軸上の大きなオフセットを使用します。 この種類の問題を解決するには、モデル変換構成でrecenterToOrigin
オプションを有効にします。 - ボックスは中央に配置できるが、スケールが大きすぎる。 つまり、カメラがモデルの中心から開始されても、そのジオメトリはすべての方向で切り取られます。 この場合の典型的な
boundingBox
値は、min = [-1000,-1000,-1000], max = [1000,1000,1000]
のようになります。 この種類の問題の原因は、通常、単位スケールの不一致です。 補正するには、変換時のスケーリング値を指定するか、ソース モデルを正しい単位でマークアップします。 スケーリングは、実行時にモデルを読み込むときにルート ノードに適用することもできます。
Unity のレンダリング パイプラインにレンダリング フックが含まれていない:
Azure Remote Rendering では、動画を使用してフレーム合成を行ったり、再投影を行ったりするために、Unity のレンダリング パイプラインにフックします。 これらのフックが存在することを確認するには、メニュー Window > Analysis > Frame debugger を開きます。 これを有効にしてから、パイプライン内に HolographicRemotingCallbackPass
のエントリが 2 つあることを確認します。
修正するには、指定された HybridRenderingPipeline アセットが使用されていることを確認します:
詳細は、「Unity レンダー パイプライン」に記載されています。
モデルの読み込み後にチェッカーボード パターンがレンダリングされる
レンダリングされた画像が次のように表示される場合:
レンダラーが標準の構成サイズのポリゴンの制限に達しています。 解消するには、Premium の構成サイズに切り替えるか、表示されるポリゴンの数を減らします。
Unity でレンダリングされるイメージが上下反転している
Unity チュートリアル: リモート モデルの表示に関する記事に厳密に従うようにしてください。 イメージが上下反転するのは、Unity がオフスクリーン レンダー ターゲットを作成する必要があることを示しています。 この動作は現在サポートされていないため、HoloLens 2 のパフォーマンスに大きな影響を与えます。
この問題の原因は、MSAA、HDR、または後処理の有効化です。 低品質のプロファイルが選択されていることを確認し、Unity で既定値として設定します。 これを行うには、[Edit] > [Project Settings] > [Quality] に移動します。
Unity 2020 で OpenXR プラグインを使用する場合、後処理が有効になっているかどうかに関係なく、この追加のオフスクリーン レンダー ターゲットを作成する URP (ユニバーサル レンダー パイプライン) のバージョンがあります。 したがって、URP バージョンを手動で 10.5.1 以上にアップグレードすることが重要です。 このアップグレードプロセスは、システム要件で説明されています。
Remote Rendering API を使用する Unity コードがコンパイルされない
Unity エディター用にコンパイルするときにデバッグを使用する
Unity ソリューションのビルドの種類を [デバッグ] に切り替えます。 Unity エディターで ARR をテストする場合、UNITY_EDITOR
の定義は 'デバッグ' ビルドでのみ使用できます。 この設定は、デプロイされるアプリケーションに使用するビルドの種類 (お勧めは「リリース」 ビルド) とは関係ありません。
HoloLens 2 用の Unity サンプルをコンパイルするときにコンパイル エラーが発生する
HoloLens 2 の Unity サンプル (quickstart、ShowCaseApp など) をコンパイルしようとすると、偽の失敗が発生することがあります。 Visual Studio には、ファイルが存在するにもかかわらず、ファイルがコピーできないという警告が表示されます。 この問題が発生した場合は、次を行います。
- すべての一時 Unity ファイルをプロジェクトから削除してから、やり直してください。 つまり、Unity を閉じて、プロジェクト ディレクトリ内の一時ライブラリと obj フォルダーを削除してから、プロジェクトを再度読み込むかビルドしてください。
- このコピー手順の問題はファイル名が長い場合に発生することがあるため、比較的パスが短いディスク上のディレクトリにプロジェクトが格納されていることを確認してください。
- それでも問題が解決しない場合は、MS Sense によりコピー手順が妨げられている可能性があります。 例外を設定するには、コマンド ラインから次のレジストリ コマンドを実行します (管理者権限が必要です)。
reg.exe ADD "HKLM\SOFTWARE\Policies\Microsoft\Windows Advanced Threat Protection" /v groupIds /t REG_SZ /d "Unity"
AudioPluginMsHRTF.dll が見つからないために Unity プロジェクトで Arm64 のビルドが失敗する
Arm64 の AudioPluginMsHRTF.dll
は、バージョン 3.0.1 の Windows Mixed Reality パッケージ (com.unity.xr.windowsmr.metro) に追加されました。 Unity パッケージ マネージャーを使用して、バージョン 3.0.1 以降がインストールされていることを確認します。 Unity のメニュー バーで、[Window] > [Package Manager] に移動し、[Windows Mixed Reality] パッケージを見つけます。
Unity Cinemachine
プラグインがリモート ポーズ モードで動作しない
リモート ポーズ モードでは、実際のレンダリングを行うプロキシ カメラが、ARR Unity バインディング コードによって暗黙的に作成されます。 この場合、メイン カメラのカリング マスクは 0 ("nothing") に設定され、そのレンダリングは実質的にオフになります。 ただし、カメラを駆動する一部のサード パーティ プラグイン (Cinemachine
など) は、少なくともいくつかのレイヤー ビットが設定されていることを前提としています。
この点については、バインディング コードを使用することでプログラムから、メイン カメラのレイヤー ビットマスクを変更できます。 具体的には、次の手順が必要となります。
- ローカル シーン ジオメトリのレンダリングには使用されない新しいレイヤーを Unity で作成します。 この例では、そのレイヤーが "Cam" という名前であることを想定しています。
- このビットマスクを ARR に渡し、メイン カメラに対するその設定を ARRに委ねます。
RemoteManagerUnity.CameraCullingMask = LayerMask.GetMask("Cam");
- この新しいレイヤーを使用するように
Cinemachine
プロパティを構成します:
ローカル ポーズ モードは、この問題の影響を受けません。この場合、ARR バインディングは内部プロキシ カメラにレンダリングをリダイレクトしないためです。
ネイティブ C++ ベースのアプリケーションがコンパイルされない
UWP アプリケーションまたは DLL の 'ライブラリが見つかりません' エラー
C++ NuGet パッケージ内には、使用するバイナリ フレーバーを定義する microsoft.azure.remoterendering.Cpp.targets
ファイルがあります。 UWP
を識別するため、ファイル内の条件によって ApplicationType == 'Windows Store'
が確認されます。 このため、この種類がプロジェクトで設定されていることを確認する必要があります。 これは、Visual Studio のプロジェクト ウィザードを使用して UWP アプリケーションまたは DLL を作成する場合に当てはまります。
ホログラムが不安定である
レンダリングされたオブジェクトが頭部の動きに連動して動くように見える場合は、Late Stage Reprojection (LSR) に関する問題が発生している可能性があります。 このような状況への対処方法のガイダンスについては、Late Stage Reprojection に関するセクションをご覧ください。
不安定なホログラム (揺れ、ゆがみ、ジッター、ジャンプなどが発生しているホログラム) のもう 1 つの理由として、ネットワーク接続の問題、特にネットワーク帯域幅が不足していたり、待機時間が長すぎたりすることがあります。 ネットワーク接続の品質を示す適切な指標の 1 つは、パフォーマンス統計値 ServiceStatistics.VideoFramesReused
です。 再利用されたフレームは、クライアント側で (パケットの損失やネットワーク待機時間のばらつきなどにより) 新しいビデオ フレームが利用できなかったために、前のビデオ フレームを再利用する必要があったという状況を示しています。 ServiceStatistics.VideoFramesReused
が 0 より大きいことが多い場合は、ネットワークの問題を示しています。
確認すべきもう 1 つの値は ServiceStatistics.LatencyPoseToReceiveAvg
です。 この値は、常に 100 ミリ秒未満である必要があります。 値がそれよりも大きい場合は、接続されているデータ センターが離れすぎていることを示しています。
考えられる軽減策の一覧については、ネットワーク接続のガイドラインをご覧ください。
HoloLens 2 のローカル コンテンツ (UI、...) は、ARR を使用しない場合よりもはるかに多くの歪みアーティファクトでレンダリングされます
この成果物は、実行時のパフォーマンスに関してローカル コンテンツ プロジェクションの品質をトレードするデフォルトの設定です。 ローカル コンテンツが ARR なしと同じ再プロジェクション品質レベルでレンダリングされるように、プロジェクション モードを変更する方法については、「再プロジェクションのポーズモード」についての章を参照してください。
Z ファイティング
ARR には Z ファイティングの軽減機能が用意されていますが、シーンでは Z ファイティングが引き続き表示されます。 このガイドは、これらの残りの問題のトラブルシューティングを目的としています。
推奨される手順
次のワークフローを使用して、Z ファイティングを軽減します。
ARR の既定の設定を使用してシーンをテストします (Z ファイティングの軽減が有効)
API を使用して Z ファイティングの軽減を無効にします
カメラの近くと遠くの面をより近い範囲に変更します
次の項でシーンのトラブルシューティングを行います
残りの Z ファイティングを調査する
上記の手順を実行しても、残りの Z ファイティングを許容できない場合は、Z ファイティングの根底にある原因を調査する必要があります。 Z ファイティングの軽減機能に関するページに記載されているように、Z ファイティングには主に 2 つの原因があります。深度範囲の遠い側での深さの精度の損失と、同一平面で交差するサーフェスです。 深さの精度の損失は数学的な不測の事態であり、上記の手順 3 に従った場合にのみ軽減できます。 同一平面のサーフェスは、ソース アセットの欠陥を示し、ソース データではより適切に修正されています。
ARR には、サーフェスが Z ファイティングになる可能性があるかどうかを判断する機能、チェッカーボードの強調表示があります。 また、Z ファイティングの原因を視覚的に判断することもできます。 次の最初のアニメーションは、距離における深さの精度の損失の例を示しています。2 番目のアニメーションは、ほぼ同一平面のサーフェスの例を示しています。
これらの例を実際の Z ファイティングと比較して根本原因を特定するか、必要に応じて次のステップバイステップのワークフローに従ってください。
- カメラを Z ファイティングのサーフェイスの上に配置して、サーフェイスを直接見ます。
- カメラをゆっくりと後ろに移動させて、サーフェイスから離します。
- Z ファイティングが常に表示される場合、サーフェスは完全に同一平面にあります。
- Z ファイティングがほとんどの位置で表示される場合、サーフェスはほぼ同一平面にあります。
- Z ファイティングが遠くでのみ表示される場合は、原因は深さの精度の損失です。
同一平面のサーフェスの場合は、次のようなさまざまな原因が考えられます。
エラーまたは異なるワークフロー アプローチが原因で、エクスポートしたアプリケーションによってオブジェクトが重複している。
それぞれのアプリケーションとアプリケーション サポートで、これらの問題を確認してください。
表面または裏面のカリングを使用するレンダラーでは、サーフェスが重複し、反転して両面が表示される。
モデル変換を使用してインポートすると、モデルの基本の面が決まります。 既定値は両面です。 サーフェスは、両側からの物理的に正しい光源で、薄い壁としてレンダリングされます。 片面は、ソース アセットのフラグによって暗黙的に指定することも、モデル変換中に明示的に強制することもできます。 また、必要に応じて片面モード を "標準" に設定することもできます。
ソース アセットでオブジェクトが交差している。
サーフェスの一部が重なり合うように変換されたオブジェクトでは、Z ファイティングも作成されます。 ARR にインポートされたシーンでシーン ツリーの一部を変換した場合も、この問題が発生することがあります。
サーフェスが、壁の図柄やテキストのように、タッチするために意図的に作成されている。
ネイティブの C++ アプリでのマルチパス ステレオ レンダリングを使用したグラフィックス成果物
場合によっては、BlitRemoteFrame を呼び出した後にローカル コンテンツに対してマルチパス ステレオ レンダリング モードを使用する C++ のカスタム ネイティブ アプリ (別個のパスに左と右の目がレンダリングされる) で、ドライバーのバグが発生することがあります。 このバグによって、不明確なラスタライズによるエラーが発生し、ローカル コンテンツの個々の三角形や三角形の一部がランダムに非表示になります。 パフォーマンス上の理由から、SV_RenderTargetArrayIndex を使用するなど、より新しいシングルパス ステレオ レンダリング手法でローカル コンテンツをレンダリングすることをお勧めします。
変換ファイルのダウンロード エラー
ファイル システムの制限により、変換サービスで BLOB ストレージからファイルをダウンロード中にエラーが発生する場合があります。 特定のエラーケースを以下に示します。 Windows ファイル システムの制限事項に関する包括的な情報については、ファイル、パス、名前空間に関するドキュメントを参照してください。
衝突したパスとファイル名
BLOB ストレージでは、兄弟エントリとまったく同じ名前のファイルとフォルダーを作成することができます。 Windows ファイル システムでは、これは許可されません。 したがって、サービスではその場合にダウンロード エラーを生成します。
パス名の長さ
Windows とサービスによって課されるパスの長さの制限があります。 BLOB ストレージ内のファイル パスとファイル名は、178 文字以下である必要があります。 たとえば、models/Assets
の blobPrefix
が 13 文字の場合は、次のようになります。
models/Assets/<any file or folder path greater than 164 characters will fail the conversion>
変換で使用されるファイルだけでなく、blobPrefix
で指定されたすべてのファイルが変換サービスによりダウンロードされます。 このような場合は、問題の原因であるファイルやフォルダーがわかりにくい場合があるため、blobPrefix
のストレージ アカウントに含まれるものをすべて確認することが重要です。 ダウンロードされる内容については、以下の入力例を参照してください。
{
"settings": {
"inputLocation": {
"storageContainerUri": "https://contosostorage01.blob.core.windows.net/arrInput",
"blobPrefix": "models/Assets",
"relativeInputAssetPath": "myAsset.fbx"
...
}
}
}
models
├───Assets
│ │ myAsset.fbx <- Asset
│ │
│ └───Textures
│ | myTexture.png <- Used in conversion
│ |
| └───MyFiles
| myOtherFile.txt <- File also downloaded under blobPrefix
|
└───OtherFiles
myReallyLongFileName.txt <- Ignores files not under blobPrefix
HoloLens2 '写真を撮る' (MRC) にローカルまたはリモートのコンテンツが表示されない
通常、この問題は、プロジェクトが WMR から OpenXR に更新され、プロジェクトが HolographicViewConfiguration クラス (Windows.Graphics.Holographic) 設定にアクセスした場合に発生します。 この API は OpenXR ではサポートされていないため、アクセスできません。