From b7a201d7f7e12d57f36e8bb3573dcb0677b9edbc Mon Sep 17 00:00:00 2001 From: Arthur Dufay Date: Wed, 30 Aug 2023 02:21:54 +0000 Subject: [PATCH 1/3] =?UTF-8?q?=20Make=20sure=20to=20bind=20buffers=20of?= =?UTF-8?q?=20expected=20size=20to=20make=20Metal=20validation=20=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR addresses https://jira.unity3d.com/browse/UUM-41477. The Metal validation layer checks whether buffer bindings are 'meaningful'. For example, if you bind a buffer of size 4 to a slot which points to an array of uint3s (which has size 12), then Metal validation layer will trigger because this is not 'meaningful' (myBuffer[0] will read out of bounds). In case of [UUM-41474](https://jira.unity3d.com/browse/UUM-41474), this meant that the whole editor crashed because ProbeReferenceVolume bound a buffer which (from Metal's point of view) was not meaningful. The fix was therefore to make sure to provide a 'meaningful' uint3 buffer in the case when needToBindNeutral = true. --- .../Runtime/Lighting/ProbeVolume/ProbeVolumeLighting.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeLighting.cs b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeLighting.cs index 34b0d1558d5..f2915e6e5e9 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeLighting.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeLighting.cs @@ -57,12 +57,10 @@ public void BindAPVRuntimeResources(CommandBuffer cmdBuffer, bool isProbeVolumeE if (needToBindNeutral) { - // Lazy init the empty buffer + // Lazy init the empty buffer. We use sizeof(uint3) so that this buffer can be + // used with uint and uint3 bindings without triggering validation errors. if (m_EmptyIndexBuffer == null) - { - // Size doesn't really matter here, anything can be bound as long is a valid compute buffer. - m_EmptyIndexBuffer = new ComputeBuffer(1, sizeof(uint), ComputeBufferType.Structured); - } + m_EmptyIndexBuffer = new ComputeBuffer(1, sizeof(uint) * 3, ComputeBufferType.Structured); cmdBuffer.SetGlobalBuffer(ShaderIDs._APVResIndex, m_EmptyIndexBuffer); cmdBuffer.SetGlobalBuffer(ShaderIDs._APVResCellIndices, m_EmptyIndexBuffer); From b6eca715967d4771635caa17dfa7be1926c61a54 Mon Sep 17 00:00:00 2001 From: Kavin Kumar Natraj Date: Wed, 30 Aug 2023 02:21:58 +0000 Subject: [PATCH 2/3] 2023.1: Fix per-vertex light layers The emission of light from the vertex layer should not be lit in cases of a layer mismatch, but currently, the vertex layer remains illuminated regardless of the layer's compatibility. This PR addresses per-vertex light layers issue. Parent: https://jira.unity3d.com/browse/UUM-40810 Backport: https://jira.unity3d.com/browse/UUM-41568 --- .../Editor/VFXGraph/Shaders/VFXPasses.template | 2 +- .../ShaderLibrary/Lighting.hlsl | 9 +++++++++ .../Shaders/ComplexLit.shader | 4 ++-- .../Shaders/Lit.shader | 2 +- .../Shaders/Nature/SpeedTree7.shader | 2 +- .../Shaders/Nature/SpeedTree8.shader | 6 +++--- .../Shaders/SimpleLit.shader | 4 ++-- .../Shaders/Terrain/TerrainLit.shader | 8 ++++---- .../Shaders/Terrain/TerrainLitAdd.shader | 8 ++++---- .../Shaders/Terrain/TerrainLitBase.shader | 8 ++++---- .../Shaders/Terrain/WavingGrass.shader | 8 ++++---- .../Shaders/Utils/StencilDeferred.shader | 8 ++++---- 12 files changed, 39 insertions(+), 30 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template index e19574309b9..f95597b1079 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template +++ b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template @@ -28,8 +28,8 @@ ${VFXBegin:VFXPassForwardLitAdditionalPragma} #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION -#pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES +#pragma multi_compile _ _LIGHT_LAYERS #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" #pragma multi_compile_fog diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl index 31f725b123f..1e639a3c3dd 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl @@ -125,10 +125,19 @@ half3 VertexLighting(float3 positionWS, half3 normalWS) #ifdef _ADDITIONAL_LIGHTS_VERTEX uint lightsCount = GetAdditionalLightsCount(); + uint meshRenderingLayers = GetMeshRenderingLayer(); + LIGHT_LOOP_BEGIN(lightsCount) Light light = GetAdditionalLight(lightIndex, positionWS); + +#ifdef _LIGHT_LAYERS + if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) +#endif + { half3 lightColor = light.color * light.distanceAttenuation; vertexLightColor += LightingLambert(lightColor, light.direction, normalWS); + } + LIGHT_LOOP_END #endif diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader b/Packages/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader index e8066af741b..c34644e19e3 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader @@ -136,15 +136,15 @@ Shader "Universal Render Pipeline/Complex Lit" #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX + #pragma multi_compile _ _LIGHT_LAYERS + #pragma multi_compile _ _FORWARD_PLUS #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES - #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/Lit.shader b/Packages/com.unity.render-pipelines.universal/Shaders/Lit.shader index 38a197a774b..238df032607 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/Lit.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/Lit.shader @@ -142,8 +142,8 @@ Shader "Universal Render Pipeline/Lit" #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES + #pragma multi_compile _ _LIGHT_LAYERS #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree7.shader b/Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree7.shader index a8a6ca7b91a..0c53409234b 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree7.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree7.shader @@ -44,10 +44,10 @@ Shader "Universal Render Pipeline/Nature/SpeedTree7" #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_vertex LOD_FADE_PERCENTAGE #pragma multi_compile_fragment _ DEBUG_DISPLAY #pragma multi_compile_fragment _ _LIGHT_COOKIES + #pragma multi_compile _ _LIGHT_LAYERS #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader b/Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader index ef19975c96f..08bee6ae453 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader @@ -55,15 +55,15 @@ Shader "Universal Render Pipeline/Nature/SpeedTree8" #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ _LIGHT_LAYERS + #pragma multi_compile _ _FORWARD_PLUS + #pragma multi_compile_vertex LOD_FADE_PERCENTAGE #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION #pragma multi_compile_fragment _ _SHADOWS_SOFT - #pragma multi_compile _ _FORWARD_PLUS #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS - #pragma multi_compile_vertex LOD_FADE_PERCENTAGE #pragma multi_compile_fragment _ _LIGHT_COOKIES #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader b/Packages/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader index 01e6a5b1cb3..b21ff438814 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader @@ -103,13 +103,13 @@ Shader "Universal Render Pipeline/Simple Lit" #pragma multi_compile _ EVALUATE_SH_MIXED EVALUATE_SH_VERTEX #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ _LIGHT_LAYERS + #pragma multi_compile _ _FORWARD_PLUS #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES - #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLit.shader b/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLit.shader index 461ea83a69a..80d35ec4d2a 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLit.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLit.shader @@ -67,16 +67,16 @@ Shader "Universal Render Pipeline/Terrain/Lit" // Universal Pipeline keywords #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ _LIGHT_LAYERS + #pragma multi_compile _ _FORWARD_PLUS #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _SHADOWS_SOFT - #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING - #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES - #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" // ------------------------------------- diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitAdd.shader b/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitAdd.shader index 47a91633ff3..1e196b1d9a7 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitAdd.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitAdd.shader @@ -61,15 +61,15 @@ Shader "Hidden/Universal Render Pipeline/Terrain/Lit (Add Pass)" // Universal Pipeline keywords #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ _LIGHT_LAYERS + #pragma multi_compile _ _FORWARD_PLUS #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _SHADOWS_SOFT - #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING - #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES - #pragma multi_compile _ _FORWARD_PLUS // ------------------------------------- // Unity defined keywords diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitBase.shader b/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitBase.shader index 7450ce77064..db88a09959c 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitBase.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitBase.shader @@ -40,15 +40,15 @@ Shader "Hidden/Universal Render Pipeline/Terrain/Lit (Base Pass)" // Universal Pipeline keywords #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ _LIGHT_LAYERS + #pragma multi_compile _ _FORWARD_PLUS #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _SHADOWS_SOFT - #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING - #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES - #pragma multi_compile _ _FORWARD_PLUS // ------------------------------------- // Unity defined keywords diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/WavingGrass.shader b/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/WavingGrass.shader index 5ef9623c7a7..89221e20c70 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/WavingGrass.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/Terrain/WavingGrass.shader @@ -25,14 +25,14 @@ Shader "Hidden/TerrainEngine/Details/UniversalPipeline/WavingDoublePass" // Universal Pipeline keywords #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS - #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS - #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ _LIGHT_LAYERS + #pragma multi_compile _ _FORWARD_PLUS + #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES - #pragma multi_compile _ _FORWARD_PLUS #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" // ------------------------------------- diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader b/Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader index 417496cdbe4..1523ad3f686 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader @@ -133,10 +133,10 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT #pragma multi_compile_fragment _ _DEFERRED_MIXED_LIGHTING #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile_fragment _ _FOVEATED_RENDERING_NON_UNIFORM_RASTER + #pragma multi_compile _ _LIGHT_LAYERS // ------------------------------------- // Includes @@ -198,10 +198,10 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT #pragma multi_compile_fragment _ _DEFERRED_MIXED_LIGHTING #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile_fragment _ _FOVEATED_RENDERING_NON_UNIFORM_RASTER + #pragma multi_compile _ _LIGHT_LAYERS // ------------------------------------- // Includes @@ -265,10 +265,10 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT #pragma multi_compile_fragment _ _DEFERRED_MIXED_LIGHTING #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile_fragment _ _FOVEATED_RENDERING_NON_UNIFORM_RASTER + #pragma multi_compile _ _LIGHT_LAYERS // ------------------------------------- // Includes @@ -322,6 +322,7 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" // ------------------------------------- // Universal Pipeline keywords + #pragma multi_compile _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN #pragma multi_compile_fragment _ _DEFERRED_MAIN_LIGHT #pragma multi_compile_fragment _ _DEFERRED_FIRST_LIGHT @@ -332,7 +333,6 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT #pragma multi_compile_fragment _ _DEFERRED_MIXED_LIGHTING #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile_fragment _ _FOVEATED_RENDERING_NON_UNIFORM_RASTER From bf592bb7507040df11b3860260a784390bcb4c92 Mon Sep 17 00:00:00 2001 From: Kristin Lague Date: Wed, 30 Aug 2023 12:36:33 +0000 Subject: [PATCH 3/3] [Backport 2023.1] Fix Material and Preview Prefabs light switching Fixes an issue where material previews were rendered dark and the prefab preview would show dark until the object was moved. This issue was a result of the HDAdditionalLightData not being properly initialized when the previews were rendered. We realized this is a regression stemming from https://github.cds.internal.unity3d.com/unity/unity/pull/20119which was solving a different problem so this fix is basically an addition to it that fixes the resulting issue of dark previews. --- .../Light/HDProcessedVisibleLightsBuilder.LightLoop.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDProcessedVisibleLightsBuilder.LightLoop.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDProcessedVisibleLightsBuilder.LightLoop.cs index d34c40723db..eb1e8ed2e50 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDProcessedVisibleLightsBuilder.LightLoop.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDProcessedVisibleLightsBuilder.LightLoop.cs @@ -53,7 +53,6 @@ private unsafe void BuildVisibleLightEntities(in CullingResults cullResults) m_Size = cullResults.visibleLights.Length; //TODO: this should be accelerated by a c++ API - var defaultEntity = HDLightRenderDatabase.instance.GetDefaultLightEntity(); for (int i = 0; i < cullResults.visibleLights.Length; ++i) { Light light = cullResults.visibleLights[i].light; @@ -69,7 +68,7 @@ private unsafe void BuildVisibleLightEntities(in CullingResults cullResults) } // This can happen if a scene is created via new asset creation vs proper scene creation dialog. In this situation we create a default additional light data. // This is bad, but should happen *extremely* rarely and all the entities will 99.9% of the time end up in the branch above. - else if (light != null && light.type == LightType.Directional) + else { var hdLightData = light.gameObject.AddComponent(); if (hdLightData) @@ -78,9 +77,10 @@ private unsafe void BuildVisibleLightEntities(in CullingResults cullResults) } if (!hdLightData.lightEntity.valid) hdLightData.CreateHDLightRenderEntity(autoDestroy: true); + + // Make sure we have a valid data index + dataIndex = HDLightRenderDatabase.instance.GetEntityDataIndex(hdLightData.lightEntity); } - else - dataIndex = HDLightRenderDatabase.instance.GetEntityDataIndex(defaultEntity); } m_VisibleLightEntityDataIndices[i] = dataIndex;