質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1803閲覧

ボリュームライトをURPで表現したい

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/12/22 06:56

ボリュームライトを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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問