diff --git a/Runtime/SRP/VXGIRenderPipeline.cs b/Runtime/SRP/VXGIRenderPipeline.cs index 32c1854..ff4c54b 100644 --- a/Runtime/SRP/VXGIRenderPipeline.cs +++ b/Runtime/SRP/VXGIRenderPipeline.cs @@ -51,15 +51,19 @@ protected override void Render(ScriptableRenderContext renderContext, Camera[] c foreach (var camera in cameras) { BeginCameraRendering(renderContext, camera); - if (camera.TryGetComponent(out var vxgi) && vxgi.isActiveAndEnabled) { - vxgi.Render(renderContext, _renderer); + if (camera.cameraType == CameraType.Game) { + if (camera.TryGetComponent(out var vxgi) && vxgi.isActiveAndEnabled) { + vxgi.Render(renderContext, _renderer); + } else { + RenderFallback(renderContext, camera); + } } else { #if UNITY_EDITOR if (camera.cameraType == CameraType.SceneView) { ScriptableRenderContext.EmitWorldGeometryForSceneView(camera); } - if (mainCamera != null && mainCamera.TryGetComponent(out vxgi) && vxgi.isActiveAndEnabled) { + if (mainCamera != null && mainCamera.TryGetComponent(out var vxgi) && vxgi.isActiveAndEnabled) { vxgi.Render(renderContext, camera, _renderer); } else { RenderFallback(renderContext, camera); @@ -80,17 +84,13 @@ protected override void Render(ScriptableRenderContext renderContext, Camera[] c void RenderFallback(ScriptableRenderContext renderContext, Camera camera) { TriggerCameraCallback(camera, "OnPreRender", Camera.onPreRender); - _command.ClearRenderTarget(true, true, Color.black); - renderContext.ExecuteCommandBuffer(_command); - _command.Clear(); + if (!camera.TryGetCullingParameters(out _cullingParameters)) return; TriggerCameraCallback(camera, "OnPreCull", Camera.onPreCull); - if (!camera.TryGetCullingParameters(out _cullingParameters)) return; - var cullingResults = renderContext.Cull(ref _cullingParameters); var drawingSettings = new DrawingSettings { perObjectData = PerObjectData }; - drawingSettings.SetShaderPassName(0, ShaderTagIDs.Deferred); + drawingSettings.SetShaderPassName(0, ShaderTagIDs.ForwardBase); drawingSettings.SetShaderPassName(1, ShaderTagIDs.PrepassBase); drawingSettings.SetShaderPassName(2, ShaderTagIDs.Always); drawingSettings.SetShaderPassName(3, ShaderTagIDs.Vertex); @@ -98,6 +98,11 @@ void RenderFallback(ScriptableRenderContext renderContext, Camera camera) { drawingSettings.SetShaderPassName(5, ShaderTagIDs.VertexLM); renderContext.SetupCameraProperties(camera); + + _command.ClearRenderTarget(true, true, camera.backgroundColor); + renderContext.ExecuteCommandBuffer(_command); + _command.Clear(); + renderContext.DrawRenderers(cullingResults, ref drawingSettings, ref _filteringSettings); renderContext.DrawSkybox(camera); diff --git a/Shaders/Standard.shader b/Shaders/Standard.shader index 4d15276..a13b0b7 100644 --- a/Shaders/Standard.shader +++ b/Shaders/Standard.shader @@ -52,6 +52,7 @@ { Tags { "RenderPipeline"="VXGI" } + UsePass "Standard/FORWARD" UsePass "Standard/DEFERRED" UsePass "Hidden/VXGI/Voxelization/VOXELIZATION" }