From a56e9aae4ca7ce82c734a55108a35a3b40d9f8f2 Mon Sep 17 00:00:00 2001 From: Reach Platform Support Date: Tue, 27 May 2025 13:14:09 +0000 Subject: [PATCH 01/80] [Port] [6000.1] Re-enable disabled URP post-process tests. --- .../Test/TestFilters/TestCaseFilters.asset | 66 ------------------- 1 file changed, 66 deletions(-) diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_PostPro/Assets/Test/TestFilters/TestCaseFilters.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_PostPro/Assets/Test/TestFilters/TestCaseFilters.asset index b8a926eb765..f840898ee2d 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_PostPro/Assets/Test/TestFilters/TestCaseFilters.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_PostPro/Assets/Test/TestFilters/TestCaseFilters.asset @@ -255,72 +255,6 @@ MonoBehaviour: XrSdk: StereoModes: 0 Reason: GLES3 not supported by STP - - FilteredScene: {fileID: 0} - FilteredScenes: - - {fileID: 102900000, guid: f2e9a73c42a8943708adf547fffee72e, type: 3} - - {fileID: 102900000, guid: 33738bb1cfc644b2882c51fa88268a4f, type: 3} - ColorSpace: -1 - BuildPlatform: 13 - GraphicsDevice: 4 - Architecture: 0 - XrSdk: - StereoModes: 0 - Reason: 'Bug: https://jira.unity3d.com/browse/UUM-83681' - - FilteredScene: {fileID: 0} - FilteredScenes: - - {fileID: 102900000, guid: f2e9a73c42a8943708adf547fffee72e, type: 3} - - {fileID: 102900000, guid: 33738bb1cfc644b2882c51fa88268a4f, type: 3} - ColorSpace: -1 - BuildPlatform: 42 - GraphicsDevice: 4 - Architecture: 0 - XrSdk: - StereoModes: 0 - Reason: 'Bug: https://jira.unity3d.com/browse/UUM-83681' - - FilteredScene: {fileID: 0} - FilteredScenes: - - {fileID: 102900000, guid: f2e9a73c42a8943708adf547fffee72e, type: 3} - - {fileID: 102900000, guid: 33738bb1cfc644b2882c51fa88268a4f, type: 3} - ColorSpace: -1 - BuildPlatform: 24 - GraphicsDevice: 4 - Architecture: 0 - XrSdk: - StereoModes: 0 - Reason: 'Bug: https://jira.unity3d.com/browse/UUM-83681' - - FilteredScene: {fileID: 0} - FilteredScenes: - - {fileID: 102900000, guid: f2e9a73c42a8943708adf547fffee72e, type: 3} - - {fileID: 102900000, guid: 33738bb1cfc644b2882c51fa88268a4f, type: 3} - ColorSpace: -1 - BuildPlatform: 19 - GraphicsDevice: 4 - Architecture: 0 - XrSdk: - StereoModes: 0 - Reason: 'Bug: https://jira.unity3d.com/browse/UUM-83681' - - FilteredScene: {fileID: 0} - FilteredScenes: - - {fileID: 102900000, guid: f2e9a73c42a8943708adf547fffee72e, type: 3} - - {fileID: 102900000, guid: 33738bb1cfc644b2882c51fa88268a4f, type: 3} - ColorSpace: -1 - BuildPlatform: 38 - GraphicsDevice: 4 - Architecture: 0 - XrSdk: - StereoModes: 0 - Reason: 'Bug: https://jira.unity3d.com/browse/UUM-83681' - - FilteredScene: {fileID: 0} - FilteredScenes: - - {fileID: 102900000, guid: f2e9a73c42a8943708adf547fffee72e, type: 3} - - {fileID: 102900000, guid: 33738bb1cfc644b2882c51fa88268a4f, type: 3} - ColorSpace: -1 - BuildPlatform: 2 - GraphicsDevice: 4 - Architecture: 0 - XrSdk: - StereoModes: 0 - Reason: 'Bug: https://jira.unity3d.com/browse/UUM-83681' - FilteredScene: {fileID: 0} FilteredScenes: - {fileID: 102900000, guid: 743d01f5817f118469f5095b0192f5ce, type: 3} From 203b7585923fc798824bc4d8e4e2e84026535bf1 Mon Sep 17 00:00:00 2001 From: Lorin Atzberger Date: Tue, 27 May 2025 13:14:09 +0000 Subject: [PATCH 02/80] Fixed mesh changes not propagating correctly when using GRD and GPU Occlusion --- .../Runtime/GPUDriven/GPUResidentDrawer.cs | 101 ++++++++++++------ 1 file changed, 69 insertions(+), 32 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/GPUResidentDrawer.cs b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/GPUResidentDrawer.cs index 63b56b98bb7..96e3591e22d 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/GPUResidentDrawer.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/GPUResidentDrawer.cs @@ -597,8 +597,8 @@ private void PostPostLateUpdate() ProcessRenderers(rendererData, unsupportedRenderers.AsArray()); Profiler.EndSample(); - Profiler.BeginSample("GPUResidentDrawer.ProcessRendererMaterialChanges"); - ProcessRendererMaterialChanges(rendererData.changedID, supportedChangedMaterials.AsArray(), supportedChangedPackedMaterialDatas.AsArray()); + Profiler.BeginSample("GPUResidentDrawer.ProcessRendererMaterialAndMeshChanges"); + ProcessRendererMaterialAndMeshChanges(rendererData.changedID, supportedChangedMaterials.AsArray(), supportedChangedPackedMaterialDatas.AsArray(), meshDataSorted.changedID); Profiler.EndSample(); lodGroupTransformData.Dispose(); @@ -655,9 +655,9 @@ private void ProcessLODGroups(NativeArray changedID, NativeArray destr m_BatchersContext.TransformLODGroups(transformedID); } - private void ProcessRendererMaterialChanges(NativeArray excludedRenderers, NativeArray changedMaterials, NativeArray changedPackedMaterialDatas) + private void ProcessRendererMaterialAndMeshChanges(NativeArray excludedRenderers, NativeArray changedMaterials, NativeArray changedPackedMaterialDatas, NativeArray changedMeshes) { - if (changedMaterials.Length == 0) + if (changedMaterials.Length == 0 && changedMeshes.Length == 0) return; Profiler.BeginSample("GPUResidentDrawer.GetMaterialsWithChangedPackedMaterial"); @@ -669,7 +669,7 @@ private void ProcessRendererMaterialChanges(NativeArray excludedRenderers, Profiler.EndSample(); - if (filteredMaterials.Count == 0) + if (filteredMaterials.Count == 0 && changedMeshes.Length == 0) { filteredMaterials.Dispose(); updatePackedMaterialCacheJob.Complete(); @@ -679,14 +679,14 @@ private void ProcessRendererMaterialChanges(NativeArray excludedRenderers, var sortedExcludedRenderers = new NativeArray(excludedRenderers, Allocator.TempJob); if (sortedExcludedRenderers.Length > 0) { - Profiler.BeginSample("ProcessRendererMaterialChanges.Sort"); + Profiler.BeginSample("ProcessRendererMaterialAndMeshChanges.Sort"); sortedExcludedRenderers.ParallelSort().Complete(); Profiler.EndSample(); } - Profiler.BeginSample("GPUResidentDrawer.FindRenderersFromMaterials"); + Profiler.BeginSample("GPUResidentDrawer.FindRenderersFromMaterialsOrMeshes"); - NativeList renderersWithChangedMaterials = FindRenderersFromMaterials(sortedExcludedRenderers, filteredMaterials, Allocator.TempJob); + var (renderersWithChangedMaterials, renderersWithChangedMeshes) = FindRenderersFromMaterialsOrMeshes(sortedExcludedRenderers, filteredMaterials, changedMeshes, Allocator.TempJob); filteredMaterials.Dispose(); Profiler.EndSample(); @@ -694,22 +694,35 @@ private void ProcessRendererMaterialChanges(NativeArray excludedRenderers, sortedExcludedRenderers.Dispose(); updatePackedMaterialCacheJob.Complete(); - if (renderersWithChangedMaterials.Length == 0) + if (renderersWithChangedMaterials.Length == 0 && renderersWithChangedMeshes.Length == 0) { renderersWithChangedMaterials.Dispose(); + renderersWithChangedMeshes.Dispose(); return; } Profiler.BeginSample("GPUResidentDrawer.UpdateRenderers"); { - var materialChangedInstances = new NativeArray(renderersWithChangedMaterials.Length, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); - ScheduleQueryRendererGroupInstancesJob(renderersWithChangedMaterials.AsArray(), materialChangedInstances).Complete(); + var changedMaterialsCount = renderersWithChangedMaterials.Length; + var changedMeshesCount = renderersWithChangedMeshes.Length; + var totalCount = changedMaterialsCount + changedMeshesCount; - m_Batcher.DestroyDrawInstances(materialChangedInstances); - materialChangedInstances.Dispose(); + var changedInstances = new NativeArray(totalCount, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); + var changedRenderers = new NativeArray(totalCount, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); + + NativeArray.Copy(renderersWithChangedMaterials.AsArray(), changedRenderers, changedMaterialsCount); + NativeArray.Copy(renderersWithChangedMeshes.AsArray(), changedRenderers.GetSubArray(changedMaterialsCount, changedMeshesCount), changedMeshesCount); + + ScheduleQueryRendererGroupInstancesJob(changedRenderers, changedInstances).Complete(); + + m_Batcher.DestroyDrawInstances(changedInstances); m_Batcher.UpdateRenderers(renderersWithChangedMaterials.AsArray(), true); + m_Batcher.UpdateRenderers(renderersWithChangedMeshes.AsArray(), false); + changedInstances.Dispose(); + changedRenderers.Dispose(); renderersWithChangedMaterials.Dispose(); + renderersWithChangedMeshes.Dispose(); } Profiler.EndSample(); } @@ -858,22 +871,26 @@ private NativeHashSet GetMaterialsWithChangedPackedMaterial(NativeArray FindRenderersFromMaterials(NativeArray sortedExcludeRenderers, NativeHashSet materials, Allocator rendererListAllocator) + private (NativeList renderersWithMaterials, NativeList renderersWithMeshes) FindRenderersFromMaterialsOrMeshes(NativeArray sortedExcludeRenderers, NativeHashSet materials, NativeArray meshes, Allocator rendererListAllocator) { var sharedInstanceData = m_BatchersContext.sharedInstanceData; - NativeList renderers = new NativeList(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator); + NativeList renderersWithMaterials = new NativeList(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator); + NativeList renderersWithMeshes = new NativeList(sharedInstanceData.rendererGroupIDs.Length, rendererListAllocator); - var jobHandle = new FindRenderersFromMaterialJob + var jobHandle = new FindRenderersFromMaterialOrMeshJob { materialIDs = materials.AsReadOnly(), materialIDArrays = sharedInstanceData.materialIDArrays, + meshIDs = meshes.AsReadOnly(), + meshIDArray = sharedInstanceData.meshIDs, rendererGroupIDs = sharedInstanceData.rendererGroupIDs, sortedExcludeRendererIDs = sortedExcludeRenderers.AsReadOnly(), - selectedRenderGroups = renderers.AsParallelWriter(), - }.ScheduleBatch(sharedInstanceData.rendererGroupIDs.Length, FindRenderersFromMaterialJob.k_BatchSize); + selectedRenderGroupsForMaterials = renderersWithMaterials.AsParallelWriter(), + selectedRenderGroupsForMeshes = renderersWithMeshes.AsParallelWriter() + }.ScheduleBatch(sharedInstanceData.rendererGroupIDs.Length, FindRenderersFromMaterialOrMeshJob.k_BatchSize); jobHandle.Complete(); - return renderers; + return (renderersWithMaterials, renderersWithMeshes); } [BurstCompile(DisableSafetyChecks = true, OptimizeFor = OptimizeFor.Performance)] @@ -950,22 +967,29 @@ public unsafe void Execute() } [BurstCompile(DisableSafetyChecks = true, OptimizeFor = OptimizeFor.Performance)] - private unsafe struct FindRenderersFromMaterialJob : IJobParallelForBatch + private unsafe struct FindRenderersFromMaterialOrMeshJob : IJobParallelForBatch { public const int k_BatchSize = 128; [ReadOnly] public NativeHashSet.ReadOnly materialIDs; [ReadOnly] public NativeArray.ReadOnly materialIDArrays; + [ReadOnly] public NativeArray.ReadOnly meshIDs; + [ReadOnly] public NativeArray.ReadOnly meshIDArray; [ReadOnly] public NativeArray.ReadOnly rendererGroupIDs; [ReadOnly] public NativeArray.ReadOnly sortedExcludeRendererIDs; - [WriteOnly] public NativeList.ParallelWriter selectedRenderGroups; + [WriteOnly] public NativeList.ParallelWriter selectedRenderGroupsForMaterials; + [WriteOnly] public NativeList.ParallelWriter selectedRenderGroupsForMeshes; public void Execute(int startIndex, int count) { - int* renderersToAddPtr = stackalloc int[k_BatchSize]; - var renderersToAdd = new UnsafeList(renderersToAddPtr, k_BatchSize); - renderersToAdd.Length = 0; + int* renderersToAddForMaterialsPtr = stackalloc int[k_BatchSize]; + var renderersToAddForMaterials = new UnsafeList(renderersToAddForMaterialsPtr, k_BatchSize); + renderersToAddForMaterials.Length = 0; + + int* renderersToAddForMeshesPtr = stackalloc int[k_BatchSize]; + var renderersToAddForMeshes = new UnsafeList(renderersToAddForMeshesPtr, k_BatchSize); + renderersToAddForMeshes.Length = 0; for (int index = 0; index < count; index++) { @@ -976,20 +1000,33 @@ public void Execute(int startIndex, int count) if (sortedExcludeRendererIDs.BinarySearch(rendererID) >= 0) continue; - var rendererMaterials = materialIDArrays[rendererIndex]; - - for (int materialIndex = 0; materialIndex < rendererMaterials.Length; materialIndex++) { - var materialID = rendererMaterials[materialIndex]; - if (materialIDs.Contains(materialID)) + var meshID = meshIDArray[rendererIndex]; + if (meshIDs.Contains(meshID)) { - renderersToAdd.AddNoResize(rendererID); - break; + renderersToAddForMeshes.AddNoResize(rendererID); + // We can skip the material check if we found a mesh match since at this point + // the renderer is already added and will be processed by the mesh branch + continue; + } + } + { + var rendererMaterials = materialIDArrays[rendererIndex]; + + for (int materialIndex = 0; materialIndex < rendererMaterials.Length; materialIndex++) + { + var materialID = rendererMaterials[materialIndex]; + if (materialIDs.Contains(materialID)) + { + renderersToAddForMaterials.AddNoResize(rendererID); + break; + } } } } - selectedRenderGroups.AddRangeNoResize(renderersToAddPtr, renderersToAdd.Length); + selectedRenderGroupsForMaterials.AddRangeNoResize(renderersToAddForMaterialsPtr, renderersToAddForMaterials.Length); + selectedRenderGroupsForMeshes.AddRangeNoResize(renderersToAddForMeshesPtr, renderersToAddForMeshes.Length); } } From 1a530806665c5d17924ba371492ab7cdab19c222 Mon Sep 17 00:00:00 2001 From: Kenny Tan Date: Tue, 27 May 2025 13:14:09 +0000 Subject: [PATCH 03/80] [Port] [6000.1] [UUM-105392] Fix hdr encoding and postprocess resolve for rendergraph 2d --- .../Runtime/2D/Renderer2D.cs | 3 +- .../2D/Rendergraph/DrawRenderer2DPass.cs | 1 - .../2D/Rendergraph/Renderer2DRendergraph.cs | 72 ++++++++++++++----- 3 files changed, 55 insertions(+), 21 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs index 3f065db0c4b..4d344d3be21 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs @@ -405,6 +405,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re bool pixelPerfectCameraEnabled = ppc != null && ppc.enabled; bool hasCaptureActions = cameraData.captureActions != null && lastCameraInStack; bool resolvePostProcessingToCameraTarget = lastCameraInStack && !hasCaptureActions && !hasPassesAfterPostProcessing && !requireFinalPostProcessPass && !pixelPerfectCameraEnabled; + bool doSRGBEncoding = resolvePostProcessingToCameraTarget && needsColorEncoding; if (hasPostProcess) { @@ -419,7 +420,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re colorGradingLutHandle, null, requireFinalPostProcessPass, - afterPostProcessColorHandle.nameID == k_CameraTarget.nameID && needsColorEncoding); + doSRGBEncoding); EnqueuePass(postProcessPass); } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs index 7b5c3817a99..be408724a08 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs @@ -156,7 +156,6 @@ public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData builder.SetRenderAttachmentDepth(commonResourceData.activeDepthTexture); builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); - builder.UseAllGlobalTextures(true); // Post set global light textures for next renderer pass var nextBatch = batchIndex + 1; diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/Renderer2DRendergraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/Renderer2DRendergraph.cs index 30dc9cd5d27..eb7e2f75cd5 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/Renderer2DRendergraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/Renderer2DRendergraph.cs @@ -491,11 +491,12 @@ internal override void OnRecordRenderGraph(RenderGraph renderGraph, ScriptableRe OnBeforeRendering(renderGraph); RecordCustomRenderGraphPasses(renderGraph, RenderPassEvent2D.BeforeRendering); + OnMainRendering(renderGraph); RecordCustomRenderGraphPasses(renderGraph, RenderPassEvent2D.BeforeRenderingPostProcessing); - OnAfterRendering(renderGraph); + OnAfterRendering(renderGraph); } public override void OnEndRenderGraphFrame() @@ -650,20 +651,37 @@ private void OnAfterRendering(RenderGraph renderGraph) bool hasPassesAfterPostProcessing = activeRenderPassQueue.Find(x => x.renderPassEvent == RenderPassEvent.AfterRenderingPostProcessing) != null; bool needsColorEncoding = DebugHandler == null || !DebugHandler.HDRDebugViewIsActive(cameraData.resolveFinalTarget); + // Don't resolve during post processing if there are passes after or pixel perfect camera is used + bool pixelPerfectCameraEnabled = ppc != null && ppc.enabled; + bool hasCaptureActions = cameraData.captureActions != null && cameraData.resolveFinalTarget; + bool resolvePostProcessingToCameraTarget = cameraData.resolveFinalTarget && !hasCaptureActions && !hasPassesAfterPostProcessing && !applyFinalPostProcessing && !pixelPerfectCameraEnabled; + bool doSRGBEncoding = resolvePostProcessingToCameraTarget && needsColorEncoding; + if (applyPostProcessing) { TextureHandle activeColor = commonResourceData.activeColorTexture; + bool isTargetBackbuffer = resolvePostProcessingToCameraTarget; + // if the postprocessing pass is trying to read and write to the same CameraColor target, we need to swap so it writes to a different target, // since reading a pass attachment is not possible. Normally this would be possible using temporary RenderGraph managed textures. // The reason why in this case we need to use "external" RTHandles is to preserve the results for camera stacking. // TODO RENDERGRAPH: Once all cameras will run in a single RenderGraph we can just use temporary RenderGraph textures as intermediate buffer. - ImportResourceParams importColorParams = new ImportResourceParams(); - importColorParams.clearOnFirstUse = true; - importColorParams.clearColor = Color.black; - importColorParams.discardOnLastUse = cameraData.resolveFinalTarget; // check if last camera in the stack + if (!isTargetBackbuffer) + { + ImportResourceParams importColorParams = new ImportResourceParams(); + importColorParams.clearOnFirstUse = true; + importColorParams.clearColor = Color.black; + importColorParams.discardOnLastUse = cameraData.resolveFinalTarget; // check if last camera in the stack - commonResourceData.cameraColor = renderGraph.ImportTexture(nextRenderGraphCameraColorHandle, importColorParams); + commonResourceData.cameraColor = renderGraph.ImportTexture(nextRenderGraphCameraColorHandle, importColorParams); + } + + // Desired target for post-processing pass. + var target = isTargetBackbuffer ? commonResourceData.backBufferColor : commonResourceData.cameraColor; + + if (resolveToDebugScreen && isTargetBackbuffer) + target = commonResourceData.debugScreenColor; postProcessPass.RenderPostProcessingRenderGraph( renderGraph, @@ -671,15 +689,22 @@ private void OnAfterRendering(RenderGraph renderGraph) activeColor, commonResourceData.internalColorLut, commonResourceData.overlayUITexture, - commonResourceData.activeColorTexture, + target, applyFinalPostProcessing, resolveToDebugScreen, - needsColorEncoding); + doSRGBEncoding); + + if (isTargetBackbuffer) + { + commonResourceData.activeColorID = UniversalResourceData.ActiveID.BackBuffer; + commonResourceData.activeDepthID = UniversalResourceData.ActiveID.BackBuffer; + } } var finalColorHandle = commonResourceData.activeColorTexture; RecordCustomRenderGraphPasses(renderGraph, RenderPassEvent2D.AfterRenderingPostProcessing); + // Do PixelPerfect upscaling when using the Stretch Fill option if (requirePixelPerfectUpscale) { @@ -691,20 +716,30 @@ private void OnAfterRendering(RenderGraph renderGraph) var finalBlitTarget = resolveToDebugScreen ? commonResourceData.debugScreenColor : commonResourceData.backBufferColor; var finalDepthHandle = resolveToDebugScreen ? commonResourceData.debugScreenDepth : commonResourceData.backBufferDepth; - if (createColorTexture) + if (applyFinalPostProcessing) + { + postProcessPass.RenderFinalPassRenderGraph(renderGraph, frameData, in finalColorHandle, commonResourceData.overlayUITexture, in finalBlitTarget, needsColorEncoding); + + commonResourceData.activeColorID = UniversalResourceData.ActiveID.BackBuffer; + commonResourceData.activeDepthID = UniversalResourceData.ActiveID.BackBuffer; + } + + // If post-processing then we already resolved to camera target while doing post. + // Also only do final blit if camera is not rendering to RT. + bool cameraTargetResolved = + // final PP always blit to camera target + applyFinalPostProcessing || + // no final PP but we have PP stack. In that case it blit unless there are render pass after PP or pixel perfect camera is used + (applyPostProcessing && !hasPassesAfterPostProcessing && !hasCaptureActions && !pixelPerfectCameraEnabled); + + if (!commonResourceData.isActiveTargetBackBuffer && cameraData.resolveFinalTarget && !cameraTargetResolved) { - if (applyFinalPostProcessing) - postProcessPass.RenderFinalPassRenderGraph(renderGraph, frameData, in finalColorHandle, commonResourceData.overlayUITexture, in finalBlitTarget, needsColorEncoding); - else if (cameraData.resolveFinalTarget) - m_FinalBlitPass.Render(renderGraph, frameData, cameraData, finalColorHandle, finalBlitTarget, commonResourceData.overlayUITexture); + m_FinalBlitPass.Render(renderGraph, frameData, cameraData, finalColorHandle, finalBlitTarget, commonResourceData.overlayUITexture); finalColorHandle = finalBlitTarget; - if (cameraData.resolveFinalTarget) - { - commonResourceData.activeColorID = ActiveID.BackBuffer; - commonResourceData.activeDepthID = ActiveID.BackBuffer; - } + commonResourceData.activeColorID = ActiveID.BackBuffer; + commonResourceData.activeDepthID = ActiveID.BackBuffer; } // We can explicitly render the overlay UI from URP when HDR output is not enabled. @@ -714,7 +749,6 @@ private void OnAfterRendering(RenderGraph renderGraph) if (shouldRenderUI && !outputToHDR) m_DrawOverlayUIPass.RenderOverlay(renderGraph, frameData, in finalColorHandle, in finalDepthHandle); - // If HDR debug views are enabled, DebugHandler will perform the blit from debugScreenColor (== finalColorHandle) to backBufferColor. DebugHandler?.Setup(renderGraph, cameraData.isPreviewCamera); DebugHandler?.Render(renderGraph, cameraData, finalColorHandle, commonResourceData.overlayUITexture, commonResourceData.backBufferColor); From 82f44e62736d3efc8676cb4eb68e4352c8fa0b68 Mon Sep 17 00:00:00 2001 From: Reach Platform Support Date: Tue, 27 May 2025 13:14:09 +0000 Subject: [PATCH 04/80] [Port] [6000.1] Fix shadow culling for Intermediate renderers --- .../GPUDriven/GPUDrivenRenderingTests.cs | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Tests/Editor/GPUDriven/GPUDrivenRenderingTests.cs b/Packages/com.unity.render-pipelines.core/Tests/Editor/GPUDriven/GPUDrivenRenderingTests.cs index 15002f73570..ba1539168d1 100644 --- a/Packages/com.unity.render-pipelines.core/Tests/Editor/GPUDriven/GPUDrivenRenderingTests.cs +++ b/Packages/com.unity.render-pipelines.core/Tests/Editor/GPUDriven/GPUDrivenRenderingTests.cs @@ -189,10 +189,11 @@ public void TestInstanceCullingTier0() var callbackCounter = new BoxedCounter(); cpuDrivenDesc.onCompleteCallback = (JobHandle jobHandle, in BatchCullingContext cc, in BatchCullingOutput cullingOutput) => { + jobHandle.Complete(); + if (cc.viewType != BatchCullingViewType.Camera) return; - jobHandle.Complete(); BatchCullingOutputDrawCommands drawCommands = cullingOutput.drawCommands[0]; var materials = new NativeParallelHashSet(10, Allocator.Temp); @@ -221,6 +222,8 @@ public void TestInstanceCullingTier0() using (var brg = new GPUResidentBatcher(brgContext, cpuDrivenDesc, gpuDrivenProcessor)) { + brg.OnBeginContextRendering(); + brg.UpdateRenderers(objIDs.AsArray()); var cameraObject = new GameObject("myCamera"); @@ -228,6 +231,8 @@ public void TestInstanceCullingTier0() SubmitCameraRenderRequest(mainCamera); + brg.OnEndContextRendering(); + Assert.AreEqual(1, callbackCounter.Value); mainCamera = null; @@ -268,16 +273,19 @@ public void TestSceneViewHiddenRenderersCullingTier0() cpuDrivenDesc.onCompleteCallback = (JobHandle jobHandle, in BatchCullingContext cc, in BatchCullingOutput cullingOutput) => { + jobHandle.Complete(); + if (cc.viewType != BatchCullingViewType.Camera) return; - jobHandle.Complete(); BatchCullingOutputDrawCommands drawCommands = cullingOutput.drawCommands[0]; callbackCounter.Value = drawCommands.visibleInstanceCount; }; using (var brg = new GPUResidentBatcher(brgContext, cpuDrivenDesc, gpuDrivenProcessor)) { + brg.OnBeginContextRendering(); + brg.UpdateRenderers(objIDs); var cameraObject = new GameObject("SceneViewCamera"); @@ -298,6 +306,8 @@ public void TestSceneViewHiddenRenderersCullingTier0() brg.OnEndCameraRendering(mainCamera); Assert.AreEqual(callbackCounter.Value, 1); + brg.OnEndContextRendering(); + GameObject.DestroyImmediate(cameraObject); brgContext.ScheduleQueryRendererGroupInstancesJob(objIDs, instances).Complete(); brg.DestroyDrawInstances(instances); @@ -346,10 +356,11 @@ public void TestMultipleMetadata() var cpuDrivenDesc = InstanceCullingBatcherDesc.NewDefault(); cpuDrivenDesc.onCompleteCallback = (JobHandle jobHandle, in BatchCullingContext cc, in BatchCullingOutput cullingOutput) => { + jobHandle.Complete(); + if (cc.viewType != BatchCullingViewType.Camera) return; - jobHandle.Complete(); BatchCullingOutputDrawCommands drawCommands = cullingOutput.drawCommands[0]; var drawCommandCount = 0U; @@ -370,6 +381,8 @@ public void TestMultipleMetadata() using (var brg = new GPUResidentBatcher(brgContext, cpuDrivenDesc, gpuDrivenProcessor)) { + brg.OnBeginContextRendering(); + brg.UpdateRenderers(objIDs.AsArray()); var cameraObject = new GameObject("myCamera"); @@ -377,6 +390,8 @@ public void TestMultipleMetadata() SubmitCameraRenderRequest(mainCamera); + brg.OnEndContextRendering(); + mainCamera = null; GameObject.DestroyImmediate(cameraObject); @@ -458,10 +473,11 @@ public void TestCPULODSelection() var expectedDrawCommandCount = 2; cpuDrivenDesc.onCompleteCallback = (JobHandle jobHandle, in BatchCullingContext cc, in BatchCullingOutput cullingOutput) => { + jobHandle.Complete(); + if (cc.viewType != BatchCullingViewType.Camera) return; - jobHandle.Complete(); BatchCullingOutputDrawCommands drawCommands = cullingOutput.drawCommands[0]; var drawCommandCount = 0U; @@ -482,6 +498,8 @@ public void TestCPULODSelection() using (var brg = new GPUResidentBatcher(brgContext, cpuDrivenDesc, gpuDrivenProcessor)) { + brg.OnBeginContextRendering(); + brgContext.UpdateLODGroups(lodGroupInstancesID.AsArray()); brg.UpdateRenderers(objIDs.AsArray()); @@ -526,6 +544,8 @@ public void TestCPULODSelection() expectedDrawCommandCount = 1; SubmitCameraRenderRequest(mainCamera); + brg.OnEndContextRendering(); + Assert.AreEqual(7, callbackCounter.Value); mainCamera = null; @@ -611,10 +631,11 @@ public void TestCPULODCrossfade() var expectedDrawCommandCount = 0; cpuDrivenDesc.onCompleteCallback = (JobHandle jobHandle, in BatchCullingContext cc, in BatchCullingOutput cullingOutput) => { + jobHandle.Complete(); + if (cc.viewType != BatchCullingViewType.Camera) return; - jobHandle.Complete(); BatchCullingOutputDrawCommands drawCommands = cullingOutput.drawCommands[0]; unsafe @@ -633,6 +654,8 @@ public void TestCPULODCrossfade() using (var brg = new GPUResidentBatcher(brgContext, cpuDrivenDesc, gpuDrivenProcessor)) { + brg.OnBeginContextRendering(); + brgContext.UpdateLODGroups(lodGroupInstancesID.AsArray()); brg.UpdateRenderers(objIDs.AsArray()); @@ -684,6 +707,8 @@ public void TestCPULODCrossfade() cameraObject.transform.position = new Vector3(0.0f, 0.0f, -4.0f); SubmitCameraRenderRequest(mainCamera); + brg.OnEndContextRendering(); + mainCamera = null; GameObject.DestroyImmediate(cameraObject); @@ -744,10 +769,11 @@ public void TestGpuDrivenSmallMeshCulling() var expectedDrawCommandCount = 0; cpuDrivenDesc.onCompleteCallback = (JobHandle jobHandle, in BatchCullingContext cc, in BatchCullingOutput cullingOutput) => { + jobHandle.Complete(); + if (cc.viewType != BatchCullingViewType.Camera) return; - jobHandle.Complete(); BatchCullingOutputDrawCommands drawCommands = cullingOutput.drawCommands[0]; unsafe @@ -766,6 +792,8 @@ public void TestGpuDrivenSmallMeshCulling() using (var brg = new GPUResidentBatcher(brgContext, cpuDrivenDesc, gpuDrivenProcessor)) { + brg.OnBeginContextRendering(); + brg.UpdateRenderers(objIDs.AsArray()); var cameraObject = new GameObject("myCamera"); @@ -801,6 +829,8 @@ public void TestGpuDrivenSmallMeshCulling() cameraObject.transform.position = new Vector3(0.0f, 0.0f, -10.0f); SubmitCameraRenderRequest(mainCamera); + brg.OnEndContextRendering(); + mainCamera = null; GameObject.DestroyImmediate(cameraObject); From a8579dd214c9138af0a2d33bd3b3d1091e999e32 Mon Sep 17 00:00:00 2001 From: Reach Platform Support Date: Tue, 27 May 2025 13:14:09 +0000 Subject: [PATCH 05/80] [Port] [6000.1] [UUM-18392] 2D Soft Shadows Fix --- .../Runtime/2D/Shadows/ShadowRendering.cs | 163 +++++++++--------- .../Shaders/2D/Include/LightingUtility.hlsl | 7 +- .../Shaders/2D/Shadow2D-Projected.shader | 11 +- .../2D/Shadow2D-Shadow-Geometry.shader | 2 +- .../Shaders/2D/Shadow2D-Shadow-Sprite.shader | 2 +- .../2D/Shadow2D-Unshadow-Sprite.shader | 10 +- 6 files changed, 94 insertions(+), 101 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/ShadowRendering.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/ShadowRendering.cs index 5196e1a5698..a7e48f68589 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/ShadowRendering.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/ShadowRendering.cs @@ -14,10 +14,14 @@ namespace UnityEngine.Rendering.Universal { // TODO: Culling of shadow casters, rotate color channels for shadow casting, check get material functions. - - internal static class ShadowRendering { + internal enum ShadowTestType + { + Always, + Unshadow, + } + private static readonly int k_LightPosID = Shader.PropertyToID("_LightPos"); private static readonly int k_ShadowRadiusID = Shader.PropertyToID("_ShadowRadius"); private static readonly int k_ShadowColorMaskID = Shader.PropertyToID("_ShadowColorMask"); @@ -351,11 +355,11 @@ internal static void SetGlobalShadowProp(IRasterCommandBuffer cmdBuffer) static bool ShadowCasterIsVisible(ShadowCaster2D shadowCaster) { - #if UNITY_EDITOR - return SceneVisibilityManager.instance == null ? true : !SceneVisibilityManager.instance.IsHidden(shadowCaster.gameObject); - #else +#if UNITY_EDITOR + return SceneVisibilityManager.instance == null ? true : !SceneVisibilityManager.instance.IsHidden(shadowCaster.gameObject); +#else return true; - #endif +#endif } static Renderer GetRendererFromCaster(ShadowCaster2D shadowCaster, Light2D light, int layerToRender) @@ -373,21 +377,23 @@ static Renderer GetRendererFromCaster(ShadowCaster2D shadowCaster, Light2D light return renderer; } - private static void RenderProjectedShadows(UnsafeCommandBuffer cmdBuffer, int layerToRender, Light2D light, List shadowCasters, Material projectedShadowsMaterial, int pass) + private static void RenderProjectedShadows(UnsafeCommandBuffer cmdBuffer, int layerToRender, Light2D light, List shadowCasters, Material projectedShadowsMaterial, int pass, ShadowTestType shadowTestType) { // Draw the projected shadows for the shadow caster group. Writing into the group stencil buffer bit for (var i = 0; i < shadowCasters.Count; i++) { var shadowCaster = shadowCasters[i]; - - if (ShadowCasterIsVisible(shadowCaster) && shadowCaster.castsShadows && shadowCaster.IsLit(light)) + if (ShadowTest(shadowTestType, shadowCaster)) { - if (shadowCaster != null && projectedShadowsMaterial != null && shadowCaster.IsShadowedLayer(layerToRender)) + if (ShadowCasterIsVisible(shadowCaster) && shadowCaster.castsShadows && shadowCaster.IsLit(light)) { - if (shadowCaster.shadowCastingSource != ShadowCaster2D.ShadowCastingSources.None && shadowCaster.mesh != null) + if (shadowCaster != null && projectedShadowsMaterial != null && shadowCaster.IsShadowedLayer(layerToRender)) { - SetShadowProjectionGlobals(cmdBuffer, shadowCaster, light); - cmdBuffer.DrawMesh(shadowCaster.mesh, shadowCaster.transform.localToWorldMatrix, projectedShadowsMaterial, 0, pass); + if (shadowCaster.shadowCastingSource != ShadowCaster2D.ShadowCastingSources.None && shadowCaster.mesh != null) + { + SetShadowProjectionGlobals(cmdBuffer, shadowCaster, light); + cmdBuffer.DrawMesh(shadowCaster.mesh, shadowCaster.transform.localToWorldMatrix, projectedShadowsMaterial, 0, pass); + } } } } @@ -398,101 +404,82 @@ static int GetRendererSubmeshes(Renderer renderer, ShadowCaster2D shadowCaster2D { int numberOfSubmeshes; - #if USING_SPRITESHAPE - if (renderer is SpriteShapeRenderer) - { - SpriteShapeRenderer spriteShapeRenderer = (SpriteShapeRenderer)renderer; - numberOfSubmeshes = spriteShapeRenderer.GetSplineMeshCount(); - } - else - { - numberOfSubmeshes = shadowCaster2D.spriteMaterialCount; - } - #else +#if USING_SPRITESHAPE + if (renderer is SpriteShapeRenderer) + { + SpriteShapeRenderer spriteShapeRenderer = (SpriteShapeRenderer)renderer; + numberOfSubmeshes = spriteShapeRenderer.GetSplineMeshCount(); + } + else + { + numberOfSubmeshes = shadowCaster2D.spriteMaterialCount; + } +#else numberOfSubmeshes = shadowCaster2D.spriteMaterialCount; - #endif +#endif return numberOfSubmeshes; } - private static void RenderSelfShadowOption(UnsafeCommandBuffer cmdBuffer, int layerToRender, Light2D light, List shadowCasters, Material projectedUnshadowMaterial, Material spriteShadowMaterial, Material spriteUnshadowMaterial, Material geometryShadowMaterial, Material geometryUnshadowMaterial) + private static void RenderSpriteShadow(UnsafeCommandBuffer cmdBuffer, int layerToRender, Light2D light, List shadowCasters, Material spriteShadowMaterial, Material spriteUnshadowMaterial, Material geometryShadowMaterial, Material geometryUnshadowMaterial, int pass, ShadowTestType shadowTestType) { - // Draw the sprites, either as self shadowing or unshadowing + //Draw the sprites, either as self shadowing or unshadowing for (var i = 0; i < shadowCasters.Count; i++) { ShadowCaster2D shadowCaster = shadowCasters[i]; - if (!shadowCaster.IsLit(light)) - continue; + if (ShadowTest(shadowTestType, shadowCaster)) + { + if (!shadowCaster.IsLit(light)) + continue; - Renderer renderer = GetRendererFromCaster(shadowCaster, light, layerToRender); + Renderer renderer = GetRendererFromCaster(shadowCaster, light, layerToRender); - cmdBuffer.SetGlobalFloat(k_ShadowAlphaCutoffID, shadowCaster.alphaCutoff); + cmdBuffer.SetGlobalFloat(k_ShadowAlphaCutoffID, shadowCaster.alphaCutoff); - if (renderer != null) - { - if (ShadowCasterIsVisible(shadowCaster) && shadowCaster.selfShadows) - { - int numberOfSubmeshes = GetRendererSubmeshes(renderer, shadowCaster); - for (int submeshIndex = 0; submeshIndex < numberOfSubmeshes; submeshIndex++) - cmdBuffer.DrawRenderer(renderer, spriteShadowMaterial, submeshIndex, 0); - } - else + if (renderer != null) { - int numberOfSubmeshes = GetRendererSubmeshes(renderer, shadowCaster); - for (int submeshIndex = 0; submeshIndex < numberOfSubmeshes; submeshIndex++) + if (ShadowCasterIsVisible(shadowCaster) && shadowCaster.selfShadows) { - cmdBuffer.DrawRenderer(renderer, spriteUnshadowMaterial, submeshIndex, 0); - + int numberOfSubmeshes = GetRendererSubmeshes(renderer, shadowCaster); + for (int submeshIndex = 0; submeshIndex < numberOfSubmeshes; submeshIndex++) + cmdBuffer.DrawRenderer(renderer, spriteShadowMaterial, submeshIndex, pass); } - } - } - else - { - if (shadowCaster.mesh != null) - { - if (ShadowCasterIsVisible(shadowCaster) && shadowCaster.selfShadows) - cmdBuffer.DrawMesh(shadowCaster.mesh, shadowCaster.transform.localToWorldMatrix, geometryShadowMaterial, 0, 0); else - cmdBuffer.DrawMesh(shadowCaster.mesh, shadowCaster.transform.localToWorldMatrix, geometryUnshadowMaterial, 0, 0); - } - } - } - - // Draw a masked projected shadow that is inside the sprite to remove the shadow (on different channel) - for (var i = 0; i < shadowCasters.Count; i++) - { - ShadowCaster2D shadowCaster = shadowCasters[i]; - if (ShadowCasterIsVisible(shadowCaster) && shadowCaster.IsLit(light) && shadowCaster.castingOption == ShadowCaster2D.ShadowCastingOptions.CastShadow && shadowCaster.mesh != null) - { - SetShadowProjectionGlobals(cmdBuffer, shadowCaster, light); - cmdBuffer.DrawMesh(shadowCaster.mesh, shadowCaster.transform.localToWorldMatrix, projectedUnshadowMaterial, 0, 1); - } - } - - // Fix up shadow removal with transparency - for (var i = 0; i < shadowCasters.Count; i++) - { - ShadowCaster2D shadowCaster = shadowCasters[i]; - if (ShadowCasterIsVisible(shadowCaster) && !shadowCaster.selfShadows && shadowCaster.IsLit(light)) - { - Renderer renderer = GetRendererFromCaster(shadowCaster, light, layerToRender); - if (renderer != null) - { - int numberOfSubmeshes = GetRendererSubmeshes(renderer, shadowCaster); - for (int submeshIndex = 0; submeshIndex < numberOfSubmeshes; submeshIndex++) { - cmdBuffer.DrawRenderer(renderer, spriteUnshadowMaterial, submeshIndex, 1); + int numberOfSubmeshes = GetRendererSubmeshes(renderer, shadowCaster); + for (int submeshIndex = 0; submeshIndex < numberOfSubmeshes; submeshIndex++) + { + cmdBuffer.DrawRenderer(renderer, spriteUnshadowMaterial, submeshIndex, pass); + + } } } else { - if(shadowCaster.mesh != null) - cmdBuffer.DrawMesh(shadowCaster.mesh, shadowCaster.transform.localToWorldMatrix, geometryUnshadowMaterial, 0, 1); + if (shadowCaster.mesh != null) + { + if (ShadowCasterIsVisible(shadowCaster) && shadowCaster.selfShadows) + cmdBuffer.DrawMesh(shadowCaster.mesh, shadowCaster.transform.localToWorldMatrix, geometryShadowMaterial, 0, pass); + else + cmdBuffer.DrawMesh(shadowCaster.mesh, shadowCaster.transform.localToWorldMatrix, geometryUnshadowMaterial, 0, pass); + } } } } } + internal static bool ShadowTest(ShadowTestType shadowTestType, ShadowCaster2D shadowCaster) + { + // This is just being done because using delegates are creating garbage and my tests are failing + if(shadowTestType == ShadowTestType.Always) + return true; + else if(shadowTestType == ShadowTestType.Unshadow) + return !shadowCaster.selfShadows; + + return false; + } + + private static void RenderShadows(UnsafeCommandBuffer cmdBuffer, Renderer2DData rendererData, ref LayerBatch layer, Light2D light) { using (new ProfilingScope(cmdBuffer, m_ProfilingSamplerShadows)) @@ -510,15 +497,19 @@ private static void RenderShadows(UnsafeCommandBuffer cmdBuffer, Renderer2DData var geometryShadowMaterial = rendererData.GetGeometryShadowMaterial(); var geometryUnshadowMaterial = rendererData.GetGeometryUnshadowMaterial(); + for (var group = 0; group < layer.shadowCasters.Count; group++) { var shadowCasters = layer.shadowCasters[group].GetShadowCasters(); - // Draw the projected shadows for the shadow caster group. Only writes the composite stencil bit - RenderProjectedShadows(cmdBuffer, layer.startLayerID, light, shadowCasters, projectedShadowMaterial, 0); - // Render self shadowing or non self shadowing - RenderSelfShadowOption(cmdBuffer, layer.startLayerID, light, shadowCasters, projectedUnshadowMaterial, spriteShadowMaterial, spriteUnshadowMaterial, geometryShadowMaterial, geometryUnshadowMaterial); + RenderSpriteShadow(cmdBuffer, layer.startLayerID, light, shadowCasters, spriteShadowMaterial, spriteUnshadowMaterial, geometryShadowMaterial, geometryUnshadowMaterial, 0, ShadowTestType.Always); + // Draw the projected shadows for the shadow caster group. Only writes the composite stencil bit + RenderProjectedShadows(cmdBuffer, layer.startLayerID, light, shadowCasters, projectedShadowMaterial, 0, ShadowTestType.Always); + // Draw the projected shadows for the shadow caster group. Only writes the composite stencil bit + RenderProjectedShadows(cmdBuffer, layer.startLayerID, light, shadowCasters, projectedShadowMaterial, 1, ShadowTestType.Unshadow); + //Render self shadowing or non self shadowing + RenderSpriteShadow(cmdBuffer, layer.startLayerID, light, shadowCasters, spriteShadowMaterial, spriteUnshadowMaterial, geometryShadowMaterial, geometryUnshadowMaterial, 1, ShadowTestType.Unshadow); } } } diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl index 3702c970110..c8d1a76dd51 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl @@ -59,12 +59,7 @@ if(intensity < 1)\ {\ half4 shadowTex = SAMPLE_TEXTURE2D(_ShadowTex, sampler_ShadowTex, input.shadowUV); \ - half shadowFinalValue = dot(half4(1,0,0,0), shadowTex.rgba);\ - half unshadowValue = dot(half4(0,1,0,0), shadowTex.rgba);\ - half unshadowGTEOne = unshadowValue > 1;\ - half spriteAlpha = dot(half4(0,0,1,0), shadowTex.rgba);\ - half unshadowFinalValue = unshadowGTEOne * (unshadowValue - (1-spriteAlpha)) + (1-unshadowGTEOne) * (unshadowValue * spriteAlpha);\ - half shadowIntensity = 1-saturate(shadowFinalValue - unshadowFinalValue); \ + half4 shadowIntensity = 1-max(shadowTex.r, shadowTex.g * 1-shadowTex.b);\ color.rgb = (color.rgb * shadowIntensity) + (color.rgb * intensity*(1 - shadowIntensity));\ } diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Projected.shader b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Projected.shader index a1fb28b109a..666cae6a45a 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Projected.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Projected.shader @@ -10,11 +10,18 @@ Shader "Hidden/ShadowProjected2D" Tags { "RenderType"="Transparent" } Cull Off - BlendOp Add + BlendOp Max Blend One One, One One ZWrite Off ZTest Always + Stencil + { + Ref 1 + Comp NotEqual + Pass Keep + } + // This pass draws the projected shadows Pass { @@ -65,7 +72,7 @@ Shader "Hidden/ShadowProjected2D" } - Name "Projected Unshadow (R) - Stencil: Ref 1, Comp Eq, Pass Keep" + Name "Projected Unshadow (G) - Stencil: Ref 1, Comp Eq, Pass Keep" // Draw the shadow ColorMask G diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Geometry.shader b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Geometry.shader index ec55d6f041d..5d1adab8130 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Geometry.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Geometry.shader @@ -9,7 +9,7 @@ Shader "Hidden/Shadow2DShadowGeometry" Tags { "RenderType"="Opaque" } Cull Off - BlendOp Add + BlendOp Max Blend One One ZWrite Off ZTest Always diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Sprite.shader b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Sprite.shader index 1fed62c1372..437d29896f5 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Sprite.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Sprite.shader @@ -11,7 +11,7 @@ Shader "Hidden/Shadow2DShadowSprite" Tags { "RenderType"="Opaque" } Cull Off - BlendOp Add + BlendOp Max Blend One One ZWrite Off ZTest Always diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Unshadow-Sprite.shader b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Unshadow-Sprite.shader index 6bf23672cd5..5cbdeb887f6 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Unshadow-Sprite.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Unshadow-Sprite.shader @@ -25,9 +25,9 @@ Shader "Hidden/Shadow2DUnshadowSprite" ZWrite Off ZTest Always - ColorMask GB // Clear the unshadow color (G), and set the sprite alpha (B) + ColorMask B - Name "Sprite Unshadow (GB) - Stencil: Ref 1, Comp Always, Pass Replace" + Name "Sprite Unshadow (B) - Stencil: Ref 1, Comp Always, Pass Replace" HLSLPROGRAM #pragma vertex vert @@ -70,7 +70,7 @@ Shader "Hidden/Shadow2DUnshadowSprite" if (main.a <= _ShadowAlphaCutoff) discard; - return half4(0, 0, 0, 0); + return half4(0, 0, main.a, 0); } ENDHLSL } @@ -90,7 +90,7 @@ Shader "Hidden/Shadow2DUnshadowSprite" ZWrite Off ZTest Always - ColorMask B + ColorMask 0 Name "Sprite Unshadow (B) - Stencil: Ref 0, Comp Always, Pass Replace" @@ -135,7 +135,7 @@ Shader "Hidden/Shadow2DUnshadowSprite" if (main.a <= _ShadowAlphaCutoff) discard; - return half4(1,1,main.a,1); + return half4(1, 1, 1, 1); } ENDHLSL } From 2b1109db3ba0aee1b254f78433da04d726176aba Mon Sep 17 00:00:00 2001 From: Kenny Tan Date: Thu, 29 May 2025 14:57:19 +0000 Subject: [PATCH 06/80] [Port] [6000.1] [UUM-104830] Add checks for FullScreenRendererFeature when use with Renderer2D --- .../FullScreenPassRendererFeature.cs | 17 +- .../Runtime/ScriptableRenderer.cs | 18 + .../Runtime/UniversalRenderer.cs | 12 + .../CommonAssets/UniversalRPAsset.asset | 1 + .../Scenes/064_FullScreenRendererFeature.meta | 8 + .../064_FullScreenRendererFeature.unity | 471 ++++++++++++++++++ .../064_FullScreenRendererFeature.unity.meta | 7 + ...lScreenRendererFeature Renderer Data.asset | 82 +++ ...enRendererFeature Renderer Data.asset.meta | 8 + .../ProjectSettings/EditorBuildSettings.asset | 3 + 10 files changed, 621 insertions(+), 6 deletions(-) create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.unity create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.unity.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature/064_FullScreenRendererFeature Renderer Data.asset create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature/064_FullScreenRendererFeature Renderer Data.asset.meta diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/FullScreenPassRendererFeature.cs b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/FullScreenPassRendererFeature.cs index f54a6a7032d..acf771a9f0f 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/FullScreenPassRendererFeature.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/FullScreenPassRendererFeature.cs @@ -262,7 +262,7 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer bool needsMotion = (input & ScriptableRenderPassInput.Motion) != ScriptableRenderPassInput.None; bool needsNormal = (input & ScriptableRenderPassInput.Normal) != ScriptableRenderPassInput.None; - if (needsColor) + if (needsColor && cameraData.renderer.SupportsCameraOpaque()) { Debug.Assert(resourcesData.cameraOpaqueTexture.IsValid()); builder.UseTexture(resourcesData.cameraOpaqueTexture); @@ -276,13 +276,18 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer if (needsMotion) { - Debug.Assert(resourcesData.motionVectorColor.IsValid()); - builder.UseTexture(resourcesData.motionVectorColor); - Debug.Assert(resourcesData.motionVectorDepth.IsValid()); - builder.UseTexture(resourcesData.motionVectorDepth); + Debug.Assert(cameraData.renderer.SupportsMotionVectors(), "Current renderer does not support motion vectors."); + + if (cameraData.renderer.SupportsMotionVectors()) + { + Debug.Assert(resourcesData.motionVectorColor.IsValid()); + builder.UseTexture(resourcesData.motionVectorColor); + Debug.Assert(resourcesData.motionVectorDepth.IsValid()); + builder.UseTexture(resourcesData.motionVectorDepth); + } } - if (needsNormal) + if (needsNormal && cameraData.renderer.SupportsCameraNormals()) { Debug.Assert(resourcesData.cameraNormalsTexture.IsValid()); builder.UseTexture(resourcesData.cameraNormalsTexture); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs index 555b2e11be0..d14471d4958 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs @@ -109,6 +109,24 @@ protected internal virtual bool SupportsMotionVectors() return false; } + /// + /// Check if the ScriptableRenderer implements a camera opaque pass. + /// + /// Returns true if the ScriptableRenderer implements a camera opaque pass. False otherwise. + protected internal virtual bool SupportsCameraOpaque() + { + return false; + } + + /// + /// Check if the ScriptableRenderer implements a camera normal pass. + /// + /// Returns true if the ScriptableRenderer implements a camera normal pass. False otherwise. + protected internal virtual bool SupportsCameraNormals() + { + return false; + } + /// /// Override to provide a custom profiling name /// diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 8f72501493a..970fcdad611 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -90,6 +90,18 @@ protected internal override bool SupportsMotionVectors() return true; } + /// + protected internal override bool SupportsCameraOpaque() + { + return true; + } + + /// + protected internal override bool SupportsCameraNormals() + { + return true; + } + // Rendering mode setup from UI. The final rendering mode used can be different. See renderingModeActual. internal RenderingMode renderingModeRequested => m_RenderingMode; diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/CommonAssets/UniversalRPAsset.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/CommonAssets/UniversalRPAsset.asset index 3503187f2b5..429bcb4545c 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/CommonAssets/UniversalRPAsset.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/CommonAssets/UniversalRPAsset.asset @@ -25,6 +25,7 @@ MonoBehaviour: - {fileID: 11400000, guid: 04618ff2d33c0432a81d00fdee3fae55, type: 2} - {fileID: 11400000, guid: eae387d1d2a20a946ae2441e0319f1a0, type: 2} - {fileID: 11400000, guid: ab4527fe9ad5ef949bffe9447fabcfa2, type: 2} + - {fileID: 11400000, guid: 01e79ba8f42c808448b7542939affccb, type: 2} m_DefaultRendererIndex: 2 m_RequireDepthTexture: 1 m_RequireOpaqueTexture: 1 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.meta new file mode 100644 index 00000000000..6e47f875a01 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 26d6c46703d00654aa90c4f6420b23e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.unity new file mode 100644 index 00000000000..4aebb70a37d --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.unity @@ -0,0 +1,471 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &652049016 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 652049019} + - component: {fileID: 652049018} + - component: {fileID: 652049017} + - component: {fileID: 652049020} + - component: {fileID: 652049021} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &652049017 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 652049016} + m_Enabled: 1 +--- !u!20 &652049018 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 652049016} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &652049019 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 652049016} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &652049020 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 652049016} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: 8 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 +--- !u!114 &652049021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 652049016} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73231aa468d81ea49bc3d914080de185, type: 3} + m_Name: + m_EditorClassIdentifier: UniversalGraphicsTests::UniversalGraphicsTestSettings + ImageComparisonSettings: + TargetWidth: 512 + TargetHeight: 512 + TargetMSAASamples: 1 + PerPixelCorrectnessThreshold: 0.001 + PerPixelGammaThreshold: 0.003921569 + PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 + AverageCorrectnessThreshold: 0.005 + IncorrectPixelsThreshold: 0.0000038146973 + UseHDR: 0 + UseBackBuffer: 0 + ImageResolution: 0 + ActiveImageTests: 1 + ActivePixelTests: 7 + WaitFrames: 0 + XRCompatible: 0 + gpuDrivenCompatible: 1 + CheckMemoryAllocation: 1 + renderBackendCompatibility: 2 + SetBackBufferResolution: 0 +--- !u!1 &774377729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 774377731} + - component: {fileID: 774377730} + m_Layer: 0 + m_Name: Light 2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &774377730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774377729} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.2D.Runtime::UnityEngine.Rendering.Universal.Light2D + m_ComponentVersion: 2 + m_LightType: 4 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: eb0feddf00000000e980ef06 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowsEnabled: 1 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &774377731 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 774377729} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2080771070 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2080771072} + - component: {fileID: 2080771071} + m_Layer: 0 + m_Name: Square + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &2080771071 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080771070} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &2080771072 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2080771070} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2, y: 2, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 652049019} + - {fileID: 774377731} + - {fileID: 2080771072} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.unity.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.unity.meta new file mode 100644 index 00000000000..224d8233041 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f47933cb58d03af41a718fdea55dea08 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature/064_FullScreenRendererFeature Renderer Data.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature/064_FullScreenRendererFeature Renderer Data.asset new file mode 100644 index 00000000000..cc8ad01d5e9 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature/064_FullScreenRendererFeature Renderer Data.asset @@ -0,0 +1,82 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-284040083619274552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b00045f12942b46c698459096c89274e, type: 3} + m_Name: FullScreenPassRendererFeature + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.FullScreenPassRendererFeature + m_Active: 1 + injectionPoint: 600 + fetchColorBuffer: 1 + requirements: 7 + passMaterial: {fileID: 2100000, guid: 78a08787ca30045abb69f6f7dd878e09, type: 2} + passIndex: 0 + bindDepthStencilAttachment: 0 + m_Version: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 11145981673336645838492a2d98e247, type: 3} + m_Name: 064_FullScreenRendererFeature Renderer Data + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.2D.Runtime::UnityEngine.Rendering.Universal.Renderer2DData + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, + type: 3} + probeVolumeResources: + probeVolumeDebugShader: {fileID: 0} + probeVolumeFragmentationDebugShader: {fileID: 0} + probeVolumeOffsetDebugShader: {fileID: 0} + probeVolumeSamplingDebugShader: {fileID: 0} + probeSamplingDebugMesh: {fileID: 0} + probeSamplingDebugTexture: {fileID: 0} + probeVolumeBlendStatesCS: {fileID: 0} + m_RendererFeatures: + - {fileID: -284040083619274552} + m_RendererFeatureMap: c8a0e6810ce30efc + m_UseNativeRenderPass: 0 + m_LayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparencySortMode: 0 + m_TransparencySortAxis: {x: 0, y: 1, z: 0} + m_HDREmulationScale: 1 + m_LightRenderTextureScale: 0.5 + m_LightBlendStyles: + - name: Multiply + maskTextureChannel: 0 + blendMode: 1 + - name: Additive + maskTextureChannel: 0 + blendMode: 0 + - name: Multiply with Mask + maskTextureChannel: 1 + blendMode: 1 + - name: Additive with Mask + maskTextureChannel: 1 + blendMode: 0 + m_UseDepthStencilBuffer: 1 + m_UseCameraSortingLayersTexture: 0 + m_CameraSortingLayersTextureBound: -1 + m_CameraSortingLayerDownsamplingMethod: 0 + m_MaxLightRenderTextureCount: 16 + m_MaxShadowRenderTextureCount: 1 + m_PostProcessData: {fileID: 11400000, guid: 41439944d30ece34e96484bdb6645b55, type: 2} + m_DefaultMaterialType: 0 + m_DefaultCustomMaterial: {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, + type: 2} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature/064_FullScreenRendererFeature Renderer Data.asset.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature/064_FullScreenRendererFeature Renderer Data.asset.meta new file mode 100644 index 00000000000..6850d148956 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/064_FullScreenRendererFeature/064_FullScreenRendererFeature Renderer Data.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 01e79ba8f42c808448b7542939affccb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/ProjectSettings/EditorBuildSettings.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/ProjectSettings/EditorBuildSettings.asset index bfbdc39ffe0..6a91d9a628e 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/ProjectSettings/EditorBuildSettings.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/ProjectSettings/EditorBuildSettings.asset @@ -227,6 +227,9 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/063_LayerMask.unity guid: 589fffe344f1a3847910fd1b61c8404c + - enabled: 1 + path: Assets/Scenes/064_FullScreenRendererFeature.unity + guid: f47933cb58d03af41a718fdea55dea08 - enabled: 1 path: Assets/Scenes/069_2D_Forward_Shader_Compatibility_Forward.unity guid: 4387c323b80b3f8479359d07b90f0031 From b54aadb88ee377f1d9e095386c38879b65a7ccbd Mon Sep 17 00:00:00 2001 From: Reach Platform Support Date: Thu, 29 May 2025 14:57:20 +0000 Subject: [PATCH 07/80] [Port] [6000.1] [HDRP] Fixed Water clamping the screenspace position the wrong way around --- .../Runtime/Water/Shaders/UnderWaterUtilities.hlsl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/UnderWaterUtilities.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/UnderWaterUtilities.hlsl index 4716bd7c0ca..b197d5c0140 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/UnderWaterUtilities.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/UnderWaterUtilities.hlsl @@ -40,7 +40,7 @@ float GetUnderWaterDistance(uint2 coord) uint xr = unity_StereoEyeIndex * _BufferStride; uint2 boundsX = uint2(0xFFFFFFFF - _WaterLine[0 + xr], _WaterLine[1 + xr]); uint posX = round(dot((float2)coord.xy, rightVector) - _BoundsSS.x); - posX = clamp(posX, boundsX.x, boundsX.y); + posX = clamp(posX, min(boundsX.y, boundsX.x), max(boundsX.x, boundsX.y)); // Decompress water line height float posY = dot((float2)coord.xy, upVector) - _BoundsSS.z; From 24a411da404162bfb2925450bfd085e66c4600a6 Mon Sep 17 00:00:00 2001 From: Kenny Tan Date: Fri, 30 May 2025 17:18:04 +0000 Subject: [PATCH 08/80] [Port] [6000.1] [UUM-104352][URP 2D] Fix normal maps account for sprite FlipXY --- .../2D/Include/NormalsRenderingShared.hlsl | 4 +- .../Assets/Scenes/022_Normals_FlipXY.unity | 835 ++++++++++++++++++ .../Scenes/022_Normals_FlipXY.unity.meta | 7 + .../SpriteCustomLitBlending.shadergraph | 39 +- .../ProjectSettings/EditorBuildSettings.asset | 3 + 5 files changed, 879 insertions(+), 9 deletions(-) create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/022_Normals_FlipXY.unity create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/022_Normals_FlipXY.unity.meta diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl index 0b40b9c1129..a2c951b3d7b 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/NormalsRenderingShared.hlsl @@ -3,9 +3,11 @@ half4 NormalsRenderingShared(half4 color, half3 normalTS, half3 tangent, half3 bitangent, half3 normal) { - half4 normalColor; + // Account for sprite flip + normalTS.xy *= unity_SpriteProps.xy; half3 normalWS = TransformTangentToWorld(normalTS, half3x3(tangent.xyz, bitangent.xyz, normal.xyz)); + half4 normalColor; normalColor.rgb = 0.5 * ((normalWS)+1); normalColor.a = color.a; // used for blending diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/022_Normals_FlipXY.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/022_Normals_FlipXY.unity new file mode 100644 index 00000000000..f0dbe141334 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/022_Normals_FlipXY.unity @@ -0,0 +1,835 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &320569054 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 320569056} + - component: {fileID: 320569055} + m_Layer: 0 + m_Name: Sprite_Coral_round Default Material + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &320569055 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320569054} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: -6091329584399971573, guid: 734039631e6f77248b04a79e9dded059, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 5.12, y: 3.87} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &320569056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 320569054} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.5, y: 2, z: 0} + m_LocalScale: {x: 0.8, y: 0.8, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &355158592 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 355158594} + - component: {fileID: 355158593} + m_Layer: 0 + m_Name: Sprite_Coral_round Custom Lit Material + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &355158593 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 355158592} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: af65edc27c3fa8c4f8ca25aa48c28e6c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: -6091329584399971573, guid: 734039631e6f77248b04a79e9dded059, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 5.12, y: 3.87} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &355158594 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 355158592} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -2.5, y: -2.28, z: 0} + m_LocalScale: {x: 0.8, y: 0.8, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1456095519 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1456095521} + - component: {fileID: 1456095520} + m_Layer: 0 + m_Name: Sprite_Coral_round Default Material (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &1456095520 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1456095519} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a97c105638bdf8b4a8650670310a4cd3, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: -6091329584399971573, guid: 734039631e6f77248b04a79e9dded059, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 1 + m_FlipY: 1 + m_DrawMode: 0 + m_Size: {x: 5.12, y: 3.87} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &1456095521 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1456095519} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 2.5, y: 2, z: 0} + m_LocalScale: {x: 0.8, y: 0.8, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} +--- !u!1 &1566917644 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1566917646} + - component: {fileID: 1566917645} + m_Layer: 0 + m_Name: Sprite_Coral_round Custom Lit Material (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!212 &1566917645 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566917644} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: af65edc27c3fa8c4f8ca25aa48c28e6c, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: -6091329584399971573, guid: 734039631e6f77248b04a79e9dded059, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 1 + m_FlipY: 1 + m_DrawMode: 0 + m_Size: {x: 5.12, y: 3.87} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &1566917646 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1566917644} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 1, w: 0} + m_LocalPosition: {x: 2.5, y: -2.28, z: 0} + m_LocalScale: {x: 0.8, y: 0.8, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 180} +--- !u!1 &1713755539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1713755541} + - component: {fileID: 1713755540} + m_Layer: 0 + m_Name: Global Light 2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1713755540 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1713755539} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ComponentVersion: 2 + m_LightType: 4 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 0.5 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: eb0feddf00000000e980ef06 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 2 + m_UseNormalMap: 0 + m_ShadowsEnabled: 1 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 0 + m_PointLightOuterRadius: 1 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &1713755541 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1713755539} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1835037201 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1835037203} + - component: {fileID: 1835037202} + m_Layer: 0 + m_Name: Light 2D + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1835037202 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1835037201} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ComponentVersion: 2 + m_LightType: 3 + m_BlendStyleIndex: 0 + m_FalloffIntensity: 0.5 + m_Color: {r: 0, g: 0.9014871, b: 1, a: 1} + m_Intensity: 5 + m_LightVolumeIntensity: 1 + m_LightVolumeEnabled: 0 + m_ApplyToSortingLayers: eb0feddf00000000e980ef06 + m_LightCookieSprite: {fileID: 0} + m_DeprecatedPointLightCookieSprite: {fileID: 0} + m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 + m_OverlapOperation: 0 + m_NormalMapDistance: 3 + m_NormalMapQuality: 1 + m_UseNormalMap: 0 + m_ShadowsEnabled: 0 + m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0.3 + m_ShadowSoftnessFalloffIntensity: 0.5 + m_ShadowVolumeIntensityEnabled: 0 + m_ShadowVolumeIntensity: 0.75 + m_LocalBounds: + m_Center: {x: 0, y: -0.00000011920929, z: 0} + m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} + m_PointLightInnerAngle: 360 + m_PointLightOuterAngle: 360 + m_PointLightInnerRadius: 4.080235 + m_PointLightOuterRadius: 5 + m_ShapeLightParametricSides: 5 + m_ShapeLightParametricAngleOffset: 0 + m_ShapeLightParametricRadius: 1 + m_ShapeLightFalloffSize: 0.5 + m_ShapeLightFalloffOffset: {x: 0, y: 0} + m_ShapePath: + - {x: -0.5, y: -0.5, z: 0} + - {x: 0.5, y: -0.5, z: 0} + - {x: 0.5, y: 0.5, z: 0} + - {x: -0.5, y: 0.5, z: 0} +--- !u!4 &1835037203 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1835037201} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.27, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1977309572 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1977309576} + - component: {fileID: 1977309575} + - component: {fileID: 1977309574} + - component: {fileID: 1977309573} + - component: {fileID: 1977309577} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1977309573 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1977309572} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 +--- !u!81 &1977309574 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1977309572} + m_Enabled: 1 +--- !u!20 &1977309575 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1977309572} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1977309576 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1977309572} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1977309577 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1977309572} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73231aa468d81ea49bc3d914080de185, type: 3} + m_Name: + m_EditorClassIdentifier: + ImageComparisonSettings: + TargetWidth: 512 + TargetHeight: 512 + TargetMSAASamples: 1 + PerPixelCorrectnessThreshold: 0.001 + PerPixelGammaThreshold: 0.003921569 + PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 + AverageCorrectnessThreshold: 0.0016 + IncorrectPixelsThreshold: 0.0000038146973 + UseHDR: 0 + UseBackBuffer: 0 + ImageResolution: 0 + ActiveImageTests: 1 + ActivePixelTests: -1 + WaitFrames: 0 + XRCompatible: 0 + gpuDrivenCompatible: 1 + CheckMemoryAllocation: 1 + renderBackendCompatibility: 2 + SetBackBufferResolution: 0 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1977309576} + - {fileID: 1713755541} + - {fileID: 1835037203} + - {fileID: 320569056} + - {fileID: 1456095521} + - {fileID: 355158594} + - {fileID: 1566917646} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/022_Normals_FlipXY.unity.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/022_Normals_FlipXY.unity.meta new file mode 100644 index 00000000000..be3e43082df --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/022_Normals_FlipXY.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0fd9ba64f5114634b81f084fb92123e1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/057_2D_Lights_Blending/SpriteCustomLitBlending.shadergraph b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/057_2D_Lights_Blending/SpriteCustomLitBlending.shadergraph index 37173f8e915..4c146079cd0 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/057_2D_Lights_Blending/SpriteCustomLitBlending.shadergraph +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/057_2D_Lights_Blending/SpriteCustomLitBlending.shadergraph @@ -284,6 +284,20 @@ "m_SlotId": 0 } }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e7122ec5f091423e8fb4be58092089fd" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5b68002e1cad45829d9e8d88411bf92d" + }, + "m_SlotId": 2 + } + }, { "m_OutputSlot": { "m_Node": { @@ -445,7 +459,7 @@ "m_StageCapability": 3, "m_BareResource": false, "m_Texture": { - "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_SerializedTexture": "", "m_Guid": "" }, "m_DefaultType": 3 @@ -839,7 +853,7 @@ "m_StageCapability": 3, "m_BareResource": false, "m_Texture": { - "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_SerializedTexture": "", "m_Guid": "" }, "m_DefaultType": 0 @@ -1314,7 +1328,7 @@ "m_StageCapability": 3, "m_BareResource": false, "m_Texture": { - "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_SerializedTexture": "", "m_Guid": "" }, "m_DefaultType": 0 @@ -1357,7 +1371,7 @@ "m_StageCapability": 3, "m_BareResource": false, "m_Texture": { - "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_SerializedTexture": "", "m_Guid": "" }, "m_DefaultType": 0 @@ -2028,7 +2042,7 @@ "m_StageCapability": 3, "m_BareResource": false, "m_Texture": { - "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_SerializedTexture": "", "m_Guid": "" }, "m_DefaultType": 0 @@ -2069,12 +2083,15 @@ "overrideHLSLDeclaration": true, "hlslDeclarationOverride": 2, "m_Hidden": false, + "m_PerRendererData": false, + "m_customAttributes": [], "m_Value": { - "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_SerializedTexture": "", "m_Guid": "" }, "isMainTexture": false, "useTilingAndOffset": false, + "useTexelSize": true, "m_Modifiable": true, "m_DefaultType": 0 } @@ -2132,12 +2149,15 @@ "overrideHLSLDeclaration": false, "hlslDeclarationOverride": 0, "m_Hidden": false, + "m_PerRendererData": false, + "m_customAttributes": [], "m_Value": { - "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_SerializedTexture": "", "m_Guid": "" }, "isMainTexture": false, "useTilingAndOffset": false, + "useTexelSize": true, "m_Modifiable": true, "m_DefaultType": 0 } @@ -2561,12 +2581,15 @@ "overrideHLSLDeclaration": false, "hlslDeclarationOverride": 0, "m_Hidden": false, + "m_PerRendererData": false, + "m_customAttributes": [], "m_Value": { - "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_SerializedTexture": "", "m_Guid": "" }, "isMainTexture": false, "useTilingAndOffset": false, + "useTexelSize": true, "m_Modifiable": true, "m_DefaultType": 0 } diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/ProjectSettings/EditorBuildSettings.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/ProjectSettings/EditorBuildSettings.asset index 6a91d9a628e..b745554294c 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/ProjectSettings/EditorBuildSettings.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/ProjectSettings/EditorBuildSettings.asset @@ -194,6 +194,9 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/021_Shadow_Batching_03.unity guid: c5d8258f10589fa4c986556b16becf52 + - enabled: 1 + path: Assets/Scenes/022_Normals_FlipXY.unity + guid: 0fd9ba64f5114634b81f084fb92123e1 - enabled: 1 path: Assets/Scenes/056_2D_Lights-Shadows.unity guid: 4f7a50da47cfeca46b45fe14be17081d From fe5513fa348912df550c815ea69fb78716c59675 Mon Sep 17 00:00:00 2001 From: Vimal Rethinachalam Date: Sun, 1 Jun 2025 08:43:39 +0000 Subject: [PATCH 09/80] 6000.1: Fix unclear warnings when user creates more lights than the light limit when using Deferred rendering path --- .../Passes/AdditionalLightsShadowCasterPass.cs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs index 52c6d560c72..4314d3941cf 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs @@ -56,6 +56,7 @@ public partial class AdditionalLightsShadowCasterPass : ScriptableRenderPass private static readonly Vector4 c_DefaultShadowParams = new (0, 0, 0, -1); private static Vector4 s_EmptyAdditionalShadowFadeParams; private static Vector4[] s_EmptyAdditionalLightIndexToShadowParams; + private static bool isAdditionalShadowParamsDirty; // Classes private static class AdditionalShadowsConstantBuffer @@ -691,6 +692,16 @@ bool SetupForEmptyRendering(bool stripShadowsOffVariants, bool shadowsEnabled, U m_VisibleLightIndexToAdditionalLightIndex = new short[visibleLights.Length]; m_VisibleLightIndexToIsCastingShadows = new bool[visibleLights.Length]; s_EmptyAdditionalLightIndexToShadowParams = new Vector4[visibleLights.Length]; + isAdditionalShadowParamsDirty = true; + } + + // Temporarily we are avoiding SetGlobalVectorArray array for _AdditionalShadowParams if we exceeds maximum additional lights (UUM-102023). + if (isAdditionalShadowParamsDirty) + { + isAdditionalShadowParamsDirty = false; + Debug.LogWarning($"The number of visible additional lights {visibleLights.Length} exceeds the maximum supported lights {UniversalRenderPipeline.maxVisibleAdditionalLights}." + + $" Please refer URP documentation to change maximum number of visible lights or" + + $" reduce the number of lights to maximum allowed additional lights."); } // Initialize _AdditionalShadowParams @@ -823,7 +834,7 @@ internal static void SetShadowParamsForEmptyShadowmap(RasterCommandBuffer raster shadowParamsBuffer.SetData(s_EmptyAdditionalLightIndexToShadowParams); rasterCommandBuffer.SetGlobalBuffer(AdditionalShadowsConstantBuffer._AdditionalShadowParams_SSBO, shadowParamsBuffer); } - else + else if (s_EmptyAdditionalLightIndexToShadowParams.Length <= UniversalRenderPipeline.maxVisibleAdditionalLights) { rasterCommandBuffer.SetGlobalVectorArray(AdditionalShadowsConstantBuffer._AdditionalShadowParams, s_EmptyAdditionalLightIndexToShadowParams); } From f1f53e64dae11440335cb1a44f528ab763d28fcb Mon Sep 17 00:00:00 2001 From: Reach Platform Support Date: Tue, 3 Jun 2025 16:09:41 +0000 Subject: [PATCH 10/80] [Port] [6000.1] Fix DRS + CustomPass AfterPostprocess and camera depth --- .../CustomPass/CustomPassDrawer.cs | 17 +++++++++++ .../RenderPass/CustomPass/CustomPass.cs | 29 +++++++++++++++---- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/CustomPass/CustomPassDrawer.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/CustomPass/CustomPassDrawer.cs index 0a10648e761..551a2507a7c 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/CustomPass/CustomPassDrawer.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/CustomPass/CustomPassDrawer.cs @@ -172,6 +172,16 @@ void DoCommonSettingsGUI(ref Rect rect) { EditorGUI.PropertyField(rect, m_TargetDepthBuffer, Styles.targetDepthBuffer); rect.y += Styles.defaultLineSpace; + + CustomPass.TargetBuffer requestedDepth = m_TargetDepthBuffer.GetEnumValue(); + if (m_CustomPass.getConstrainedDepthBuffer() != requestedDepth) + { + Rect helpBoxRect = rect; + float helpBoxHeight = EditorGUIUtility.singleLineHeight * 2; + helpBoxRect.height = helpBoxHeight; + EditorGUI.HelpBox(helpBoxRect, "Camera depth isn't supported when dynamic scaling is on. We will automatically fall back to not doing depth-testing for this pass.", MessageType.Warning); + rect.y += helpBoxHeight; + } } if ((commonPassUIFlags & PassUIFlag.ClearFlags) != 0) @@ -264,6 +274,13 @@ internal float GetPropertyHeight(SerializedProperty property, GUIContent label) } height += Styles.defaultLineSpace * lines; + + // Add height for the help box if it will be shown + if ((commonPassUIFlags & PassUIFlag.TargetDepthBuffer) != 0 && + m_CustomPass.getConstrainedDepthBuffer() != m_TargetDepthBuffer.GetEnumValue()) + { + height += EditorGUIUtility.singleLineHeight * 2; // Help box height + } } return height + GetPassHeight(property); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPass.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPass.cs index ff9c62c31cf..52081bb89a0 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPass.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPass.cs @@ -52,6 +52,24 @@ internal ProfilingSampler profilingSampler /// public TargetBuffer targetDepthBuffer; + // The actual depth buffer has to follow some constraints, and thus may not be the same result as the target + // depth buffer that the user has requested. Apply these constraints and return a result. + internal TargetBuffer getConstrainedDepthBuffer() + { + TargetBuffer depth = targetDepthBuffer; + if (depth == TargetBuffer.Camera && + HDRenderPipeline.currentAsset.currentPlatformRenderPipelineSettings.dynamicResolutionSettings.enabled && + currentHDCamera.allowDynamicResolution && + injectionPoint == CustomPassInjectionPoint.AfterPostProcess) + { + // This custom pass is injected after postprocessing, and Dynamic Resolution Scaling is enabled, which + // means an upscaler is active. In this case, the camera color buffer is the full display resolution, + // but the camera depth buffer is a lower, pre-upscale resolution. So we cannot do depth testing here. + depth = TargetBuffer.None; + } + return depth; + } + /// /// What clear to apply when the color and depth buffer are bound /// @@ -314,7 +332,7 @@ virtual internal void ExecuteInternal(RenderGraph renderGraph, HDCamera hdCamera } // Set back the camera color buffer if we were using a custom buffer as target - if (customPass.targetDepthBuffer != TargetBuffer.Camera) + if (customPass.getConstrainedDepthBuffer() != TargetBuffer.Camera) CoreUtils.SetRenderTarget(ctx.cmd, outputColorBuffer); }); } @@ -351,16 +369,17 @@ bool IsMSAAEnabled(HDCamera hdCamera) // This function must be only called from the ExecuteInternal method (requires current render target and current RT manager) void SetCustomPassTarget(CommandBuffer cmd) { + TargetBuffer depth = getConstrainedDepthBuffer(); // In case all the buffer are set to none, we can't bind anything - if (targetColorBuffer == TargetBuffer.None && targetDepthBuffer == TargetBuffer.None) + if (targetColorBuffer == TargetBuffer.None && depth == TargetBuffer.None) return; RTHandle colorBuffer = (targetColorBuffer == TargetBuffer.Custom) ? currentRenderTarget.customColorBuffer.Value : currentRenderTarget.colorBufferRG; - RTHandle depthBuffer = (targetDepthBuffer == TargetBuffer.Custom) ? currentRenderTarget.customDepthBuffer.Value : currentRenderTarget.depthBufferRG; + RTHandle depthBuffer = (depth == TargetBuffer.Custom) ? currentRenderTarget.customDepthBuffer.Value : currentRenderTarget.depthBufferRG; - if (targetColorBuffer == TargetBuffer.None && targetDepthBuffer != TargetBuffer.None) + if (targetColorBuffer == TargetBuffer.None && depth != TargetBuffer.None) CoreUtils.SetRenderTarget(cmd, depthBuffer, clearFlags); - else if (targetColorBuffer != TargetBuffer.None && targetDepthBuffer == TargetBuffer.None) + else if (targetColorBuffer != TargetBuffer.None && depth == TargetBuffer.None) CoreUtils.SetRenderTarget(cmd, colorBuffer, clearFlags); else { From d4b60990b95e4bdb7ac5819e4a121ee98b7693ef Mon Sep 17 00:00:00 2001 From: Kenny Tan Date: Tue, 3 Jun 2025 16:09:49 +0000 Subject: [PATCH 11/80] [6000.1][URP 2D] Port reference image changes for test builds --- .../Assets/Scenes/074_Screen_Space_UI_Overlay.unity | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/074_Screen_Space_UI_Overlay.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/074_Screen_Space_UI_Overlay.unity index 76cbf42d251..6eb1a38bc3a 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/074_Screen_Space_UI_Overlay.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/074_Screen_Space_UI_Overlay.unity @@ -42,7 +42,8 @@ RenderSettings: --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -490,8 +491,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: ImageComparisonSettings: - TargetWidth: 1280 - TargetHeight: 720 + TargetWidth: 1920 + TargetHeight: 1080 TargetMSAASamples: 1 PerPixelCorrectnessThreshold: 0.001 PerPixelGammaThreshold: 0.003921569 @@ -500,7 +501,7 @@ MonoBehaviour: AverageCorrectnessThreshold: 0.005 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 - UseBackBuffer: 1 + UseBackBuffer: 0 ImageResolution: 0 ActiveImageTests: 1 ActivePixelTests: -1 @@ -509,7 +510,7 @@ MonoBehaviour: gpuDrivenCompatible: 1 CheckMemoryAllocation: 0 renderBackendCompatibility: 2 - SetBackBufferResolution: 1 + SetBackBufferResolution: 0 --- !u!1 &661388560 GameObject: m_ObjectHideFlags: 0 @@ -1075,6 +1076,7 @@ MonoBehaviour: m_WorldSpaceSizeMode: 1 m_WorldSpaceWidth: 1920 m_WorldSpaceHeight: 1080 + m_WorldSpaceCollider: {fileID: 0} --- !u!4 &1471116130 Transform: m_ObjectHideFlags: 0 From d664215dd26fe631af979e29a72644046cbc45bb Mon Sep 17 00:00:00 2001 From: Reach Platform Support Date: Thu, 5 Jun 2025 06:36:59 +0000 Subject: [PATCH 12/80] [Port] [6000.1] docg-7131: Add link to HDRP Water system Advanced Properties --- .../Documentation~/advanced-properties.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.core/Documentation~/advanced-properties.md b/Packages/com.unity.render-pipelines.core/Documentation~/advanced-properties.md index 0534d9daf74..36c7ee4ac05 100644 --- a/Packages/com.unity.render-pipelines.core/Documentation~/advanced-properties.md +++ b/Packages/com.unity.render-pipelines.core/Documentation~/advanced-properties.md @@ -10,7 +10,7 @@ There is a global state per user that stores if Unity displays **advanced proper Not every component or Volume Override includes advanced properties. If one does, it has a contextual menu to the right of each property section header that includes additional properties. To expose advanced properties for that section, open the contextual menu and click **Advanced Properties**. -For an example, see the **Water Surface** component in [High Definition Render Pipeline (HDRP)](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest). +For an example, refer to the **Water Surface** component in [High Definition Render Pipeline (HDRP)](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@latest?subfolder=/manual/settings-and-properties-related-to-the-water-system.html). By default only standard properties are shown. From 0a0762cdf99e15e0ab1ead53ba7ae8048fc62ac4 Mon Sep 17 00:00:00 2001 From: Reach Platform Support Date: Fri, 6 Jun 2025 07:23:39 +0000 Subject: [PATCH 13/80] [Port] [6000.1] Accessibility tables update for Adaptive Probe Volumes panel properties --- .../probevolumes-lighting-panel-reference.md | 168 +++--------------- 1 file changed, 25 insertions(+), 143 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/probevolumes-lighting-panel-reference.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/probevolumes-lighting-panel-reference.md index ddc24e4b37a..eaff6d3b3a5 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/probevolumes-lighting-panel-reference.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/probevolumes-lighting-panel-reference.md @@ -1,103 +1,41 @@ # Adaptive Probe Volumes panel properties -This page explains the properties in the **Adaptive Probe Volumes** panel in Lighting settings. To open the panel, from the main menu select **Window** > **Rendering** > **Lighting** > **Adaptive Probe Volumes**. +This page explains the properties in the **Adaptive Probe Volumes** panel in Lighting settings. To open the panel, from the main menu select **Window** > **Rendering** > **Lighting** > **Adaptive Probe Volumes**. ## Baking -To open Baking Set properties, either select the Baking Set asset in the Project window, or from the main menu select **Window** > **Rendering** > **Lighting** > **Adaptive Probe Volumes** tab. +To open Baking Set properties, either select the Baking Set asset in the Project window, or from the main menu select **Window** > **Rendering** > **Lighting** > **Adaptive Probe Volumes** tab. ### Baking - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
Baking Mode
Single SceneUse only the active scene to calculate the lighting data in Adaptive Probe Volumes.
Baking SetUse the scenes in this Baking Set to calculate the lighting data in Adaptive Probe Volumes.
Current Baking SetThe current Baking Set asset.
Scenes in Baking SetLists the scenes in the current Baking Set.
Status: Indicates whether the scene is loaded.
Bake: When enabled, HDRP generates lighting for this scene.
Use + and - to add or remove a scene from the active Baking Set.
Use the two-line icon to the left of each scene to drag the scene up or down in the list.
+|Property |Description | +|:---|:---| +|**Baking Mode** |
  • **Single Scene:** Use only the active scene to calculate the lighting data in Adaptive Probe Volumes.
  • **Baking Set:** Use the scenes in this Baking Set to calculate the lighting data in Adaptive Probe Volumes.
| +|**Current Baking Set** |The current Baking Set asset. | +|**Scenes in Baking Set** |Lists the scenes in the current Baking Set:
  • **Status:** Indicates whether the scene is loaded.
  • **Bake:** When enabled, HDRP generates lighting for this scene.
Use + and − to add add or remove a scene from the active Baking Set. Use the two-line icon to the left of each scene to drag the scene up or down in the list. | ### Probe Placement - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
PropertyDescription
Probe Positions
RecalculateRecalculate probe positions during baking, to accommodate changes in scene geometry. Refer to Bake different lighting setups with Lighting Scenarios for more information.
Don't RecalculateDon't recalculate probe positions during baking. This keeps the probe positions the same as the last successful bake, which means HDRP can blend probes in different Lighting Scenarios. Refer to Bake different lighting setups with Lighting Scenarios for more information.
Min Probe SpacingThe minimum distance between probes, in meters. Refer to Configure the size and density of Adaptive Probe Volumes for more information.
Max Probe SpacingThe maximum distance between probes, in meters. Refer to Configure the size and density of Adaptive Probe Volumes for more information.
Renderer Filter Settings
Layer MaskSpecify the Layers HDRP considers when it generates probe positions. Select a Layer to enable or disable it.
Min Renderer SizeThe smallest Renderer size HDRP considers when it places probes.
+|Property |Description | +|:---|:---| +|**Probe Positions** |
  • **Recalculate:** Recalculate probe positions during baking, to accommodate changes in scene geometry. Refer to [Bake different lighting setups with Lighting Scenarios](probevolumes-bakedifferentlightingsetups.md) for more information.
  • **Don't Recalculate:** Don't recalculate probe positions during baking. This keeps the probe positions the same as the last successful bake, which means HDRP can blend probes in different Lighting Scenarios. Refer to [Bake different lighting setups with Lighting Scenarios](probevolumes-bakedifferentlightingsetups.md) for more information.
| +|**Min Probe Spacing** | The minimum distance between probes, in meters. Refer to [Configure the size and density of Adaptive Probe Volumes](probevolumes-changedensity.md) for more information. | +|**Max Probe Spacing** |The maximum distance between probes, in meters. Refer to [Configure the size and density of Adaptive Probe Volumes](probevolumes-changedensity.md) for more information. | +|**Renderer Filter Settings** |
  • **Layer Mask:** Specify the [Layers](xref:um-layers) HDRP considers when it generates probe positions. Select a Layer to enable or disable it.
  • **Min Renderer Size:** The smallest Renderer size HDRP considers when it places probes.
| + ### Lighting Scenarios This section appears only if you enable **Lighting Scenarios** under **Light Probe Lighting** in the [HDRP Asset](HDRP-Asset.md). -| **Property** ||| **Description** | -|-|-|-|-| -| **Scenarios** ||| Lists the Lighting Scenarios in the Baking Set. To rename a Lighting Scenario, double-click its name. | -|| **Active** || Set the currently loaded Lighting Scenario, which HDRP writes to when you select **Generate Lighting**. | -|| **Status** || Indicates the status of the active Lighting Scenario. | -||| **Invalid Scenario** | A warning icon appears if the active Lighting Scenario is baked but HDRP can't load it anymore, for example if another Lighting Scenario has been baked that caused changes in the probe subdivision. | -||| **Not Baked** | An information icon appears if you haven't baked any lighting data for the active Lighting Scenario.| -||| **Not Loaded** | An information icon appears if scenes in the Baking Set aren't currently loaded in the Hierarchy window, so HDRP can't determine the Lighting Scenario status. | +|Property |Description | +|:---|:---| +|**Scenarios** |Lists the Lighting Scenarios in the Baking Set. To rename a Lighting Scenario, double-click its name.