ボリュームライトをURPで表現したいです。
現在URPでプロジェクトを進めており、
こちらのボリュームライトを使用しています。
https://github.com/robertcupisz/LightShafts
しかし、これはBuilt-in Render Pipeline用のため
下記エラーが出て正しく表現されません。
このエラーはつまりURPではCamera.RenderWithShader関数が使えないとの事だそうです。
そのため、スポットライト視点のカメラでのシャドウマップがレンダリング出来ません。
代替を教えて頂きたいです。
因みにURP用のボリュームライトも探したのですが、このクオリティかつ、パブリックドメインのものは存在しませんでした。
エラーメッセージ
Recursive rendering is not supported in SRP (are you calling Camera.Render from within a render pipeline?). UnityEngine.StackTraceUtility:ExtractStackTrace () LightShafts:UpdateShadowmap () (at Assets/LightShafts-master/Scripts/LightShafts.cs:78) LightShafts:OnRenderObject () (at Assets/LightShafts-master/Scripts/LightShafts.cs:235) UnityEngine.GUIUtility:ProcessEvent (int,intptr,bool&)
該当のソースコード
C#
1 void UpdateShadowmap() 2 { 3 if (m_ShadowmapMode == LightShaftsShadowmapMode.Static && !m_ShadowmapDirty) 4 return; 5 6 InitShadowmap(); 7 8 if (m_ShadowmapCamera == null) 9 { 10 GameObject go = new GameObject("Depth Camera"); 11 go.AddComponent(typeof(Camera)); 12 m_ShadowmapCamera = go.GetComponent<Camera>(); 13 go.hideFlags = HideFlags.HideAndDontSave; 14 m_ShadowmapCamera.enabled = false; 15 m_ShadowmapCamera.clearFlags = CameraClearFlags.SolidColor; 16 } 17 Transform cam = m_ShadowmapCamera.transform; 18 cam.position = transform.position; 19 cam.rotation = transform.rotation; 20 21 if (directional) 22 { 23 m_ShadowmapCamera.orthographic = true; 24 m_ShadowmapCamera.nearClipPlane = 0; 25 m_ShadowmapCamera.farClipPlane = m_Size.z; 26 m_ShadowmapCamera.orthographicSize = m_Size.y * 0.5f; 27 m_ShadowmapCamera.aspect = m_Size.x / m_Size.y; 28 } 29 else 30 { 31 m_ShadowmapCamera.orthographic = false; 32 m_ShadowmapCamera.nearClipPlane = m_SpotNear * m_Light.range; 33 m_ShadowmapCamera.farClipPlane = m_SpotFar * m_Light.range; 34 m_ShadowmapCamera.fieldOfView = m_Light.spotAngle; 35 m_ShadowmapCamera.aspect = 1.0f; 36 } 37 m_ShadowmapCamera.renderingPath = RenderingPath.Forward; 38 m_ShadowmapCamera.targetTexture = m_Shadowmap; 39 m_ShadowmapCamera.cullingMask = m_CullingMask; 40 m_ShadowmapCamera.backgroundColor = Color.white; 41 42 m_ShadowmapCamera.RenderWithShader(m_DepthShader, "RenderType"); 43 44 if (m_Colored) 45 { 46 m_ShadowmapCamera.targetTexture = m_ColorFilter; 47 m_ShadowmapCamera.cullingMask = m_ColorFilterMask; 48 m_ShadowmapCamera.backgroundColor = new Color(m_ColorBalance, m_ColorBalance, m_ColorBalance); 49 m_ShadowmapCamera.RenderWithShader(m_ColorFilterShader, ""); 50 } 51 52 m_ShadowmapDirty = false; 53 }
試したこと
Render Featureを使用したカスタムパスにて代替を試みたのですが、
当方独学&Unity始めて2か月の初心者のため正直さっぱり分かりません。
メインとは別のカメラでのレンダリングが出来るのか分からないし、
Render Featureを使わなくても代替出来るのかも分からないし、
コマンドバッファーだのGLだのMatrixだの意味わからんです、難しすぎます。
補足情報(FW/ツールのバージョンなど)
Unity EDITOR VERSION 2020.3.24f1
URP 10.7.0
あなたの回答
tips
プレビュー