0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UnityのVR開発でURP使用時に、カメラのレンダリングエラーが出た

Posted at

Meta Quest3でスタンドアロン開発をしている時、自分の動きを確認したくて簡易的にカメラに自分を映そうと思ったところ、真っ暗のまま描画されない。

環境

  • Unity 2022.3.23
  • Universal RP 14.0.10
  • Meta Quest3 (Androidビルド)

エラーの内容

ヘッドセットのカメラとは別に、シーンにCameraを設置し、OutputTextureに鏡用のRenderTextureを設定。ビルドして確認しても、真っ暗なまま映らなかった。
エラーメッセージを見てみると、以下のようなエラーが。

Exception: ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
System.Collections.Generic.List1[T].get_Item (System.Int32 index) (at <00000000000000000000000000000000>:0)
UnityEngine.Experimental.Rendering.XRPass.GetViewport (System.Int32 viewIndex) (at <00000000000000000000000000000000>:0)
UnityEngine.Rendering.Universal.Internal.DrawObjectsPass.ExecutePass (UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Rendering.Universal.Internal.DrawObjectsPass+PassData data, UnityEngine.Rendering.Universal.RenderingData& renderingData, System.Boolean yFlip) (at <00000000000000000000000000000000>:0)
UnityEngine.Rendering.Universal.ScriptableRenderer.ExecuteRenderPass (UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Rendering.Universal.ScriptableRenderPass renderPass, UnityEngine.Rendering.Universal.RenderingData& renderingData) (at <00000000000000000000000000000000>:0)
UnityEngine.Rendering.Universal.ScriptableRenderer.ExecuteBlock (System.Int32 blockIndex, UnityEngine.Rendering.Universal.ScriptableRenderer+RenderBlocks& renderBlocks, UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Rendering.Universal.RenderingData& renderingData, System.Boolean submit) (at <00000000000000000000000000000000>:0)
UnityEngine.Rendering.Universal.ScriptableRenderer.Execute (UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Rendering.Universal.RenderingData& renderingData) (at <00000000000000000000000000000000>:0)
UnityEngine.Rendering.Universal.UniversalRenderPipeline.RenderSingleCamera (UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Rendering.Universal.CameraData& cameraData) (at <00000000000000000000000000000000>:0)
UnityEngine.Rendering.Universal.UniversalRenderPipeline.RenderCameraStack (UnityEngine.Rendering.ScriptableRenderContext context, UnityEngine.Camera baseCamera) (at <00000000000000000000000000000000>:0)
UnityEngine.Rendering.Universal.UniversalRenderPipeline.Render (UnityEngine.Rendering.ScriptableRenderContext renderContext, System.Collections.Generic.List1[T] cameras) (at <00000000000000000000000000000000>:0)
UnityEngine.Rendering.RenderPipelineManager.DoRenderLoop_Internal (UnityEngine.Rendering.RenderPipelineAsset pipe, System.IntPtr loopPtr, UnityEngine.Object renderRequest) (at <00000000000000000000000000000000>:0)
Warning: Render Pipeline error : the XR layout still contains active passes. Executing XRSystem.EndLayout() right now.
UnityEngine.Rendering.RenderPipelineManager:DoRenderLoop_Internal(RenderPipelineAsset, IntPtr, Object)

対処方法(ワークアラウンド)

何のエラーかよく分からなかったので、ググってみると以下のような記事が。
https://discussions.unity.com/t/xrpass-getviewport-exceptions-in-editor/944254/15

記事によると、universal-render-pipelineのパッケージ内の、ifチェックを追加することで解決するとのこと。

  1. Library/PackageCache 内の com.unity.render-pipelines.universal@... フォルダを一時的に Packages などの他のフォルダに移動。これを行わないと、パッケージのスクリプトの変更ができない。

  2. 同フォルダ内の Runtime/Passes/DrawObjectPass.cs 184〜187行目にあるコードを、以下のように修正。

     if (data.m_RenderingData.cameraData.xrRendering && data.m_RenderingData.cameraData.xr.enabled && data.m_IsActiveTargetBackBuffer)  
     {
         cmd.SetViewport(data.m_RenderingData.cameraData.xr.GetViewport());
     }
    
  3. 編集したフォルダを元の/Library/PackageCacheに戻す

再度ビルドして実行したら、エラーも出なくなり、カメラの描画もできるようになった。

追記

元々正常に動作していたものの、ある時急に上記のエラーが起きるようになったため、原因の調査に時間がかかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?