From 97d416108b12890dc1c74774105df3c216a0d68e Mon Sep 17 00:00:00 2001 From: Sebastien Lagarde Date: Wed, 11 Oct 2023 02:14:11 +0000 Subject: [PATCH 01/27] [HDRP] Light management refactor for light optimization and API to cache light for RTGI POI: https://jira.unity3d.com/browse/POI-816 - SRP production ready This PR add a new API "forceVisible" on the C++ Light class. This is use in HDRP to allow to have a light that is forced visible even if outside of the view and have no pixels on screen. The light will still generate a cached shadow map - reserve memory in the Atlas etc., but will be removed before going in to the main light loop. Thus an offscreen light could be cached and reuse by system like realtime GI even if not visible on screen. To get correct behavior with shadow caching, this is the change include in the PR: 1. Force lights visible and cache shadows for them 2. Remove frustum limiting the shadow culling 3. Use default shadow value set by user 4. Cache shadow value in the hit point They are explain in the slides: https://docs.google.com/presentation/d/1qlMkPFOGgxHsvvbYan3DGWY09uj5kHJVIO-PilKOULM/edit#slide=id.g1a443f2ccf9_0_432 In addition, this PR refactor the light management code to share more culling code between rasterizer, raytracing and path tracing and optimize it a bit. This is name world light management: World light manager handles all lights in a scene and makes them accessible on the GPU. This includes information about their shape. 1. First create WorldLights object and populate it using CollectWorldLights(). 2. Pass the WorldLights object to BuildWorldLightDatas() to create the GPU representation of the lights. 3. (optionally) Pass the WorldLights object to BuildWorldLightVolumes() to create the GPU representation of the light bounds. 4. Bind the buffers using Bind WorldLights life time loop - Construct / Update - Reset WorldLightsGpu and WorldLightsVolumes life time loop - Construct / Update - PushToGpu - Bind - Release --- .../GPUDriven/TransformUpdaterDefs.cs.hlsl | 46 +- .../Lighting/Light/HDAdditionalLightData.cs | 137 +++- .../Lighting/Light/HDGpuLightsBuilder.Jobs.cs | 6 +- .../Light/HDGpuLightsBuilder.LightLoop.cs | 9 +- .../Lighting/Light/HDGpuLightsBuilder.cs | 14 +- .../HDProcessedVisibleLightsBuilder.Jobs.cs | 8 +- ...ProcessedVisibleLightsBuilder.LightLoop.cs | 2 +- .../Runtime/Lighting/LightDefinition.cs | 16 +- .../Runtime/Lighting/LightDefinition.cs.hlsl | 18 +- .../Runtime/Lighting/LightLoop/LightLoop.cs | 38 +- .../Lighting/LightLoop/LightLoop.cs.hlsl | 10 + .../Lighting/LightLoop/LightLoopDef.hlsl | 8 +- .../LightLoop/ShaderVariablesLightLoop.hlsl | 7 +- .../Lighting/Shadow/HDCachedShadowAtlas.cs | 2 +- .../Lighting/Shadow/HDCachedShadowManager.cs | 4 +- .../Lighting/Shadow/HDShadowManager.cs | 1 + .../Runtime/Material/Decal/DecalSystem.cs | 7 + .../RenderPipeline/HDRenderPipeline.cs | 34 + .../RenderPipeline/HDStringConstants.cs | 8 +- .../RenderPipeline/PathTracing/PathTracing.cs | 5 +- .../PathTracing/Shaders/PathTracingLight.hlsl | 34 +- .../Raytracing/HDRaytracingLightCluster.cs | 595 +------------- .../HDRaytracingLightCluster.cs.hlsl.meta | 9 - .../HDRaytracingManager.HDRTASManager.cs | 31 - .../Raytracing/HDRaytracingManager.cs | 55 +- .../Deferred/RaytracingDeferred.compute | 6 +- .../Shaders/HDRaytracingShadowLoop.hlsl | 10 +- .../Shaders/RayTracingLightCluster.hlsl | 8 +- .../Shaders/RaytracingLightCluster.compute | 16 +- .../Shaders/RaytracingLightLoop.hlsl | 18 +- .../ShaderVariablesRaytracingLightLoop.cs | 3 - ...ShaderVariablesRaytracingLightLoop.cs.hlsl | 3 - .../ShaderVariablesRaytracingLightLoop.hlsl | 2 - .../RenderPipeline/WorldLightCulling.cs | 257 ++++++ .../RenderPipeline/WorldLightCulling.cs.meta | 11 + .../RenderPipeline/WorldLightManager.cs | 737 ++++++++++++++++++ ...ster.cs.hlsl => WorldLightManager.cs.hlsl} | 12 +- .../WorldLightManager.cs.hlsl.meta | 7 + .../RenderPipeline/WorldLightManager.cs.meta | 11 + .../ShaderLibrary/ShaderVariablesGlobal.cs | 7 +- .../ShaderVariablesGlobal.cs.hlsl | 4 + .../ShaderLibrary/ShaderVariablesGlobal.hlsl | 33 +- .../Tests/Editor/WorldLightManagerTests.cs | 125 +++ .../Editor/WorldLightManagerTests.cs.meta | 3 + 44 files changed, 1529 insertions(+), 848 deletions(-) delete mode 100644 Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs.hlsl.meta create mode 100644 Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightCulling.cs create mode 100644 Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightCulling.cs.meta create mode 100644 Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs rename Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/{Raytracing/HDRaytracingLightCluster.cs.hlsl => WorldLightManager.cs.hlsl} (57%) create mode 100644 Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.hlsl.meta create mode 100644 Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.meta create mode 100644 Packages/com.unity.render-pipelines.high-definition/Tests/Editor/WorldLightManagerTests.cs create mode 100644 Packages/com.unity.render-pipelines.high-definition/Tests/Editor/WorldLightManagerTests.cs.meta diff --git a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/TransformUpdaterDefs.cs.hlsl b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/TransformUpdaterDefs.cs.hlsl index cc3cdaff88e..fd2aee8134d 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/TransformUpdaterDefs.cs.hlsl +++ b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/TransformUpdaterDefs.cs.hlsl @@ -4,15 +4,6 @@ #ifndef TRANSFORMUPDATERDEFS_CS_HLSL #define TRANSFORMUPDATERDEFS_CS_HLSL -// Generated from UnityEngine.Rendering.TransformUpdatePacket -// PackingRules = Exact -struct TransformUpdatePacket -{ - float4 localToWorld0; - float4 localToWorld1; - float4 localToWorld2; -}; - // Generated from UnityEngine.Rendering.SHUpdatePacket // PackingRules = Exact struct SHUpdatePacket @@ -46,21 +37,15 @@ struct SHUpdatePacket float shb8; }; -// -// Accessors for UnityEngine.Rendering.TransformUpdatePacket -// -float4 GetLocalToWorld0(TransformUpdatePacket value) -{ - return value.localToWorld0; -} -float4 GetLocalToWorld1(TransformUpdatePacket value) -{ - return value.localToWorld1; -} -float4 GetLocalToWorld2(TransformUpdatePacket value) +// Generated from UnityEngine.Rendering.TransformUpdatePacket +// PackingRules = Exact +struct TransformUpdatePacket { - return value.localToWorld2; -} + float4 localToWorld0; + float4 localToWorld1; + float4 localToWorld2; +}; + // // Accessors for UnityEngine.Rendering.SHUpdatePacket // @@ -172,5 +157,20 @@ float GetShb8(SHUpdatePacket value) { return value.shb8; } +// +// Accessors for UnityEngine.Rendering.TransformUpdatePacket +// +float4 GetLocalToWorld0(TransformUpdatePacket value) +{ + return value.localToWorld0; +} +float4 GetLocalToWorld1(TransformUpdatePacket value) +{ + return value.localToWorld1; +} +float4 GetLocalToWorld2(TransformUpdatePacket value) +{ + return value.localToWorld2; +} #endif diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs index 837ea28b11d..c966414fd23 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs @@ -1811,23 +1811,9 @@ public ShadowUpdateMode shadowUpdateMode { if (m_ShadowUpdateMode == value) return; - - if (m_ShadowUpdateMode != ShadowUpdateMode.EveryFrame && value == ShadowUpdateMode.EveryFrame) - { - if (!preserveCachedShadow) - { - HDShadowManager.cachedShadowManager.EvictLight(this, this.legacyLight.type); - } - } - else if (legacyLight.shadows != LightShadows.None && m_ShadowUpdateMode == ShadowUpdateMode.EveryFrame && value != ShadowUpdateMode.EveryFrame) - { - // If we are OnDemand not rendered on placement, we defer the registering of the light until the rendering is requested. - if (!(shadowUpdateMode == ShadowUpdateMode.OnDemand && !onDemandShadowRenderOnPlacement)) - HDShadowManager.cachedShadowManager.RegisterLight(this); - } - m_ShadowUpdateMode = value; + RegisterCachedShadowLightOptional(); if (lightEntity.valid) { HDLightRenderDatabase.instance.EditAdditionalLightUpdateDataAsRef(lightEntity).shadowUpdateMode = value; @@ -2163,12 +2149,23 @@ unsafe Vector3* m_CachedViewPositions } } - // temporary matrix that stores the previous light data (mainly used to discard history for ray traced screen space shadows) + // Temporary matrix that stores the previous light data (mainly used to discard history for ray traced screen space shadows) [System.NonSerialized, ExcludeCopy] internal Matrix4x4 previousTransform = Matrix4x4.identity; // Temporary index that stores the current shadow index for the light [System.NonSerialized, ExcludeCopy] internal int shadowIndex = -1; + // Temporary information if the shadow was cached + [System.NonSerialized, ExcludeCopy] + internal bool wasReallyVisibleLastFrame = true; + + [System.NonSerialized, ExcludeCopy] + internal bool fallbackToCachedShadows = false; + + // Track if light is registered in the cached shadow map + [System.NonSerialized, ExcludeCopy] + internal bool hasShadowCache = false; + // Runtime datas used to compute light intensity [ExcludeCopy] @@ -2418,7 +2415,10 @@ internal static int GetShadowRequestCount(int shadowSettingsCascadeShadowSplitCo public void RequestShadowMapRendering() { if (shadowUpdateMode == ShadowUpdateMode.OnDemand) + { HDShadowManager.cachedShadowManager.ScheduleShadowUpdate(this); + hasShadowCache = true; + } } /// @@ -2430,13 +2430,45 @@ public void RequestShadowMapRendering() public void RequestSubShadowMapRendering(int shadowIndex) { if (shadowUpdateMode == ShadowUpdateMode.OnDemand) + { HDShadowManager.cachedShadowManager.ScheduleShadowUpdate(this, shadowIndex); + hasShadowCache = true; + } } internal bool ShadowIsUpdatedEveryFrame() { return shadowUpdateMode == ShadowUpdateMode.EveryFrame; } + + // TODO: This is used to avoid compilation errors due to unreachable code + static bool s_EnableFallbackToCachedShadows = false; + + internal void RegisterCachedShadowLightOptional() + { + // TODO Enable fall back to cached shadows for relevant systems + fallbackToCachedShadows = (shadowUpdateMode == ShadowUpdateMode.EveryFrame) + && (legacyLight.type != LightType.Directional) + && s_EnableFallbackToCachedShadows; + + bool wantsShadowCache = shadowUpdateMode != ShadowUpdateMode.EveryFrame || fallbackToCachedShadows; + + wantsShadowCache = wantsShadowCache && (legacyLight.shadows != LightShadows.None); + + if (!wantsShadowCache && hasShadowCache && !preserveCachedShadow) + { + HDShadowManager.cachedShadowManager.EvictLight(this, this.legacyLight.type); + hasShadowCache = false; + } + + bool onDemand = shadowUpdateMode == ShadowUpdateMode.OnDemand && !onDemandShadowRenderOnPlacement; + + if (wantsShadowCache && !hasShadowCache && !onDemand && lightEntity.valid) + { + HDShadowManager.cachedShadowManager.RegisterLight(this); + hasShadowCache = true; + } + } internal ShadowMapUpdateType GetShadowUpdateType(LightType lightType) { @@ -2462,8 +2494,13 @@ internal static ShadowMapUpdateType GetShadowUpdateType(LightType lightType, Sha return ShadowMapUpdateType.Cached; } - internal int GetResolutionFromSettings(ShadowMapType shadowMapType, HDShadowInitParameters initParameters) + internal int GetResolutionFromSettings(ShadowMapType shadowMapType, HDShadowInitParameters initParameters, bool cachedResolution = false) { + if (cachedResolution && fallbackToCachedShadows) + { + return HDShadowManager.k_OffscreenShadowMapResolution; + } + switch (shadowMapType) { case ShadowMapType.CascadedDirectional: @@ -2482,7 +2519,7 @@ internal int GetResolutionFromSettings(LightType lightType, HDShadowInitParamete return GetResolutionFromSettings(GetShadowMapType(lightType), initParameters); } - internal void ReserveShadowMap(Camera camera, HDShadowManager shadowManager, HDShadowSettings shadowSettings, in HDShadowInitParameters initParameters, in VisibleLight visibleLight, LightType lightType) + internal void ReserveShadowMap(Camera camera, HDShadowManager shadowManager, HDShadowSettings shadowSettings, in HDShadowInitParameters initParameters, in VisibleLight visibleLight, LightType lightType, bool forcedVisible) { HDLightRenderDatabase renderDatabase = HDLightRenderDatabase.instance; @@ -2541,13 +2578,39 @@ internal void ReserveShadowMap(Camera camera, HDShadowManager shadowManager, HDS if (lightType == LightType.Directional) shadowManager.UpdateDirectionalShadowResolution((int)viewportSize.x, shadowSettings.cascadeShadowSplitCount.value); - int count = GetShadowRequestCount(shadowSettings.cascadeShadowSplitCount.value, lightType); + if (shadowIsInCacheSystem) + viewportSize = new Vector2(resolution, resolution); + int count = GetShadowRequestCount(shadowSettings.cascadeShadowSplitCount.value, lightType); var updateType = GetShadowUpdateType(lightType); + bool hasCachedComponent = !ShadowIsUpdatedEveryFrame(); + + if (forcedVisible && !shadowIsInCacheSystem) + { + // Limit resolution for offscreen lights with dynamic shadowmap + viewportSize = Vector2.Min(viewportSize, new Vector2(HDShadowManager.k_OffscreenShadowMapResolution, HDShadowManager.k_OffscreenShadowMapResolution)); + if (lightEntity.valid) + { + // Change this in the database + HDLightRenderDatabase.instance.EditAdditionalLightUpdateDataAsRef(lightEntity).shadowUpdateMode = ShadowUpdateMode.OnDemand; + } + HDShadowManager.cachedShadowManager.ScheduleShadowUpdate(this); + updateType = ShadowMapUpdateType.Cached; + wasReallyVisibleLastFrame = false; + } + else + { + if (lightEntity.valid) + { + // Change this in the database + HDLightRenderDatabase.instance.EditAdditionalLightUpdateDataAsRef(lightEntity).shadowUpdateMode = m_ShadowUpdateMode; + } + wasReallyVisibleLastFrame = true; + } var requestIndices = shadowRequestIndices; for (int index = 0; index < count; index++) { - requestIndices[index] = shadowManager.ReserveShadowResolutions(shadowIsInCacheSystem ? new Vector2(resolution, resolution) : viewportSize, shadowMapType, GetInstanceID(), index, updateType); + requestIndices[index] = shadowManager.ReserveShadowResolutions(viewportSize, shadowMapType, GetInstanceID(), index, updateType); } } @@ -2669,6 +2732,7 @@ internal static void TickLateUpdate() if (lightData.m_ShadowUpdateMode != ShadowUpdateMode.EveryFrame && lightData.cachedLightType.HasValue) { HDShadowManager.cachedShadowManager.EvictLight(lightData, lightData.cachedLightType.Value); + lightData.hasShadowCache = false; } var directionalLights = HDLightRenderDatabase.instance.directionalLights; @@ -2694,10 +2758,7 @@ internal static void TickLateUpdate() lightData.cachedLightType = lightData.legacyLight.type; - if (lightData.legacyLight.shadows != LightShadows.None && lightData.m_ShadowUpdateMode != ShadowUpdateMode.EveryFrame) - { - HDShadowManager.cachedShadowManager.RegisterLight(lightData); - } + lightData.RegisterCachedShadowLightOptional(); // If the current light unit is not supported by the new light type, we change it UInt64 supportedUnitsMask = GetSupportedLightUnitsBitMask(lightData.legacyLight.type); @@ -2705,6 +2766,20 @@ internal static void TickLateUpdate() lightData.lightUnit = GetSupportedLightUnits(lightData.legacyLight.type)[0]; } + bool forceShadowCulling = false; + // TODO enable for relevant systems + if (s_EnableFallbackToCachedShadows) + { + // Only force lights that will fall back to cached shadows + forceShadowCulling = lightData.fallbackToCachedShadows; + + // If we have something in the cache, there is no need to force culling + // if the light is visible again it will be culled, until then we use + // the cached shadow map + forceShadowCulling &= lightData.wasReallyVisibleLastFrame; + } + lightData.legacyLight.forceVisible = forceShadowCulling; + // TODO: The rest of this loop only handles animation. Iterate over a separate list in builds, // containing only lights with Animator components. @@ -3377,12 +3452,7 @@ internal void RefreshCachedShadow() if (wentThroughCachedShadowSystem) HDShadowManager.cachedShadowManager.EvictLight(this, legacyLight.type); - if (!ShadowIsUpdatedEveryFrame() && legacyLight.shadows != LightShadows.None) - { - // If we are OnDemand not rendered on placement, we defer the registering of the light until the rendering is requested. - if (!(shadowUpdateMode == ShadowUpdateMode.OnDemand && !onDemandShadowRenderOnPlacement)) - HDShadowManager.cachedShadowManager.RegisterLight(this); - } + RegisterCachedShadowLightOptional(); } #endregion @@ -3822,12 +3892,7 @@ void OnEnable() { CreateHDLightRenderEntity(); - if (!ShadowIsUpdatedEveryFrame() && legacyLight.shadows != LightShadows.None) - { - // If we are OnDemand not rendered on placement, we defer the registering of the light until the rendering is requested. - if (!(shadowUpdateMode == ShadowUpdateMode.OnDemand && !onDemandShadowRenderOnPlacement)) - HDShadowManager.cachedShadowManager.RegisterLight(this); - } + RegisterCachedShadowLightOptional(); SetEmissiveMeshRendererEnabled(true); } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.Jobs.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.Jobs.cs index 563be39613d..a46fe104b69 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.Jobs.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.Jobs.cs @@ -327,7 +327,7 @@ public static void ConvertLightToGPUFormat( #endif private void StoreAndConvertLightToGPUFormat( int outputIndex, int lightIndex, - LightCategory lightCategory, GPULightType gpuLightType, LightVolumeType lightVolumeType) + LightCategory lightCategory, GPULightType gpuLightType, LightVolumeType lightVolumeType, bool offscreen) { var light = visibleLights[lightIndex]; var processedEntity = processedEntities[lightIndex]; @@ -648,7 +648,7 @@ private void ConvertDirectionalLightToGPUFormat( public void Execute(int index) { var sortKey = sortKeys[index]; - HDGpuLightsBuilder.UnpackLightSortKey(sortKey, out var lightCategory, out var gpuLightType, out var lightVolumeType, out var lightIndex); + HDGpuLightsBuilder.UnpackLightSortKey(sortKey, out var lightCategory, out var gpuLightType, out var lightVolumeType, out var lightIndex, out var offscreen); if (gpuLightType == GPULightType.Directional) { @@ -658,7 +658,7 @@ public void Execute(int index) else { int outputIndex = index - directionalSortedLightCounts; - StoreAndConvertLightToGPUFormat(outputIndex, lightIndex, lightCategory, gpuLightType, lightVolumeType); + StoreAndConvertLightToGPUFormat(outputIndex, lightIndex, lightCategory, gpuLightType, lightVolumeType, offscreen); } } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.LightLoop.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.LightLoop.cs index d0ec7428a9c..96564b117aa 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.LightLoop.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.LightLoop.cs @@ -422,10 +422,11 @@ private unsafe void CalculateAllLightDataTextureInfo( for (int sortKeyIndex = 0; sortKeyIndex < lightCounts; ++sortKeyIndex) { uint sortKey = visibleLights.sortKeys[sortKeyIndex]; - LightCategory lightCategory = (LightCategory)((sortKey >> 27) & 0x1F); - GPULightType gpuLightType = (GPULightType)((sortKey >> 22) & 0x1F); - LightVolumeType lightVolumeType = (LightVolumeType)((sortKey >> 17) & 0x1F); - int lightIndex = (int)(sortKey & 0xFFFF); + HDGpuLightsBuilder.UnpackLightSortKey(sortKey, out var lightCategory, out var gpuLightType, out var lightVolumeType, out var lightIndex, out var offscreen); + + // We don't need offscreen lights on the GPU + if (offscreen) + continue; int dataIndex = visibleLights.visibleLightEntityDataIndices[lightIndex]; if (dataIndex == HDLightRenderDatabase.InvalidDataIndex) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.cs index ff1270399d3..767fe20f4c2 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDGpuLightsBuilder.cs @@ -49,22 +49,24 @@ public struct LightsPerView public HDRenderPipeline.ScreenSpaceShadowData[] currentScreenSpaceShadowData => m_CurrentScreenSpaceShadowData; //Packs a sort key for a light - public static uint PackLightSortKey(LightCategory lightCategory, GPULightType gpuLightType, LightVolumeType lightVolumeType, int lightIndex) + public static uint PackLightSortKey(LightCategory lightCategory, GPULightType gpuLightType, LightVolumeType lightVolumeType, int lightIndex, bool offscreen) { //We sort directional lights to be in the beginning of the list. //This ensures that we can access directional lights very easily after we sort them. uint isDirectionalMSB = gpuLightType == GPULightType.Directional ? 0u : 1u; - uint sortKey = (uint)isDirectionalMSB << 31 | (uint)lightCategory << 27 | (uint)gpuLightType << 22 | (uint)lightVolumeType << 17 | (uint)lightIndex; + uint isOffscreen = offscreen ? 1u : 0u; + uint sortKey = (uint)isDirectionalMSB << 31 | (uint)isOffscreen << 30 | (uint)lightCategory << 26 | (uint)gpuLightType << 21 | (uint)lightVolumeType << 16 | (uint)lightIndex; return sortKey; } //Unpacks a sort key for a light - public static void UnpackLightSortKey(uint sortKey, out LightCategory lightCategory, out GPULightType gpuLightType, out LightVolumeType lightVolumeType, out int lightIndex) + public static void UnpackLightSortKey(uint sortKey, out LightCategory lightCategory, out GPULightType gpuLightType, out LightVolumeType lightVolumeType, out int lightIndex, out bool offscreen) { - lightCategory = (LightCategory)((sortKey >> 27) & 0xF); - gpuLightType = (GPULightType)((sortKey >> 22) & 0x1F); - lightVolumeType = (LightVolumeType)((sortKey >> 17) & 0x1F); + lightCategory = (LightCategory)((sortKey >> 26) & 0xF); + gpuLightType = (GPULightType)((sortKey >> 21) & 0x1F); + lightVolumeType = (LightVolumeType)((sortKey >> 16) & 0x1F); lightIndex = (int)(sortKey & 0xFFFF); + offscreen = ((sortKey >> 30) & 0x1) > 0; } //Initialization of builder diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDProcessedVisibleLightsBuilder.Jobs.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDProcessedVisibleLightsBuilder.Jobs.cs index eb207d2c0f2..776c72a2801 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDProcessedVisibleLightsBuilder.Jobs.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDProcessedVisibleLightsBuilder.Jobs.cs @@ -85,6 +85,12 @@ private bool TrivialRejectLight(in VisibleLight light, int dataIndex) if (dataIndex < 0) return true; + // If the light was forced visible it will be outside of the view and have no pixels on screen. + // The light will still generate a cached shadow map, but removed before going in to the + // main light loop. + if (light.forcedVisible) + return false; + // We can skip the processing of lights that are so small to not affect at least a pixel on screen. // TODO: The minimum pixel size on screen should really be exposed as parameter, to allow small lights to be culled to user's taste. const int minimumPixelAreaOnScreen = 1; @@ -289,7 +295,7 @@ public void Execute(int index) if (outputIndex < 0 || outputIndex >= visibleLights.Length) throw new Exception("Trying to access an output index out of bounds. Output index is " + outputIndex + "and max length is " + visibleLights.Length); #endif - sortKeys[outputIndex] = HDGpuLightsBuilder.PackLightSortKey(lightCategory, gpuLightType, lightVolumeType, index); + sortKeys[outputIndex] = HDGpuLightsBuilder.PackLightSortKey(lightCategory, gpuLightType, lightVolumeType, index, visibleLight.forcedVisible); processedLightVolumeType[index] = lightVolumeType; processedEntities[index] = new HDProcessedVisibleLight() 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 e2709d895fa..2a090fca489 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 @@ -150,7 +150,7 @@ private unsafe void ProcessShadows( if (additionalLightData.GetResolutionFromSettings(additionalLightData.GetShadowMapType(visibleLight.lightType), inShadowInitParameters) == 0) continue; - additionalLightData.ReserveShadowMap(hdCamera.camera, shadowManager, hdShadowSettings, inShadowInitParameters, visibleLight, entity->lightType); + additionalLightData.ReserveShadowMap(hdCamera.camera, shadowManager, hdShadowSettings, inShadowInitParameters, visibleLight, entity->lightType, visibleLight.forcedVisible); } // Now that all the lights have requested a shadow resolution, we can layout them in the atlas diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs index 6d4e60ca5de..e45cfe05dcb 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs @@ -290,18 +290,18 @@ unsafe struct EnvLightReflectionData public fixed float _CubeScaleOffset[s_MaxCubeReflections * 4]; }; - [GenerateHLSL(needAccessors = false, generateCBuffer = true, constantRegister = (int)ConstantRegister.RayTracingEnvLightReflectionData)] - unsafe struct EnvLightReflectionDataRT + [GenerateHLSL(needAccessors = false, generateCBuffer = true, constantRegister = (int)ConstantRegister.WorldEnvLightReflectionData)] + unsafe struct WorldEnvLightReflectionData { public const int s_MaxPlanarReflections = HDRenderPipeline.k_MaxPlanarReflectionsOnScreen; public const int s_MaxCubeReflections = HDRenderPipeline.k_MaxCubeReflectionsOnScreen; - - [HLSLArray(s_MaxPlanarReflections, typeof(Matrix4x4))] - public fixed float _PlanarCaptureVPRT[s_MaxPlanarReflections * 4 * 4]; + + [HLSLArray(s_MaxPlanarReflections, typeof(Matrix4x4))] + public fixed float _PlanarCaptureVPWL[s_MaxPlanarReflections * 4 * 4]; [HLSLArray(s_MaxPlanarReflections, typeof(Vector4))] - public fixed float _PlanarScaleOffsetRT[s_MaxPlanarReflections * 4]; - [HLSLArray(s_MaxCubeReflections, typeof(Vector4))] - public fixed float _CubeScaleOffsetRT[s_MaxCubeReflections * 4]; + public fixed float _PlanarScaleOffsetWL[s_MaxPlanarReflections * 4]; + [HLSLArray(s_MaxCubeReflections, typeof(Vector4))] + public fixed float _CubeScaleOffsetWL[s_MaxCubeReflections * 4]; }; [GenerateHLSL] diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs.hlsl index aba2ea2dffc..69ed731acaf 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightDefinition.cs.hlsl @@ -55,7 +55,7 @@ #define MAX_CUBE_REFLECTIONS (64) // -// UnityEngine.Rendering.HighDefinition.EnvLightReflectionDataRT: static fields +// UnityEngine.Rendering.HighDefinition.WorldEnvLightReflectionData: static fields // #define MAX_PLANAR_REFLECTIONS (16) #define MAX_CUBE_REFLECTIONS (64) @@ -161,14 +161,6 @@ CBUFFER_START(EnvLightReflectionData) float4 _CubeScaleOffset[64]; CBUFFER_END -// Generated from UnityEngine.Rendering.HighDefinition.EnvLightReflectionDataRT -// PackingRules = Exact -GLOBAL_CBUFFER_START(EnvLightReflectionDataRT, b5) - float4x4 _PlanarCaptureVPRT[16]; - float4 _PlanarScaleOffsetRT[16]; - float4 _CubeScaleOffsetRT[64]; -CBUFFER_END - // Generated from UnityEngine.Rendering.HighDefinition.LightData // PackingRules = Exact struct LightData @@ -209,5 +201,13 @@ struct LightData float boxLightSafeExtent; }; +// Generated from UnityEngine.Rendering.HighDefinition.WorldEnvLightReflectionData +// PackingRules = Exact +GLOBAL_CBUFFER_START(WorldEnvLightReflectionData, b5) + float4x4 _PlanarCaptureVPWL[16]; + float4 _PlanarScaleOffsetWL[16]; + float4 _CubeScaleOffsetWL[64]; +CBUFFER_END + #endif diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs index e18724f72ca..0f9ff675383 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs @@ -85,6 +85,17 @@ internal enum LightFeatureFlags // If adding more light be sure to not overflow LightDefinitions.s_LightFeatureMaskFlags } + [GenerateHLSL] + internal enum WorldLightFlags : uint + { + None = 0u, + Active = 1u, + Raytracing = 2u, + Pathtracing = 4u, + ActiveRaytracing = Active | Raytracing, + ActivePathtracing = Active | Pathtracing, + } + [GenerateHLSL] class LightDefinitions { @@ -1392,22 +1403,6 @@ internal static void EvaluateGPULightType(LightType lightType, ref LightCategory } } - bool TrivialRejectLight(in VisibleLight light, Light lightComponent, int pixelCount, in AOVRequestData aovRequest) - { - // We can skip the processing of lights that are so small to not affect at least a pixel on screen. - // TODO: The minimum pixel size on screen should really be exposed as parameter, to allow small lights to be culled to user's taste. - const int minimumPixelAreaOnScreen = 1; - if ((light.screenRect.height * light.screenRect.width * pixelCount) < minimumPixelAreaOnScreen) - { - return true; - } - - if (lightComponent != null && !aovRequest.IsLightEnabled(lightComponent.gameObject)) - return true; - - return false; - } - private static void CullShadowCasters(ScriptableRenderContext renderContext, in HDShadowInitParameters hdShadowInitParams, HDShadowManager shadowManager, @@ -1478,7 +1473,7 @@ void PreprocessVisibleLights(ScriptableRenderContext renderContext, CommandBuffe for (int i = 0; i < visibleLightCounts; ++i) { uint sortKey = m_ProcessedLightsBuilder.sortKeys[i]; - HDGpuLightsBuilder.UnpackLightSortKey(sortKey, out var _, out var _, out var _, out var lightIndex); + HDGpuLightsBuilder.UnpackLightSortKey(sortKey, out var _, out var _, out var _, out var lightIndex, out var _); HDProcessedVisibleLight processedLightEntity = m_ProcessedLightsBuilder.processedEntities[lightIndex]; HDAdditionalLightData additionalLightData = lightEntities.hdAdditionalLightData[processedLightEntity.dataIndex]; if (additionalLightData == null) @@ -2018,10 +2013,17 @@ unsafe void UpdateShaderVariablesGlobalLightLoop(ref ShaderVariablesGlobal cb, H cb._EnvSliceSize = m_TextureCaches.reflectionProbeTextureCache.GetEnvSliceSize(); // Light info + cb._DirectionalLightCount = (uint)m_GpuLightsBuilder.directionalLightCount; cb._PunctualLightCount = (uint)m_GpuLightsBuilder.punctualLightCount; cb._AreaLightCount = (uint)m_GpuLightsBuilder.areaLightCount; cb._EnvLightCount = (uint)m_lightList.envLights.Count; - cb._DirectionalLightCount = (uint)m_GpuLightsBuilder.directionalLightCount; + + // TODO-WL: Directional lights? + cb._WorldDirectionalLightCount = 0u; + cb._WorldPunctualLightCount = (uint)m_WorldLights.pointLightCount; + cb._WorldAreaLightCount = (uint)m_WorldLights.rectLightCount; + cb._WorldEnvLightCount = (uint)m_WorldLights.envLightCount; + cb._DecalCount = (uint)DecalSystem.m_DecalDatasCount; HDAdditionalLightData sunLightData = GetHDAdditionalLightData(m_CurrentSunLight); bool sunLightShadow = sunLightData != null && m_CurrentShadowSortedSunLightIndex >= 0; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs.hlsl index 94f5ce8ea16..bc3e005fb2b 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.cs.hlsl @@ -38,6 +38,16 @@ #define LIGHTVOLUMETYPE_BOX (2) #define LIGHTVOLUMETYPE_COUNT (3) +// +// UnityEngine.Rendering.HighDefinition.WorldLightFlags: static fields +// +#define WORLDLIGHTFLAGS_NONE (0) +#define WORLDLIGHTFLAGS_ACTIVE (1) +#define WORLDLIGHTFLAGS_RAYTRACING (2) +#define WORLDLIGHTFLAGS_PATHTRACING (4) +#define WORLDLIGHTFLAGS_ACTIVE_RAYTRACING (3) +#define WORLDLIGHTFLAGS_ACTIVE_PATHTRACING (5) + // // UnityEngine.Rendering.HighDefinition.LightDefinitions: static fields // diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoopDef.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoopDef.hlsl index 3c4729daa7c..f56bc1aa10b 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoopDef.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoopDef.hlsl @@ -7,10 +7,10 @@ #define DWORD_PER_TILE 16 // See dwordsPerTile in LightLoop.cs, we have roomm for 31 lights and a number of light value all store on 16 bit (ushort) // Depending if we are in ray tracing or not we need to use a different set of environement data -#if defined(RAY_TRACING_ENVIRONMENT_DATA) || defined(SHADER_STAGE_RAY_TRACING) -#define PLANAR_CAPTURE_VP _PlanarCaptureVPRT -#define PLANAR_SCALE_OFFSET _PlanarScaleOffsetRT -#define CUBE_SCALE_OFFSET _CubeScaleOffsetRT +#if defined(WORLD_ENVIRONMENT_DATA) || defined(SHADER_STAGE_RAY_TRACING) +#define PLANAR_CAPTURE_VP _PlanarCaptureVPWL +#define PLANAR_SCALE_OFFSET _PlanarScaleOffsetWL +#define CUBE_SCALE_OFFSET _CubeScaleOffsetWL #else #define PLANAR_CAPTURE_VP _PlanarCaptureVP #define PLANAR_SCALE_OFFSET _PlanarScaleOffset diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/ShaderVariablesLightLoop.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/ShaderVariablesLightLoop.hlsl index 8b8d275fed2..ec6c2780ca7 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/ShaderVariablesLightLoop.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/ShaderVariablesLightLoop.hlsl @@ -15,9 +15,14 @@ StructuredBuffer g_logBaseBuffer; StructuredBuffer g_TileFeatureFlags; #endif +// Lights culled from the current camera frustum GLOBAL_RESOURCE(StructuredBuffer, _DirectionalLightDatas, RAY_TRACING_DIRECTIONAL_LIGHT_DATAS_REGISTER); GLOBAL_RESOURCE(StructuredBuffer, _LightDatas, RAY_TRACING_LIGHT_DATAS_REGISTER); -GLOBAL_RESOURCE(StructuredBuffer, _EnvLightDatas, RAY_TRACING_ENV_LIGHT_DATA_REGISTER); +GLOBAL_RESOURCE(StructuredBuffer, _EnvLightDatas, RAY_TRACING_ENV_LIGHT_DATAS_REGISTER); + +// These structures contain all lights enabled in the scene +GLOBAL_RESOURCE(StructuredBuffer, _WorldLightDatas, RAY_TRACING_WORLD_LIGHT_DATAS_REGISTER); +GLOBAL_RESOURCE(StructuredBuffer, _WorldEnvLightDatas, RAY_TRACING_WORLD_ENV_LIGHT_DATAS_REGISTER); // Used by directional and spot lights GLOBAL_TEXTURE2D(_CookieAtlas, RAY_TRACING_COOKIE_ATLAS_REGISTER); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDCachedShadowAtlas.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDCachedShadowAtlas.cs index 793402e4f15..fd5daa2cc6d 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDCachedShadowAtlas.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDCachedShadowAtlas.cs @@ -361,7 +361,7 @@ private unsafe void AddLightListToRecordList(NativeParallelHashMap /// The light that we try to fit in the atlas. /// True if the shadow map would fit in the atlas, false otherwise. If lightData does not cast shadows, false is returned. - public bool WouldFitInAtlas(HDAdditionalLightData lightData) + public bool WouldFitInAtlas(HDAdditionalLightData lightData) { if (lightData.legacyLight.shadows != LightShadows.None) { var lightType = lightData.legacyLight.type; - var resolution = lightData.GetResolutionFromSettings(lightData.GetShadowMapType(lightType), m_InitParams); + var resolution = lightData.GetResolutionFromSettings(lightData.GetShadowMapType(lightType), m_InitParams, cachedResolution: true); return WouldFitInAtlas(resolution, lightType); } return false; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDShadowManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDShadowManager.cs index dee8126fc12..ef78d21bb06 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDShadowManager.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDShadowManager.cs @@ -601,6 +601,7 @@ internal class HDShadowManager { public const int k_DirectionalShadowCascadeCount = 4; public const int k_MinShadowMapResolution = 16; + public const int k_OffscreenShadowMapResolution = 64; public const int k_MaxShadowMapResolution = 16384; List m_ShadowDatas = new List(); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Decal/DecalSystem.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Decal/DecalSystem.cs index f9d744c3a97..c57c011747f 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Decal/DecalSystem.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Decal/DecalSystem.cs @@ -337,6 +337,13 @@ public enum DecalCullingMode private bool m_ShaderGraphSaveRequested = false; #endif + static public int GetDecalCount(HDCamera hdCamera) + { + if ((hdCamera.IsPathTracingEnabled() || hdCamera.IsRayTracingEnabled()) && hdCamera.frameSettings.IsEnabled(FrameSettingsField.Decals)) + return m_DecalDatasCount; + return 0; + } + public Texture2DAtlas Atlas { get diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs index dd2b6b99c80..7bbffd82e2a 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs @@ -382,6 +382,11 @@ void SetHDRState(HDCamera camera) static int s_ColorResolve4XPassIndex; static int s_ColorResolve8XPassIndex; + WorldLights m_WorldLights = new WorldLights(); + WorldLightsGpu m_WorldLightsGpu = new WorldLightsGpu(); + WorldLightsVolumes m_WorldLightsVolumes = new WorldLightsVolumes(); + WorldLightsSettings m_WorldLightsSettings = new WorldLightsSettings(); + internal Material GetMSAAColorResolveMaterial() { return m_ColorResolveMaterial; @@ -984,6 +989,10 @@ protected override void Dispose(bool disposing) ReleasePathTracing(); } + m_WorldLights.Release(); + m_WorldLightsGpu.Release(); + m_WorldLightsVolumes.Release(); + ReleaseRayTracingManager(); #if DEVELOPMENT_BUILD || UNITY_EDITOR @@ -2623,6 +2632,28 @@ AOVRequestData aovRequest } } + Func flagsFunc = delegate (HDCamera hdCamera, HDAdditionalLightData data, Light light) + { + uint result = 0u; + + bool baked = light.bakingOutput.lightmapBakeType == LightmapBakeType.Baked && light.bakingOutput.isBaked; + bool raytracing = hdCamera.frameSettings.IsEnabled(FrameSettingsField.RayTracing) && data.includeForRayTracing; + bool pathtracing = raytracing && hdCamera.volumeStack.GetComponent().enable.value; + + if (raytracing && !baked) + result |= (uint)WorldLightFlags.Raytracing; + if (pathtracing) + result |= (uint)WorldLightFlags.Pathtracing; + + return result; + }; + + m_WorldLightsSettings.enabled = hdCamera.frameSettings.IsEnabled(FrameSettingsField.RayTracing); + + WorldLightManager.CollectWorldLights(hdCamera, m_WorldLightsSettings, flagsFunc, m_WorldLights); + WorldLightManager.BuildWorldLightVolumes(hdCamera, HDRenderPipeline.currentPipeline, m_WorldLights, flagsFunc, m_WorldLightsVolumes); + m_WorldLightsVolumes.Bind(cmd, HDShaderIDs._WorldLightVolumes, HDShaderIDs._WorldLightFlags); + if (m_RayTracingSupported) { // This call need to happen once per camera @@ -2701,6 +2732,9 @@ AOVRequestData aovRequest UpdateGlobalConstantBuffers(hdCamera, cmd); + WorldLightManager.BuildWorldLightDatas(cmd, hdCamera, HDRenderPipeline.currentPipeline, m_WorldLights, m_WorldLightsGpu); + m_WorldLightsGpu.Bind(cmd, HDShaderIDs._WorldLightDatas, HDShaderIDs._WorldEnvLightDatas); + // Do the same for ray tracing if allowed if (m_RayTracingSupported) { diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDStringConstants.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDStringConstants.cs index be20720d1fc..2f0940294fb 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDStringConstants.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDStringConstants.cs @@ -200,9 +200,13 @@ static class HDShaderIDs public static readonly int _DirectionalLightDatas = Shader.PropertyToID("_DirectionalLightDatas"); public static readonly int _LightDatas = Shader.PropertyToID("_LightDatas"); public static readonly int _EnvLightDatas = Shader.PropertyToID("_EnvLightDatas"); + public static readonly int _WorldLightDatas = Shader.PropertyToID("_WorldLightDatas"); + public static readonly int _WorldEnvLightDatas = Shader.PropertyToID("_WorldEnvLightDatas"); + public static readonly int _WorldLightVolumes = Shader.PropertyToID("_WorldLightVolumes"); + public static readonly int _WorldLightFlags = Shader.PropertyToID("_WorldLightFlags"); public static readonly int _AmbientProbeData = Shader.PropertyToID("_AmbientProbeData"); public static readonly int _EnvLightReflectionData = Shader.PropertyToID("EnvLightReflectionData"); - public static readonly int _EnvLightReflectionDataRT = Shader.PropertyToID("EnvLightReflectionDataRT"); + public static readonly int _WorldEnvLightReflectionData = Shader.PropertyToID("WorldEnvLightReflectionData"); public static readonly int _ProbeVolumeBounds = Shader.PropertyToID("_ProbeVolumeBounds"); public static readonly int _ProbeVolumeDatas = Shader.PropertyToID("_ProbeVolumeDatas"); @@ -741,8 +745,6 @@ static class HDShaderIDs public static readonly int _MotionVectorAOV = Shader.PropertyToID("_MotionVectorAOV"); // Light Cluster - public static readonly int _LightDatasRT = Shader.PropertyToID("_LightDatasRT"); - public static readonly int _EnvLightDatasRT = Shader.PropertyToID("_EnvLightDatasRT"); public static readonly int _RaytracingLightCluster = Shader.PropertyToID("_RaytracingLightCluster"); public static readonly int _RaytracingLightClusterRW = Shader.PropertyToID("_RaytracingLightClusterRW"); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/PathTracing.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/PathTracing.cs index 056d6474141..54fd23ec458 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/PathTracing.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/PathTracing.cs @@ -443,9 +443,9 @@ private CameraData CheckDirtiness(HDCamera hdCamera, int camID, CameraData camDa } // Check lights dirtiness - if (m_CacheLightCount != m_RayTracingLights.lightCount) + if (m_CacheLightCount != m_WorldLights.totalLighttCount) { - m_CacheLightCount = (uint)m_RayTracingLights.lightCount; + m_CacheLightCount = (uint)m_WorldLights.totalLighttCount; isSceneDirty = true; } @@ -587,7 +587,6 @@ void RenderPathTracingFrame(RenderGraph renderGraph, HDCamera hdCamera, in Camer // LightLoop data ctx.cmd.SetGlobalBuffer(HDShaderIDs._RaytracingLightCluster, data.lightCluster.GetCluster()); - ctx.cmd.SetGlobalBuffer(HDShaderIDs._LightDatasRT, data.lightCluster.GetLightDatas()); // Global sky data ctx.cmd.SetGlobalInt(HDShaderIDs._PathTracingCameraSkyEnabled, data.cameraData.skyEnabled ? 1 : 0); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingLight.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingLight.hlsl index 18413ff15ed..86863c147de 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingLight.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/PathTracing/Shaders/PathTracingLight.hlsl @@ -153,8 +153,8 @@ LightList CreateLightList(float3 position, float3 normal, uint lightLayers = REN localCount = 0; } #else - localPointCount = _PunctualLightCountRT; - localCount = _PunctualLightCountRT + _AreaLightCountRT; + localPointCount = _WorldPunctualLightCount; + localCount = _WorldPunctualLightCount + _WorldAreaLightCount; #endif // Do we have an imposed local light (identificed by position), for volumetric scattering? @@ -168,7 +168,7 @@ LightList CreateLightList(float3 position, float3 normal, uint lightLayers = REN #ifdef USE_LIGHT_CLUSTER const LightData lightData = FetchClusterLightIndex(list.cellIndex, i); #else - const LightData lightData = _LightDatasRT[i]; + const LightData lightData = _WorldLightDatas[i]; #endif if (forceLightPosition && any(lightPosition - lightData.positionRWS)) @@ -189,7 +189,7 @@ LightList CreateLightList(float3 position, float3 normal, uint lightLayers = REN #ifdef USE_LIGHT_CLUSTER const LightData lightData = FetchClusterLightIndex(list.cellIndex, i); #else - const LightData lightData = _LightDatasRT[i]; + const LightData lightData = _WorldLightDatas[i]; #endif if (forceLightPosition && any(lightPosition - lightData.positionRWS)) @@ -235,7 +235,7 @@ LightData GetLocalLightData(LightList list, uint i) #ifdef USE_LIGHT_CLUSTER return FetchClusterLightIndex(list.cellIndex, list.localIndex[i]); #else - return _LightDatasRT[list.localIndex[i]]; + return _WorldLightDatas[list.localIndex[i]]; #endif } @@ -1053,10 +1053,10 @@ bool GetPointLightInterval(LightData lightData, float3 rayOrigin, float3 rayDire // float tLightMin, tLightMax; // // First process point lights -// uint i = 0, n = _PunctualLightCountRT, localCount = 0; +// uint i = 0, n = _WorldPunctualLightCount, localCount = 0; // for (; i < n; i++) // { -// if (GetPointLightInterval(_LightDatasRT[i], rayOrigin, rayDirection, tLightMin, tLightMax)) +// if (GetPointLightInterval(_WorldLightDatas[i], rayOrigin, rayDirection, tLightMin, tLightMax)) // { // tMin = min(tMin, tLightMin); // tMax = max(tMax, tLightMax); @@ -1065,10 +1065,10 @@ bool GetPointLightInterval(LightData lightData, float3 rayOrigin, float3 rayDire // } // // Then area lights -// n += _AreaLightCountRT; +// n += _WorldAreaLightCount; // for (; i < n; i++) // { -// if (GetRectAreaLightInterval(_LightDatasRT[i], rayOrigin, rayDirection, tLightMin, tLightMax)) +// if (GetRectAreaLightInterval(_WorldLightDatas[i], rayOrigin, rayDirection, tLightMin, tLightMax)) // { // tMin = min(tMin, tLightMin); // tMax = max(tMax, tLightMax); @@ -1102,12 +1102,12 @@ float PickLocalLightInterval(float3 rayOrigin, float3 rayDirection, inout float float wLight, wSum = 0.0; // First process point lights - uint i = 0, n = _PunctualLightCountRT, localCount = 0; + uint i = 0, n = _WorldPunctualLightCount, localCount = 0; for (; i < n; i++) { - if (GetPointLightInterval(_LightDatasRT[i], rayOrigin, rayDirection, tLightMin, tLightMax)) + if (GetPointLightInterval(_WorldLightDatas[i], rayOrigin, rayDirection, tLightMin, tLightMax)) { - wLight = GetLocalLightWeight(_LightDatasRT[i], rayOrigin, rayDirection, tLightMin, tLightMax); + wLight = GetLocalLightWeight(_WorldLightDatas[i], rayOrigin, rayDirection, tLightMin, tLightMax); if (wLight > 0.0) { @@ -1116,7 +1116,7 @@ float PickLocalLightInterval(float3 rayOrigin, float3 rayDirection, inout float if (inputSample < wLight) { - lightPosition = _LightDatasRT[i].positionRWS; + lightPosition = _WorldLightDatas[i].positionRWS; lightWeight = wLight; tMin = tLightMin; tMax = tLightMax; @@ -1136,12 +1136,12 @@ float PickLocalLightInterval(float3 rayOrigin, float3 rayDirection, inout float } // Then area lights - n += _AreaLightCountRT; + n += _WorldAreaLightCount; for (; i < n; i++) { - if (GetRectAreaLightInterval(_LightDatasRT[i], rayOrigin, rayDirection, tLightMin, tLightMax)) + if (GetRectAreaLightInterval(_WorldLightDatas[i], rayOrigin, rayDirection, tLightMin, tLightMax)) { - wLight = GetLocalLightWeight(_LightDatasRT[i], rayOrigin, rayDirection, tLightMin, tLightMax); + wLight = GetLocalLightWeight(_WorldLightDatas[i], rayOrigin, rayDirection, tLightMin, tLightMax); if (wLight > 0.0) { @@ -1150,7 +1150,7 @@ float PickLocalLightInterval(float3 rayOrigin, float3 rayDirection, inout float if (inputSample < wLight) { - lightPosition = _LightDatasRT[i].positionRWS; + lightPosition = _WorldLightDatas[i].positionRWS; lightWeight = wLight; tMin = tLightMin; tMax = tLightMax; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs index 34fba9d4c1d..b801b212cdd 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs @@ -4,17 +4,6 @@ namespace UnityEngine.Rendering.HighDefinition { - [GenerateHLSL(PackingRules.Exact, false)] - struct LightVolume - { - public int active; - public int shape; - public Vector3 position; - public Vector3 range; - public uint lightType; - public uint lightIndex; - } - class HDRaytracingLightCluster { // External data @@ -22,23 +11,14 @@ class HDRaytracingLightCluster HDRenderPipelineRayTracingResources m_RenderPipelineRayTracingResources = null; HDRenderPipeline m_RenderPipeline = null; - // Light Culling data - LightVolume[] m_LightVolumesCPUArray = null; - ComputeBuffer m_LightVolumeGPUArray = null; - // Culling result GraphicsBuffer m_LightCullResult = null; // Output cluster data GraphicsBuffer m_LightCluster = null; - // Light runtime data - List m_LightDataCPUArray = new List(); - GraphicsBuffer m_LightDataGPUArray = null; - - // Env Light data - List m_EnvLightDataCPUArray = new List(); - GraphicsBuffer m_EnvLightDataGPUArray = null; + // World light subset used for ray tracing + WorldLightSubSet m_WorldLightSubSet = new WorldLightSubSet(); // Light cluster debug material Material m_DebugMaterial = null; @@ -49,7 +29,9 @@ class HDRaytracingLightCluster public static readonly int _ClusterCellSize = Shader.PropertyToID("_ClusterCellSize"); public static readonly int _LightVolumes = Shader.PropertyToID("_LightVolumes"); + public static readonly int _LightSubSet = Shader.PropertyToID("_LightSubSet"); public static readonly int _LightVolumeCount = Shader.PropertyToID("_LightVolumeCount"); + public static readonly int _LightSubSetCount = Shader.PropertyToID("_LightSubSetCount"); public static readonly int _DebugColorGradientTexture = Shader.PropertyToID("_DebugColorGradientTexture"); public static readonly int _DebutLightClusterTexture = Shader.PropertyToID("_DebutLightClusterTexture"); public static readonly int _RaytracingLightCullResult = Shader.PropertyToID("_RaytracingLightCullResult"); @@ -67,15 +49,9 @@ class HDRaytracingLightCluster Vector3 clusterCellSize = new Vector3(0.0f, 0.0f, 0.0f); Vector3 clusterCenter = new Vector3(0.0f, 0.0f, 0.0f); Vector3 clusterDimension = new Vector3(0.0f, 0.0f, 0.0f); - int punctualLightCount = 0; - int areaLightCount = 0; - int envLightCount = 0; - int totalLightCount = 0; - Bounds bounds = new Bounds(); + Vector3 minBounds = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); Vector3 maxBounds = new Vector3(-float.MaxValue, -float.MaxValue, -float.MaxValue); - Matrix4x4 localToWorldMatrix = new Matrix4x4(); - VisibleLight visibleLight = new VisibleLight(); Light lightComponent; public void Initialize(HDRenderPipeline renderPipeline) @@ -87,10 +63,6 @@ public void Initialize(HDRenderPipeline renderPipeline) // Keep track of the render pipeline m_RenderPipeline = renderPipeline; - // Pre allocate the cluster with a dummy size - m_LightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, System.Runtime.InteropServices.Marshal.SizeOf(typeof(LightData))); - m_EnvLightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, System.Runtime.InteropServices.Marshal.SizeOf(typeof(EnvLightData))); - // Allocate the light cluster buffer at the right size m_NumLightsPerCell = renderPipeline.asset.currentPlatformRenderPipelineSettings.lightLoopSettings.maxLightsPerClusterCell; int bufferSize = 64 * 64 * 32 * (m_NumLightsPerCell + 5); // This +5 is to account for the meta data in each cluster cell. @@ -102,23 +74,16 @@ public void Initialize(HDRenderPipeline renderPipeline) public void ReleaseResources() { - CoreUtils.SafeRelease(m_LightVolumeGPUArray); - m_LightVolumeGPUArray = null; - CoreUtils.SafeRelease(m_LightCluster); m_LightCluster = null; CoreUtils.SafeRelease(m_LightCullResult); m_LightCullResult = null; - CoreUtils.SafeRelease(m_LightDataGPUArray); - m_LightDataGPUArray = null; - - CoreUtils.SafeRelease(m_EnvLightDataGPUArray); - m_EnvLightDataGPUArray = null; - CoreUtils.Destroy(m_DebugMaterial); m_DebugMaterial = null; + + m_WorldLightSubSet.Release(); } void ResizeClusterBuffer(int bufferSize) @@ -161,268 +126,7 @@ void ResizeCullResultBuffer(int numLights) } } - void ResizeVolumeBuffer(int numLights) - { - // Release the previous buffer - if (m_LightVolumeGPUArray != null) - { - // If it is not null and it has already the right size, we are pretty much done - if (m_LightVolumeGPUArray.count == numLights) - return; - - CoreUtils.SafeRelease(m_LightVolumeGPUArray); - m_LightVolumeGPUArray = null; - } - - // Allocate the next buffer buffer - if (numLights > 0) - { - m_LightVolumesCPUArray = new LightVolume[numLights]; - m_LightVolumeGPUArray = new ComputeBuffer(numLights, System.Runtime.InteropServices.Marshal.SizeOf(typeof(LightVolume))); - } - } - - void ResizeLightDataBuffer(int numLights) - { - // Release the previous buffer - if (m_LightDataGPUArray != null) - { - // If it is not null and it has already the right size, we are pretty much done - if (m_LightDataGPUArray.count == numLights) - return; - - // It is not the right size, free it to be reallocated - CoreUtils.SafeRelease(m_LightDataGPUArray); - m_LightDataGPUArray = null; - } - - // Allocate the next buffer buffer - if (numLights > 0) - { - m_LightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numLights, System.Runtime.InteropServices.Marshal.SizeOf(typeof(LightData))); - } - } - - void ResizeEnvLightDataBuffer(int numEnvLights) - { - // Release the previous buffer - if (m_EnvLightDataGPUArray != null) - { - // If it is not null and it has already the right size, we are pretty much done - if (m_EnvLightDataGPUArray.count == numEnvLights) - return; - - CoreUtils.SafeRelease(m_EnvLightDataGPUArray); - m_EnvLightDataGPUArray = null; - } - - // Allocate the next buffer buffer - if (numEnvLights > 0) - { - m_EnvLightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numEnvLights, System.Runtime.InteropServices.Marshal.SizeOf(typeof(EnvLightData))); - } - } - - void OOBBToAABBBounds(Vector3 centerWS, Vector3 extents, Vector3 up, Vector3 right, Vector3 forward, ref Bounds outBounds) - { - // Reset the bounds of the AABB - bounds.min = minBounds; - bounds.max = maxBounds; - - // Push the 8 corners of the oobb into the AABB - bounds.Encapsulate(centerWS + right * extents.x + up * extents.y + forward * extents.z); - bounds.Encapsulate(centerWS + right * extents.x + up * extents.y - forward * extents.z); - bounds.Encapsulate(centerWS + right * extents.x - up * extents.y + forward * extents.z); - bounds.Encapsulate(centerWS + right * extents.x - up * extents.y - forward * extents.z); - bounds.Encapsulate(centerWS - right * extents.x + up * extents.y + forward * extents.z); - bounds.Encapsulate(centerWS - right * extents.x + up * extents.y - forward * extents.z); - bounds.Encapsulate(centerWS - right * extents.x - up * extents.y + forward * extents.z); - bounds.Encapsulate(centerWS - right * extents.x - up * extents.y - forward * extents.z); - } - - void BuildGPULightVolumes(HDCamera hdCamera, HDRayTracingLights rayTracingLights) - { - int totalNumLights = rayTracingLights.lightCount; - // Also count decals to be added to the cluster - int decalCount = GetDecalCount(hdCamera); - totalNumLights += decalCount; - - // Make sure the light volume buffer has the right size - if (m_LightVolumesCPUArray == null || totalNumLights != m_LightVolumesCPUArray.Length) - { - ResizeVolumeBuffer(totalNumLights); - } - - // Set Light volume data to the CPU buffer - punctualLightCount = 0; - areaLightCount = 0; - envLightCount = 0; - totalLightCount = 0; - - int realIndex = 0; - HDLightRenderDatabase lightEntities = HDLightRenderDatabase.instance; - for (int lightIdx = 0; lightIdx < rayTracingLights.hdLightEntityArray.Count; ++lightIdx) - { - int dataIndex = lightEntities.GetEntityDataIndex(rayTracingLights.hdLightEntityArray[lightIdx]); - HDAdditionalLightData currentLight = lightEntities.hdAdditionalLightData[dataIndex]; - - // When the user deletes a light source in the editor, there is a single frame where the light is null before the collection of light in the scene is triggered - // the workaround for this is simply to not add it if it is null for that invalid frame - if (currentLight != null) - { - Light light = currentLight.gameObject.GetComponent(); - if (light == null) - continue; - - var lightType = currentLight.legacyLight.type; - // Reserve space in the cookie atlas - m_RenderPipeline.ReserveCookieAtlasTexture(currentLight, light, lightType); - - // Compute the camera relative position - Vector3 lightPositionRWS = currentLight.gameObject.transform.position; - if (ShaderConfig.s_CameraRelativeRendering != 0) - { - lightPositionRWS -= hdCamera.camera.transform.position; - } - - // Grab the light range - float lightRange = light.range; - - // Common volume data - m_LightVolumesCPUArray[realIndex].active = (currentLight.gameObject.activeInHierarchy ? 1 : 0); - m_LightVolumesCPUArray[realIndex].lightIndex = (uint)lightIdx; - - bool isAreaLight = lightType.IsArea(); - bool isBoxLight = lightType == LightType.Box; - - if (!isAreaLight && !isBoxLight) - { - m_LightVolumesCPUArray[realIndex].range = new Vector3(lightRange, lightRange, lightRange); - m_LightVolumesCPUArray[realIndex].position = lightPositionRWS; - m_LightVolumesCPUArray[realIndex].shape = 0; - m_LightVolumesCPUArray[realIndex].lightType = 0; - punctualLightCount++; - } - // Area lights and box spot lights require AABB intersection data - else - { - // let's compute the oobb of the light influence volume first - Vector3 oobbDimensions = new Vector3(currentLight.shapeWidth + 2 * lightRange, currentLight.shapeHeight + 2 * lightRange, lightRange); // One-sided - Vector3 extents = 0.5f * oobbDimensions; - Vector3 oobbCenter = lightPositionRWS; - - // Tube lights don't have forward / backward facing and have full extents on all directions as a consequence, since their OOBB is centered - if (lightType == LightType.Tube) - { - oobbDimensions.z *= 2; - extents.z *= 2; - } - else - { - oobbCenter += extents.z * currentLight.gameObject.transform.forward; - } - - // Let's now compute an AABB that matches the previously defined OOBB - OOBBToAABBBounds(oobbCenter, extents, currentLight.gameObject.transform.up, currentLight.gameObject.transform.right, currentLight.gameObject.transform.forward, ref bounds); - - // Fill the volume data - m_LightVolumesCPUArray[realIndex].range = bounds.extents; - m_LightVolumesCPUArray[realIndex].position = bounds.center; - m_LightVolumesCPUArray[realIndex].shape = 1; - if (isAreaLight) - { - m_LightVolumesCPUArray[realIndex].lightType = 1; - areaLightCount++; - } - else - { - m_LightVolumesCPUArray[realIndex].lightType = 0; - punctualLightCount++; - } - } - realIndex++; - } - } - - int indexOffset = realIndex; - - // Set Env Light volume data to the CPU buffer - if(!hdCamera.IsPathTracingEnabled()) // We don't use these in path tracing - { - for (int lightIdx = 0; lightIdx < rayTracingLights.reflectionProbeArray.Count; ++lightIdx) - { - HDProbe currentEnvLight = rayTracingLights.reflectionProbeArray[lightIdx]; - - - if (currentEnvLight != null) - { - // If the reflection probe is disabled, we should not be adding it - if (!currentEnvLight.enabled) - continue; - - // If the reflection probe is not baked yet. - if (!currentEnvLight.HasValidRenderedData()) - continue; - - // Compute the camera relative position - Vector3 probePositionRWS = currentEnvLight.influenceToWorld.GetColumn(3); - if (ShaderConfig.s_CameraRelativeRendering != 0) - { - probePositionRWS -= hdCamera.camera.transform.position; - } - - if (currentEnvLight.influenceVolume.shape == InfluenceShape.Sphere) - { - m_LightVolumesCPUArray[lightIdx + indexOffset].shape = 0; - m_LightVolumesCPUArray[lightIdx + indexOffset].range = new Vector3(currentEnvLight.influenceVolume.sphereRadius, currentEnvLight.influenceVolume.sphereRadius, currentEnvLight.influenceVolume.sphereRadius); - m_LightVolumesCPUArray[lightIdx + indexOffset].position = probePositionRWS; - } - else - { - m_LightVolumesCPUArray[lightIdx + indexOffset].shape = 1; - m_LightVolumesCPUArray[lightIdx + indexOffset].range = new Vector3(currentEnvLight.influenceVolume.boxSize.x / 2.0f, currentEnvLight.influenceVolume.boxSize.y / 2.0f, currentEnvLight.influenceVolume.boxSize.z / 2.0f); - m_LightVolumesCPUArray[lightIdx + indexOffset].position = probePositionRWS; - } - m_LightVolumesCPUArray[lightIdx + indexOffset].active = (currentEnvLight.gameObject.activeInHierarchy ? 1 : 0); - m_LightVolumesCPUArray[lightIdx + indexOffset].lightIndex = (uint)lightIdx; - m_LightVolumesCPUArray[lightIdx + indexOffset].lightType = 2; - envLightCount++; - realIndex++; - } - } - } - - if (hdCamera.frameSettings.IsEnabled(FrameSettingsField.Decals)) - { - indexOffset = realIndex; - - // Add Decal data to m_lightVolumesCPUArray - for (int decalIdx = 0; decalIdx < decalCount; ++decalIdx) - { - // Decal projectors are box shaped - m_LightVolumesCPUArray[decalIdx + indexOffset].shape = 1; - - // Compute the camera relative position - Vector3 decalPositionRWS = DecalSystem.instance.GetClusteredDecalPosition(decalIdx); - if (ShaderConfig.s_CameraRelativeRendering != 0) - { - decalPositionRWS -= hdCamera.camera.transform.position; - } - m_LightVolumesCPUArray[decalIdx + indexOffset].position = decalPositionRWS; - m_LightVolumesCPUArray[decalIdx + indexOffset].range = DecalSystem.instance.GetClusteredDecalRange(decalIdx); - m_LightVolumesCPUArray[decalIdx + indexOffset].active = 1; - m_LightVolumesCPUArray[decalIdx + indexOffset].lightIndex = (uint)decalIdx; - m_LightVolumesCPUArray[decalIdx + indexOffset].lightType = 3; - } - } - - totalLightCount = punctualLightCount + areaLightCount + envLightCount + decalCount; - - // Push the light volumes to the GPU - m_LightVolumeGPUArray.SetData(m_LightVolumesCPUArray); - } - - void EvaluateClusterVolume(HDCamera hdCamera) + void EvaluateClusterVolume(HDCamera hdCamera, in WorldLightSubSet subset) { var settings = hdCamera.volumeStack.GetComponent(); @@ -431,19 +135,8 @@ void EvaluateClusterVolume(HDCamera hdCamera) else clusterCenter = hdCamera.camera.gameObject.transform.position; - minClusterPos.Set(float.MaxValue, float.MaxValue, float.MaxValue); - maxClusterPos.Set(-float.MaxValue, -float.MaxValue, -float.MaxValue); - - for (int lightIdx = 0; lightIdx < totalLightCount; ++lightIdx) - { - minClusterPos.x = Mathf.Min(m_LightVolumesCPUArray[lightIdx].position.x - m_LightVolumesCPUArray[lightIdx].range.x, minClusterPos.x); - minClusterPos.y = Mathf.Min(m_LightVolumesCPUArray[lightIdx].position.y - m_LightVolumesCPUArray[lightIdx].range.y, minClusterPos.y); - minClusterPos.z = Mathf.Min(m_LightVolumesCPUArray[lightIdx].position.z - m_LightVolumesCPUArray[lightIdx].range.z, minClusterPos.z); - - maxClusterPos.x = Mathf.Max(m_LightVolumesCPUArray[lightIdx].position.x + m_LightVolumesCPUArray[lightIdx].range.x, maxClusterPos.x); - maxClusterPos.y = Mathf.Max(m_LightVolumesCPUArray[lightIdx].position.y + m_LightVolumesCPUArray[lightIdx].range.y, maxClusterPos.y); - maxClusterPos.z = Mathf.Max(m_LightVolumesCPUArray[lightIdx].position.z + m_LightVolumesCPUArray[lightIdx].range.z, maxClusterPos.z); - } + minClusterPos = subset.bounds.min; + maxClusterPos = subset.bounds.max; float cameraClusterRange; if (hdCamera.IsPathTracingEnabled()) @@ -474,10 +167,12 @@ void EvaluateClusterVolume(HDCamera hdCamera) clusterDimension = (maxClusterPos - minClusterPos); } - void CullLights(CommandBuffer cmd) + void CullLights(CommandBuffer cmd, WorldLightsVolumes worldLightsVolumes) { using (new ProfilingScope(cmd, ProfilingSampler.Get(HDProfileId.RaytracingCullLights))) { + int totalLightCount = worldLightsVolumes.GetCount(); + // Make sure the culling buffer has the right size if (m_LightCullResult == null || m_LightCullResult.count != totalLightCount) { @@ -494,7 +189,7 @@ void CullLights(CommandBuffer cmd) cmd.SetComputeVectorParam(lightClusterCS, _ClusterDimension, clusterDimension); cmd.SetComputeIntParam(lightClusterCS, _LightVolumeCount, totalLightCount); - cmd.SetComputeBufferParam(lightClusterCS, lightClusterCullKernel, _LightVolumes, m_LightVolumeGPUArray); + cmd.SetComputeBufferParam(lightClusterCS, lightClusterCullKernel, _LightVolumes, worldLightsVolumes.GetBuffer()); cmd.SetComputeBufferParam(lightClusterCS, lightClusterCullKernel, _RaytracingLightCullResult, m_LightCullResult); // Dispatch a compute @@ -503,7 +198,7 @@ void CullLights(CommandBuffer cmd) } } - void BuildLightCluster(HDCamera hdCamera, CommandBuffer cmd) + void BuildLightCluster(HDCamera hdCamera, CommandBuffer cmd, WorldLightsVolumes worldLightsVolumes, WorldLightSubSet worldLightSubSet) { using (new ProfilingScope(cmd, ProfilingSampler.Get(HDProfileId.RaytracingBuildCluster))) { @@ -515,8 +210,10 @@ void BuildLightCluster(HDCamera hdCamera, CommandBuffer cmd) cmd.SetComputeBufferParam(lightClusterCS, lightClusterKernel, HDShaderIDs._RaytracingLightClusterRW, m_LightCluster); cmd.SetComputeVectorParam(lightClusterCS, _ClusterCellSize, clusterCellSize); - cmd.SetComputeBufferParam(lightClusterCS, lightClusterKernel, _LightVolumes, m_LightVolumeGPUArray); - cmd.SetComputeIntParam(lightClusterCS, _LightVolumeCount, totalLightCount); + cmd.SetComputeBufferParam(lightClusterCS, lightClusterKernel, _LightVolumes, worldLightsVolumes.GetBuffer()); + cmd.SetComputeBufferParam(lightClusterCS, lightClusterKernel, _LightSubSet, worldLightSubSet.GetBuffer()); + cmd.SetComputeIntParam(lightClusterCS, _LightVolumeCount, worldLightsVolumes.GetCount()); + cmd.SetComputeIntParam(lightClusterCS, _LightSubSetCount, worldLightSubSet.GetCount()); cmd.SetComputeBufferParam(lightClusterCS, lightClusterKernel, _RaytracingLightCullResult, m_LightCullResult); // Dispatch a compute @@ -527,184 +224,6 @@ void BuildLightCluster(HDCamera hdCamera, CommandBuffer cmd) } } - void BuildLightData(CommandBuffer cmd, HDCamera hdCamera, HDRayTracingLights rayTracingLights) - { - // If no lights, exit - if (rayTracingLights.lightCount == 0) - { - ResizeLightDataBuffer(1); - return; - } - - // Also we need to build the light list data - if (m_LightDataGPUArray == null || m_LightDataGPUArray.count != rayTracingLights.lightCount) - { - ResizeLightDataBuffer(rayTracingLights.lightCount); - } - - m_LightDataCPUArray.Clear(); - - // Grab the shadow settings - var hdShadowSettings = hdCamera.volumeStack.GetComponent(); - BoolScalableSetting contactShadowScalableSetting = HDAdditionalLightData.ScalableSettings.UseContactShadow(m_RenderPipeline.asset); - - // Build the data for every light - HDLightRenderDatabase lightEntities = HDLightRenderDatabase.instance; - var processedLightEntity = new HDProcessedVisibleLight() - { - shadowMapFlags = HDProcessedVisibleLightsBuilder.ShadowMapFlags.None - }; - - var globalConfig = HDGpuLightsBuilder.CreateGpuLightDataJobGlobalConfig.Create(hdCamera, hdShadowSettings); - var shadowInitParams = m_RenderPipeline.currentPlatformRenderPipelineSettings.hdShadowInitParams; - - for (int lightIdx = 0; lightIdx < rayTracingLights.hdLightEntityArray.Count; ++lightIdx) - { - // Grab the additinal light data to process - int dataIndex = lightEntities.GetEntityDataIndex(rayTracingLights.hdLightEntityArray[lightIdx]); - HDAdditionalLightData additionalLightData = lightEntities.hdAdditionalLightData[dataIndex]; - - LightData lightData = new LightData(); - // When the user deletes a light source in the editor, there is a single frame where the light is null before the collection of light in the scene is triggered - // the workaround for this is simply to add an invalid light for that frame - if (additionalLightData == null) - { - m_LightDataCPUArray.Add(lightData); - continue; - } - - // Evaluate all the light type data that we need - LightCategory lightCategory = LightCategory.Count; - GPULightType gpuLightType = GPULightType.Point; - LightVolumeType lightVolumeType = LightVolumeType.Count; - LightType lightType = additionalLightData.legacyLight.type; - HDRenderPipeline.EvaluateGPULightType(lightType, ref lightCategory, ref gpuLightType, ref lightVolumeType); - - // Fetch the light component for this light - additionalLightData.gameObject.TryGetComponent(out lightComponent); - - ref HDLightRenderData lightRenderData = ref lightEntities.GetLightDataAsRef(dataIndex); - - // Build the processed light data that we need - processedLightEntity.dataIndex = dataIndex; - processedLightEntity.gpuLightType = gpuLightType; - processedLightEntity.lightType = additionalLightData.legacyLight.type; - processedLightEntity.distanceToCamera = (additionalLightData.transform.position - hdCamera.camera.transform.position).magnitude; - processedLightEntity.lightDistanceFade = HDUtils.ComputeLinearDistanceFade(processedLightEntity.distanceToCamera, lightRenderData.fadeDistance); - processedLightEntity.lightVolumetricDistanceFade = HDUtils.ComputeLinearDistanceFade(processedLightEntity.distanceToCamera, lightRenderData.volumetricFadeDistance); - processedLightEntity.isBakedShadowMask = HDRenderPipeline.IsBakedShadowMaskLight(lightComponent); - - // Build a visible light - visibleLight.finalColor = LightUtils.EvaluateLightColor(lightComponent, additionalLightData); - visibleLight.range = lightComponent.range; - // This should be done explicitly, localToWorld matrix doesn't work here - localToWorldMatrix.SetColumn(3, lightComponent.gameObject.transform.position); - localToWorldMatrix.SetColumn(2, lightComponent.transform.forward); - localToWorldMatrix.SetColumn(1, lightComponent.transform.up); - localToWorldMatrix.SetColumn(0, lightComponent.transform.right); - visibleLight.localToWorldMatrix = localToWorldMatrix; - visibleLight.spotAngle = lightComponent.spotAngle; - - int shadowIndex = additionalLightData.shadowIndex; - Vector3 lightDimensions = new Vector3(0.0f, 0.0f, 0.0f); - - // Use the shared code to build the light data - HDGpuLightsBuilder.CreateGpuLightDataJob.ConvertLightToGPUFormat( - lightCategory, gpuLightType, globalConfig, - lightComponent.lightShadowCasterMode, lightComponent.bakingOutput, - visibleLight, processedLightEntity, lightRenderData, out var _, ref lightData); - m_RenderPipeline.gpuLightList.ProcessLightDataShadowIndex(cmd, shadowInitParams, lightType, lightComponent, additionalLightData, shadowIndex, ref lightData); - - // We make the light position camera-relative as late as possible in order - // to allow the preceding code to work with the absolute world space coordinates. - Vector3 camPosWS = hdCamera.mainViewConstants.worldSpaceCameraPos; - HDRenderPipeline.UpdateLightCameraRelativetData(ref lightData, camPosWS); - - // Set the data for this light - m_LightDataCPUArray.Add(lightData); - } - - // Push the data to the GPU - m_LightDataGPUArray.SetData(m_LightDataCPUArray); - } - - internal const int k_MaxPlanarReflectionsOnScreen = 16; - internal const int k_MaxCubeReflectionsOnScreen = 64; - EnvLightReflectionDataRT m_EnvLightReflectionDataRT = new EnvLightReflectionDataRT(); - - unsafe void SetPlanarReflectionDataRT(int index, ref Matrix4x4 vp, ref Vector4 scaleOffset) - { - Debug.Assert(index < k_MaxPlanarReflectionsOnScreen); - - for (int j = 0; j < 16; ++j) - m_EnvLightReflectionDataRT._PlanarCaptureVPRT[index * 16 + j] = vp[j]; - - for (int j = 0; j < 4; ++j) - m_EnvLightReflectionDataRT._PlanarScaleOffsetRT[index * 4 + j] = scaleOffset[j]; - } - - unsafe void SetCubeReflectionDataRT(int index, ref Vector4 scaleOffset) - { - Debug.Assert(index < k_MaxCubeReflectionsOnScreen); - - for (int j = 0; j < 4; ++j) - m_EnvLightReflectionDataRT._CubeScaleOffsetRT[index * 4 + j] = scaleOffset[j]; - } - - void BuildEnvLightData(CommandBuffer cmd, HDCamera hdCamera, HDRayTracingLights lights) - { - int totalReflectionProbes = lights.reflectionProbeArray.Count; - if (totalReflectionProbes == 0) - { - ResizeEnvLightDataBuffer(1); - return; - } - - // Also we need to build the light list data - if (m_EnvLightDataCPUArray == null || m_EnvLightDataGPUArray == null || m_EnvLightDataGPUArray.count != totalReflectionProbes) - { - ResizeEnvLightDataBuffer(totalReflectionProbes); - } - - // Make sure the Cpu list is empty - m_EnvLightDataCPUArray.Clear(); - ProcessedProbeData processedProbe = new ProcessedProbeData(); - - int fetchIndex; - Vector4 scaleOffset; - Matrix4x4 vp; - EnvLightData envLightData = new EnvLightData(); - - // Build the data for every light - for (int lightIdx = 0; lightIdx < lights.reflectionProbeArray.Count; ++lightIdx) - { - HDProbe probeData = lights.reflectionProbeArray[lightIdx]; - - HDRenderPipeline.PreprocessProbeData(ref processedProbe, probeData, hdCamera); - m_RenderPipeline.GetEnvLightData(cmd, hdCamera, processedProbe, ref envLightData, out fetchIndex, out scaleOffset, out vp); - - switch (processedProbe.hdProbe) - { - case PlanarReflectionProbe planarProbe: - SetPlanarReflectionDataRT(fetchIndex, ref vp, ref scaleOffset); - break; - case HDAdditionalReflectionData reflectionData: - SetCubeReflectionDataRT(fetchIndex, ref scaleOffset); - break; - }; - - // We make the light position camera-relative as late as possible in order - // to allow the preceding code to work with the absolute world space coordinates. - Vector3 camPosWS = hdCamera.mainViewConstants.worldSpaceCameraPos; - HDRenderPipeline.UpdateEnvLighCameraRelativetData(ref envLightData, camPosWS); - - m_EnvLightDataCPUArray.Add(envLightData); - } - - // Push the data to the GPU - m_EnvLightDataGPUArray.SetData(m_EnvLightDataCPUArray); - } - class LightClusterDebugPassData { public int texWidth; @@ -791,16 +310,6 @@ public GraphicsBuffer GetCluster() return m_LightCluster; } - public GraphicsBuffer GetLightDatas() - { - return m_LightDataGPUArray; - } - - public GraphicsBuffer GetEnvLightDatas() - { - return m_EnvLightDataGPUArray; - } - public Vector3 GetMinClusterPos() { return minClusterPos; @@ -816,83 +325,60 @@ public Vector3 GetClusterCellSize() return clusterCellSize; } - public int GetPunctualLightCount() - { - return punctualLightCount; - } - - public int GetAreaLightCount() - { - return areaLightCount; - } - - public int GetEnvLightCount() - { - return envLightCount; - } - public int GetLightPerCellCount() { return m_NumLightsPerCell; } - public int GetDecalCount(HDCamera hdCamera) - { - if((hdCamera.IsPathTracingEnabled() || hdCamera.IsRayTracingEnabled()) && hdCamera.frameSettings.IsEnabled(FrameSettingsField.Decals)) - return DecalSystem.m_DecalDatasCount; - return 0; - } - void InvalidateCluster() { // Invalidate the cluster's bounds so that we never access the buffer (the buffer's access in hlsl is surrounded by position testing) minClusterPos.Set(float.MaxValue, float.MaxValue, float.MaxValue); maxClusterPos.Set(-float.MaxValue, -float.MaxValue, -float.MaxValue); - punctualLightCount = 0; - areaLightCount = 0; - envLightCount = 0; } - public void CullForRayTracing(HDCamera hdCamera, HDRayTracingLights rayTracingLights) + public void CullForRayTracing(HDCamera hdCamera, WorldLights worldLights, WorldLightsVolumes worldLightsVolumes) { + uint filter = hdCamera.IsPathTracingEnabled() ? (uint)WorldLightFlags.ActivePathtracing : (uint)WorldLightFlags.ActiveRaytracing; + + // Filter the world lights + WorldLightCulling.GetLightSubSetUsingFlags(worldLightsVolumes, filter, m_WorldLightSubSet); + // If there is no lights to process or no environment not the shader is missing - if (rayTracingLights.lightCount + GetDecalCount(hdCamera) == 0 || !m_RenderPipeline.GetRayTracingState()) + if (worldLights.totalLighttCount == 0 || !m_RenderPipeline.GetRayTracingState()) { InvalidateCluster(); return; } - // Build the Light volumes - BuildGPULightVolumes(hdCamera, rayTracingLights); - // If no valid light were found, invalidate the cluster and leave - if (totalLightCount == 0) + if (m_WorldLightSubSet.GetCount() == 0) { InvalidateCluster(); return; } // Evaluate the volume of the cluster - EvaluateClusterVolume(hdCamera); + EvaluateClusterVolume(hdCamera, m_WorldLightSubSet); } - public void BuildLightClusterBuffer(CommandBuffer cmd, HDCamera hdCamera, HDRayTracingLights rayTracingLights) + public void BuildLightClusterBuffer(CommandBuffer cmd, HDCamera hdCamera, WorldLightsVolumes worldLightsVolumes) { // If there is no lights to process or no environment not the shader is missing - if (totalLightCount == 0 || rayTracingLights.lightCount + GetDecalCount(hdCamera) == 0 || !m_RenderPipeline.GetRayTracingState()) + if (m_WorldLightSubSet.GetCount() == 0 || !m_RenderPipeline.GetRayTracingState()) return; // Cull the lights within the evaluated cluster range - CullLights(cmd); + CullLights(cmd, worldLightsVolumes); // Build the light Cluster - BuildLightCluster(hdCamera, cmd); + BuildLightCluster(hdCamera, cmd, worldLightsVolumes, m_WorldLightSubSet); } - public void ReserveCookieAtlasSlots(HDRayTracingLights rayTracingLights) + public void ReserveCookieAtlasSlots(WorldLights rayTracingLights) { HDLightRenderDatabase lightEntities = HDLightRenderDatabase.instance; - for (int lightIdx = 0; lightIdx < rayTracingLights.hdLightEntityArray.Count; ++lightIdx) + for (int lightIdx = 0; lightIdx < rayTracingLights.hdLightEntityArray.Length; ++lightIdx) { int dataIndex = lightEntities.GetEntityDataIndex(rayTracingLights.hdLightEntityArray[lightIdx]); HDAdditionalLightData additionalLightData = lightEntities.hdAdditionalLightData[dataIndex]; @@ -905,22 +391,9 @@ public void ReserveCookieAtlasSlots(HDRayTracingLights rayTracingLights) } } - public void BuildRayTracingLightData(CommandBuffer cmd, HDCamera hdCamera, HDRayTracingLights rayTracingLights) - { - // Build the light data - BuildLightData(cmd, hdCamera, rayTracingLights); - - // Build the light data - BuildEnvLightData(cmd, hdCamera, rayTracingLights); - } - public void BindLightClusterData(CommandBuffer cmd) { - ConstantBuffer.PushGlobal(cmd, m_EnvLightReflectionDataRT, HDShaderIDs._EnvLightReflectionDataRT); - cmd.SetGlobalBuffer(HDShaderIDs._RaytracingLightCluster, GetCluster()); - cmd.SetGlobalBuffer(HDShaderIDs._LightDatasRT, GetLightDatas()); - cmd.SetGlobalBuffer(HDShaderIDs._EnvLightDatasRT, GetEnvLightDatas()); } } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs.hlsl.meta b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs.hlsl.meta deleted file mode 100644 index 1a5046d3032..00000000000 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs.hlsl.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: c1fd3c740d8a6b743ae846a20baf8aa9 -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.HDRTASManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.HDRTASManager.cs index 187b43b03c4..9e16c368c7a 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.HDRTASManager.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.HDRTASManager.cs @@ -380,35 +380,4 @@ public void ReleaseResources() rtas.Dispose(); } } - - class HDRayTracingLights - { - // The list of non-directional lights in the sub-scene - public List hdPointLightArray = new List(); - public List hdLineLightArray = new List(); - public List hdRectLightArray = new List(); - public List hdDiscLightArray = new List(); - public List hdLightEntityArray = new List(); - - // The list of directional lights in the sub-scene - public List hdDirectionalLightArray = new List(); - - // The list of reflection probes - public List reflectionProbeArray = new List(); - - // Counter of the current number of lights - public int lightCount; - - internal void Reset() - { - hdDirectionalLightArray.Clear(); - hdPointLightArray.Clear(); - hdLineLightArray.Clear(); - hdRectLightArray.Clear(); - hdDiscLightArray.Clear(); - hdLightEntityArray.Clear(); - reflectionProbeArray.Clear(); - lightCount = 0; - } - } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs index 58c832712ed..ed5807b7990 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs @@ -46,7 +46,6 @@ public partial class HDRenderPipeline static readonly string m_RTASDebugRTKernel = "RTASDebug"; HDRTASManager m_RTASManager; HDRaytracingLightCluster m_RayTracingLightCluster; - HDRayTracingLights m_RayTracingLights = new HDRayTracingLights(); bool m_ValidRayTracingState = false; bool m_ValidRayTracingCluster = false; bool m_ValidRayTracingClusterCulling = false; @@ -184,7 +183,7 @@ static bool IsValidRayTracedMaterial(Material currentMaterial) return false; // For the time being, we only consider non-decal HDRP materials as valid - return currentMaterial.GetTag("RenderPipeline", false) == "HDRenderPipeline" && !DecalSystem.IsDecalMaterial(currentMaterial); ; + return currentMaterial.GetTag("RenderPipeline", false) == "HDRenderPipeline" && !DecalSystem.IsDecalMaterial(currentMaterial); } static bool IsTransparentMaterial(Material currentMaterial) @@ -492,7 +491,7 @@ private static uint ComputeInstanceFlag(Renderer currentRenderer, ShadowCastingM return instanceFlag; } - void CollectLightsForRayTracing(HDCamera hdCamera, ref bool transformDirty) + void GatherLightInformationForRayTracing(HDCamera hdCamera, ref bool transformDirty) { // fetch all the lights in the scene HDLightRenderDatabase lightEntities = HDLightRenderDatabase.instance; @@ -528,7 +527,6 @@ void CollectLightsForRayTracing(HDCamera hdCamera, ref bool transformDirty) case LightType.Directional: { hasRayTracedShadows = hdLight.ShadowsEnabled() && hdLight.useScreenSpaceShadows && hdLight.useRayTracedShadows; - m_RayTracingLights.hdDirectionalLightArray.Add(hdLight); } break; case LightType.Point: @@ -537,25 +535,21 @@ void CollectLightsForRayTracing(HDCamera hdCamera, ref bool transformDirty) case LightType.Box: { hasRayTracedShadows = hdLight.ShadowsEnabled() && hdLight.useRayTracedShadows; - m_RayTracingLights.hdPointLightArray.Add(lightRenderEntity); } break; case LightType.Rectangle: { hasRayTracedShadows = hdLight.ShadowsEnabled() && hdLight.useRayTracedShadows; - m_RayTracingLights.hdRectLightArray.Add(lightRenderEntity); } break; case LightType.Tube: { hasRayTracedShadows = hdLight.ShadowsEnabled() && hdLight.useRayTracedShadows; - m_RayTracingLights.hdLineLightArray.Add(lightRenderEntity); } break; case LightType.Disc: { hasRayTracedShadows = hdLight.ShadowsEnabled() && hdLight.useRayTracedShadows; - m_RayTracingLights.hdDiscLightArray.Add(lightRenderEntity); } break; } @@ -565,35 +559,6 @@ void CollectLightsForRayTracing(HDCamera hdCamera, ref bool transformDirty) m_RayTracedContactShadowsRequired |= (hdLight.useContactShadow.@override && hdLight.rayTraceContactShadow); } } - - // Add the lights to the structure - m_RayTracingLights.hdLightEntityArray.AddRange(m_RayTracingLights.hdPointLightArray); - m_RayTracingLights.hdLightEntityArray.AddRange(m_RayTracingLights.hdLineLightArray); - m_RayTracingLights.hdLightEntityArray.AddRange(m_RayTracingLights.hdRectLightArray); - m_RayTracingLights.hdLightEntityArray.AddRange(m_RayTracingLights.hdDiscLightArray); - - // Process the lights - HDAdditionalReflectionData[] reflectionProbeArray = UnityEngine.GameObject.FindObjectsByType(FindObjectsSortMode.None); - for (int reflIdx = 0; reflIdx < reflectionProbeArray.Length; ++reflIdx) - { - HDAdditionalReflectionData reflectionProbe = reflectionProbeArray[reflIdx]; - // Add it to the list if enabled - // Skip the probe if the probe has never rendered (in real time cases) or if texture is null - if (reflectionProbe != null - && reflectionProbe.enabled - && reflectionProbe.ReflectionProbeIsEnabled() - && reflectionProbe.gameObject.activeSelf - && reflectionProbe.HasValidRenderedData()) - { - m_RayTracingLights.reflectionProbeArray.Add(reflectionProbe); - } - } - - m_RayTracingLights.lightCount = m_RayTracingLights.hdPointLightArray.Count - + m_RayTracingLights.hdLineLightArray.Count - + m_RayTracingLights.hdRectLightArray.Count - + m_RayTracingLights.hdDiscLightArray.Count - + m_RayTracingLights.reflectionProbeArray.Count; } /// @@ -658,9 +623,6 @@ internal void BuildRayTracingAccelerationStructure(HDCamera hdCamera) // Resets the rtas manager m_RTASManager.Reset(); - // Resets the light lists - m_RayTracingLights.Reset(); - // Reset all the flags m_ValidRayTracingState = false; m_ValidRayTracingCluster = false; @@ -675,8 +637,7 @@ internal void BuildRayTracingAccelerationStructure(HDCamera hdCamera) if (m_VFXRayTracingSupported && hdCamera.frameSettings.IsEnabled(FrameSettingsField.RaytracingVFX)) VFXManager.RequestRtasAabbConstruction(); - // Collect the lights - CollectLightsForRayTracing(hdCamera, ref m_RTASManager.transformsDirty); + GatherLightInformationForRayTracing(hdCamera, ref m_RTASManager.transformsDirty); // Evaluate the parameters of the effects HDEffectsParameters effectParameters = EvaluateEffectsParameters(hdCamera, m_RayTracedShadowsRequired, m_RayTracedContactShadowsRequired); @@ -859,7 +820,7 @@ internal void CullForRayTracing(CommandBuffer cmd, HDCamera hdCamera) { if (m_ValidRayTracingState && RayTracingLightClusterRequired(hdCamera)) { - m_RayTracingLightCluster.CullForRayTracing(hdCamera, m_RayTracingLights); + m_RayTracingLightCluster.CullForRayTracing(hdCamera, m_WorldLights, m_WorldLightsVolumes); m_ValidRayTracingClusterCulling = true; } } @@ -868,7 +829,7 @@ internal void ReserveRayTracingCookieAtlasSlots() { if (m_ValidRayTracingState && m_ValidRayTracingClusterCulling) { - m_RayTracingLightCluster.ReserveCookieAtlasSlots(m_RayTracingLights); + m_RayTracingLightCluster.ReserveCookieAtlasSlots(m_WorldLights); } } @@ -876,12 +837,11 @@ internal void BuildRayTracingLightData(CommandBuffer cmd, HDCamera hdCamera) { if (m_ValidRayTracingState && m_ValidRayTracingClusterCulling) { - m_RayTracingLightCluster.BuildRayTracingLightData(cmd, hdCamera, m_RayTracingLights); m_ValidRayTracingCluster = true; UpdateShaderVariablesRaytracingLightLoopCB(hdCamera, cmd); - m_RayTracingLightCluster.BuildLightClusterBuffer(cmd, hdCamera, m_RayTracingLights); + m_RayTracingLightCluster.BuildLightClusterBuffer(cmd, hdCamera, m_WorldLightsVolumes); } } @@ -910,9 +870,6 @@ void UpdateShaderVariablesRaytracingLightLoopCB(HDCamera hdCamera, CommandBuffer m_ShaderVariablesRaytracingLightLoopCB._MinClusterPos = m_RayTracingLightCluster.GetMinClusterPos(); m_ShaderVariablesRaytracingLightLoopCB._LightPerCellCount = (uint)m_RayTracingLightCluster.GetLightPerCellCount(); m_ShaderVariablesRaytracingLightLoopCB._MaxClusterPos = m_RayTracingLightCluster.GetMaxClusterPos(); - m_ShaderVariablesRaytracingLightLoopCB._PunctualLightCountRT = (uint)m_RayTracingLightCluster.GetPunctualLightCount(); - m_ShaderVariablesRaytracingLightLoopCB._AreaLightCountRT = (uint)m_RayTracingLightCluster.GetAreaLightCount(); - m_ShaderVariablesRaytracingLightLoopCB._EnvLightCountRT = (uint)m_RayTracingLightCluster.GetEnvLightCount(); ConstantBuffer.PushGlobal(cmd, m_ShaderVariablesRaytracingLightLoopCB, HDShaderIDs._ShaderVariablesRaytracingLightLoop); } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/Deferred/RaytracingDeferred.compute b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/Deferred/RaytracingDeferred.compute index 9ad261d9e1a..5df42da4ffd 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/Deferred/RaytracingDeferred.compute +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/Deferred/RaytracingDeferred.compute @@ -1,12 +1,12 @@ -#pragma kernel RaytracingDeferred RAYTRACING_DEFERRED=RaytracingDeferred +#pragma kernel RaytracingDeferred RAYTRACING_DEFERRED=RaytracingDeferred #pragma kernel RaytracingDeferredHalf RAYTRACING_DEFERRED=RaytracingDeferredHalf HALF_RESOLUTION #pragma kernel RaytracingDiffuseDeferred // Given that the algorithm requires BSDF evaluation, we need to define this macro #define HAS_LIGHTLOOP -// Environement data that need to be used aer the ray tracing ones -#define RAY_TRACING_ENVIRONMENT_DATA +// Environment data that need to be used, is from WorldLights +#define WORLD_ENVIRONMENT_DATA // If you need to change this, be sure to read this comment. // For raytracing we decided to force the shadow quality to low. diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/HDRaytracingShadowLoop.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/HDRaytracingShadowLoop.hlsl index 54d38793c66..c2a73a731e5 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/HDRaytracingShadowLoop.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/HDRaytracingShadowLoop.hlsl @@ -86,7 +86,7 @@ void ShadowLoopMin(HDShadowContext shadowContext, PositionInputs posInput, float GetLightCountAndStartCluster(actualWSPos, LIGHTCATEGORY_PUNCTUAL, lightStart, lightEnd, cellIndex); #else lightStart = 0; - lightEnd = _PunctualLightCountRT; + lightEnd = _WorldPunctualLightCount; #endif for (i = lightStart; i < lightEnd; i++) @@ -94,7 +94,7 @@ void ShadowLoopMin(HDShadowContext shadowContext, PositionInputs posInput, float #ifdef USE_LIGHT_CLUSTER LightData lightData = FetchClusterLightIndex(cellIndex, i); #else - LightData lightData = _LightDatasRT[i]; + LightData lightData = _WorldLightDatas[i]; #endif if (IsMatchingLightLayer(lightData.lightLayers, renderLayer) && lightData.shadowIndex >= 0 && @@ -154,8 +154,8 @@ void ShadowLoopMin(HDShadowContext shadowContext, PositionInputs posInput, float // Let's loop through all the GetLightCountAndStartCluster(actualWSPos, LIGHTCATEGORY_AREA, lightStart, lightEnd, cellIndex); #else - lightStart = _PunctualLightCountRT; - lightEnd = _PunctualLightCountRT + _AreaLightCountRT; + lightStart = _WorldPunctualLightCount; + lightEnd = _WorldPunctualLightCount + _WorldAreaLightCount; #endif for (i = lightStart; i < lightEnd; i++) @@ -163,7 +163,7 @@ void ShadowLoopMin(HDShadowContext shadowContext, PositionInputs posInput, float #ifdef USE_LIGHT_CLUSTER LightData lightData = FetchClusterLightIndex(cellIndex, i); #else - LightData lightData = _LightDatasRT[i]; + LightData lightData = _WorldLightDatas[i]; #endif if (IsMatchingLightLayer(lightData.lightLayers, renderLayer)) { diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RayTracingLightCluster.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RayTracingLightCluster.hlsl index 1e036d23808..8f16ddad9fd 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RayTracingLightCluster.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RayTracingLightCluster.hlsl @@ -88,13 +88,13 @@ void GetLightCountAndStartCluster(float3 positionWS, uint lightCategory, out uin LightData FetchClusterLightIndex(int cellIndex, uint lightIndex) { int absoluteLightIndex = GetLightClusterCellLightByIndex(cellIndex, lightIndex); - return _LightDatasRT[absoluteLightIndex]; + return _WorldLightDatas[absoluteLightIndex]; } EnvLightData FetchClusterEnvLightIndex(int cellIndex, uint lightIndex) { int absoluteLightIndex = GetLightClusterCellLightByIndex(cellIndex, lightIndex); - return _EnvLightDatasRT[absoluteLightIndex]; + return _WorldEnvLightDatas[absoluteLightIndex]; } #if defined(HAS_LIGHTLOOP) && (SHADERPASS != SHADERPASS_PATH_TRACING) && !defined(PATH_TRACING_CLUSTERED_DECALS) @@ -109,7 +109,7 @@ float3 RayTraceReflectionProbes(float3 rayOrigin, float3 rayDirection, inout flo GetLightCountAndStartCluster(rayOrigin, LIGHTCATEGORY_ENV, lightStart, lightEnd, cellIndex); #else lightStart = 0; - lightEnd = _EnvLightCountRT; + lightEnd = _WorldEnvLightCount; #endif // Scalarized loop, same rationale of the punctual light version uint envLightIdx = lightStart; @@ -118,7 +118,7 @@ float3 RayTraceReflectionProbes(float3 rayOrigin, float3 rayDirection, inout flo #ifdef USE_LIGHT_CLUSTER EnvLightData envLightData = FetchClusterEnvLightIndex(cellIndex, envLightIdx); #else - EnvLightData envLightData = _EnvLightDatasRT[envLightIdx]; + EnvLightData envLightData = _WorldEnvLightDatas[envLightIdx]; #endif if (IsEnvIndexCubemap(envLightData.envIndex) && totalWeight < 1.0) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightCluster.compute b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightCluster.compute index 362601ce2bc..3b8658d56ff 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightCluster.compute +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightCluster.compute @@ -6,15 +6,17 @@ // SRP & HDRP includes #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariables.hlsl" -#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs.hlsl" +#include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.hlsl" #include "Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/GeometricTools.hlsl" #define CLUSTER_GROUP_SIZE 8 // Light Data -StructuredBuffer _LightVolumes; +StructuredBuffer _LightVolumes; uint _LightVolumeCount; +StructuredBuffer _LightSubSet; +uint _LightSubSetCount; // The target data that this computer shader must fill RWStructuredBuffer _RaytracingLightClusterRW; @@ -64,13 +66,15 @@ void RaytracingLightCluster(uint3 threadID : SV_GroupThreadID, uint3 groupId : S uint decalCount = 0; // Now let's loop through the lights and fill the cell's information - for(uint lightIdx = 0; lightIdx < _LightVolumeCount; ++lightIdx) + for (uint lightSubSetIdx = 0; lightSubSetIdx < _LightSubSetCount; ++lightSubSetIdx) { // If no more lights can fit, just skip if(currentLightCount >= _LightPerCellCount) break; + uint lightIdx = _LightSubSet[lightSubSetIdx]; + // Fetch the target light data - LightVolume currentLight = _LightVolumes[lightIdx]; + WorldLightVolume currentLight = _LightVolumes[lightIdx]; // If this light should be skipped, skip it // if(_RaytracingLightCullResult[lightIdx] == 1) continue; @@ -136,7 +140,7 @@ void RaytracingLightCluster(uint3 threadID : SV_GroupThreadID, uint3 groupId : S } - +// TODO Dead code [numthreads(CULL_GROUP_SIZE, 1, 1)] void RaytracingLightCull(uint2 threadID : SV_GroupThreadID, uint2 groupId : SV_GroupID) { @@ -150,7 +154,7 @@ void RaytracingLightCull(uint2 threadID : SV_GroupThreadID, uint2 groupId : SV_G if(_LightVolumeCount <= targetLightIndex) return; // Fetch the target light data - LightVolume currentLight = _LightVolumes[targetLightIndex]; + WorldLightVolume currentLight = _LightVolumes[targetLightIndex]; bool intersects = false; /* diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightLoop.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightLoop.hlsl index ca8654e449f..540b356ee7c 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightLoop.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightLoop.hlsl @@ -77,7 +77,7 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS GetLightCountAndStartCluster(actualWSPos, LIGHTCATEGORY_PUNCTUAL, lightStart, lightEnd, cellIndex); #else lightStart = 0; - lightEnd = _PunctualLightCountRT; + lightEnd = _WorldPunctualLightCount; #endif uint i = 0; @@ -86,7 +86,7 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS #ifdef USE_LIGHT_CLUSTER LightData lightData = FetchClusterLightIndex(cellIndex, i); #else - LightData lightData = _LightDatasRT[i]; + LightData lightData = _WorldLightDatas[i]; #endif if (IsMatchingLightLayer(lightData.lightLayers, builtinData.renderingLayers)) { @@ -176,7 +176,7 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS GetLightCountAndStartCluster(actualWSPos, LIGHTCATEGORY_ENV, lightStart, lightEnd, cellIndex); #else lightStart = 0; - lightEnd = _EnvLightCountRT; + lightEnd = _WorldEnvLightCount; #endif context.sampleReflection = SINGLE_PASS_CONTEXT_SAMPLE_REFLECTION_PROBES; @@ -189,7 +189,7 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS #ifdef USE_LIGHT_CLUSTER EnvLightData envLightData = FetchClusterEnvLightIndex(cellIndex, envLightIdx); #else - EnvLightData envLightData = _EnvLightDatasRT[envLightIdx]; + EnvLightData envLightData = _WorldEnvLightDatas[envLightIdx]; #endif if (reflectionHierarchyWeight < 1.0) @@ -242,8 +242,8 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS // Let's loop through all the GetLightCountAndStartCluster(actualWSPos, LIGHTCATEGORY_AREA, lightStart, lightEnd, cellIndex); #else - lightStart = _PunctualLightCountRT; - lightEnd = _PunctualLightCountRT + _AreaLightCountRT; + lightStart = _WorldPunctualLightCount; + lightEnd = _WorldPunctualLightCount + _WorldAreaLightCount; #endif if (lightEnd != lightStart) @@ -253,7 +253,7 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS #ifdef USE_LIGHT_CLUSTER LightData lightData = FetchClusterLightIndex(cellIndex, i); #else - LightData lightData = _LightDatasRT[i]; + LightData lightData = _WorldLightDatas[i]; #endif while (i < last && lightData.lightType == GPULIGHTTYPE_TUBE) @@ -269,7 +269,7 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS #ifdef USE_LIGHT_CLUSTER lightData = FetchClusterLightIndex(cellIndex, i); #else - lightData = _LightDatasRT[i]; + lightData = _WorldLightDatas[i]; #endif } @@ -286,7 +286,7 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS #ifdef USE_LIGHT_CLUSTER lightData = FetchClusterLightIndex(cellIndex, i); #else - lightData = _LightDatasRT[i]; + lightData = _WorldLightDatas[i]; #endif } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.cs index bfb2470e623..062b81f1d52 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.cs @@ -6,8 +6,5 @@ unsafe struct ShaderVariablesRaytracingLightLoop public Vector3 _MinClusterPos; public uint _LightPerCellCount; public Vector3 _MaxClusterPos; - public uint _PunctualLightCountRT; - public uint _AreaLightCountRT; - public uint _EnvLightCountRT; } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.cs.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.cs.hlsl index d2a53e4ab89..96f6971cbaf 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.cs.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.cs.hlsl @@ -10,9 +10,6 @@ GLOBAL_CBUFFER_START(ShaderVariablesRaytracingLightLoop, b4) float3 _MinClusterPos; uint _LightPerCellCount; float3 _MaxClusterPos; - uint _PunctualLightCountRT; - uint _AreaLightCountRT; - uint _EnvLightCountRT; CBUFFER_END diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.hlsl index 25fa92805c3..263dc6487eb 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/Shaders/ShaderVariablesRaytracingLightLoop.hlsl @@ -13,7 +13,5 @@ GLOBAL_RESOURCE(StructuredBuffer, _RaytracingLightCluster, RAY_TRACING_LIGHT_CLUSTER_REGISTER); -GLOBAL_RESOURCE(StructuredBuffer, _LightDatasRT, RAY_TRACING_LIGHT_DATA_REGISTER); -GLOBAL_RESOURCE(StructuredBuffer, _EnvLightDatasRT, RAY_TRACING_ENV_LIGHT_DATA_REGISTER); #endif // UNITY_SHADER_VARIABLES_RAY_TRACING_LIGHT_LOOP_INCLUDED diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightCulling.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightCulling.cs new file mode 100644 index 00000000000..c1c9d96b9e0 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightCulling.cs @@ -0,0 +1,257 @@ +using System; +using System.Collections.Generic; +using UnityEngine.Experimental.Rendering; + +namespace UnityEngine.Rendering.HighDefinition +{ + // Defines a sub set of world lights using indices into + // world light datas and world light volumes + class WorldLightSubSet + { + List m_lightIndicies = new List(); + GraphicsBuffer m_lightSubsetBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, System.Runtime.InteropServices.Marshal.SizeOf(typeof(uint))); + + internal void ResizeLightSubsetBuffer(int numLights) + { + int numLightsGpu = Math.Max(numLights, 1); + + // If it is not null and it has already the right size, we are pretty much done + if (m_lightSubsetBuffer.count == numLightsGpu) + return; + + // It is not the right size, free it to be reallocated + CoreUtils.SafeRelease(m_lightSubsetBuffer); + + // Allocate the next buffer buffer + m_lightSubsetBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numLightsGpu, System.Runtime.InteropServices.Marshal.SizeOf(typeof(uint))); + } + + internal void ClearLightSubsetList() + { + m_lightIndicies.Clear(); + bounds.SetMinMax(WorldLightManager.minBounds, WorldLightManager.maxBounds); + } + + public void Add(uint index) + { + m_lightIndicies.Add(index); + } + + internal void PushToGpu() + { + if (m_lightIndicies.Count > 0) + m_lightSubsetBuffer.SetData(m_lightIndicies); + } + + public Bounds bounds = new Bounds(Vector3.zero, Vector3.zero); + + public void Bind(CommandBuffer cmd, int lightSubSetShaderID) + { + cmd.SetGlobalBuffer(lightSubSetShaderID, m_lightSubsetBuffer); + } + + public int GetCount() + { + return m_lightIndicies.Count; + } + + public GraphicsBuffer GetBuffer() + { + return m_lightSubsetBuffer; + } + + internal void Release() + { + CoreUtils.SafeRelease(m_lightSubsetBuffer); + m_lightSubsetBuffer = null; + } + } + + // Represents multiple subsets contained in the same buffer + class WorldLightSubSetList + { + List m_lightIndicies = new List(); + GraphicsBuffer m_lightSubsetBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, System.Runtime.InteropServices.Marshal.SizeOf(typeof(uint))); + + uint currentOffset = 0; + List m_lightOffsetAndCounts = new List(); + + internal void ClearLightSubsetList() + { + m_lightIndicies.Clear(); + m_lightOffsetAndCounts.Clear(); + currentOffset = 0; + } + + internal void ResizeLightSubsetBuffer() + { + int numLightsGpu = Math.Max((int) currentOffset, 1); + + // If it is not null and it has already the right size, we are pretty much done + if (m_lightSubsetBuffer.count == numLightsGpu) + return; + + // It is not the right size, free it to be reallocated + CoreUtils.SafeRelease(m_lightSubsetBuffer); + + // Allocate the next buffer buffer + m_lightSubsetBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numLightsGpu, System.Runtime.InteropServices.Marshal.SizeOf(typeof(uint))); + } + + public void Add(uint index) + { + m_lightIndicies.Add(index); + } + + public void AddRange(uint count) + { + m_lightOffsetAndCounts.Add(currentOffset); + m_lightOffsetAndCounts.Add(count); + currentOffset += count; + } + + internal void PushToGpu() + { + if (m_lightIndicies.Count > 0) + m_lightSubsetBuffer.SetData(m_lightIndicies); + } + + public void Bind(CommandBuffer cmd, int lightSubSetShaderID) + { + cmd.SetGlobalBuffer(lightSubSetShaderID, m_lightSubsetBuffer); + } + + public List GetLightOffsetAndCountsList() + { + return m_lightOffsetAndCounts; + } + + public GraphicsBuffer GetBuffer() + { + return m_lightSubsetBuffer; + } + + public void Release() + { + CoreUtils.SafeRelease(m_lightSubsetBuffer); + m_lightSubsetBuffer = null; + } + }; + + class WorldLightCulling + { + public static void GetLightSubSetUsingFlags(in WorldLightsVolumes worldLightsVolumes, uint flagFilter, WorldLightSubSet worldLightSubSet) + { + int totalLights = worldLightsVolumes.GetCount(); + worldLightSubSet.ResizeLightSubsetBuffer(totalLights); + worldLightSubSet.ClearLightSubsetList(); + worldLightSubSet.bounds.SetMinMax(WorldLightManager.minBounds, WorldLightManager.maxBounds); + + for (uint lightIdx = 0; lightIdx < totalLights; ++lightIdx) + { + ref uint flags = ref worldLightsVolumes.GetFlagsRef((int)lightIdx); + if ((flags & flagFilter) == flagFilter) + { + worldLightSubSet.Add(lightIdx); + + ref WorldLightVolume volume = ref worldLightsVolumes.GetRef((int)lightIdx); + worldLightSubSet.bounds.Encapsulate(volume.position - volume.range); + worldLightSubSet.bounds.Encapsulate(volume.position + volume.range); + } + } + worldLightSubSet.PushToGpu(); + } + + private static bool IntersectSphereAABB(Vector3 position, float radius, Vector3 aabbMin, Vector3 aabbMax) + { + float x = Mathf.Max(aabbMin.x, Mathf.Min(position.x, aabbMax.x)); + float y = Mathf.Max(aabbMin.y, Mathf.Min(position.y, aabbMax.y)); + float z = Mathf.Max(aabbMin.z, Mathf.Min(position.z, aabbMax.z)); + float distance2 = ((x - position.x) * (x - position.x) + (y - position.y) * (y - position.y) + (z - position.z) * (z - position.z)); + return distance2 < radius * radius; + } + + public static void GetLightSubSetUsingFlagsAndBounds(in WorldLightsVolumes worldLightsVolumes, uint flagFilter, in Bounds bounds, WorldLightSubSet worldLightSubSet) + { + int totalLights = worldLightsVolumes.GetCount(); + worldLightSubSet.ResizeLightSubsetBuffer(totalLights); + worldLightSubSet.ClearLightSubsetList(); + worldLightSubSet.bounds.SetMinMax(WorldLightManager.minBounds, WorldLightManager.maxBounds); + + for (uint lightIdx = 0; lightIdx < totalLights; ++lightIdx) + { + ref uint flags = ref worldLightsVolumes.GetFlagsRef((int)lightIdx); + if ((flags & flagFilter) == flagFilter) + { + bool intersects = false; + ref WorldLightVolume volume = ref worldLightsVolumes.GetRef((int)lightIdx); + if (volume.shape == 0) + { + intersects = IntersectSphereAABB(volume.position, volume.range.x, bounds.min, bounds.max); + } + else + { + intersects = bounds.Intersects(new Bounds(volume.position, volume.range)); + } + + if (intersects) + { + worldLightSubSet.Add(lightIdx); + + worldLightSubSet.bounds.Encapsulate(volume.position - volume.range); + worldLightSubSet.bounds.Encapsulate(volume.position + volume.range); + } + } + } + worldLightSubSet.PushToGpu(); + } + + public static void GetLightSubSetUsingFlagsAndBounds(in WorldLightsVolumes worldLightsVolumes, uint flagFilter, in List boundsList, WorldLightSubSetList worldLightSubSetList, in Vector3 cameraPos) + { + int totalLights = worldLightsVolumes.GetCount(); + worldLightSubSetList.ClearLightSubsetList(); + + foreach (Bounds bounds in boundsList) + { + uint count = 0; + + for (uint lightIdx = 0; lightIdx < totalLights; ++lightIdx) + { + ref uint flags = ref worldLightsVolumes.GetFlagsRef((int)lightIdx); + if ((flags & flagFilter) == flagFilter) + { + bool intersects = false; + ref WorldLightVolume volume = ref worldLightsVolumes.GetRef((int)lightIdx); + + Vector3 lightPositionWS = volume.position; + if (ShaderConfig.s_CameraRelativeRendering != 0) + { + lightPositionWS += cameraPos; + } + + if (volume.shape == 0) + { + intersects = IntersectSphereAABB(lightPositionWS, volume.range.x, bounds.min, bounds.max); + } + else + { + intersects = bounds.Intersects(new Bounds(lightPositionWS, volume.range)); + } + + if (intersects) + { + worldLightSubSetList.Add(lightIdx); + count++; + } + } + } + + worldLightSubSetList.AddRange(count); + } + + worldLightSubSetList.ResizeLightSubsetBuffer(); + + worldLightSubSetList.PushToGpu(); + } + } +} // namespace UnityEngine.Rendering.HighDefinition diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightCulling.cs.meta b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightCulling.cs.meta new file mode 100644 index 00000000000..b4ac6f984f4 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightCulling.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6532d2805803f5418a9983ba53f5f21 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs new file mode 100644 index 00000000000..f03ea87894c --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs @@ -0,0 +1,737 @@ +using System; +using System.Collections.Generic; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Profiling; + +namespace UnityEngine.Rendering.HighDefinition +{ + /// + /// World light manager handles all lights in a scene and makes them accessible on the GPU. This includes + /// information about their shape. + /// + /// 1. First create WorldLights object and populate it using CollectWorldLights(). + /// 2. Pass the WorldLights object to BuildWorldLightDatas() to create the GPU representation of the lights. + /// 3. (optionally) Pass the WorldLights object to BuildWorldLightVolumes() to create the GPU representation of the light bounds. + /// 4. Bind the buffers using Bind + /// + /// + /// WorldLights life time loop + /// - Construct / Update + /// - Reset + /// + /// WorldLightsGpu and WorldLightsVolumes life time loop + /// - Construct / Update + /// - PushToGpu + /// - Bind + /// - Release + /// + /// TODO-WL: Replace data structures with nativearrays to be able to do burst jobs + /// TODO-WL: CollectWorldLights() should be replaced with updates using the object dispatcher and kept persistent on the GPU + /// TODO-WL: Remove the relative camera light positions, they need to be global. + /// + /// + + + /// Flags: + /// Active = 1 + /// Rest user defined + [GenerateHLSL(PackingRules.Exact, false)] + struct WorldLightVolume + { + public uint flags; + public uint shape; + public Vector3 position; + public Vector3 range; + public uint lightType; + public uint lightIndex; + } + + class WorldLightsSettings + { + public bool enabled = false; + } + + class WorldLights + { + public NativeList hdPointLightArray = new NativeList(Allocator.Persistent); + public NativeList hdLineLightArray = new NativeList(Allocator.Persistent); + public NativeList hdRectLightArray = new NativeList(Allocator.Persistent); + public NativeList hdDiscLightArray = new NativeList(Allocator.Persistent); + public NativeList hdLightEntityArray = new NativeList(Allocator.Persistent); + + // The list of reflection probes + public List reflectionProbeArray = new List(); + + // Counter of the total number of lights + public int totalLighttCount => normalLightCount + envLightCount + decalCount; + + public int normalLightCount => pointLightCount + lineLightCount + rectLightCount + discLightCount; + public int envLightCount => reflectionProbeArray.Count; + public int decalCount = 0; + + public int pointLightCount => hdPointLightArray.Length; + public int lineLightCount => hdLineLightArray.Length; + public int rectLightCount => hdRectLightArray.Length; + public int discLightCount => hdDiscLightArray.Length; + + internal void Reset() + { + hdPointLightArray.Clear(); + hdLineLightArray.Clear(); + hdRectLightArray.Clear(); + hdDiscLightArray.Clear(); + hdLightEntityArray.Clear(); + reflectionProbeArray.Clear(); + } + + internal void Release() + { + hdPointLightArray.Dispose(); + hdLineLightArray.Dispose(); + hdRectLightArray.Dispose(); + hdDiscLightArray.Dispose(); + hdLightEntityArray.Dispose(); + } + } + + class WorldLightsGpu + { + // Light runtime data + NativeArray m_LightDataCPUArray = new NativeArray(WorldLightManager.SizeAlignment, Allocator.Persistent); + GraphicsBuffer m_LightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, System.Runtime.InteropServices.Marshal.SizeOf(typeof(LightData))); + + // Env Light data + NativeArray m_EnvLightDataCPUArray = new NativeArray(WorldLightManager.SizeAlignment, Allocator.Persistent); + GraphicsBuffer m_EnvLightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, System.Runtime.InteropServices.Marshal.SizeOf(typeof(EnvLightData))); + + // Env Light data support data + WorldEnvLightReflectionData m_EnvLightReflectionDataRT = new WorldEnvLightReflectionData(); + + int m_numLights = 0; + int m_numEnvLights = 0; + + internal ref LightData GetRef(int i) + { + unsafe + { + LightData* data = (LightData*)m_LightDataCPUArray.GetUnsafePtr() + i; + return ref UnsafeUtility.AsRef(data); + } + } + + internal ref EnvLightData GetEnvRef(int i) + { + unsafe + { + EnvLightData* data = (EnvLightData*)m_EnvLightDataCPUArray.GetUnsafePtr() + i; + return ref UnsafeUtility.AsRef(data); + } + } + + internal void ResizeLightDataGraphicsBuffer(int numLights) + { + int numLightsGpu = Math.Max(numLights, 1); + + if (numLights > m_LightDataCPUArray.Length) + { + m_LightDataCPUArray.ResizeArray(numLights); + } + m_numLights = numLights; + + // If it is not null and it has already the right size, we are pretty much done + if (m_LightDataGPUArray.count == numLightsGpu) + return; + + // It is not the right size, free it to be reallocated + CoreUtils.SafeRelease(m_LightDataGPUArray); + + // Allocate the next buffer buffer + m_LightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numLightsGpu, System.Runtime.InteropServices.Marshal.SizeOf(typeof(LightData))); + } + + internal const int k_MaxPlanarReflectionsOnScreen = 16; + internal const int k_MaxCubeReflectionsOnScreen = 64; + + internal unsafe void SetPlanarReflectionDataRT(int index, ref Matrix4x4 vp, ref Vector4 scaleOffset) + { + Debug.Assert(index < k_MaxPlanarReflectionsOnScreen); + + for (int j = 0; j < 16; ++j) + m_EnvLightReflectionDataRT._PlanarCaptureVPWL[index * 16 + j] = vp[j]; + + for (int j = 0; j < 4; ++j) + m_EnvLightReflectionDataRT._PlanarScaleOffsetWL[index * 4 + j] = scaleOffset[j]; + } + + internal unsafe void SetCubeReflectionDataRT(int index, ref Vector4 scaleOffset) + { + Debug.Assert(index < k_MaxCubeReflectionsOnScreen); + + for (int j = 0; j < 4; ++j) + m_EnvLightReflectionDataRT._CubeScaleOffsetWL[index * 4 + j] = scaleOffset[j]; + } + + internal void ResizeEnvLightDataGraphicsBuffer(int numEnvLights) + { + int numEnvLightsGpu = Math.Max(numEnvLights, 1); + + if (numEnvLights > m_EnvLightDataCPUArray.Length) + { + int newSize = HDUtils.DivRoundUp(numEnvLights, WorldLightManager.SizeAlignment) * WorldLightManager.SizeAlignment; + m_EnvLightDataCPUArray.ResizeArray(newSize); + } + m_numEnvLights = numEnvLights; + + if (m_EnvLightDataGPUArray.count == numEnvLightsGpu) + return; + + CoreUtils.SafeRelease(m_EnvLightDataGPUArray); + + // Allocate the next buffer buffer + m_EnvLightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numEnvLightsGpu, System.Runtime.InteropServices.Marshal.SizeOf(typeof(EnvLightData))); + } + + internal void PushToGpu(CommandBuffer cmd) + { + if (m_numLights > 0) + m_LightDataGPUArray.SetData(m_LightDataCPUArray, 0, 0, m_numLights); + if (m_numEnvLights > 0) + m_EnvLightDataGPUArray.SetData(m_EnvLightDataCPUArray, 0, 0, m_numEnvLights); + ConstantBuffer.PushGlobal(cmd, m_EnvLightReflectionDataRT, HDShaderIDs._WorldEnvLightReflectionData); + } + + public void Bind(CommandBuffer cmd, int lightDataShaderID, int envLightDataShaderID) + { + if (lightDataShaderID > 0) + cmd.SetGlobalBuffer(lightDataShaderID, m_LightDataGPUArray); + if (envLightDataShaderID > 0) + cmd.SetGlobalBuffer(envLightDataShaderID, m_EnvLightDataGPUArray); + } + + internal void Release() + { + CoreUtils.SafeRelease(m_LightDataGPUArray); + m_LightDataGPUArray = null; + + CoreUtils.SafeRelease(m_EnvLightDataGPUArray); + m_EnvLightDataGPUArray = null; + + m_LightDataCPUArray.Dispose(); + m_EnvLightDataCPUArray.Dispose(); + } + } + + class WorldLightsVolumes + { + // Light Culling data + NativeArray m_LightVolumesCPUArray = new NativeArray(WorldLightManager.SizeAlignment, Allocator.Persistent); + GraphicsBuffer m_LightVolumeGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, System.Runtime.InteropServices.Marshal.SizeOf(typeof(WorldLightVolume))); + + NativeArray m_LightFlagsCPUArray = new NativeArray(WorldLightManager.SizeAlignment, Allocator.Persistent); + GraphicsBuffer m_LightFlagsGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, 1, System.Runtime.InteropServices.Marshal.SizeOf(typeof(uint))); + + int m_numLights = 0; + + internal ref WorldLightVolume GetRef(int i) + { + unsafe + { + WorldLightVolume* data = (WorldLightVolume*)m_LightVolumesCPUArray.GetUnsafePtr() + i; + return ref UnsafeUtility.AsRef(data); + } + } + + internal ref uint GetFlagsRef(int i) + { + unsafe + { + uint* data = (uint*)m_LightFlagsCPUArray.GetUnsafePtr() + i; + return ref UnsafeUtility.AsRef(data); + } + } + + internal void ResizeVolumeBuffer(int numLights) + { + int numLightsGpu = Math.Max(numLights, 1); + + // Always reset the bounds + bounds.SetMinMax(WorldLightManager.minBounds, WorldLightManager.maxBounds); + + if (numLights > m_LightVolumesCPUArray.Length) + { + int newSize = HDUtils.DivRoundUp(numLights, WorldLightManager.SizeAlignment) * WorldLightManager.SizeAlignment; + m_LightVolumesCPUArray.ResizeArray(newSize); + m_LightFlagsCPUArray.ResizeArray(newSize); + } + m_numLights = numLights; + + + // If it is not null and it has already the right size, we are pretty much done + if (m_LightVolumeGPUArray.count == numLightsGpu) + return; + + CoreUtils.SafeRelease(m_LightVolumeGPUArray); + CoreUtils.SafeRelease(m_LightFlagsGPUArray); + + m_LightVolumeGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numLightsGpu, System.Runtime.InteropServices.Marshal.SizeOf(typeof(WorldLightVolume))); + m_LightFlagsGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numLightsGpu, System.Runtime.InteropServices.Marshal.SizeOf(typeof(uint))); + } + + internal void PushToGpu() + { + if (m_numLights > 0) + m_LightVolumeGPUArray.SetData(m_LightVolumesCPUArray, 0, 0, m_numLights); + if (m_numLights > 0) + m_LightFlagsGPUArray.SetData(m_LightFlagsCPUArray, 0, 0, m_numLights); + } + + public void Bind(CommandBuffer cmd, int lightVolumeShaderID, int lightFlagsShaderID) + { + if (lightVolumeShaderID > 0) + cmd.SetGlobalBuffer(lightVolumeShaderID, m_LightVolumeGPUArray); + if (lightFlagsShaderID > 0) + cmd.SetGlobalBuffer(lightFlagsShaderID, m_LightFlagsGPUArray); + } + + internal void Release() + { + m_LightVolumesCPUArray.Dispose(); + m_LightFlagsCPUArray.Dispose(); + + CoreUtils.SafeRelease(m_LightVolumeGPUArray); + m_LightVolumeGPUArray = null; + CoreUtils.SafeRelease(m_LightFlagsGPUArray); + m_LightFlagsGPUArray = null; + } + + public GraphicsBuffer GetBuffer() + { + return m_LightVolumeGPUArray; + } + + public int GetCount() + { + return m_numLights; + } + + public Bounds bounds = new Bounds(Vector3.zero, Vector3.zero); + } + + class WorldLightManager + { + public static void CollectWorldLights(in HDCamera hdCamera, in WorldLightsSettings settings, in Func flagFunc, WorldLights worldLights) + { + // Refresh the entire structure every frame for now + worldLights.Reset(); + + if (!settings.enabled) + return; + + using var profilerScope = k_ProfilerMarkerCollect.Auto(); + + // fetch all the lights in the scene + HDLightRenderDatabase lightEntities = HDLightRenderDatabase.instance; + for (int lightIdx = 0; lightIdx < lightEntities.lightCount; ++lightIdx) + { + HDLightRenderEntity lightRenderEntity = lightEntities.lightEntities[lightIdx]; + HDAdditionalLightData hdLight = lightEntities.hdAdditionalLightData[lightIdx]; + + if (hdLight != null && hdLight.enabled && hdLight != HDUtils.s_DefaultHDAdditionalLightData) + { + Light light = hdLight.gameObject.GetComponent(); + // If the light is null or disabled, skip it + if (light == null || !light.enabled) + continue; + + // TODO-WL: Here we filter out all light that doesn't have a flag set + // this to ensure that we don't process more lights than before + if ((flagFunc(hdCamera, hdLight, light) & 0xfffffffe) == 0) + continue; + + switch (hdLight.legacyLight.type) + { + case LightType.Directional: + // TODO-WL: Directional lights + break; + case LightType.Point: + case LightType.Spot: + case LightType.Pyramid: + case LightType.Box: + worldLights.hdPointLightArray.Add(lightRenderEntity); + break; + case LightType.Rectangle: + worldLights.hdRectLightArray.Add(lightRenderEntity); + break; + case LightType.Tube: + worldLights.hdLineLightArray.Add(lightRenderEntity); + break; + case LightType.Disc: + worldLights.hdDiscLightArray.Add(lightRenderEntity); + break; + } + } + } + + // Add the lights to the structure + worldLights.hdLightEntityArray.AddRange(worldLights.hdPointLightArray.AsArray()); + worldLights.hdLightEntityArray.AddRange(worldLights.hdLineLightArray.AsArray()); + worldLights.hdLightEntityArray.AddRange(worldLights.hdRectLightArray.AsArray()); + worldLights.hdLightEntityArray.AddRange(worldLights.hdDiscLightArray.AsArray()); + + // Process the lights + HDAdditionalReflectionData[] reflectionProbeArray = UnityEngine.GameObject.FindObjectsByType(FindObjectsSortMode.None); + for (int reflIdx = 0; reflIdx < reflectionProbeArray.Length; ++reflIdx) + { + HDAdditionalReflectionData reflectionProbe = reflectionProbeArray[reflIdx]; + + // Add it to the list if enabled + // Skip the probe if the probe has never rendered (in real time cases) or if texture is null + if (reflectionProbe != null + && reflectionProbe.enabled + && reflectionProbe.ReflectionProbeIsEnabled() + && reflectionProbe.gameObject.activeSelf + && reflectionProbe.HasValidRenderedData()) + { + worldLights.reflectionProbeArray.Add(reflectionProbe); + } + } + + // Decals + worldLights.decalCount = DecalSystem.GetDecalCount(hdCamera); + } + + public static void BuildWorldLightDatas(CommandBuffer cmd, in HDCamera hdCamera, in HDRenderPipeline renderPipeline, in WorldLights worldLights, WorldLightsGpu worldLightsGpu) + { + using var profilerScope = k_ProfilerMarkerBuild.Auto(); + + // Clear gpu data + worldLightsGpu.ResizeLightDataGraphicsBuffer(worldLights.normalLightCount); + worldLightsGpu.ResizeEnvLightDataGraphicsBuffer(worldLights.envLightCount); + + #region Normal lights + if (worldLights.normalLightCount > 0) + { + // Grab the shadow settings + var hdShadowSettings = hdCamera.volumeStack.GetComponent(); + + // Build the data for every light + HDLightRenderDatabase lightEntities = HDLightRenderDatabase.instance; + var processedLightEntity = new HDProcessedVisibleLight() + { + shadowMapFlags = HDProcessedVisibleLightsBuilder.ShadowMapFlags.None + }; + + var globalConfig = HDGpuLightsBuilder.CreateGpuLightDataJobGlobalConfig.Create(hdCamera, hdShadowSettings); + var shadowInitParams = renderPipeline.currentPlatformRenderPipelineSettings.hdShadowInitParams; + + for (int lightIdx = 0; lightIdx < worldLights.hdLightEntityArray.Length; ++lightIdx) + { + // Grab the additinal light data to process + int dataIndex = lightEntities.GetEntityDataIndex(worldLights.hdLightEntityArray[lightIdx]); + HDAdditionalLightData additionalLightData = lightEntities.hdAdditionalLightData[dataIndex]; + + ref LightData lightData = ref worldLightsGpu.GetRef(lightIdx); + + lightData = s_defaultLightData; + + // When the user deletes a light source in the editor, there is a single frame where the light is null before the collection of light in the scene is triggered + // the workaround for this is simply to add an invalid light for that frame + if (additionalLightData == null) + { + continue; + } + + // Evaluate all the light type data that we need + LightCategory lightCategory = LightCategory.Count; + GPULightType gpuLightType = GPULightType.Point; + LightVolumeType lightVolumeType = LightVolumeType.Count; + LightType lightType = additionalLightData.legacyLight.type; + HDRenderPipeline.EvaluateGPULightType(lightType, ref lightCategory, ref gpuLightType, ref lightVolumeType); + + // Fetch the light component for this light + Light lightComponent; + additionalLightData.gameObject.TryGetComponent(out lightComponent); + + ref HDLightRenderData lightRenderData = ref lightEntities.GetLightDataAsRef(dataIndex); + + // Build the processed light data that we need + processedLightEntity.dataIndex = dataIndex; + processedLightEntity.gpuLightType = gpuLightType; + processedLightEntity.lightType = lightType; + processedLightEntity.distanceToCamera = (additionalLightData.transform.position - hdCamera.camera.transform.position).magnitude; + processedLightEntity.lightDistanceFade = HDUtils.ComputeLinearDistanceFade(processedLightEntity.distanceToCamera, lightRenderData.fadeDistance); + processedLightEntity.lightVolumetricDistanceFade = HDUtils.ComputeLinearDistanceFade(processedLightEntity.distanceToCamera, lightRenderData.volumetricFadeDistance); + processedLightEntity.isBakedShadowMask = HDRenderPipeline.IsBakedShadowMaskLight(lightComponent); + + // Build a visible light + VisibleLight visibleLight = new VisibleLight(); + visibleLight.finalColor = LightUtils.EvaluateLightColor(lightComponent, additionalLightData); + visibleLight.range = lightComponent.range; + // This should be done explicitly, localToWorld matrix doesn't work here + Matrix4x4 localToWorldMatrix = new Matrix4x4(); + localToWorldMatrix.SetColumn(3, lightComponent.gameObject.transform.position); + localToWorldMatrix.SetColumn(2, lightComponent.transform.forward); + localToWorldMatrix.SetColumn(1, lightComponent.transform.up); + localToWorldMatrix.SetColumn(0, lightComponent.transform.right); + visibleLight.localToWorldMatrix = localToWorldMatrix; + visibleLight.spotAngle = lightComponent.spotAngle; + + int shadowIndex = additionalLightData.shadowIndex; + Vector3 lightDimensions = new Vector3(0.0f, 0.0f, 0.0f); + + // Use the shared code to build the light data + HDGpuLightsBuilder.CreateGpuLightDataJob.ConvertLightToGPUFormat( + lightCategory, gpuLightType, globalConfig, + lightComponent.lightShadowCasterMode, lightComponent.bakingOutput, + visibleLight, processedLightEntity, lightRenderData, out var _, ref lightData); + renderPipeline.gpuLightList.ProcessLightDataShadowIndex(cmd, shadowInitParams, lightType, lightComponent, additionalLightData, shadowIndex, ref lightData); + + // We make the light position camera-relative as late as possible in order + // to allow the preceding code to work with the absolute world space coordinates. + Vector3 camPosWS = hdCamera.mainViewConstants.worldSpaceCameraPos; + HDRenderPipeline.UpdateLightCameraRelativetData(ref lightData, camPosWS); + } + } + + #endregion + + #region Env lights + if (worldLights.envLightCount > 0) + { + ProcessedProbeData processedProbe = new ProcessedProbeData(); + + int fetchIndex; + Vector4 scaleOffset; + Matrix4x4 vp; + + // Build the data for every light + for (int lightIdx = 0; lightIdx < worldLights.reflectionProbeArray.Count; ++lightIdx) + { + ref EnvLightData envLightData = ref worldLightsGpu.GetEnvRef(lightIdx); + + envLightData = s_defaultEnvLightData; + + HDProbe probeData = worldLights.reflectionProbeArray[lightIdx]; + + HDRenderPipeline.PreprocessProbeData(ref processedProbe, probeData, hdCamera); + renderPipeline.GetEnvLightData(cmd, hdCamera, processedProbe, ref envLightData, out fetchIndex, out scaleOffset, out vp); + + switch (processedProbe.hdProbe) + { + case PlanarReflectionProbe planarProbe: + worldLightsGpu.SetPlanarReflectionDataRT(fetchIndex, ref vp, ref scaleOffset); + break; + case HDAdditionalReflectionData reflectionData: + worldLightsGpu.SetCubeReflectionDataRT(fetchIndex, ref scaleOffset); + break; + }; + + // We make the light position camera-relative as late as possible in order + // to allow the preceding code to work with the absolute world space coordinates. + Vector3 camPosWS = hdCamera.mainViewConstants.worldSpaceCameraPos; + HDRenderPipeline.UpdateEnvLighCameraRelativetData(ref envLightData, camPosWS); + } + } + #endregion + + worldLightsGpu.PushToGpu(cmd); + } + + public static void BuildWorldLightVolumes(in HDCamera hdCamera, in HDRenderPipeline renderPipeline, in WorldLights worldLights, in Func flagFunc, WorldLightsVolumes worldLightsVolumes) + { + int totalNumLights = worldLights.totalLighttCount; + + worldLightsVolumes.ResizeVolumeBuffer(totalNumLights); + + if (totalNumLights < 1) + return; + + using var profilerScope = k_ProfilerMarkerVolume.Auto(); + + int realIndex = 0; + HDLightRenderDatabase lightEntities = HDLightRenderDatabase.instance; + for (int lightIdx = 0; lightIdx < worldLights.hdLightEntityArray.Length; ++lightIdx) + { + int dataIndex = lightEntities.GetEntityDataIndex(worldLights.hdLightEntityArray[lightIdx]); + HDAdditionalLightData currentLight = lightEntities.hdAdditionalLightData[dataIndex]; + + // When the user deletes a light source in the editor, there is a single frame where the light is null before the collection of light in the scene is triggered + // the workaround for this is simply to not add it if it is null for that invalid frame + if (currentLight != null) + { + // The light is guaranteed to be there since it was checked when gathering the light list + Light light = currentLight.gameObject.GetComponent(); + + var lightType = currentLight.legacyLight.type; + // Reserve space in the cookie atlas + renderPipeline.ReserveCookieAtlasTexture(currentLight, light, lightType); + + // Compute the camera relative position + Vector3 lightPositionRWS = currentLight.gameObject.transform.position; + if (ShaderConfig.s_CameraRelativeRendering != 0) + { + lightPositionRWS -= hdCamera.camera.transform.position; + } + + // Grab the light range + float lightRange = light.range; + + // User defined flags + ref uint lightFlags = ref worldLightsVolumes.GetFlagsRef(realIndex); + lightFlags = flagFunc(hdCamera, currentLight, light) | (currentLight.gameObject.activeInHierarchy ? 1u : 0u); + + ref WorldLightVolume lightVolume = ref worldLightsVolumes.GetRef(realIndex); + + // Common volume data + lightVolume.flags = lightFlags; + lightVolume.lightIndex = (uint)lightIdx; + + bool isAreaLight = lightType.IsArea(); + bool isBoxLight = lightType == LightType.Box; + + if (!isAreaLight && !isBoxLight) + { + lightVolume.range = new Vector3(lightRange, lightRange, lightRange); + lightVolume.position = lightPositionRWS; + lightVolume.shape = 0; + lightVolume.lightType = 0; + + worldLightsVolumes.bounds.Encapsulate(new Bounds(lightPositionRWS, lightVolume.range)); + } + // Area lights and box spot lights require AABB intersection data + else + { + // let's compute the oobb of the light influence volume first + Vector3 oobbDimensions = new Vector3(currentLight.shapeWidth + 2 * lightRange, currentLight.shapeHeight + 2 * lightRange, lightRange); // One-sided + Vector3 extents = 0.5f * oobbDimensions; + Vector3 oobbCenter = lightPositionRWS; + + // Tube lights don't have forward / backward facing and have full extents on all directions as a consequence, since their OOBB is centered + if (lightType == LightType.Tube) + { + oobbDimensions.z *= 2; + extents.z *= 2; + } + else + { + oobbCenter += extents.z * currentLight.gameObject.transform.forward; + } + + // Let's now compute an AABB that matches the previously defined OOBB + Bounds bounds = new Bounds(); + OOBBToAABBBounds(oobbCenter, extents, currentLight.gameObject.transform.up, currentLight.gameObject.transform.right, currentLight.gameObject.transform.forward, ref bounds); + + worldLightsVolumes.bounds.Encapsulate(bounds); + + // Fill the volume data + lightVolume.range = bounds.extents; + lightVolume.position = bounds.center; + lightVolume.shape = 1; + lightVolume.lightType = 1; + + if (isAreaLight) + { + lightVolume.lightType = 1; + } + else + { + lightVolume.lightType = 0; + } + } + realIndex++; + } + } + + // Set Env Light volume data to the CPU buffer + for (int lightIdx = 0; lightIdx < worldLights.reflectionProbeArray.Count; ++lightIdx) + { + HDProbe currentEnvLight = worldLights.reflectionProbeArray[lightIdx]; + + // Compute the camera relative position + Vector3 probePositionRWS = currentEnvLight.influenceToWorld.GetColumn(3); + if (ShaderConfig.s_CameraRelativeRendering != 0) + { + probePositionRWS -= hdCamera.camera.transform.position; + } + + ref WorldLightVolume lightVolume = ref worldLightsVolumes.GetRef(realIndex); + + if (currentEnvLight.influenceVolume.shape == InfluenceShape.Sphere) + { + lightVolume.shape = 0; + lightVolume.range = new Vector3(currentEnvLight.influenceVolume.sphereRadius, currentEnvLight.influenceVolume.sphereRadius, currentEnvLight.influenceVolume.sphereRadius); + lightVolume.position = probePositionRWS; + } + else + { + lightVolume.shape = 1; + lightVolume.range = new Vector3(currentEnvLight.influenceVolume.boxSize.x / 2.0f, currentEnvLight.influenceVolume.boxSize.y / 2.0f, currentEnvLight.influenceVolume.boxSize.z / 2.0f); + lightVolume.position = probePositionRWS; + } + + // User defined flags + // TODO-WL: Hard coded flags for Env lights + ref uint lightFlags = ref worldLightsVolumes.GetFlagsRef(realIndex); + lightFlags = lightVolume.flags = (uint)WorldLightFlags.Raytracing | (currentEnvLight.gameObject.activeInHierarchy ? 1u : 0u); + lightVolume.lightIndex = (uint)lightIdx; + lightVolume.lightType = 2; + + worldLightsVolumes.bounds.Encapsulate(new Bounds(probePositionRWS, lightVolume.range)); + realIndex++; + } + + // Add Decal data to m_lightVolumesCPUArray + for (int decalIdx = 0; decalIdx < worldLights.decalCount; ++decalIdx) + { + ref WorldLightVolume lightVolume = ref worldLightsVolumes.GetRef(realIndex); + // Decal projectors are box shaped + lightVolume.shape = 1; + + // Compute the camera relative position + Vector3 decalPositionRWS = DecalSystem.instance.GetClusteredDecalPosition(decalIdx); + if (ShaderConfig.s_CameraRelativeRendering != 0) + { + decalPositionRWS -= hdCamera.camera.transform.position; + } + lightVolume.position = decalPositionRWS; + lightVolume.range = DecalSystem.instance.GetClusteredDecalRange(decalIdx); + lightVolume.lightIndex = (uint)decalIdx; + lightVolume.lightType = 3; + // TODO-WL: Hard coded flags for Decals + ref uint lightFlags = ref worldLightsVolumes.GetFlagsRef(realIndex); + lightFlags = lightVolume.flags = (uint)WorldLightFlags.Raytracing |(uint)WorldLightFlags.Pathtracing | (uint)WorldLightFlags.Active; + + realIndex++; + } + + worldLightsVolumes.PushToGpu(); + } + + static readonly ProfilerMarker k_ProfilerMarkerCollect = new ("WorldLightManager.Collect"); + static readonly ProfilerMarker k_ProfilerMarkerBuild = new ("WorldLightManager.Build"); + static readonly ProfilerMarker k_ProfilerMarkerVolume = new ("WorldLightManager.Volumes"); + internal const int SizeAlignment = 32; + internal static Vector3 minBounds = new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); + internal static Vector3 maxBounds = new Vector3(-float.MaxValue, -float.MaxValue, -float.MaxValue); + internal static LightData s_defaultLightData = new LightData(); + internal static EnvLightData s_defaultEnvLightData = new EnvLightData(); + + private static void OOBBToAABBBounds(Vector3 centerWS, Vector3 extents, Vector3 up, Vector3 right, Vector3 forward, ref Bounds bounds) + { + // Reset the bounds of the AABB + bounds.min = minBounds; + bounds.max = maxBounds; + + // Push the 8 corners of the oobb into the AABB + bounds.Encapsulate(centerWS + right * extents.x + up * extents.y + forward * extents.z); + bounds.Encapsulate(centerWS + right * extents.x + up * extents.y - forward * extents.z); + bounds.Encapsulate(centerWS + right * extents.x - up * extents.y + forward * extents.z); + bounds.Encapsulate(centerWS + right * extents.x - up * extents.y - forward * extents.z); + bounds.Encapsulate(centerWS - right * extents.x + up * extents.y + forward * extents.z); + bounds.Encapsulate(centerWS - right * extents.x + up * extents.y - forward * extents.z); + bounds.Encapsulate(centerWS - right * extents.x - up * extents.y + forward * extents.z); + bounds.Encapsulate(centerWS - right * extents.x - up * extents.y - forward * extents.z); + } + } +} // namespace UnityEngine.Rendering.HighDefinition diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.hlsl similarity index 57% rename from Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs.hlsl rename to Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.hlsl index 40797b1faa1..df21df71b40 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.hlsl @@ -2,14 +2,14 @@ // This file was automatically generated. Please don't edit by hand. Execute Editor command [ Edit > Rendering > Generate Shader Includes ] instead // -#ifndef HDRAYTRACINGLIGHTCLUSTER_CS_HLSL -#define HDRAYTRACINGLIGHTCLUSTER_CS_HLSL -// Generated from UnityEngine.Rendering.HighDefinition.LightVolume +#ifndef WORLDLIGHTMANAGER_CS_HLSL +#define WORLDLIGHTMANAGER_CS_HLSL +// Generated from UnityEngine.Rendering.HighDefinition.WorldLightVolume // PackingRules = Exact -struct LightVolume +struct WorldLightVolume { - int active; - int shape; + uint flags; + uint shape; float3 position; float3 range; uint lightType; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.hlsl.meta b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.hlsl.meta new file mode 100644 index 00000000000..294d646cc52 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 62c89a7d171eab148b3b764987923de6 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.meta b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.meta new file mode 100644 index 00000000000..b6b3ce409ef --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bcbc687ec25870f4c8c3983df6261571 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs index 360a18d2fdf..dfba33c036e 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs @@ -10,7 +10,7 @@ enum ConstantRegister PBRSky = 2, RayTracing = 3, RayTracingLightLoop = 4, - RayTracingEnvLightReflectionData = 5, + WorldEnvLightReflectionData = 5, APV = APVConstantBufferRegister.GlobalRegister, } @@ -186,6 +186,11 @@ unsafe struct ShaderVariablesGlobal public uint _AreaLightCount; public uint _EnvLightCount; + public uint _WorldDirectionalLightCount; + public uint _WorldPunctualLightCount; + public uint _WorldAreaLightCount; + public uint _WorldEnvLightCount; + public int _EnvLightSkyEnabled; public uint _CascadeShadowCount; public int _DirectionalShadowIndex; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl index 762a2f0c64a..707252cd949 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl @@ -102,6 +102,10 @@ GLOBAL_CBUFFER_START(ShaderVariablesGlobal, b0) uint _PunctualLightCount; uint _AreaLightCount; uint _EnvLightCount; + uint _WorldDirectionalLightCount; + uint _WorldPunctualLightCount; + uint _WorldAreaLightCount; + uint _WorldEnvLightCount; int _EnvLightSkyEnabled; uint _CascadeShadowCount; int _DirectionalShadowIndex; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.hlsl index 02d8933f336..afa6fff6e01 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.hlsl @@ -7,22 +7,23 @@ // ------------------------------------------------------------------------------------------------------------- #define RAY_TRACING_ACCELERATION_STRUCTURE_REGISTER t0 #define RAY_TRACING_LIGHT_CLUSTER_REGISTER t1 -#define RAY_TRACING_LIGHT_DATA_REGISTER t2 -#define RAY_TRACING_ENV_LIGHT_DATA_REGISTER t3 -#define RAY_TRACING_CACHED_AREA_LIGHT_SHADOWMAP_ATLAS_REGISTER t4 -#define RAY_TRACING_CACHED_SHADOWMAP_ATLAS_REGISTER t5 -#define RAY_TRACING_SHADOWMAP_AREA_ATLAS_REGISTER t6 -#define RAY_TRACING_SHADOWMAP_ATLAS_REGISTER t7 -#define RAY_TRACING_SHADOWMAP_CASCADE_ATLAS_REGISTER t8 -#define RAY_TRACING_COOKIE_ATLAS_REGISTER t9 -#define RAY_TRACING_SKY_TEXTURE_REGISTER t10 -#define RAY_TRACING_REFLECTION_ATLAS_REGISTER t11 -#define RAY_TRACING_DIRECTIONAL_LIGHT_DATAS_REGISTER t12 -#define RAY_TRACING_HD_SHADOW_DATAS_REGISTER t13 -#define RAY_TRACING_HD_DIRECTIONAL_SHADOW_DATA_REGISTER t14 -#define RAY_TRACING_AMBIENT_PROBE_DATA_REGISTER t15 -#define RAY_TRACING_LIGHT_DATAS_REGISTER t16 -#define RAY_TRACING_VOLUMETRIC_CLOUDS_SHADOW_REGISTER t17 +#define RAY_TRACING_CACHED_AREA_LIGHT_SHADOWMAP_ATLAS_REGISTER t2 +#define RAY_TRACING_CACHED_SHADOWMAP_ATLAS_REGISTER t3 +#define RAY_TRACING_SHADOWMAP_AREA_ATLAS_REGISTER t4 +#define RAY_TRACING_SHADOWMAP_ATLAS_REGISTER t5 +#define RAY_TRACING_SHADOWMAP_CASCADE_ATLAS_REGISTER t6 +#define RAY_TRACING_COOKIE_ATLAS_REGISTER t7 +#define RAY_TRACING_SKY_TEXTURE_REGISTER t8 +#define RAY_TRACING_REFLECTION_ATLAS_REGISTER t9 +#define RAY_TRACING_DIRECTIONAL_LIGHT_DATAS_REGISTER t10 +#define RAY_TRACING_HD_SHADOW_DATAS_REGISTER t11 +#define RAY_TRACING_HD_DIRECTIONAL_SHADOW_DATA_REGISTER t12 +#define RAY_TRACING_AMBIENT_PROBE_DATA_REGISTER t13 +#define RAY_TRACING_LIGHT_DATAS_REGISTER t14 +#define RAY_TRACING_ENV_LIGHT_DATAS_REGISTER t15 +#define RAY_TRACING_WORLD_LIGHT_DATAS_REGISTER t16 +#define RAY_TRACING_WORLD_ENV_LIGHT_DATAS_REGISTER t17 +#define RAY_TRACING_VOLUMETRIC_CLOUDS_SHADOW_REGISTER t18 #include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl" diff --git a/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/WorldLightManagerTests.cs b/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/WorldLightManagerTests.cs new file mode 100644 index 00000000000..8f703f61089 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/WorldLightManagerTests.cs @@ -0,0 +1,125 @@ +using NUnit.Framework; +using System; + +namespace UnityEngine.Rendering.HighDefinition.Tests +{ + class WorldLightManagerTests + { + WorldLights m_WorldLights = null; + WorldLightsGpu m_WorldLightsGpu = null; + WorldLightsSettings m_WorldLightsSettings = null; + + [SetUp] + public void Setup() + { + m_WorldLights = new WorldLights(); + m_WorldLightsGpu = new WorldLightsGpu(); + m_WorldLightsSettings = new WorldLightsSettings(); + m_WorldLightsSettings.enabled = true; + } + + [TearDown] + public void TearDown() + { + m_WorldLights.Release(); + m_WorldLightsGpu.Release(); + } + + private const float magic = 1.23456f; + + private GameObject CreateLight(string name, LightType type) + { + var lightGameObject = new GameObject(name); + var light1 = lightGameObject.AddComponent(); + light1.type = type; + light1.intensity = 1f; + light1.range = magic; + light1.spotAngle = 1f; + + lightGameObject.AddHDLight(type); + + return lightGameObject; + } + + // Disable the tests since they don't work outside of the editor + // [Test] + public void BasicCreateLightTest() + { + GameObject cameraGameObject = new GameObject("Camera"); + Camera camera = cameraGameObject.AddComponent(); + HDCamera HdCamera = new HDCamera(camera); + + if (!VolumeManager.instance.isInitialized) + VolumeManager.instance.Initialize(); + + var lightGameObject1 = CreateLight("Light1", LightType.Spot); + var lightGameObject2 = CreateLight("Light2", LightType.Rectangle); + + Func flagsFunc = delegate(HDCamera hdCamera, HDAdditionalLightData data, Light light) + { + uint result = light.range == magic ? 0xffu : 0u; + + return result; + }; + HDLightRenderDatabase.instance.Cleanup(); + + WorldLightManager.CollectWorldLights(HdCamera, m_WorldLightsSettings, flagsFunc, m_WorldLights); + + Debug.Assert(m_WorldLights.normalLightCount == 2); + + Object.DestroyImmediate(lightGameObject1); + + WorldLightManager.CollectWorldLights(HdCamera, m_WorldLightsSettings, flagsFunc, m_WorldLights); + + Debug.Assert(m_WorldLights.normalLightCount == 1); + + Object.DestroyImmediate(lightGameObject2); + + Object.DestroyImmediate(cameraGameObject); + } + + // Disable the tests since they don't work outside of the editor + // [Test] + public void BasicCreateLightGpuTest() + { + GameObject cameraGameObject = new GameObject("Camera"); + Camera camera = cameraGameObject.AddComponent(); + HDCamera hdCamera = new HDCamera(camera); + + if (!VolumeManager.instance.isInitialized) + VolumeManager.instance.Initialize(); + + var lightGameObject1 = CreateLight("Light1", LightType.Spot); + var lightGameObject2 = CreateLight("Light2", LightType.Rectangle); + + Func flagsFunc = delegate(HDCamera hdCamera, HDAdditionalLightData data, Light light) + { + uint result = light.range == magic ? 0xffu : 0u; + + return result; + }; + HDLightRenderDatabase.instance.Cleanup(); + + WorldLightManager.CollectWorldLights(hdCamera, m_WorldLightsSettings, flagsFunc, m_WorldLights); + + var renderPipeline = RenderPipelineManager.currentPipeline as HDRenderPipeline; + var cmd = CommandBufferPool.Get(); + + WorldLightManager.BuildWorldLightDatas(cmd, hdCamera, renderPipeline, m_WorldLights, m_WorldLightsGpu); + + void AssertLightData(int i) + { + ref LightData lightData = ref m_WorldLightsGpu.GetRef(i); + Debug.Assert(lightData.range == magic); + } + + AssertLightData(0); + AssertLightData(1); + + Object.DestroyImmediate(lightGameObject1); + Object.DestroyImmediate(lightGameObject2); + + Object.DestroyImmediate(cameraGameObject); + } + } +} diff --git a/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/WorldLightManagerTests.cs.meta b/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/WorldLightManagerTests.cs.meta new file mode 100644 index 00000000000..044e3b21315 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/WorldLightManagerTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e38585d3075a4cc0b09ebe7b2e0f62cc +timeCreated: 1678434337 \ No newline at end of file From 9801f15fe9e717c077486f0ce55349ee3e28cd56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvar=20=C3=96rn=20Unn=C3=BE=C3=B3rsson?= Date: Wed, 11 Oct 2023 02:14:14 +0000 Subject: [PATCH 02/27] [POI-817][2023.3][URP] Main thread performance improvements - V1 * [POI-817](https://jira.unity3d.com/browse/POI-817) * [URP-1998](https://jira.unity3d.com/browse/URP-1998) * [URP-2044](https://jira.unity3d.com/browse/URP-2044) * [URP-2040](https://jira.unity3d.com/browse/URP-2040) This PR makes sure URP... * ...uses PlatformAutoDetect to cache the results of `GraphicsSettings.HasShaderDefine(BuiltinShaderDefine.SHADER_API_MOBILE)` * ...doesn't call `BuildAdditionalLightsShadowAtlasLayout` when additional light shadows are disabled in URP Asset * ...doesn't call `InitializeMainLightShadowResolution` when main light shadows are disabled in URP Asset * ...doesn't calculate rendering/light layers when the feature is disabled in the URP Asset * ...uses the SHAutoDetect function in PlatformAutoDetect --- .../Runtime/ForwardLights.cs | 64 ++++---- .../RendererFeatures/DecalRendererFeature.cs | 2 +- .../Runtime/ShadowCulling.cs | 12 +- .../Runtime/ShadowUtils.cs | 141 ++++++++++++------ .../Runtime/UniversalRenderPipeline.cs | 76 ++++++---- .../Runtime/UniversalRenderPipelineCore.cs | 26 +++- 6 files changed, 206 insertions(+), 115 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ForwardLights.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ForwardLights.cs index 8c3cd1c93d5..80305b75d9b 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ForwardLights.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ForwardLights.cs @@ -413,12 +413,9 @@ internal void SetupLights(CommandBuffer cmd, UniversalRenderingData renderingDat SetupShaderLightConstants(cmd, ref renderingData.cullResults, lightData); bool lightCountCheck = (cameraData.renderer.stripAdditionalLightOffVariants && lightData.supportsAdditionalLights) || additionalLightsCount > 0; - cmd.SetKeyword(ShaderGlobalKeywords.AdditionalLightsVertex, - lightCountCheck && additionalLightsPerVertex && !m_UseForwardPlus); - cmd.SetKeyword(ShaderGlobalKeywords.AdditionalLightsPixel, - lightCountCheck && !additionalLightsPerVertex && !m_UseForwardPlus); - cmd.SetKeyword(ShaderGlobalKeywords.ForwardPlus, - m_UseForwardPlus); + cmd.SetKeyword(ShaderGlobalKeywords.AdditionalLightsVertex, lightCountCheck && additionalLightsPerVertex && !m_UseForwardPlus); + cmd.SetKeyword(ShaderGlobalKeywords.AdditionalLightsPixel, lightCountCheck && !additionalLightsPerVertex && !m_UseForwardPlus); + cmd.SetKeyword(ShaderGlobalKeywords.ForwardPlus, m_UseForwardPlus); bool isShadowMask = lightData.supportsMixedLighting && m_MixedLightingSetup == MixedLightingSetup.ShadowMask; bool isShadowMaskAlways = isShadowMask && QualitySettings.shadowmaskMode == ShadowmaskMode.Shadowmask; @@ -438,27 +435,11 @@ internal void SetupLights(CommandBuffer cmd, UniversalRenderingData renderingDat cmd.SetKeyword(ShaderGlobalKeywords.ProbeVolumeL2, apvIsEnabled && probeVolumeSHBands == ProbeVolumeSHBands.SphericalHarmonicsL2); // TODO: If we can robustly detect LIGHTMAP_ON, we can skip SH logic. - { - ShEvalMode ShAutoDetect(ShEvalMode mode) - { - if (mode == ShEvalMode.Auto) - { - if (PlatformAutoDetect.isXRMobile) - return ShEvalMode.PerVertex; - else - return ShEvalMode.PerPixel; - } - - return mode; - } - - var shMode = ShAutoDetect(asset.shEvalMode); - - cmd.SetKeyword(ShaderGlobalKeywords.EVALUATE_SH_MIXED, shMode == ShEvalMode.Mixed); - cmd.SetKeyword(ShaderGlobalKeywords.EVALUATE_SH_VERTEX, shMode == ShEvalMode.PerVertex); - } + var shMode = PlatformAutoDetect.ShAutoDetect(asset.shEvalMode); + cmd.SetKeyword(ShaderGlobalKeywords.EVALUATE_SH_MIXED, shMode == ShEvalMode.Mixed); + cmd.SetKeyword(ShaderGlobalKeywords.EVALUATE_SH_VERTEX, shMode == ShEvalMode.PerVertex); + var stack = VolumeManager.instance.stack; - bool enableProbeVolumes = ProbeReferenceVolume.instance.UpdateShaderVariablesProbeVolumes(cmd, stack.GetComponent(), cameraData.IsTemporalAAEnabled() ? Time.frameCount : 0); @@ -494,7 +475,7 @@ internal void Cleanup() } } - void InitializeLightConstants(NativeArray lights, int lightIndex, out Vector4 lightPos, out Vector4 lightColor, out Vector4 lightAttenuation, out Vector4 lightSpotDir, out Vector4 lightOcclusionProbeChannel, out uint lightLayerMask, out bool isSubtractive) + void InitializeLightConstants(NativeArray lights, int lightIndex, bool supportsLightLayers, out Vector4 lightPos, out Vector4 lightColor, out Vector4 lightAttenuation, out Vector4 lightSpotDir, out Vector4 lightOcclusionProbeChannel, out uint lightLayerMask, out bool isSubtractive) { UniversalRenderPipeline.InitializeLightConstants_Common(lights, lightIndex, out lightPos, out lightColor, out lightAttenuation, out lightSpotDir, out lightOcclusionProbeChannel); lightLayerMask = 0; @@ -528,8 +509,11 @@ void InitializeLightConstants(NativeArray lights, int lightIndex, } } - var additionalLightData = light.GetUniversalAdditionalLightData(); - lightLayerMask = RenderingLayerUtils.ToValidRenderingLayers(additionalLightData.renderingLayers); + if (supportsLightLayers) + { + var additionalLightData = light.GetUniversalAdditionalLightData(); + lightLayerMask = RenderingLayerUtils.ToValidRenderingLayers(additionalLightData.renderingLayers); + } } void SetupShaderLightConstants(CommandBuffer cmd, ref CullingResults cullResults, UniversalLightData lightData) @@ -545,19 +529,23 @@ void SetupShaderLightConstants(CommandBuffer cmd, ref CullingResults cullResults void SetupMainLightConstants(CommandBuffer cmd, UniversalLightData lightData) { Vector4 lightPos, lightColor, lightAttenuation, lightSpotDir, lightOcclusionChannel; + bool supportsLightLayers = lightData.supportsLightLayers; uint lightLayerMask; bool isSubtractive; - InitializeLightConstants(lightData.visibleLights, lightData.mainLightIndex, out lightPos, out lightColor, out lightAttenuation, out lightSpotDir, out lightOcclusionChannel, out lightLayerMask, out isSubtractive); + InitializeLightConstants(lightData.visibleLights, lightData.mainLightIndex, supportsLightLayers, out lightPos, out lightColor, out lightAttenuation, out lightSpotDir, out lightOcclusionChannel, out lightLayerMask, out isSubtractive); lightColor.w = isSubtractive ? 0f : 1f; cmd.SetGlobalVector(LightConstantBuffer._MainLightPosition, lightPos); cmd.SetGlobalVector(LightConstantBuffer._MainLightColor, lightColor); cmd.SetGlobalVector(LightConstantBuffer._MainLightOcclusionProbesChannel, lightOcclusionChannel); - cmd.SetGlobalInt(LightConstantBuffer._MainLightLayerMask, (int)lightLayerMask); + + if (supportsLightLayers) + cmd.SetGlobalInt(LightConstantBuffer._MainLightLayerMask, (int)lightLayerMask); } void SetupAdditionalLightConstants(CommandBuffer cmd, ref CullingResults cullResults, UniversalLightData lightData) { + bool supportsLightLayers = lightData.supportsLightLayers; var lights = lightData.visibleLights; int maxAdditionalLightsCount = UniversalRenderPipeline.maxVisibleAdditionalLights; int additionalLightsCount = SetupPerObjectLightIndices(cullResults, lightData); @@ -571,7 +559,7 @@ void SetupAdditionalLightConstants(CommandBuffer cmd, ref CullingResults cullRes if (lightData.mainLightIndex != i) { ShaderInput.LightData data; - InitializeLightConstants(lights, i, + InitializeLightConstants(lights, i, supportsLightLayers, out data.position, out data.color, out data.attenuation, out data.spotDirection, out data.occlusionProbeChannels, out data.layerMask, out _); @@ -600,6 +588,7 @@ void SetupAdditionalLightConstants(CommandBuffer cmd, ref CullingResults cullRes InitializeLightConstants( lights, i, + supportsLightLayers, out m_AdditionalLightPositions[lightIter], out m_AdditionalLightColors[lightIter], out m_AdditionalLightAttenuations[lightIter], @@ -608,7 +597,9 @@ void SetupAdditionalLightConstants(CommandBuffer cmd, ref CullingResults cullRes out uint lightLayerMask, out var isSubtractive); - m_AdditionalLightsLayerMasks[lightIter] = math.asfloat(lightLayerMask); + if (supportsLightLayers) + m_AdditionalLightsLayerMasks[lightIter] = math.asfloat(lightLayerMask); + m_AdditionalLightColors[lightIter].w = isSubtractive ? 1f : 0f; lightIter++; } @@ -619,11 +610,12 @@ void SetupAdditionalLightConstants(CommandBuffer cmd, ref CullingResults cullRes cmd.SetGlobalVectorArray(LightConstantBuffer._AdditionalLightsAttenuation, m_AdditionalLightAttenuations); cmd.SetGlobalVectorArray(LightConstantBuffer._AdditionalLightsSpotDir, m_AdditionalLightSpotDirections); cmd.SetGlobalVectorArray(LightConstantBuffer._AdditionalLightOcclusionProbeChannel, m_AdditionalLightOcclusionProbeChannels); - cmd.SetGlobalFloatArray(LightConstantBuffer._AdditionalLightsLayerMasks, m_AdditionalLightsLayerMasks); + + if (supportsLightLayers) + cmd.SetGlobalFloatArray(LightConstantBuffer._AdditionalLightsLayerMasks, m_AdditionalLightsLayerMasks); } - cmd.SetGlobalVector(LightConstantBuffer._AdditionalLightsCount, new Vector4(lightData.maxPerObjectAdditionalLightsCount, - 0.0f, 0.0f, 0.0f)); + cmd.SetGlobalVector(LightConstantBuffer._AdditionalLightsCount, new Vector4(lightData.maxPerObjectAdditionalLightsCount, 0.0f, 0.0f, 0.0f)); } else { diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index 01f729af663..46cc6c8bda0 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -368,7 +368,7 @@ private bool IsAutomaticDBuffer() if (Application.platform == RuntimePlatform.WebGLPlayer) return false; #endif - return !GraphicsSettings.HasShaderDefine(BuiltinShaderDefine.SHADER_API_MOBILE); + return !PlatformAutoDetect.isShaderAPIMobileDefined; } private bool RecreateSystemsIfNeeded(ScriptableRenderer renderer, in CameraData cameraData) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ShadowCulling.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ShadowCulling.cs index f39a1880ff2..5d84809fd5e 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ShadowCulling.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ShadowCulling.cs @@ -17,20 +17,20 @@ internal static class ShadowCulling static readonly ProfilingSampler computeShadowCasterCullingInfosMarker = new ProfilingSampler($"{nameof(UniversalRenderPipeline)}.{nameof(ComputeShadowCasterCullingInfos)}"); public static NativeArray CullShadowCasters(ref ScriptableRenderContext context, - ref ShadowData shadowData, + UniversalShadowData shadowData, ref AdditionalLightsShadowAtlasLayout shadowAtlasLayout, ref CullingResults cullResults) { ShadowCastersCullingInfos shadowCullingInfos; NativeArray urpVisibleLightsShadowCullingInfos; - ComputeShadowCasterCullingInfos(ref shadowData, ref shadowAtlasLayout, ref cullResults, out shadowCullingInfos, out urpVisibleLightsShadowCullingInfos); + ComputeShadowCasterCullingInfos(shadowData, ref shadowAtlasLayout, ref cullResults, out shadowCullingInfos, out urpVisibleLightsShadowCullingInfos); context.CullShadowCasters(cullResults, shadowCullingInfos); return urpVisibleLightsShadowCullingInfos; } - static void ComputeShadowCasterCullingInfos(ref ShadowData shadowData, + static void ComputeShadowCasterCullingInfos(UniversalShadowData shadowData, ref AdditionalLightsShadowAtlasLayout shadowAtlasLayout, ref CullingResults cullingResults, out ShadowCastersCullingInfos shadowCullingInfos, @@ -71,7 +71,7 @@ static void ComputeShadowCasterCullingInfos(ref ShadowData shadowData, for (int i = 0; i < splitCount; ++i) { ShadowSliceData slice = default; - bool isValid = ShadowUtils.ExtractDirectionalLightMatrix(ref cullingResults, ref shadowData, + bool isValid = ShadowUtils.ExtractDirectionalLightMatrix(ref cullingResults, shadowData, lightIndex, i, renderTargetWidth, renderTargetHeight, shadowResolution, visibleLight.light.shadowNearPlane, out _, // Vector4 cascadeSplitDistance. This is basically just the culling sphere which is already present in ShadowSplitData out slice); @@ -102,7 +102,7 @@ static void ComputeShadowCasterCullingInfos(ref ShadowData shadowData, { ShadowSliceData slice = default; bool isValid = ShadowUtils.ExtractPointLightMatrix(ref cullingResults, - ref shadowData, + shadowData, lightIndex, (CubemapFace)i, fovBias, @@ -128,7 +128,7 @@ static void ComputeShadowCasterCullingInfos(ref ShadowData shadowData, ShadowSliceData slice = default; bool isValid = ShadowUtils.ExtractSpotLightMatrix(ref cullingResults, - ref shadowData, + shadowData, lightIndex, out slice.shadowTransform, out slice.viewMatrix, diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ShadowUtils.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ShadowUtils.cs index 00c4a1606a1..8996d499320 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ShadowUtils.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ShadowUtils.cs @@ -74,19 +74,19 @@ static ShadowUtils() /// /// Extracts the directional light matrix. /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// + /// The results of a culling operation. + /// Data containing shadow settings. + /// The visible light index. + /// The cascade index. + /// The shadow map width. + /// The shadow map height. + /// The shadow map resolution. + /// Near plane value to use for shadow frustums. + /// The culling sphere for the cascade. + /// The struct container for shadow slice data. + /// The view matrix to be set. + /// The projection matrix to be set. + /// True if the matrix was successfully extracted. public static bool ExtractDirectionalLightMatrix(ref CullingResults cullResults, ref ShadowData shadowData, int shadowLightIndex, int cascadeIndex, int shadowmapWidth, int shadowmapHeight, int shadowResolution, float shadowNearPlane, out Vector4 cascadeSplitDistance, out ShadowSliceData shadowSliceData, out Matrix4x4 viewMatrix, out Matrix4x4 projMatrix) { bool result = ExtractDirectionalLightMatrix(ref cullResults, ref shadowData, shadowLightIndex, cascadeIndex, shadowmapWidth, shadowmapHeight, shadowResolution, shadowNearPlane, out cascadeSplitDistance, out shadowSliceData); @@ -98,18 +98,39 @@ public static bool ExtractDirectionalLightMatrix(ref CullingResults cullResults, /// /// Extracts the directional light matrix. /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// + /// The results of a culling operation. + /// Data containing shadow settings. + /// The visible light index. + /// The cascade index. + /// The shadow map width. + /// The shadow map height. + /// The shadow map resolution. + /// Near plane value to use for shadow frustums. + /// The culling sphere for the cascade. + /// The struct container for shadow slice data. + /// True if the matrix was successfully extracted. public static bool ExtractDirectionalLightMatrix(ref CullingResults cullResults, ref ShadowData shadowData, int shadowLightIndex, int cascadeIndex, int shadowmapWidth, int shadowmapHeight, int shadowResolution, float shadowNearPlane, out Vector4 cascadeSplitDistance, out ShadowSliceData shadowSliceData) + { + return ExtractDirectionalLightMatrix(ref cullResults, shadowData.universalShadowData, + shadowLightIndex, cascadeIndex, shadowmapWidth, shadowmapHeight, shadowResolution, + shadowNearPlane, out cascadeSplitDistance, out shadowSliceData); + } + + /// + /// Extracts the directional light matrix. + /// + /// The results of a culling operation. + /// Data containing shadow settings. + /// The visible light index. + /// The cascade index. + /// The shadow map width. + /// The shadow map height. + /// The shadow map resolution. + /// Near plane value to use for shadow frustums. + /// The culling sphere for the cascade. + /// The struct container for shadow slice data. + /// True if the matrix was successfully extracted. + public static bool ExtractDirectionalLightMatrix(ref CullingResults cullResults, UniversalShadowData shadowData, int shadowLightIndex, int cascadeIndex, int shadowmapWidth, int shadowmapHeight, int shadowResolution, float shadowNearPlane, out Vector4 cascadeSplitDistance, out ShadowSliceData shadowSliceData) { bool success = cullResults.ComputeDirectionalShadowMatricesAndCullingPrimitives(shadowLightIndex, cascadeIndex, shadowData.mainLightShadowCascadesCount, shadowData.mainLightShadowCascadesSplit, shadowResolution, shadowNearPlane, out shadowSliceData.viewMatrix, out shadowSliceData.projectionMatrix, @@ -136,15 +157,31 @@ public static bool ExtractDirectionalLightMatrix(ref CullingResults cullResults, /// /// Extracts the spot light matrix. /// - /// - /// - /// - /// - /// - /// - /// - /// + /// The results of a culling operation. + /// Data containing shadow settings. + /// The visible light index. + /// The shadow matrix to be set. + /// The view matrix to be set. + /// The projection matrix to be set. + /// The shadow split data containing culling information. + /// True if the matrix was successfully extracted. public static bool ExtractSpotLightMatrix(ref CullingResults cullResults, ref ShadowData shadowData, int shadowLightIndex, out Matrix4x4 shadowMatrix, out Matrix4x4 viewMatrix, out Matrix4x4 projMatrix, out ShadowSplitData splitData) + { + return ExtractSpotLightMatrix(ref cullResults, shadowData.universalShadowData, shadowLightIndex, out shadowMatrix, out viewMatrix, out projMatrix, out splitData); + } + + /// + /// Extracts the spot light matrix. + /// + /// The results of a culling operation. + /// Data containing shadow settings. + /// The visible light index. + /// The shadow matrix to be set. + /// The view matrix to be set. + /// The projection matrix to be set. + /// The shadow split data containing culling information. + /// True if the matrix was successfully extracted. + public static bool ExtractSpotLightMatrix(ref CullingResults cullResults, UniversalShadowData shadowData, int shadowLightIndex, out Matrix4x4 shadowMatrix, out Matrix4x4 viewMatrix, out Matrix4x4 projMatrix, out ShadowSplitData splitData) { bool success = cullResults.ComputeSpotShadowMatricesAndCullingPrimitives(shadowLightIndex, out viewMatrix, out projMatrix, out splitData); // returns false if input parameters are incorrect (rare) shadowMatrix = GetShadowTransform(projMatrix, viewMatrix); @@ -152,19 +189,37 @@ public static bool ExtractSpotLightMatrix(ref CullingResults cullResults, ref Sh } /// - /// Extracts the spot light matrix. + /// Extracts the point light matrix. /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// + /// The results of a culling operation. + /// Data containing shadow settings. + /// The visible light index. + /// The face of the cubemap to use. + /// The guard angle that must be added to a point light shadow face frustum angle in order to avoid shadows missing at the boundaries between cube faces. + /// The shadow matrix to be set. + /// The view matrix to be set. + /// The projection matrix to be set. + /// The shadow split data containing culling information. + /// True if the matrix was successfully extracted. public static bool ExtractPointLightMatrix(ref CullingResults cullResults, ref ShadowData shadowData, int shadowLightIndex, CubemapFace cubemapFace, float fovBias, out Matrix4x4 shadowMatrix, out Matrix4x4 viewMatrix, out Matrix4x4 projMatrix, out ShadowSplitData splitData) + { + return ExtractPointLightMatrix(ref cullResults, shadowData.universalShadowData, shadowLightIndex, cubemapFace, fovBias, out shadowMatrix, out viewMatrix, out projMatrix, out splitData); + } + + /// + /// Extracts the point light matrix. + /// + /// The results of a culling operation. + /// Data containing shadow settings. + /// The visible light index. + /// The face of the cubemap to use. + /// The guard angle that must be added to a point light shadow face frustum angle in order to avoid shadows missing at the boundaries between cube faces. + /// The shadow matrix to be set. + /// The view matrix to be set. + /// The projection matrix to be set. + /// The shadow split data containing culling information. + /// True if the matrix was successfully extracted. + public static bool ExtractPointLightMatrix(ref CullingResults cullResults, UniversalShadowData shadowData, int shadowLightIndex, CubemapFace cubemapFace, float fovBias, out Matrix4x4 shadowMatrix, out Matrix4x4 viewMatrix, out Matrix4x4 projMatrix, out ShadowSplitData splitData) { bool success = cullResults.ComputePointShadowMatricesAndCullingPrimitives(shadowLightIndex, cubemapFace, fovBias, out viewMatrix, out projMatrix, out splitData); // returns false if input parameters are incorrect (rare) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs index 20bc17105fe..2be5a0f69ea 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs @@ -141,13 +141,13 @@ public static int maxVisibleAdditionalLights get { // Must match: Input.hlsl, MAX_VISIBLE_LIGHTS - bool isMobile = GraphicsSettings.HasShaderDefine(BuiltinShaderDefine.SHADER_API_MOBILE); - if (isMobile && (SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLES3 && Graphics.minOpenGLESVersion <= OpenGLESVersion.OpenGLES30)) + bool isMobileOrMobileBuildTarget = PlatformAutoDetect.isShaderAPIMobileDefined; + if (isMobileOrMobileBuildTarget && (SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLES3 && Graphics.minOpenGLESVersion <= OpenGLESVersion.OpenGLES30)) return k_MaxVisibleAdditionalLightsMobileShaderLevelLessThan45; // GLES can be selected as platform on Windows (not a mobile platform) but uniform buffer size so we must use a low light count. // WebGPU's minimal limits are based on mobile rather than desktop, so it will need to assume mobile. - return (isMobile || SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLCore || SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLES3 || SystemInfo.graphicsDeviceType == GraphicsDeviceType.WebGPU) + return (isMobileOrMobileBuildTarget || SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLCore || SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLES3 || SystemInfo.graphicsDeviceType == GraphicsDeviceType.WebGPU) ? k_MaxVisibleAdditionalLightsMobile : k_MaxVisibleAdditionalLightsNonMobile; } } @@ -761,30 +761,28 @@ static void RenderSingleCamera(ScriptableRenderContext context, UniversalCameraD var isForwardPlus = cameraData.renderer is UniversalRenderer { renderingModeActual: RenderingMode.ForwardPlus }; // Initialize all the data types required for rendering. + UniversalLightData lightData; + UniversalShadowData shadowData; using (new ProfilingScope(Profiling.Pipeline.initializeRenderingData)) { CreateUniversalResourceData(frameData); - CreateLightData(frameData, asset, data.cullResults.visibleLights); - CreateShadowData(frameData, asset, isForwardPlus); + lightData = CreateLightData(frameData, asset, data.cullResults.visibleLights); + shadowData = CreateShadowData(frameData, asset, isForwardPlus); CreatePostProcessingData(frameData, asset); CreateRenderingData(frameData, asset, cmd, isForwardPlus, cameraData.renderer); } - var renderingData = new RenderingData(frameData); - CheckAndApplyDebugSettings(ref renderingData); + RenderingData legacyRenderingData = new RenderingData(frameData); + CheckAndApplyDebugSettings(ref legacyRenderingData); #if ADAPTIVE_PERFORMANCE_2_0_0_OR_NEWER if (asset.useAdaptivePerformance) ApplyAdaptivePerformance(ref renderingData); #endif - { - var shadowData = renderer.frameData.Get(); - InitializeMainLightShadowResolution(shadowData); - shadowData.shadowAtlasLayout = BuildAdditionalLightsShadowAtlasLayout(renderer.frameData.Get(), shadowData, cameraData); - shadowData.visibleLightsShadowCullingInfos = ShadowCulling.CullShadowCasters(ref context, ref renderingData.shadowData, ref shadowData.shadowAtlasLayout, ref data.cullResults); - } - renderer.AddRenderPasses(ref renderingData); + CreateShadowAtlasAndCullShadowCasters(lightData, shadowData, cameraData, ref data.cullResults, ref context); + + renderer.AddRenderPasses(ref legacyRenderingData); if (useRenderGraph) { @@ -794,10 +792,10 @@ static void RenderSingleCamera(ScriptableRenderContext context, UniversalCameraD else { using (new ProfilingScope(Profiling.Pipeline.Renderer.setup)) - renderer.Setup(context, ref renderingData); + renderer.Setup(context, ref legacyRenderingData); // Timing scope inside - renderer.Execute(context, ref renderingData); + renderer.Execute(context, ref legacyRenderingData); } } // When ProfilingSample goes out of scope, an "EndSample" command is enqueued into CommandBuffer cmd @@ -818,6 +816,20 @@ static void RenderSingleCamera(ScriptableRenderContext context, UniversalCameraD ScriptableRenderer.current = null; } + private static void CreateShadowAtlasAndCullShadowCasters(UniversalLightData lightData, UniversalShadowData shadowData, UniversalCameraData cameraData, ref CullingResults cullResults, ref ScriptableRenderContext context) + { + if (!shadowData.supportsMainLightShadows && !shadowData.supportsAdditionalLightShadows) + return; + + if (shadowData.supportsMainLightShadows) + InitializeMainLightShadowResolution(shadowData); + + if (shadowData.supportsAdditionalLightShadows) + shadowData.shadowAtlasLayout = BuildAdditionalLightsShadowAtlasLayout(lightData, shadowData, cameraData); + + shadowData.visibleLightsShadowCullingInfos = ShadowCulling.CullShadowCasters(ref context, shadowData, ref shadowData.shadowAtlasLayout, ref cullResults); + } + /// /// Renders a camera stack. This method calls RenderSingleCamera for each valid camera in the stack. /// The last camera resolves the final target to screen. @@ -907,7 +919,7 @@ static void RenderCameraStack(ScriptableRenderContext context, Camera baseCamera } bool isStackedRendering = lastActiveOverlayCameraIndex != -1; - + // Prepare XR rendering var xrActive = false; var xrRendering = baseCameraAdditionalData?.allowXRRendering ?? true; @@ -967,7 +979,7 @@ static void RenderCameraStack(ScriptableRenderContext context, Camera baseCamera #endif // update the base camera flag so that the scene depth is stored if needed by overlay cameras later in the frame baseCameraData.postProcessingRequiresDepthTexture |= cameraStackRequiresDepthForPostprocessing; - + // Check whether the camera stack final output is HDR // This is equivalent of UniversalCameraData.isHDROutputActive but without necessiting the base camera to be the last camera in the stack. bool hdrDisplayOutputActive = mainHdrDisplayOutputActive; @@ -979,7 +991,7 @@ static void RenderCameraStack(ScriptableRenderContext context, Camera baseCamera bool finalOutputHDR = asset.supportsHDR && hdrDisplayOutputActive // Check whether any HDR display is active and the render pipeline asset allows HDR rendering && baseCamera.targetTexture == null && (baseCamera.cameraType == CameraType.Game || baseCamera.cameraType == CameraType.VR) // Check whether the stack outputs to a screen && baseCameraData.allowHDROutput; // Check whether the base camera allows HDR output - + // Update stack-related parameters baseCameraData.stackAnyPostProcessingEnabled = anyPostProcessingEnabled; baseCameraData.stackLastCameraOutputToHDR = finalOutputHDR; @@ -1019,7 +1031,7 @@ static void RenderCameraStack(ScriptableRenderContext context, Camera baseCamera InitializeAdditionalCameraData(overlayCamera, overlayAdditionalCameraData, false, overlayCameraData); overlayCameraData.camera = overlayCamera; overlayCameraData.baseCamera = baseCamera; - + UpdateCameraStereoMatrices(overlayAdditionalCameraData.camera, xrPass); using (new ProfilingScope(Profiling.Pipeline.beginCameraRendering)) @@ -1034,7 +1046,7 @@ static void RenderCameraStack(ScriptableRenderContext context, Camera baseCamera bool lastCamera = i == lastActiveOverlayCameraIndex; InitializeAdditionalCameraData(overlayCamera, overlayAdditionalCameraData, lastCamera, overlayCameraData); - + overlayCameraData.stackAnyPostProcessingEnabled = anyPostProcessingEnabled; overlayCameraData.stackLastCameraOutputToHDR = finalOutputHDR; @@ -1448,12 +1460,12 @@ static void InitializeAdditionalCameraData(Camera camera, UniversalAdditionalCam #endif cameraData.backgroundColor = CoreUtils.ConvertSRGBToActiveColorSpace(backgroundColorSRGB); - + cameraData.stackAnyPostProcessingEnabled = cameraData.postProcessEnabled; cameraData.stackLastCameraOutputToHDR = cameraData.isHDROutputActive; } - static void CreateRenderingData(ContextContainer frameData, UniversalRenderPipelineAsset settings, CommandBuffer cmd, bool isForwardPlus, ScriptableRenderer renderer) + static UniversalRenderingData CreateRenderingData(ContextContainer frameData, UniversalRenderPipelineAsset settings, CommandBuffer cmd, bool isForwardPlus, ScriptableRenderer renderer) { var universalLightData = frameData.Get(); @@ -1464,9 +1476,11 @@ static void CreateRenderingData(ContextContainer frameData, UniversalRenderPipel UniversalRenderer universalRenderer = renderer as UniversalRenderer; data.renderingMode = universalRenderer?.renderingModeActual ?? RenderingMode.Forward; + + return data; } - static void CreateShadowData(ContextContainer frameData, UniversalRenderPipelineAsset settings, bool isForwardPlus) + static UniversalShadowData CreateShadowData(ContextContainer frameData, UniversalRenderPipelineAsset settings, bool isForwardPlus) { using var profScope = new ProfilingScope(Profiling.Pipeline.initializeShadowData); @@ -1598,6 +1612,8 @@ static void CreateShadowData(ContextContainer frameData, UniversalRenderPipeline // Their initializations is thus deferred to a later point when ShadowData is fully initialized. shadowData.shadowAtlasLayout = default; shadowData.visibleLightsShadowCullingInfos = default; + + return shadowData; } static void InitializeMainLightShadowResolution(UniversalShadowData shadowData) @@ -1607,7 +1623,7 @@ static void InitializeMainLightShadowResolution(UniversalShadowData shadowData) shadowData.mainLightRenderTargetHeight = (shadowData.mainLightShadowCascadesCount == 2) ? shadowData.mainLightShadowmapHeight >> 1 : shadowData.mainLightShadowmapHeight; } - static void CreatePostProcessingData(ContextContainer frameData, UniversalRenderPipelineAsset settings) + static UniversalPostProcessingData CreatePostProcessingData(ContextContainer frameData, UniversalRenderPipelineAsset settings) { UniversalPostProcessingData postProcessingData = frameData.Create(); UniversalCameraData cameraData = frameData.Get(); @@ -1625,14 +1641,16 @@ static void CreatePostProcessingData(ContextContainer frameData, UniversalRender postProcessingData.useFastSRGBLinearConversion = settings.useFastSRGBLinearConversion; postProcessingData.supportScreenSpaceLensFlare = settings.supportScreenSpaceLensFlare; postProcessingData.supportDataDrivenLensFlare = settings.supportDataDrivenLensFlare; + + return postProcessingData; } - static void CreateUniversalResourceData(ContextContainer frameData) + static UniversalResourceData CreateUniversalResourceData(ContextContainer frameData) { - frameData.Create(); + return frameData.Create(); } - static void CreateLightData(ContextContainer frameData, UniversalRenderPipelineAsset settings, NativeArray visibleLights) + static UniversalLightData CreateLightData(ContextContainer frameData, UniversalRenderPipelineAsset settings, NativeArray visibleLights) { using var profScope = new ProfilingScope(Profiling.Pipeline.initializeLightData); @@ -1663,6 +1681,8 @@ static void CreateLightData(ContextContainer frameData, UniversalRenderPipelineA lightData.reflectionProbeBlending = settings.reflectionProbeBlending; lightData.reflectionProbeBoxProjection = settings.reflectionProbeBoxProjection; lightData.supportsLightLayers = RenderingUtils.SupportsLightLayers(SystemInfo.graphicsDeviceType) && settings.useRenderingLayers; + + return lightData; } private static void ApplyTaaRenderingDebugOverrides(ref TemporalAA.Settings taaSettings) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs index 1afab208e62..b90207eba3d 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs @@ -1910,6 +1910,7 @@ internal static void Initialize() #endif #endif isXRMobile = isRunningMobile; + isShaderAPIMobileDefined = GraphicsSettings.HasShaderDefine(BuiltinShaderDefine.SHADER_API_MOBILE); } #if ENABLE_VR && ENABLE_VR_MODULE @@ -1938,6 +1939,29 @@ private static bool IsRunningXRMobile() /// /// If true, the runtime platform is an XR mobile platform. /// - static internal bool isXRMobile { get; private set; } = false; + internal static bool isXRMobile { get; private set; } = false; + + /// + /// If true, then SHADER_API_MOBILE has been defined in URP Shaders. + /// + internal static bool isShaderAPIMobileDefined { get; private set; } = false; + + /// + /// Gives the SH evaluation mode when set to automatically detect. + /// + /// The current SH evaluation mode. + /// Returns the SH evaluation mode to use. + internal static ShEvalMode ShAutoDetect(ShEvalMode mode) + { + if (mode == ShEvalMode.Auto) + { + if (PlatformAutoDetect.isXRMobile) + return ShEvalMode.PerVertex; + else + return ShEvalMode.PerPixel; + } + + return mode; + } } } From fcdb3e50cdbf8e17064da445c40f14f45c212568 Mon Sep 17 00:00:00 2001 From: Carl Harrison Date: Thu, 12 Oct 2023 03:53:22 +0000 Subject: [PATCH 03/27] Added 9008 Animation Frustum Culling test to HDRP Add a new test --- .../9008_AnimationFrustumCulling.meta | 8 + .../9008_AnimationFrustumCulling.unity | 1572 +++++++++++++++++ .../9008_AnimationFrustumCulling.unity.meta | 7 + .../CameraExtendedCullingVolume.asset | 150 ++ .../CameraExtendedCullingVolume.asset.meta | 8 + .../FrustumCullAnimator.cs | 35 + .../FrustumCullAnimator.cs.meta | 11 + .../M_MirrorLit.mat | 303 ++++ .../M_MirrorLit.mat.meta | 8 + .../9008_AnimationFrustumCulling/M_Opaque.mat | 304 ++++ .../M_Opaque.mat.meta | 8 + .../M_PerryHead.mat | 303 ++++ .../M_PerryHead.mat.meta | 8 + .../New Animator Controller.controller | 160 ++ .../New Animator Controller.controller.meta | 8 + .../perryhead_bonesANDblendweightsLODs.fbx | Bin 0 -> 1274748 bytes ...erryhead_bonesANDblendweightsLODs.fbx.meta | 138 ++ .../ProjectSettings/EditorBuildSettings.asset | 4 + 18 files changed, 3035 insertions(+) create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/CameraExtendedCullingVolume.asset create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/CameraExtendedCullingVolume.asset.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/FrustumCullAnimator.cs create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/FrustumCullAnimator.cs.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_MirrorLit.mat create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_MirrorLit.mat.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_Opaque.mat create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_Opaque.mat.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_PerryHead.mat create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_PerryHead.mat.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/New Animator Controller.controller create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/New Animator Controller.controller.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/perryhead_bonesANDblendweightsLODs.fbx create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/perryhead_bonesANDblendweightsLODs.fbx.meta diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.meta new file mode 100644 index 00000000000..377cd9afaf6 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f536872279206749bf91f55e54eb819 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity new file mode 100644 index 00000000000..26029c54e99 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity @@ -0,0 +1,1572 @@ +%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: 9 + 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: 0 + 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_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + 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: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 23f828be21c65fa4ab4f50d91591e4ba, + type: 2} +--- !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 &317366831 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: -5464018591880931762, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + m_PrefabInstance: {fileID: 1934281440} + m_PrefabAsset: {fileID: 0} +--- !u!114 &317366834 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 317366831} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d29a2d820d8afeb4a88421fa92f66c71, type: 3} + m_Name: + m_EditorClassIdentifier: + anglesToAdd: {x: 45, y: 0, z: 0} + waitFrames: 3 +--- !u!1 &395914037 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 919132149155446097, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + m_PrefabInstance: {fileID: 1934281440} + m_PrefabAsset: {fileID: 0} +--- !u!95 &395914039 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 395914037} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 18158bc1269b748b699e6c1cc3a00d6f, type: 2} + m_CullingMode: 1 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!114 &395914040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 395914037} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8068a508d34694974a0fab16c7bb5763, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &466758464 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1132393308280272, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_Name + value: HDRP_Test_Camera + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalPosition.x + value: -3.68 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalPosition.y + value: 3.37 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalPosition.z + value: 0.01 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalRotation.w + value: -0.97494495 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalRotation.x + value: -0.055565543 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalRotation.y + value: -0.21494542 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalRotation.z + value: -0.01390448 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 5.876 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 25.017 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 2.939 + objectReference: {fileID: 0} + - target: {fileID: 20109210616973140, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: field of view + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 20109210616973140, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: far clip plane + value: 100 + objectReference: {fileID: 0} + - target: {fileID: 20109210616973140, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: near clip plane + value: 0.01 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_Version + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: waitFrames + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: renderPipelineAsset + value: + objectReference: {fileID: 11400000, guid: d7fe5f39d2c099a4ea1f1f610af309d7, + type: 2} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: checkMemoryAllocation + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: renderGraphCompatible + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} +--- !u!1 &596496632 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: -7528845768040495045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + m_PrefabInstance: {fileID: 1934281440} + m_PrefabAsset: {fileID: 0} +--- !u!114 &596496635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 596496632} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d29a2d820d8afeb4a88421fa92f66c71, type: 3} + m_Name: + m_EditorClassIdentifier: + anglesToAdd: {x: 0, y: 45, z: 20} + waitFrames: 3 +--- !u!1 &891046727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 891046730} + - component: {fileID: 891046729} + - component: {fileID: 891046728} + m_Layer: 0 + m_Name: BlueLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &891046728 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 891046727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3} + m_Name: + m_EditorClassIdentifier: + m_PointlightHDType: 0 + m_SpotLightShape: 0 + m_AreaLightShape: 0 + m_Intensity: 500 + m_EnableSpotReflector: 0 + m_LuxAtDistance: 1 + m_InnerSpotPercent: 0 + m_SpotIESCutoffPercent: 100 + m_LightDimmer: 1 + m_VolumetricDimmer: 1 + m_LightUnit: 0 + m_FadeDistance: 10000 + m_VolumetricFadeDistance: 10000 + m_AffectDiffuse: 1 + m_AffectSpecular: 1 + m_NonLightmappedOnly: 0 + m_ShapeWidth: 0.5 + m_ShapeHeight: 0.5 + m_AspectRatio: 1 + m_ShapeRadius: 0.025 + m_SoftnessScale: 1 + m_UseCustomSpotLightShadowCone: 0 + m_CustomSpotLightShadowCone: 30 + m_MaxSmoothness: 0.99 + m_ApplyRangeAttenuation: 1 + m_DisplayAreaLightEmissiveMesh: 0 + m_AreaLightCookie: {fileID: 0} + m_IESPoint: {fileID: 0} + m_IESSpot: {fileID: 0} + m_IncludeForRayTracing: 1 + m_AreaLightShadowCone: 120 + m_UseScreenSpaceShadows: 0 + m_InteractsWithSky: 1 + m_AngularDiameter: 0.5 + m_FlareSize: 2 + m_FlareTint: {r: 1, g: 1, b: 1, a: 1} + m_FlareFalloff: 4 + m_SurfaceTexture: {fileID: 0} + m_SurfaceTint: {r: 1, g: 1, b: 1, a: 1} + m_Distance: 1.5e+11 + m_UseRayTracedShadows: 0 + m_NumRayTracingSamples: 4 + m_FilterTracedShadow: 1 + m_FilterSizeTraced: 16 + m_SunLightConeAngle: 0.5 + m_LightShadowRadius: 0.5 + m_SemiTransparentShadow: 0 + m_ColorShadow: 1 + m_DistanceBasedFiltering: 0 + m_EvsmExponent: 15 + m_EvsmLightLeakBias: 0 + m_EvsmVarianceBias: 0.00001 + m_EvsmBlurPasses: 0 + m_LightlayersMask: 1 + m_LinkShadowLayers: 1 + m_ShadowNearPlane: 0.1 + m_BlockerSampleCount: 24 + m_FilterSampleCount: 16 + m_MinFilterSize: 0.1 + m_KernelSize: 5 + m_LightAngle: 1 + m_MaxDepthBias: 0.001 + m_ShadowResolution: + m_Override: 1024 + m_UseOverride: 1 + m_Level: 0 + m_ShadowDimmer: 1 + m_VolumetricShadowDimmer: 1 + m_ShadowFadeDistance: 10000 + m_UseContactShadow: + m_Override: 0 + m_UseOverride: 1 + m_Level: 0 + m_RayTracedContactShadow: 0 + m_ShadowTint: {r: 0, g: 0, b: 0, a: 1} + m_PenumbraTint: 0 + m_NormalBias: 0.75 + m_SlopeBias: 0.5 + m_ShadowUpdateMode: 0 + m_AlwaysDrawDynamicShadows: 0 + m_UpdateShadowOnLightMovement: 0 + m_CachedShadowTranslationThreshold: 0.01 + m_CachedShadowAngularThreshold: 0.5 + m_BarnDoorAngle: 90 + m_BarnDoorLength: 0.05 + m_preserveCachedShadow: 0 + m_OnDemandShadowRenderOnPlacement: 1 + m_ShadowCascadeRatios: + - 0.05 + - 0.2 + - 0.3 + m_ShadowCascadeBorders: + - 0.2 + - 0.2 + - 0.2 + - 0.2 + m_ShadowAlgorithm: 0 + m_ShadowVariant: 0 + m_ShadowPrecision: 0 + useOldInspector: 0 + useVolumetric: 1 + featuresFoldout: 1 + m_AreaLightEmissiveMeshShadowCastingMode: 0 + m_AreaLightEmissiveMeshMotionVectorGenerationMode: 0 + m_AreaLightEmissiveMeshLayer: -1 + m_Version: 12 + m_ObsoleteShadowResolutionTier: 1 + m_ObsoleteUseShadowQualitySettings: 0 + m_ObsoleteCustomShadowResolution: 512 + m_ObsoleteContactShadows: 0 +--- !u!108 &891046729 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 891046727} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 2 + m_Color: {r: 0.41960788, g: 0.7936489, b: 1, a: 1} + m_Intensity: 39.788734 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 2 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &891046730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 891046727} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 3.16, y: 4.71, z: -1.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1630027563 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1630027567} + - component: {fileID: 1630027566} + - component: {fileID: 1630027565} + - component: {fileID: 1630027564} + - component: {fileID: 1630027568} + m_Layer: 0 + m_Name: Quad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &1630027564 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630027563} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1630027565 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630027563} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 235324e3992b399479e1031dd5757d24, 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: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1630027566 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630027563} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1630027567 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630027563} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 2.5, z: 4.55} + m_LocalScale: {x: 10, y: 5, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1630027568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1630027563} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a4ee7c3a3b205a14a94094d01ff91d6b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ProbeSettings: + frustum: + fieldOfViewMode: 1 + fixedValue: 90 + automaticScale: 1 + viewerScale: 1 + type: 1 + mode: 1 + realtimeMode: 0 + timeSlicing: 0 + lighting: + multiplier: 1 + weight: 1 + lightLayer: 1 + fadeDistance: 10000 + rangeCompressionFactor: 1 + influence: + m_Shape: 0 + m_BoxSize: {x: 13.86, y: 11.48, z: 17.8} + m_BoxBlendDistancePositive: {x: 0, y: 0, z: 0} + m_BoxBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_BoxBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_BoxBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_BoxSideFadePositive: {x: 1, y: 1, z: 1} + m_BoxSideFadeNegative: {x: 1, y: 1, z: 1} + m_SphereRadius: 3 + m_SphereBlendDistance: 0 + m_SphereBlendNormalDistance: 0 + m_EditorAdvancedModeBlendDistancePositive: {x: 0, y: 0, z: 0} + m_EditorAdvancedModeBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_EditorSimplifiedModeBlendDistance: 0 + m_EditorAdvancedModeBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_EditorAdvancedModeBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_EditorSimplifiedModeBlendNormalDistance: 0 + m_EditorAdvancedModeEnabled: 0 + m_EditorAdvancedModeFaceFadePositive: {x: 1, y: 1, z: 1} + m_EditorAdvancedModeFaceFadeNegative: {x: 1, y: 1, z: 1} + m_Version: 1 + m_ObsoleteSphereBaseOffset: {x: 0, y: 0, z: 0} + m_ObsoleteOffset: {x: 0, y: 0, z: 0} + proxy: + m_Shape: 0 + m_BoxSize: {x: 1, y: 1, z: 1} + m_SphereRadius: 1 + m_CSVersion: 2 + m_ObsoleteSphereInfiniteProjection: 0 + m_ObsoleteBoxInfiniteProjection: 0 + proxySettings: + useInfluenceVolumeAsProxyVolume: 1 + capturePositionProxySpace: {x: 0, y: 0, z: 0} + captureRotationProxySpace: {x: 0, y: 0, z: 0, w: 1} + mirrorPositionProxySpace: {x: 0, y: 0, z: 0} + mirrorRotationProxySpace: {x: -0.99992603, y: 0, z: 0, w: -0.012161162} + resolutionScalable: + m_Override: 512 + m_UseOverride: 1 + m_Level: 0 + resolution: 0 + cubeResolution: + m_Override: 128 + m_UseOverride: 0 + m_Level: 0 + cameraSettings: + customRenderingSettings: 0 + renderingPathCustomFrameSettings: + bitDatas: + data1: 5770166122053453 + data2: 13799030890350739480 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + renderingPathCustomFrameSettingsOverrideMask: + mask: + data1: 0 + data2: 0 + bufferClearing: + clearColorMode: 0 + backgroundColorHDR: {r: 0.023529412, g: 0.07058824, b: 0.1882353, a: 0} + clearDepth: 1 + volumes: + layerMask: + serializedVersion: 2 + m_Bits: 1 + anchorOverride: {fileID: 0} + frustum: + mode: 0 + aspect: 1 + farClipPlaneRaw: 1000 + nearClipPlaneRaw: 0.3 + fieldOfView: 90 + projectionMatrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + culling: + useOcclusionCulling: 1 + cullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + sceneCullingMaskOverride: 0 + invertFaceCulling: 0 + flipYMode: 0 + probeLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + defaultFrameSettings: 0 + m_ObsoleteRenderingPath: 0 + m_ObsoleteFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 + roughReflections: 1 + distanceBasedRoughness: 0 + m_ProbeSettingsOverride: + probe: 0 + camera: + camera: 0 + m_ProxyVolume: {fileID: 0} + m_BakedTexture: {fileID: 0} + m_CustomTexture: {fileID: 0} + m_BakedRenderData: + m_WorldToCameraRHS: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_ProjectionMatrix: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_CapturePosition: {x: 0, y: 0, z: 0} + m_CaptureRotation: {x: 0, y: 0, z: 0, w: 0} + m_FieldOfView: 0 + m_Aspect: 0 + m_CustomRenderData: + m_WorldToCameraRHS: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_ProjectionMatrix: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_CapturePosition: {x: 0, y: 0, z: 0} + m_CaptureRotation: {x: 0, y: 0, z: 0, w: 0} + m_FieldOfView: 0 + m_Aspect: 0 + m_HasValidSHForNormalization: 0 + m_SHForNormalization: + 'sh[ 0]': 0 + 'sh[ 1]': 0 + 'sh[ 2]': 0 + 'sh[ 3]': 0 + 'sh[ 4]': 0 + 'sh[ 5]': 0 + 'sh[ 6]': 0 + 'sh[ 7]': 0 + 'sh[ 8]': 0 + 'sh[ 9]': 0 + 'sh[10]': 0 + 'sh[11]': 0 + 'sh[12]': 0 + 'sh[13]': 0 + 'sh[14]': 0 + 'sh[15]': 0 + 'sh[16]': 0 + 'sh[17]': 0 + 'sh[18]': 0 + 'sh[19]': 0 + 'sh[20]': 0 + 'sh[21]': 0 + 'sh[22]': 0 + 'sh[23]': 0 + 'sh[24]': 0 + 'sh[25]': 0 + 'sh[26]': 0 + m_SHValidForCapturePosition: {x: 0, y: 0, z: 0} + m_SHValidForSourcePosition: {x: 0, y: 0, z: 0} + m_HDProbeVersion: 3 + m_ObsoleteInfiniteProjection: 1 + m_ObsoleteInfluenceVolume: + m_Shape: 0 + m_BoxSize: {x: 10, y: 10, z: 10} + m_BoxBlendDistancePositive: {x: 0, y: 0, z: 0} + m_BoxBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_BoxBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_BoxBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_BoxSideFadePositive: {x: 1, y: 1, z: 1} + m_BoxSideFadeNegative: {x: 1, y: 1, z: 1} + m_SphereRadius: 3 + m_SphereBlendDistance: 0 + m_SphereBlendNormalDistance: 0 + m_EditorAdvancedModeBlendDistancePositive: {x: 0, y: 0, z: 0} + m_EditorAdvancedModeBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_EditorSimplifiedModeBlendDistance: 0 + m_EditorAdvancedModeBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_EditorAdvancedModeBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_EditorSimplifiedModeBlendNormalDistance: 0 + m_EditorAdvancedModeEnabled: 0 + m_EditorAdvancedModeFaceFadePositive: {x: 1, y: 1, z: 1} + m_EditorAdvancedModeFaceFadeNegative: {x: 1, y: 1, z: 1} + m_Version: 1 + m_ObsoleteSphereBaseOffset: {x: 0, y: 0, z: 0} + m_ObsoleteOffset: {x: 0, y: 0, z: 0} + m_ObsoleteFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 + m_ObsoleteMultiplier: 1 + m_ObsoleteWeight: 1 + m_ObsoleteMode: 0 + m_ObsoleteLightLayers: 1 + m_ObsoleteCaptureSettings: + overrides: 0 + clearColorMode: 0 + backgroundColorHDR: {r: 0.023529412, g: 0.07058824, b: 0.1882353, a: 0} + clearDepth: 1 + cullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + useOcclusionCulling: 1 + volumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + volumeAnchorOverride: {fileID: 0} + projection: 0 + nearClipPlane: 0.3 + farClipPlane: 1000 + fieldOfView: 90 + orthographicSize: 5 + renderingPath: 0 + shadowDistance: 100 + m_LocalReferencePosition: {x: 0, y: 0.99999994, z: 0.000000059604645} + m_PlanarProbeVersion: 7 + m_ObsoleteCaptureNearPlane: 0.3 + m_ObsoleteCaptureFarPlane: 1000 + m_ObsoleteOverrideFieldOfView: 0 + m_ObsoleteFieldOfViewOverride: 90 +--- !u!1 &1888081533 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 8114208659501980285, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + m_PrefabInstance: {fileID: 1934281440} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1888081536 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1888081533} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d29a2d820d8afeb4a88421fa92f66c71, type: 3} + m_Name: + m_EditorClassIdentifier: + anglesToAdd: {x: 45, y: 0, z: 0} + waitFrames: 3 +--- !u!1001 &1934281440 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_RootOrder + value: 6 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalScale.x + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalScale.y + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalScale.z + value: 0.1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalPosition.x + value: 1.82 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalPosition.y + value: 0.97 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalPosition.z + value: 1.08 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8173010703562248757, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_LocalPosition.z + value: -28.4 + objectReference: {fileID: 0} + - target: {fileID: -2861877368089776626, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_AABB.m_Extent.x + value: 0.16 + objectReference: {fileID: 0} + - target: {fileID: -2861877368089776626, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_AABB.m_Extent.y + value: 0.13 + objectReference: {fileID: 0} + - target: {fileID: -2861877368089776626, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_AABB.m_Extent.z + value: 0.2 + objectReference: {fileID: 0} + - target: {fileID: -2861877368089776626, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: b59fe36a64422184491076e8eaca5367, type: 2} + - target: {fileID: -1315646164136044978, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: b59fe36a64422184491076e8eaca5367, type: 2} + - target: {fileID: -836709133698534158, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_Name + value: perryhead_bonesANDblendweightsLODs + objectReference: {fileID: 0} + - target: {fileID: 919132149155446097, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + insertIndex: -1 + addedObject: {fileID: 395914039} + - targetCorrespondingSourceObject: {fileID: 919132149155446097, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + insertIndex: -1 + addedObject: {fileID: 395914040} + - targetCorrespondingSourceObject: {fileID: 8114208659501980285, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + insertIndex: -1 + addedObject: {fileID: 1888081536} + - targetCorrespondingSourceObject: {fileID: -5464018591880931762, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + insertIndex: -1 + addedObject: {fileID: 317366834} + - targetCorrespondingSourceObject: {fileID: -7528845768040495045, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + insertIndex: -1 + addedObject: {fileID: 596496635} + m_SourcePrefab: {fileID: 100100000, guid: fbaffbf3f716a9f40bfe7d38f123f669, type: 3} +--- !u!1 &1972245776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1972245780} + - component: {fileID: 1972245779} + - component: {fileID: 1972245778} + - component: {fileID: 1972245777} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &1972245777 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972245776} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1972245778 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972245776} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: f33b1c6e7b5e8d24a930c8932f28b189, 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: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1972245779 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972245776} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1972245780 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972245776} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 2, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2118224825 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2118224828} + - component: {fileID: 2118224827} + - component: {fileID: 2118224826} + m_Layer: 0 + m_Name: OrangeLight + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2118224826 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118224825} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3} + m_Name: + m_EditorClassIdentifier: + m_PointlightHDType: 0 + m_SpotLightShape: 0 + m_AreaLightShape: 0 + m_Intensity: 500 + m_EnableSpotReflector: 0 + m_LuxAtDistance: 1 + m_InnerSpotPercent: 0 + m_SpotIESCutoffPercent: 100 + m_LightDimmer: 1 + m_VolumetricDimmer: 1 + m_LightUnit: 0 + m_FadeDistance: 10000 + m_VolumetricFadeDistance: 10000 + m_AffectDiffuse: 1 + m_AffectSpecular: 1 + m_NonLightmappedOnly: 0 + m_ShapeWidth: 0.5 + m_ShapeHeight: 0.5 + m_AspectRatio: 1 + m_ShapeRadius: 0.025 + m_SoftnessScale: 1 + m_UseCustomSpotLightShadowCone: 0 + m_CustomSpotLightShadowCone: 30 + m_MaxSmoothness: 0.99 + m_ApplyRangeAttenuation: 1 + m_DisplayAreaLightEmissiveMesh: 0 + m_AreaLightCookie: {fileID: 0} + m_IESPoint: {fileID: 0} + m_IESSpot: {fileID: 0} + m_IncludeForRayTracing: 1 + m_AreaLightShadowCone: 120 + m_UseScreenSpaceShadows: 0 + m_InteractsWithSky: 1 + m_AngularDiameter: 0.5 + m_FlareSize: 2 + m_FlareTint: {r: 1, g: 1, b: 1, a: 1} + m_FlareFalloff: 4 + m_SurfaceTexture: {fileID: 0} + m_SurfaceTint: {r: 1, g: 1, b: 1, a: 1} + m_Distance: 1.5e+11 + m_UseRayTracedShadows: 0 + m_NumRayTracingSamples: 4 + m_FilterTracedShadow: 1 + m_FilterSizeTraced: 16 + m_SunLightConeAngle: 0.5 + m_LightShadowRadius: 0.5 + m_SemiTransparentShadow: 0 + m_ColorShadow: 1 + m_DistanceBasedFiltering: 0 + m_EvsmExponent: 15 + m_EvsmLightLeakBias: 0 + m_EvsmVarianceBias: 0.00001 + m_EvsmBlurPasses: 0 + m_LightlayersMask: 1 + m_LinkShadowLayers: 1 + m_ShadowNearPlane: 0.1 + m_BlockerSampleCount: 24 + m_FilterSampleCount: 16 + m_MinFilterSize: 0.1 + m_KernelSize: 5 + m_LightAngle: 1 + m_MaxDepthBias: 0.001 + m_ShadowResolution: + m_Override: 1024 + m_UseOverride: 1 + m_Level: 0 + m_ShadowDimmer: 1 + m_VolumetricShadowDimmer: 1 + m_ShadowFadeDistance: 10000 + m_UseContactShadow: + m_Override: 0 + m_UseOverride: 1 + m_Level: 0 + m_RayTracedContactShadow: 0 + m_ShadowTint: {r: 0, g: 0, b: 0, a: 1} + m_PenumbraTint: 0 + m_NormalBias: 0.75 + m_SlopeBias: 0.5 + m_ShadowUpdateMode: 0 + m_AlwaysDrawDynamicShadows: 0 + m_UpdateShadowOnLightMovement: 0 + m_CachedShadowTranslationThreshold: 0.01 + m_CachedShadowAngularThreshold: 0.5 + m_BarnDoorAngle: 90 + m_BarnDoorLength: 0.05 + m_preserveCachedShadow: 0 + m_OnDemandShadowRenderOnPlacement: 1 + m_ShadowCascadeRatios: + - 0.05 + - 0.2 + - 0.3 + m_ShadowCascadeBorders: + - 0.2 + - 0.2 + - 0.2 + - 0.2 + m_ShadowAlgorithm: 0 + m_ShadowVariant: 0 + m_ShadowPrecision: 0 + useOldInspector: 0 + useVolumetric: 1 + featuresFoldout: 1 + m_AreaLightEmissiveMeshShadowCastingMode: 0 + m_AreaLightEmissiveMeshMotionVectorGenerationMode: 0 + m_AreaLightEmissiveMeshLayer: -1 + m_Version: 12 + m_ObsoleteShadowResolutionTier: 1 + m_ObsoleteUseShadowQualitySettings: 0 + m_ObsoleteCustomShadowResolution: 512 + m_ObsoleteContactShadows: 0 +--- !u!108 &2118224827 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118224825} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 2 + m_Color: {r: 1, g: 0.81184375, b: 0.4198113, a: 1} + m_Intensity: 39.788734 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 1 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 2 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &2118224828 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2118224825} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -3.36, y: 4.71, z: -1.15} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2124642097 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2124642099} + - component: {fileID: 2124642098} + m_Layer: 0 + m_Name: Global Volume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2124642098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124642097} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 0 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: 56ab84d97b99df642bb3d09a711cc183, type: 2} +--- !u!4 &2124642099 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2124642097} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 7.711962, y: -4.751842, z: -5.3024197} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity.meta new file mode 100644 index 00000000000..52a61148ed1 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ae8985d60efd64a4eabcad184745808a +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/CameraExtendedCullingVolume.asset b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/CameraExtendedCullingVolume.asset new file mode 100644 index 00000000000..49e0134f032 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/CameraExtendedCullingVolume.asset @@ -0,0 +1,150 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-8750546916358331156 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 384c4d03a551c44448145f4093304119, type: 3} + m_Name: ScreenSpaceReflection + m_EditorClassIdentifier: + active: 1 + quality: + m_OverrideState: 0 + m_Value: 1 + enabled: + m_OverrideState: 1 + m_Value: 1 + enabledTransparent: + m_OverrideState: 0 + m_Value: 1 + tracing: + m_OverrideState: 1 + m_Value: 2 + m_MinSmoothness: + m_OverrideState: 0 + m_Value: 0.9 + m_SmoothnessFadeStart: + m_OverrideState: 0 + m_Value: 0.9 + reflectSky: + m_OverrideState: 0 + m_Value: 1 + usedAlgorithm: + m_OverrideState: 0 + m_Value: 0 + depthBufferThickness: + m_OverrideState: 0 + m_Value: 0.01 + screenFadeDistance: + m_OverrideState: 0 + m_Value: 0.1 + accumulationFactor: + m_OverrideState: 0 + m_Value: 0.75 + biasFactor: + m_OverrideState: 0 + m_Value: 0.5 + speedRejectionParam: + m_OverrideState: 0 + m_Value: 0.5 + speedRejectionScalerFactor: + m_OverrideState: 0 + m_Value: 0.2 + speedSmoothReject: + m_OverrideState: 0 + m_Value: 0 + speedSurfaceOnly: + m_OverrideState: 0 + m_Value: 1 + speedTargetOnly: + m_OverrideState: 0 + m_Value: 1 + enableWorldSpeedRejection: + m_OverrideState: 0 + m_Value: 0 + m_RayMaxIterations: + m_OverrideState: 0 + m_Value: 32 + rayMiss: + m_OverrideState: 0 + m_Value: 3 + lastBounceFallbackHierarchy: + m_OverrideState: 0 + m_Value: 3 + ambientProbeDimmer: + m_OverrideState: 0 + m_Value: 1 + layerMask: + m_OverrideState: 0 + m_Value: + serializedVersion: 2 + m_Bits: 4294967295 + textureLodBias: + m_OverrideState: 0 + m_Value: 1 + m_RayLength: + m_OverrideState: 0 + m_Value: 50 + m_ClampValue: + m_OverrideState: 0 + m_Value: 1 + m_Denoise: + m_OverrideState: 0 + m_Value: 1 + m_DenoiserRadius: + m_OverrideState: 0 + m_Value: 8 + m_AffectSmoothSurfaces: + m_OverrideState: 0 + m_Value: 0 + mode: + m_OverrideState: 0 + m_Value: 2 + m_FullResolution: + m_OverrideState: 0 + m_Value: 0 + sampleCount: + m_OverrideState: 0 + m_Value: 1 + bounceCount: + m_OverrideState: 0 + m_Value: 1 + m_RayMaxIterationsRT: + m_OverrideState: 0 + m_Value: 32 +--- !u!114 &-5965176281060342084 +MonoBehaviour: + m_ObjectHideFlags: 3 + 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: 2f1984a7ac01bf84b86559f7595cdc68, type: 3} + m_Name: LightCluster + m_EditorClassIdentifier: + active: 1 + cameraClusterRange: + m_OverrideState: 1 + m_Value: 50 +--- !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: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: CameraExtendedCullingVolume + m_EditorClassIdentifier: + components: + - {fileID: -8750546916358331156} + - {fileID: -5965176281060342084} diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/CameraExtendedCullingVolume.asset.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/CameraExtendedCullingVolume.asset.meta new file mode 100644 index 00000000000..4de7d6aebd1 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/CameraExtendedCullingVolume.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 56ab84d97b99df642bb3d09a711cc183 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/FrustumCullAnimator.cs b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/FrustumCullAnimator.cs new file mode 100644 index 00000000000..54551fecd7f --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/FrustumCullAnimator.cs @@ -0,0 +1,35 @@ +using System.Diagnostics; +using System.Numerics; +using UnityEngine; + +[RequireComponent(typeof(Animator))] +public class FrustumCullAnimator : MonoBehaviour +{ + private Animator _anim; + private Renderer _renderer; + private Camera _mainCamera; + private int _frameCounter; + + private void Start() + { + _anim = GetComponent(); + _renderer = GetComponentInChildren(); + _mainCamera = Camera.main; + _frameCounter = 0; + } + + private void Update() + { + UnityEngine.Plane[] planes = GeometryUtility.CalculateFrustumPlanes(_mainCamera); + bool isVisible = GeometryUtility.TestPlanesAABB(planes, _renderer.bounds); + + _anim.SetBool("PlayAnimation", isVisible); + + + _frameCounter++; + if (_frameCounter == 5) + { + transform.position += new UnityEngine.Vector3(0, 0, -3); + } + } +} diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/FrustumCullAnimator.cs.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/FrustumCullAnimator.cs.meta new file mode 100644 index 00000000000..043d09254a4 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/FrustumCullAnimator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8068a508d34694974a0fab16c7bb5763 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_MirrorLit.mat b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_MirrorLit.mat new file mode 100644 index 00000000000..3c03218cc08 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_MirrorLit.mat @@ -0,0 +1,303 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: M_MirrorLit + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _DISABLE_SSR_TRANSPARENT + - _NORMALMAP_TANGENT_SPACE + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2225 + stringTagMap: {} + disabledShaderPasses: + - DistortionVectors + - MOTIONVECTORS + - TransparentDepthPrepass + - TransparentDepthPostpass + - TransparentBackface + - RayTracingPrepass + - ForwardEmissiveForDeferred + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CoatMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissiveColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _HeightMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecularColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SubsurfaceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmissionMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmittanceColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AORemapMax: 1 + - _AORemapMin: 0 + - _ATDistance: 1 + - _AddPrecomputedVelocity: 0 + - _AlbedoAffectEmissive: 0 + - _AlphaCutoff: 0.5 + - _AlphaCutoffEnable: 0 + - _AlphaCutoffPostpass: 0.5 + - _AlphaCutoffPrepass: 0.5 + - _AlphaCutoffShadow: 0.5 + - _AlphaDstBlend: 0 + - _AlphaRemapMax: 1 + - _AlphaRemapMin: 0 + - _AlphaSrcBlend: 1 + - _AlphaToMask: 0 + - _AlphaToMaskInspectorValue: 0 + - _Anisotropy: 0 + - _BlendMode: 0 + - _CoatMask: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 0 + - _DetailAlbedoScale: 1 + - _DetailNormalScale: 1 + - _DetailSmoothnessScale: 1 + - _DiffusionProfile: 0 + - _DiffusionProfileHash: 0 + - _DisplacementLockObjectScale: 1 + - _DisplacementLockTilingScale: 1 + - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 1 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 1 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 1 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 1 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 + - _DoubleSidedEnable: 0 + - _DoubleSidedGIMode: 0 + - _DoubleSidedNormalMode: 1 + - _DstBlend: 0 + - _EmissiveColorMode: 1 + - _EmissiveExposureWeight: 1 + - _EmissiveIntensity: 1 + - _EmissiveIntensityUnit: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _EnableGeometricSpecularAA: 0 + - _EnergyConservingSpecularColor: 1 + - _ForceForwardEmissive: 0 + - _HeightAmplitude: 0.02 + - _HeightCenter: 0.5 + - _HeightMapParametrization: 0 + - _HeightMax: 1 + - _HeightMin: -1 + - _HeightOffset: 0 + - _HeightPoMAmplitude: 2 + - _HeightTessAmplitude: 2 + - _HeightTessCenter: 0.5 + - _InvTilingScale: 1 + - _Ior: 1.5 + - _IridescenceMask: 1 + - _IridescenceThickness: 1 + - _LinkDetailsWithBase: 1 + - _MaterialID: 1 + - _Metallic: 1 + - _MetallicRemapMax: 1 + - _MetallicRemapMin: 0 + - _NormalMapSpace: 0 + - _NormalScale: 1 + - _ObjectSpaceUVMapping: 0 + - _ObjectSpaceUVMappingEmissive: 0 + - _OpaqueCullMode: 2 + - _PPDLodThreshold: 5 + - _PPDMaxSamples: 15 + - _PPDMinSamples: 5 + - _PPDPrimitiveLength: 1 + - _PPDPrimitiveWidth: 1 + - _RayTracing: 0 + - _ReceivesSSR: 1 + - _ReceivesSSRTransparent: 0 + - _RefractionModel: 0 + - _SSRefractionProjectionModel: 0 + - _Smoothness: 1 + - _SmoothnessRemapMax: 1 + - _SmoothnessRemapMin: 0 + - _SpecularAAScreenSpaceVariance: 0.1 + - _SpecularAAThreshold: 0.2 + - _SpecularOcclusionMode: 1 + - _SrcBlend: 1 + - _StencilRef: 0 + - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 + - _StencilRefGBuffer: 10 + - _StencilRefMV: 40 + - _StencilWriteMask: 6 + - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 + - _StencilWriteMaskGBuffer: 15 + - _StencilWriteMaskMV: 41 + - _SubsurfaceMask: 1 + - _SupportDecals: 1 + - _SurfaceType: 0 + - _TexWorldScale: 1 + - _TexWorldScaleEmissive: 1 + - _Thickness: 1 + - _TransmissionEnable: 1 + - _TransmissionMask: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentCullMode: 2 + - _TransparentDepthPostpassEnable: 0 + - _TransparentDepthPrepassEnable: 0 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 0 + - _TransparentZWrite: 0 + - _UVBase: 0 + - _UVDetail: 0 + - _UVEmissive: 0 + - _UseEmissiveIntensity: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 3 + - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 4 + - _ZTestTransparent: 4 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} + - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} + - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} + - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] +--- !u!114 &7305155749278763381 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_MirrorLit.mat.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_MirrorLit.mat.meta new file mode 100644 index 00000000000..d2ac04f677e --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_MirrorLit.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 235324e3992b399479e1031dd5757d24 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_Opaque.mat b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_Opaque.mat new file mode 100644 index 00000000000..48a698e67fd --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_Opaque.mat @@ -0,0 +1,304 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-7326376908261789544 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: M_Opaque + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _DISABLE_SSR_TRANSPARENT + - _NORMALMAP_TANGENT_SPACE + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2225 + stringTagMap: {} + disabledShaderPasses: + - DistortionVectors + - MOTIONVECTORS + - TransparentDepthPrepass + - TransparentDepthPostpass + - TransparentBackface + - RayTracingPrepass + - ForwardEmissiveForDeferred + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CoatMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissiveColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _HeightMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecularColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SubsurfaceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmissionMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmittanceColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AORemapMax: 1 + - _AORemapMin: 0 + - _ATDistance: 1 + - _AddPrecomputedVelocity: 0 + - _AlbedoAffectEmissive: 0 + - _AlphaCutoff: 0.5 + - _AlphaCutoffEnable: 0 + - _AlphaCutoffPostpass: 0.5 + - _AlphaCutoffPrepass: 0.5 + - _AlphaCutoffShadow: 0.5 + - _AlphaDstBlend: 0 + - _AlphaRemapMax: 1 + - _AlphaRemapMin: 0 + - _AlphaSrcBlend: 1 + - _AlphaToMask: 0 + - _AlphaToMaskInspectorValue: 0 + - _Anisotropy: 0 + - _BlendMode: 0 + - _CoatMask: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 0 + - _DetailAlbedoScale: 1 + - _DetailNormalScale: 1 + - _DetailSmoothnessScale: 1 + - _DiffusionProfile: 0 + - _DiffusionProfileHash: 0 + - _DisplacementLockObjectScale: 1 + - _DisplacementLockTilingScale: 1 + - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 1 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 1 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 1 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 1 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 + - _DoubleSidedEnable: 0 + - _DoubleSidedGIMode: 0 + - _DoubleSidedNormalMode: 1 + - _DstBlend: 0 + - _EmissiveColorMode: 1 + - _EmissiveExposureWeight: 1 + - _EmissiveIntensity: 1 + - _EmissiveIntensityUnit: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _EnableGeometricSpecularAA: 0 + - _EnergyConservingSpecularColor: 1 + - _ForceForwardEmissive: 0 + - _HdrpVersion: 2 + - _HeightAmplitude: 0.02 + - _HeightCenter: 0.5 + - _HeightMapParametrization: 0 + - _HeightMax: 1 + - _HeightMin: -1 + - _HeightOffset: 0 + - _HeightPoMAmplitude: 2 + - _HeightTessAmplitude: 2 + - _HeightTessCenter: 0.5 + - _InvTilingScale: 1 + - _Ior: 1.5 + - _IridescenceMask: 1 + - _IridescenceThickness: 1 + - _LinkDetailsWithBase: 1 + - _MaterialID: 1 + - _Metallic: 0 + - _MetallicRemapMax: 0 + - _MetallicRemapMin: 0 + - _NormalMapSpace: 0 + - _NormalScale: 1 + - _ObjectSpaceUVMapping: 0 + - _ObjectSpaceUVMappingEmissive: 0 + - _OpaqueCullMode: 2 + - _PPDLodThreshold: 5 + - _PPDMaxSamples: 15 + - _PPDMinSamples: 5 + - _PPDPrimitiveLength: 1 + - _PPDPrimitiveWidth: 1 + - _RayTracing: 0 + - _ReceivesSSR: 1 + - _ReceivesSSRTransparent: 0 + - _RefractionModel: 0 + - _SSRefractionProjectionModel: 0 + - _Smoothness: 1 + - _SmoothnessRemapMax: 1 + - _SmoothnessRemapMin: 0 + - _SpecularAAScreenSpaceVariance: 0.1 + - _SpecularAAThreshold: 0.2 + - _SpecularOcclusionMode: 1 + - _SrcBlend: 1 + - _StencilRef: 0 + - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 + - _StencilRefGBuffer: 10 + - _StencilRefMV: 40 + - _StencilWriteMask: 6 + - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 + - _StencilWriteMaskGBuffer: 15 + - _StencilWriteMaskMV: 41 + - _SubsurfaceMask: 1 + - _SupportDecals: 1 + - _SurfaceType: 0 + - _TexWorldScale: 1 + - _TexWorldScaleEmissive: 1 + - _Thickness: 1 + - _TransmissionEnable: 1 + - _TransmissionMask: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentCullMode: 2 + - _TransparentDepthPostpassEnable: 0 + - _TransparentDepthPrepassEnable: 0 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 0 + - _TransparentZWrite: 0 + - _UVBase: 0 + - _UVDetail: 0 + - _UVEmissive: 0 + - _UseEmissiveIntensity: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 3 + - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 4 + - _ZTestTransparent: 4 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.6226415, g: 0.6226415, b: 0.6226415, a: 1} + - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 0.62264144, g: 0.62264144, b: 0.62264144, a: 1} + - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} + - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} + - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} + - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_Opaque.mat.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_Opaque.mat.meta new file mode 100644 index 00000000000..2b21981be64 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_Opaque.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f33b1c6e7b5e8d24a930c8932f28b189 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_PerryHead.mat b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_PerryHead.mat new file mode 100644 index 00000000000..f9f7b78df55 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_PerryHead.mat @@ -0,0 +1,303 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: M_PerryHead + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _DISABLE_SSR_TRANSPARENT + - _NORMALMAP_TANGENT_SPACE + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2225 + stringTagMap: {} + disabledShaderPasses: + - DistortionVectors + - MOTIONVECTORS + - TransparentDepthPrepass + - TransparentDepthPostpass + - TransparentBackface + - RayTracingPrepass + - ForwardEmissiveForDeferred + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseColorMap: + m_Texture: {fileID: 2800000, guid: f9d65f91a4c8998439af12f2f0cbe5a9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CoatMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortionVectorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissiveColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _HeightMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: f9d65f91a4c8998439af12f2f0cbe5a9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecularColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SubsurfaceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmissionMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmittanceColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AORemapMax: 1 + - _AORemapMin: 0 + - _ATDistance: 1 + - _AddPrecomputedVelocity: 0 + - _AlbedoAffectEmissive: 0 + - _AlphaCutoff: 0.5 + - _AlphaCutoffEnable: 0 + - _AlphaCutoffPostpass: 0.5 + - _AlphaCutoffPrepass: 0.5 + - _AlphaCutoffShadow: 0.5 + - _AlphaDstBlend: 0 + - _AlphaRemapMax: 1 + - _AlphaRemapMin: 0 + - _AlphaSrcBlend: 1 + - _AlphaToMask: 0 + - _AlphaToMaskInspectorValue: 0 + - _Anisotropy: 0 + - _BlendMode: 0 + - _CoatMask: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 0 + - _DetailAlbedoScale: 1 + - _DetailNormalScale: 1 + - _DetailSmoothnessScale: 1 + - _DiffusionProfile: 0 + - _DiffusionProfileHash: 0 + - _DisplacementLockObjectScale: 1 + - _DisplacementLockTilingScale: 1 + - _DisplacementMode: 0 + - _DistortionBlendMode: 0 + - _DistortionBlurBlendMode: 0 + - _DistortionBlurDstBlend: 1 + - _DistortionBlurRemapMax: 1 + - _DistortionBlurRemapMin: 0 + - _DistortionBlurScale: 1 + - _DistortionBlurSrcBlend: 1 + - _DistortionDepthTest: 1 + - _DistortionDstBlend: 1 + - _DistortionEnable: 0 + - _DistortionScale: 1 + - _DistortionSrcBlend: 1 + - _DistortionVectorBias: -1 + - _DistortionVectorScale: 2 + - _DoubleSidedEnable: 0 + - _DoubleSidedGIMode: 0 + - _DoubleSidedNormalMode: 1 + - _DstBlend: 0 + - _EmissiveColorMode: 1 + - _EmissiveExposureWeight: 1 + - _EmissiveIntensity: 1 + - _EmissiveIntensityUnit: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _EnableGeometricSpecularAA: 0 + - _EnergyConservingSpecularColor: 1 + - _ForceForwardEmissive: 0 + - _HeightAmplitude: 0.02 + - _HeightCenter: 0.5 + - _HeightMapParametrization: 0 + - _HeightMax: 1 + - _HeightMin: -1 + - _HeightOffset: 0 + - _HeightPoMAmplitude: 2 + - _HeightTessAmplitude: 2 + - _HeightTessCenter: 0.5 + - _InvTilingScale: 1 + - _Ior: 1.5 + - _IridescenceMask: 1 + - _IridescenceThickness: 1 + - _LinkDetailsWithBase: 1 + - _MaterialID: 1 + - _Metallic: 0 + - _MetallicRemapMax: 0 + - _MetallicRemapMin: 0 + - _NormalMapSpace: 0 + - _NormalScale: 1 + - _ObjectSpaceUVMapping: 0 + - _ObjectSpaceUVMappingEmissive: 0 + - _OpaqueCullMode: 2 + - _PPDLodThreshold: 5 + - _PPDMaxSamples: 15 + - _PPDMinSamples: 5 + - _PPDPrimitiveLength: 1 + - _PPDPrimitiveWidth: 1 + - _RayTracing: 0 + - _ReceivesSSR: 1 + - _ReceivesSSRTransparent: 0 + - _RefractionModel: 0 + - _SSRefractionProjectionModel: 0 + - _Smoothness: 0 + - _SmoothnessRemapMax: 1 + - _SmoothnessRemapMin: 0 + - _SpecularAAScreenSpaceVariance: 0.1 + - _SpecularAAThreshold: 0.2 + - _SpecularOcclusionMode: 1 + - _SrcBlend: 1 + - _StencilRef: 0 + - _StencilRefDepth: 8 + - _StencilRefDistortionVec: 4 + - _StencilRefGBuffer: 10 + - _StencilRefMV: 40 + - _StencilWriteMask: 6 + - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskDistortionVec: 4 + - _StencilWriteMaskGBuffer: 15 + - _StencilWriteMaskMV: 41 + - _SubsurfaceMask: 1 + - _SupportDecals: 1 + - _SurfaceType: 0 + - _TexWorldScale: 1 + - _TexWorldScaleEmissive: 1 + - _Thickness: 1 + - _TransmissionEnable: 1 + - _TransmissionMask: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentCullMode: 2 + - _TransparentDepthPostpassEnable: 0 + - _TransparentDepthPrepassEnable: 0 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 0 + - _TransparentZWrite: 0 + - _UVBase: 0 + - _UVDetail: 0 + - _UVEmissive: 0 + - _UseEmissiveIntensity: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 3 + - _ZTestGBuffer: 4 + - _ZTestModeDistortion: 4 + - _ZTestTransparent: 4 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} + - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} + - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} + - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] +--- !u!114 &3791278378928773443 +MonoBehaviour: + m_ObjectHideFlags: 11 + 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: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_PerryHead.mat.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_PerryHead.mat.meta new file mode 100644 index 00000000000..18a48e16928 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/M_PerryHead.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b59fe36a64422184491076e8eaca5367 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/New Animator Controller.controller b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/New Animator Controller.controller new file mode 100644 index 00000000000..eb88a3589a7 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/New Animator Controller.controller @@ -0,0 +1,160 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1101 &-6360429606820767902 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 1 + m_ConditionEvent: PlayAnimation + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: 8438770615993423405} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.75 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1101 &-6305435035350505178 +AnimatorStateTransition: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + m_Conditions: + - m_ConditionMode: 2 + m_ConditionEvent: PlayAnimation + m_EventTreshold: 0 + m_DstStateMachine: {fileID: 0} + m_DstState: {fileID: -3500878788616897003} + m_Solo: 0 + m_Mute: 0 + m_IsExit: 0 + serializedVersion: 3 + m_TransitionDuration: 0.25 + m_TransitionOffset: 0 + m_ExitTime: 0.68421054 + m_HasExitTime: 1 + m_HasFixedDuration: 1 + m_InterruptionSource: 0 + m_OrderedInterruption: 1 + m_CanTransitionToSelf: 1 +--- !u!1102 &-3500878788616897003 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Idle + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -6360429606820767902} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 0} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Animator Controller + serializedVersion: 5 + m_AnimatorParameters: + - m_Name: PlayAnimation + m_Type: 4 + m_DefaultFloat: 0 + m_DefaultInt: 0 + m_DefaultBool: 0 + m_Controller: {fileID: 0} + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 828178223868391778} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1107 &828178223868391778 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 8438770615993423405} + m_Position: {x: 296.5, y: 223.5, z: 0} + - serializedVersion: 1 + m_State: {fileID: -3500878788616897003} + m_Position: {x: 270, y: 530, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 800, y: 120, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: -3500878788616897003} +--- !u!1102 &8438770615993423405 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Armature|Armature|Armature|ArmatureAction|Armature|ArmatureAction + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: + - {fileID: -6305435035350505178} + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 8450808836658823645, guid: fbaffbf3f716a9f40bfe7d38f123f669, + type: 3} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/New Animator Controller.controller.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/New Animator Controller.controller.meta new file mode 100644 index 00000000000..0eb7ab6bc5b --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/New Animator Controller.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 18158bc1269b748b699e6c1cc3a00d6f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/perryhead_bonesANDblendweightsLODs.fbx b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/perryhead_bonesANDblendweightsLODs.fbx new file mode 100644 index 0000000000000000000000000000000000000000..97782331347908d3dce8ad0c05208381b1184a15 GIT binary patch literal 1274748 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

T7l;{&!vSlNg4i+x?fYs%GGHX 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 saXuhI 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 jPGN$a^!BtsOQ9R-p|CAaZ+*>$J{k?DqF&cGv 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

eg}dMUB)Y-J0sa zyHipWcR9pP3)hG@cl~%<6n_zT7l(e=&3V9kqn$grwAgMA;|2NrFd(&RfMzhlB(*GH4{w&LGS6j_1Y z$ges<-mOA@u1}4}h*(d!?E)$VlzRviBC&2%`!m7VB~;u}EGCr>hQ*kimZob6Q|`Ah zJwxO=b2lQkw&cF&?^xS`cRAQgid!<<{r?Th0TLR$a_PUuZ3UoG!38d&Q{Fa3hI=VX zTI!HVeMp1I^`is!#e822NXBR@h4-m{FZypZ2C{YP`Op!-JsI%LoO-dK+5ORog@>l)AC)3W4Cuq%=il%Hd{c2)b0w^MRW zZ3gN@(EaMQ)fD6eBY3gGhPrl=1s}-Rzxx%>x;$-T)##ngKv@L5SZ_YI{jCWy>eR0u zOdGz53>mfCYCI&^0VLb!r5C+sM8#tM$iXk8=B8c)rZy)Vv=0kzqy8QcoEmn?psZKX zah~CvqG=Z9C7~8kh%JBUunGVihkG3lD4<#|jGfTHh*HTfs0RD8+3TqK-_L_4M=O`# z$cx0uqNO0lUbMN_k@+Hoq#!*K>_T#jPH5%zkH0nqBeCVI>ROK7TqPp|2M2%0cg5e_ zR$1=LWrbbEUf^ZEh^Yot=>NaRjW>2+mzZVc;umrM8p%I6kK@$&H_ElWHf1IaT4a;X z4psR*bbKcc0Bu5af)>*y#H#2)wq%gw7=ocacbh{{)=1QiSSqC63g%B;ldxeT9#UKu z?F}1$)3{proAQMc1HEY^&hM;urZG$IaKeVVu<6AsBiK#TM;@B}&%FuoDG!aBeS1JV zgKk!2S&ThIn7b3jD+y6vjd+nC@QQ)nIqY3x^Ser|U+u~ltKb8|n%(5GyX4@!fm+jx zwtCl-h=G)pO{)L$t4C16pp7e0Tf$w`GdZ~J0!!XN=Yn-OwB?{^-M6Z7)XB!TRd&-Y zU|;oH)P>Klt%Qy969O%SKjm$MMb2??{tGs&i%8@yw%s^?FRg1$JEIdx0ik;LSyB%zr#j@V$|wIa-x0w;bt8Yz)?>TID}O-;O|xxlF|0&rQ!1 zM>ltNR=+H!w5t!`Z8SDvc%Ba5lj75R4yNGE0mlVVINceZ=BLDSHIkB3lW>@j>oXS0 z3Xib_{HbTcrgi7D9ZofcmZGh}O78gX@Lp+baRbX-syp}5V zJ){1T_sgHt@DH69ShN|5bYZ$(k(#}f>pN-tM{jS$$HHJSXL#p6nj5{Hom_zcT4ns6 zNC)mM*5=R##nW4n;`UDf{kQflOH_Z@gj(p>q$O|epBXc_KGAQBh*mhY3C%DYrm|%@W9EDGm!Ml!*Os-I>Uu!@RsZSzK_~Xx+=rVc?*`GV+@t^*4XnGzdG;G=M zEZZi-A`$^91=GqX1>_|(D>LkVJc=~k1?#=Wmq_Cz$ z8ijP2NOR0pzS;=O!YrR+2+>SoKYB6*l@g3Yz)jN+6Kw7xehp+W>E$gdm@f_wvH<&7 z_T$Mmw80~_?xXJ=nRf*7(2o^!=kYtL^)46FK8fPK2*=s0d?;8|bpzNt}M$!X)Pil?*c-1if#8haKo_qY3wGUBwsSS_8#Hb3yO4XVeJLu zb}=9qIZV^elNQ9h)}Wz8e!Q)6zL7;W`)n@G$Q!Is~v77zu9k@+jrb%$AHGi zLboLiR9+m%8lD=@>DikQMBgDE>S`ci&)e4ay@O~A<+G*8D+erZd`#j_&lNm!fCzoZ z9mQZJuf-G7yyFjA_306KE%}Ic(LLmQ8m@K=`Fbc>7>;Cr=nys`cA}fju8}cOw=5&? z6?PyXN&nP|-_5;(&b-&=BkA=(%vz+1CcVy=MJlqN$2$%)e29Oi#mkKBomC zIYsU`V5mNIB&15wPeWSpEKu8OZVP#H`BihjRjPKsBMd6DV*We2P%s~{Q}D8jUK3aW zai9Dd^44BP43)&d!4?-R}lJFMyQ>w`a^oG#%R@3%e`#+2>)d> z2GS$JZiq?&+Erd);?NiYpPxiJ% z+V(2C#AjrHAd@b~+jaRwTp+^OIgx&eP5nz7Ro;tkZQ?E)2+nuJ1)#9z)phw zDDECez0MYwf+s8fT8)vIvjs(uL%%R1QLI)(9bxiKOx1mAO3&HG0%5IGvljNHzvt-1 zZK}4%#ti@11U^zp`B=9({d>-DP-le?{|*@LKlT%#Juf|R@%-9aUD!rlPr^N=66|<) z?*`6KkE8w(a=8H;*Tj}w+3U|-h#xi3DkkO^kSyJ{(<4j4y%Ed2el5M3xyJCqOrGDX z*XV?+-#MwjyxY{~rZzU^=;bN$5E_n892z>ltmL-4zlSyM&K|jovN&ZIg+ttt4p^$O z(@(GK+nxIAw#p^9+qc-WORt3ImJfd+3tg-XV*x}3n z@}}V#(&_K}@~H|tJ117x>mfxz??~{xKIEXMqdE5-meVxC?HYIAg=&zkSe9Q5S?nI) z?RZhtul;Mrb4>bvuvOs;MHIeknVfd{)agcqzw7l2-(b7}ydU?4*UuJH$GMvDTZJ`6 z=De8cuHZ9BH!0t>XZHv3zq%ZkzcaT1<16v4b&{%Ld&u<+ec|QvyQFHfkTEcbgAtDyz63`IM1+=i8=-fkAPv3G*hsKh5?TJsHd95u_$@O5DS9-5N@gr)T>jfq;vAmn*uNjSr?2OV;lm%B&V7 zecIKs!8qIE?0@1Ky6ultx^WKqL*&gl2fY(@>3{YH<{n=IP4xySq<;`K&$qq;T%?~2 z74>7(#)$i0eZ>k7oZ*F6jTvl9vai2W^?7JFO*GB^I>r=dj(OoIB(&&a5K-M z_R7r{)HP5rkf8|h32l>v-$hYGb!Ei5;l*TlfafE>A?zMZm}P%0fNR8D!SM27@V-P; zzSQb7!!)>hpg*>`&w>bwuIU0DcunAXO^?0ttvZ*##cDrxhz&SD3|-I9WlcKt3W;77 z+8S}?w|{9I_fwpL52QT~RWV{-@{1AP4;LGaInh2%Nm8HGLb?L@h3DM|gzZ%xB9B!Q zc_TCeSzS_3&i*lcz{IunrG|#5rmg#|W6!#V4~nwgz!+gE@^V>U-KP24TIr!6J;NVR zDgmriHydy&AZhllLGxsA>%#Z&`J;;0^g0f@2Y+zzsSZ4NYEGK7BV6#rnAwnN=LG1I zGqartWAlM#CCf+E3eWSn>K1n+Uy54MSABiA_6wsps2W^J-BGeEK$atOmG|j&E&kZ2 z7iFTU4SQjf2q_VOkRF?=6p%(O0BP0-w?8w4Fd@ASd?p2dI*lsi&1_{y{LZ6yNoDui|&`0pwkMumTg9@@A?1R4xyT z+pqZ>(^(@q7BM??suSJ(dG^=%Wv&8uo9HNSQ53NWO4pfj1yZ9tzv~;;;J23qV6WW2 zTBo*Zy(F1PoV?66`T5bM7pgZK9JxPUG44@_mm&R-p@_fkAavz&Z0~yoFNa=!fuxy7)}s`aJ<^O7EZKbKK;JfyX`XSnHkf#9f<|Z8a1{`k4WAlMf^3x z;ajecN2SYK!N2UGNZ-bDygn%%S^0bqn8GBmCA)3>+#~oX8*DP zkJj=Dm5_HD8`+5q(LW;U8XP1^0ZW4qFB3MYkAPR{l=-4h^B){;S;~=iqL+*$)d()N zrpxUKfsfBfV@g>fCPdmOxPf z`N@srw52H&a@mG@rewhQCKy0K);l&Qw=f&RVfS>FVaVNdb;iH28Nm>C?oL(8^rop^ zOsy}7shL^YcHaf6gu`vUHa;<+7p;Zy4Sm3C%FoqYIZ0Crd^y_q)jiGy_yk|U7zP0RXAH{H0F5ORCY}fyu{jb$7KWCp= z|D{2Li0E24@6OMHks!kthX4zi6GVZHV-T!am3EAhLP0FOl5*DSZa2ebJK!jgD9amb!Z$mf>1^wJ6xZ&U&i>{MFqS>vdXEEC|M|CbbSU zVM)I|qoXF@k#eR`4<3v>DvlzZGObwD{k=*KC1q#Xc#rR05}6(EMOB|Zp)j5{DyXd8 zl7(-C0qA+{xue5Zr02Evs7f$myRqwRtetw{)f8q-?Yk?n^`c1^lURQ-!#I27;_AV_ z{?pLT_4ox7Zdzb*Vs4z&nTR<2+1=Ph=$^(b(x$Vzcflv*)}EgW2UF4OQh+Q{@rlX+ zIp?$wPvW_DA`3nD51i^)-uE-Gs4tbtmc)MY0IDzjMSD3#%|W`fbEd5eW3S(XF~i6a z!x;b58d^%9{x46OX)&I$sb>Gx9iY-BEu_S7w0JOG5po;s#vcC~!pZ6D;ePT5<}DrY zXDn|*Yrci0jjLwE^YrXZ0J+@gZ`v&Sj=kSZt+kwG27l9%STmbvpQWx|7y43;g(St* zr^uoxJNP7Ol*940*1vB}BZ6Jp%*^*eqtX0t%v*ia>L$BZ~Mu7>(00_ z9+GEv&enXi=&UZLLjT+J(F%NE(T15rHu(qFk;;x;OY(BV?+yXY(S9I6=jTPJ7HreE zwi8|{8sBAt7M$Q8#jjuvUl@O)E>~b$>z-(?FML6YvW@(Ae8-40e{sxsYIyeC9^V_u zr}oL?PL>vH9+GL)MmXzx^IQW(F-kzbu*QCbxCXUNrw9$5arAHfXL#J9x&T4K<>!Vc z=GUtz@^3YaP?=TF1ox%gTdQ%74C$FUl7ff4^|E_K_itylnYalN6Hd3^0MPGoW>e3b zL1LUSheBL;>P+GNLin1PC;N|EFinU$JN<~I|BzqY<*2cX%@w_2+f535n;iMKK_%Ev zUj6Z9_}a10T7=UD{-doz86{MkoQ*r`CG#mC=EtU0;*4cz$x=Xm5uTyZZ{C$-1{A3Pnd1Z`_3D503lG@UB0>mCq6 zGxzxHa^zd&JgrLSV9K+7+-od&(Lot?O5j6Ib(`C`FYSv zdFQap$N;QjbavYlmxt#nY3|OMuIotaGS%*JRtKdr0vq0MsK#_#YOXve7D&I&0j=;M zb$488QJmXa#F%JUg9hHgb1;7-`G=vNc(rLCQk`Uzr)1y`l|k9lfy1Z?xV zlDfQW(M~i6Zyq`kUZz`6hP-yFv4rToRphI4v#K~h>f6U3A$blcq&T^ur$urcGU*UB1!jvj)^8IAV&K9l)xP|%dId}X{>CwaN@pF^8FXCmw zwyni`>HcuMk5UDi#cylH_cfz&0-sU)AY0qyOQ(T0R@B!4h;^cMq+X3*C3A++kNZ!gW~oC1e0cI%Ypla~NJRh%p==34lb1`!&9+Ui0@0BhiNHmF$xEQpXf+ z&F#s3gZCK&gi(KoUX3})CyiuBIrO(CiQIwycq4D6e1CpAQquj9z%{yqTL2AN&J50G z$4#^aEZ62v*(>x~P7$}Ujttt-lbdDlS1*;?P(7C@69;h{fWw9(IJx>aJB#|jg`J#{ ze~;?lQ*h~nPakBi8QN}SxQj-}gxmuzz%Y`*_flBMhPhDAsvOYPKd!2;Q^3{0>`#?i zBDa1w6RyI135{HSSQbA@O)^VT{3ZYuayTYk@A!%Rel}(<;JG6?#^}ng{@o7awoAM} zv^QR$)jEB^LF7FK@o3CZ&tER$wyFwbn`k~k)%NHkRc7FM;dVLcK$h3fYC#I~1bK^$ zssmUg;V}gi;@GksUKYlO!}1yNDc`}2tJhXkzPkJ&$=$Ypsef-tY}5wK?^D_02KLyhh-;`wnWEm56}krg`ra|z5nxrX{S=5zc3dH5Sc*J+1O zk>t4zsHNKb)Pd)J-e29he5}{sbLq5d(Rck8BEh%!wNf79-j||BMTjK-z`k;o!blt9 zrbKq7EZH7FL_pi&S7>UHQC0xN@<<09}v;x+f-XIK*eodCm-E0{nb7Q64Xj8+Fx5=m3EgXP`TxEx~tY}mb2p8 z3kyTe+p7&^#lQYK>XjiIs02hZ07-gcsY-~9BFIJ9;AO4Ak-RN1mJSya`XMN=uyLyW zj>Ph9A*&2!;)E&%a(1R8U+oWzjl_?A)Bh5#xhBcy1kXbnSQ`ck>`!Ps`CrbcxZh)o z`;6^BD9!kt8G8%$wp6vn0O<4N=r`wgKf>z;TrOsDFlKp{myyiK|3c|KuWv0|`j0QI zeW_vIBb)Xd02v<663(|eymSxf>}^~Z+-=;4E_F$#xXn`SRaRendVIe7rT@ zWMFJna;imHNV_*9dFr#flJ9Et(Py@iK*bA0ixJxsj3*G(N&3HoWvat{p<-Y&<6=`0 z?}=3^WzCh>{h&hv0QTU026#l>7NJF%`=%rP*Km5oV6V zFDIGWfpg||d^Xui_zTt?EXCbBySm7%T;yx@sV0&4;zv9SnqLh-G!h5i``d$5CHD zfmf&en5)5xhqK!n*NQ%?s$I8`>=K~>QVgCeI#j*W9eP4KvD11^zQ+~%wYykg5iq!m z!;@9Mde_7xJ&JJ_PQZi}>8@?|S*?wx+m3gH3|1rB!&(Cru7;0^f?&#;LeL9X^G7AR>mluyl^si3Vj_!o6>O8ysN%aJuczY< z5c+f-p6PG8lb%AwZNPjl;{7I_MsaO;D8yL)5Dud4_at9)7->oh0au-geY z+ZcfFnb*$533!3kgJQceY>;C~1l-uT~rg)Gre-N64*O-D5QW>`%g@0S<7dKp<9t?e?9L?~#3Kf%sXnyBZ#_lM>-_JM2Pz)+j;KiuKP~I=-7;8nEexx(8%XlX4>9- z{}Zd&*_Rtg(>Q*`@U-D`S~2tfml3=EN5ZfHtwhaQnSSLD9g9xDx+NnKgGJz?Z;stQdS+;{?Q;=xoemeNNVNGBJEbIb|{d-3O^)cZ487nlC+E7e@gL3ftE=YU5pY~3uOW+fML~ia>X%^lMsqN5`4F^h;)X+&} ztPflQ`8KkL8CL7@V0!|3|L;wHr?1#N71TL|NZTxTMTeZvm-z*YJ)YrLw|II3|4C?} zOvu_ug;THO*qkY7UAAqi1cvi%MQM=VpZ7~(&$9#{S8-InW(AclX& z3)CsMyVzTEUpIya_WvTp-YlC00Xyq@=3;aM>A$tDk?yrB2OTv>cUZ_~W(VdoozfRa zsoExo{Pb6i4cX(|roz^LY?%91EM5CnjK}7kpdp8PHijza2)5FrXoKG-IjY0sI-U5U zEzjsZ2m>64eFCw)7`7jSq?;R>+{*LXwEl=U6W}S%4CuI z-9(m?S%*3(aBe@)2~S2Opt~$0@i6k)lgl~*j8EB;TCiB3bG|Lpd*U_=ZkfMS4I;Kq z8ek%)CsL|jLFgJk{e3G2T#;4|KN{zhJItzdaW;fefdsulHh&{`?c@1k_|m(0Tp!~H zGe>m5lrI;D0hh_u&R^XS%CNLkkZHEI-0h_vQhoW0J(Suu{BFJ-OuN#^WEX$A0Ew~TRu>5+jQE7cz z{KEOC7K})#z?+#Sbp$#EL_T2haMmb~y4-A(Ypl_IIaq%=BnFqVuz%8jjon-d#(cUd zSvcKn5aGz;DWqe4PjsT?w@j9%`>)@)4s}}@$)o7FiI9R-b zy8Fc}f46YZv1~bnxiV>$CsFOh-hs6LuU0O3;9QqSjdy`xyQLOB+G?tyA7?oIt}tV2`XlOo6ffnp zT6apt)@y=P8fZE!`9o4&C1O-ZKeyYEsw4Yu@(1xB%8tui82Z$;PPi7wcN1n;yi zBd26#jwk&4i0%3Zzum#=Uh546-cGoSp20B(&b6+aJ9(>}3$B^tU}?&UQuL5!O~Dq- zQuzbpMQr&$enE=oe`t=lR%}LoKFV{3o)CE2$N5IG2wE$7!EVu^=YhA8fUd20QcHRw zJ|>;03kTR|0xzACqEMf%gfF=vuJl4)mKykuIlH>U>OTC^nMgnnTT{F0duRss!pcPc zFUgA^I(#ic>|>MMBar8o_D>o3(99n8>h;WR^|dKgTm5hL*nW;X@Qnd*L~y4R@m#K_ z<{}2R@gwHCQZd!=z89oZa{tI5`FW5qWC*;ufxWXrz^4x)AB0s3p}crh^XDgO3Q>T`dJ^?O?lp4 z2EB++ExZfmKSWnE`|0yShr~lEweatdOO;iU>uokxD2G`c{qab>ErC55+#Qu3ca;3x z2GX9a#MGJDgdnv^g3SnY97+oM2^9ei$PL^^u_#cwNY)A82O!ONsxx8fz^_Usb%IOo z4_ zyEHNaN4EfLD^3PXdz(pSFJ=8}FH{xk?8Z`Si;vD7)94V!g%(iDwsZq~1K1^@t?Su~ zm#&~yr0M7D!8e=h!8Q!eg~7CPt#z*(Y4R^BKKvpW*Yb~c<)+H7I|uiwwYcc6oflAs zWPb$SN{kz%euJcLn^;IwqMtQMQJ;Z{Z|Edg-#rBWvbAyNNViRv%C}F59e6paM4{rz z?V0`XJRT9-6XE3`d~7qe*}6RSS;$btXEW^JNgO_57B=m)Ud;6o11|@}w@3*92IoNUjW-r9 z_Np!~giuaBuw?nktIs{HqtLzQVS(5us>aKPD3Cqq-+L=;@BSV^-Y{_+19oNmTHvyG z2%Mw={u>gdROZM7hoCj<(l zu(l~gTcvmzCL>Nyw%#Xd*356rtngj9^qzPfe?e&<<_IIXf5UZ<`N$Tt+Kg`&QBr;; zLcP>$s_l{fw?Oxm!Ax&ko1drcDD3Q+$=Z<1DN|3;j=?V|%0Uq9!Z(U?KXu5u&xaEd zmqry%^2^$V!;7$yR9yX7?B4$AFQ@`_a4@y^A0Mw%cb5EY*2*?vEV3U;X0qW;VfGqd zOS`5MEE2tUu}W?1Nd(N?)vtQFmuvtAL!F1zaKKLbrMMH5W?0Xuby!% zB{2Jn^`jAQ1cp|r^fp35R0Fs|*O3=jD2XY4{4f4WL}{cm=($;r>_L+Od9>ecq{p6+ zLi_DJMBui86a>t6k$)FBo_~*7J;txKGg!iObn*CPjOb(Yk3k2h-`<4~iZ0nS1=b`& zHaLXNX?9Zbx-#wysJrR$gN-4hSj1-hmy=QhDIm|q6`oF`?AO=p*NLVpdSiO6emL4O zU)h?VhY1zgD<|v`pBDqq;$cR{qU2M)g2l~~CeXjq7OLZZYvt=Dzp_DTIk%Uup`plR*TnWhf%uP?m^$%a-#V#2>5=uerUU(S9m z(L4mOSX`p`R_uL;{?%u_h+>C1RSd{V5)Db1x!+$qh;Y4s^*EROvwA}@7U)99)yh$h z968oD`Jd6Teb2b`-zijQ*o~wwlHifMhr9K9_B#pR(dP42G(wQFC@_?Kxp7lb_MRnk zOoy3*28-~4`e;mlkAo*@Qk#5w{nE^mJ0X-f|9j{zDk{3zVlFg*IK4cCDJFFDK2#^D zQf@c3)(#wEac?5lG#|F+PYRZn55+nT*emJ)+ZC4cl3LwrQ~zK@&&twUAgR$kVtjD+ z6w2|2+R*igWupz;)as5O`CuEF%)3Y}@EA&R?rp{xnCCnW%9A`kq%f#r7_b4ajtwg% zxr>U>sXm^&F;o_#b+jsd-0%;j+f+2)|Gv`TD<(DU_AEGzAP>|;jUk5akJxL6Djbd zJ~MD|teAQf6)^h@vR-+iZg1s-Fn0~X)kVL<(ud0RSj{6jB^s$pW3*anpd|m9?KnbN zdXrXNfAzJYasT-IM7c3o?-Y6T(HMw$WyOLlA1g5(>jvI{=iJj{IgC5+Fore98h_)D zGKk$C9$VH*gXS95GcCS*MKg3gWjP+SyONy$+%Sjyif1WL;9Z`37rk%pr#XqfY7j;D zR4reFJz9_dw1?HzfT;1rJj}JV+!K<5eSVt0;OJ0;#{u@%m`EhU%{nRYDunHq-N&6c-F3TTAM`84`?;& zWN*I5CNc(z*yu}}(wzv-7M$UWxFhenzh#i*JudbMoK0{Nd?}@xx!!RAYrb|!}e7mY+ucr;Zg&q^MOkjqE(S|4DhE*~F zPBNV~c+5z((W*iT5OZK6fwFF)FGJ+6XTy**#A+Bw^9ai zJvTKEb{mGa12)Bc(!p-f<`(m#JemHNtNDJyWLhz+wC*K&4*RBff>QSdDTPTbvbkU!5Vz*3P7X1WtGi=y)_8X=` z!*^m|A~oGSlkzWUb-ZvehJV5TI8VCTpJ$d5$pT0i)${`Q^9q7|D>WbF%`a;uP{e;?d4lhW2NKV8@&WiA->M88^#C+lPe za~x>McGS8lVW+}VR|%z_D&vg4{jhn-(1d7 z>2a-8f$CUi6<=i-D6h+V2_I7wX`Qz7WE~YP!~<_HrMDv10$Aw!)4w5+I{}OP*en9C zDtHi+PxH5hAI*6JKT6p*BR}or_oB#h13siTunbcJejzhpDq0q;#-oralu=L;slxx; zWrl@~>-Cj<5_C<4eGtuRCpwb<}tMpt8Ixn zI`ZW%sg?d!sFZP8dsyfY$$n5@dduz^{WNy_KuvAMh5?ji>Ks8=!pjAQrlm&UpGByx zO`8z1y(}FUg_^^|5|!;X4{KV--XqGxfr<}cKbIRDd0iD7xIR{|)$biAXYYyY~6b?WtQV7 zyiIM3Va4u+JhBL02>mrpZe|bSouP*+%#0I=yDPhY8@!q}ywrPTi@j2O;KX=^WQ2IX z7^9pu*M3wVHSyUWK(K$z7vBXz4rig+Iqr#J_zw_rOC#)+kkhR*Q_4qDb^#MMR{yY_ z?U2f=_#50SVELfg|9Bal@-5T17*f#LTM3ec{_%QuLlcS7)RT6`%inG_F_guO7 zPihB2@(d}qT&;=GG2pzPJxI?O$_|?~Gnq%a`Ux*)@-{NgC#%KsQe>EiEJstf_u(=w zr>wppIS%^E|9xEQA*eX zWIKb4fI$_9JTsw|vvq7EO zy3Anp<E^LTSsGQFEn27iqkP=?FGZjIoH`N2JA$%6*zd|&zPizg z-kOe^li1JK<@i+@Mn_ndtB)7%w3xMI3^gte7+E}{3_BqXz!;5NQdQ@e>l-x7M#F?N zn-qNaSjwTs7&0q^M_>gFl^?%s0gI}n=|Af&CNDg3ux@(C?=ds@>XP%?!fJk|431Ck z>8J-btIaO3G0Sw283DZ)MZ$a{Y{IK+MZ6N8KvtySj1BpE`+`gEQrs{j!*4etOHcV$ zke1J5I_{ViPVtT{5GMTJrbY6t2>*siv3R;MD$}vxf<^}V4sF#Og*=>cKr=A0zrO4D zZyTsa_J0#%@HRJo)d_XaG{mG8S1LWdTgq_nln&4K&>|eQ;*ma}D*Ei%OeGE&*Bo!p zZ1u3C6$={|@9S^kYLd$cjqHkHDr0@H-QjNTFug^J;L>_C8g^Ol5OkTb5+1Wk@0^G| zt~5TyZjSS+q<+X8-MswmjZ%R9J)gE3TEnPbF;+FWx0Q9}TPQ5l{*9O1Vyxve z=-t1Ym@xHzIO#0Tp<=e!qI|5bv$cUgx`XEDf~wsH`-$8p;vxtAV;2p~M4zoOv&Y|t zC~V-W>N-dvUDM(t_lmDY@6p@5Y)>c0cUja!LdJx5o&}j)ky`YvZR5m;D;YUNpZ)GX z8tWhpb(W@qu>g)Y23^KR9SLm%sEd>1ZOl{iOrvGba9|j9dXa?U-Qyh@!6qgF)=1T|HDJ_1L8dfk6EUGd`KUM$_ zxB%wlGv(76l@}5~13R9gTVNJf6XNG>he9(wMz5_o07pae|KsXipqc*v`0=8Wgrt&O z_L0h`$dt-$whH-lBbAWLLad8iV(#0LiriMIkjsh+x#v^vCbzjSxyKB1%P=$B?EZgm zpYQK?e&^pgonzkHyf3fU^Ywf_F3;D>u-x4j4%JOnfu-dUf%8@cT=y|APNWK?IM@NE zGAEG4QwyH?LxC4>_8hchSW9+XbM&agykbmdt6gw+{mBXPGwPn;x^tnoV;0w8Ww*A^ zzH|klW5(R>?+dz+(u)4KYH&BD;JFxXQVZ#xJuF!@ZXg_?d8bq?@R$cXR>zVOEJ(dz z#8&zp(w|x^Cdla2G^*uOo37K+x)qk1*cX6%OSk07meQ8|F9e2CuK>vf6n8vKiT)H#*xO)6$ zc+V8E6{v3k95>Pv`3lG{4=Xyco!}iT+qHp69aP=R2i0!p_-eI#pvllQdMWx5Q&AGQ zi$V%}%7tQH`iAHMiDu0ST^NODu;|xIaPqvjNbG|%86>HRBKEErnp}i^5GNlCQdJoO}|)tScmYN^aBG2=v1NfFAnl*UmC|Fq&k)gKcuqAJ$eh zoWQeKCCI1mAPOodd~)|Y#i;mCR!W#}+_1Hnuj_BALWq-zl?o-V ziY=x7C7FM%nKQBycKYpHal`xI*zyF@Ja%fuFSh(J>ERQRI&(1!wP`5(&{RI_3E39g z;kU)t_GU92uA4-U>&V)Oy|;T@tpz|7*Q#%*{?M-Z*UGgI1D9g}6e2+Mh8m~}3je%; zxcD7CFO7bA3e3HuTD}bva;=dzWFTG=-Fcz|qRW2@FMDLQk~M$(@Qw47um<|eYcjDV zkd@in6J^@3GQh8663qUGr}O?=te4HiA5Z{F_mF#v?J~*7Rk@c33L&iA9HRvf(G!x6 z2d826=bi_9iW!3k-qVIWuf-sr{MnhYdg*eauv@+$R-oyueC(tbpk*EYpc|rih-|Rfey*>l393haQU;NcMXR|;6I;OB_ zvJ^Wn9#V5rBY~xhVOzx13nNWWk<@UZ%`EUi$ULo&;ErDSP}C?SK3l59{G zsYi%XCW=Vf6#PNhQ8|zaxK3}3Ci5kqSyVt4S4;qCZ>v~1C?9PO(>_B9nf(joo zP~CA5^E!td%Lq=3r>`%%oa4Ltbnm1E&~Mop6F*B8K`lhOM;yr=>&uKKg|$0yl z2BPe*gi^q9*hv>n32v5(gTZRhI((jHeTu*j>ZC@)XNvZ5vreT?I{bV6KX%6!RCzk{ z*hw`{bo&i=3~3FWI>G23?|f!lDKDC!`Thx8OEHZIo|sJ;YsfLGSvrgEFgoj&m2?Y# z-%NpW=K{@Y%qOzrW7t3ZKcPxuoYI|h=-1dYL2oSnC8Br!Wt*8~fh_E?Y&V3j&=cP6 zfiE)*?nP=){5)cAnZM?}1Dfl#UDdJ`h8~-qqwLSa+Lh_&<=E9YwIR|b>2|~%L}U^( zieBm2*%Ri*2;H*YOi5gEhAGEzOUMN=)qYnovB=X(;_8jlqOq3py>sgryG%yJbM4ZZ zEf`PW4Wh@ z1LvUWs?uk(LKYH2(^i!OM88RTF_4M@*hb9(-O?cfJosXBrGaLd_s*Un`|w9_G}$nL zHhVZv@ymeLgsHpxtLmiToV~;rLLP3xr?NyR2BW$#PIuTLbJFnWYKJ;bk(Up*1hSXU z7ZCl*NKf$U#k%1G%`wB2!I|I7go~Kps+6f4iCdYLb5dBR3f&(Br(6dkK9HSizKuB& za=+im)$HAT*izP-k)T&{*(PgxgNNVbgJ(mo&zzX8DPqYl1fB>fjF0%D(~}s3?+1GT z4~32hxE0WcihnN(5Ov1!gOm|JY);YkVznv7G(aMqK4sNdTlrFnFM;)oLc%*_3Q%KS zU&7mr7%ajE^sDf*NLj@qSfK)@N@x1Vx;&!Jl}jCP^qXP8Kj>R!wkTlJm;GX(nf(tg zhpx38N{#7dN;@>b!%r0u9mg^MBATa zt0yra;P>bO)VjxE>`%)|?`||fOtq(*f(F1gk#|RT$D#S9X!4e4o z^xLnZU?+ESt)u~bE#L2zSUaKJj;y%*5R+4)a|A9^h}mzue-Jei;y<4(bF{Vk791LD zs;y%l&#$5o290^@(**>Oa>w#&kj1{#+k-yVqU2^|XYkj#=8tD(fBmbpXZ*?SegJV|tdd+cr z3!Er>8}F~f)l;TcOX+3p1abz(%%!5x?^&d zdVpUfI>e+eu`4?~dS$Bk%0%fB5!W5t8HIOu*)`ewNye4HQM~Dhsc+9z5$V()mUh{` z4X;?RXBlYvE(yHTV=Fby%Ve!##EbZMPXw>D_o36ag_L2uxO35Byj52gn;*WKz#ein zP81w07hqzsZ!VuDn|b)p1I3EQYH`HE3miN?ejH}Tw;^zDJ~b>zCCamMw@AXL&tMGllE10$Zx2+Gu}!*4@v7 znT|$iCs8g{7C(FGo4?h#pDj#1*`#D^w`@Ec z|L5e=KV8>&V^#1SAl@|Vu3zq6heN|A;Rl6qmHDL5c*JTp{2>jEQkYZHG@ouhzs~zr z_r|5V(ZL*pVl|k zOP43pQ{5{Jgsk5~vC;b~w+V366usWj8HJC=(@3inc?qkJy^j0=j_@AaCL9t$XPK61 zlcmSgY1M#0nPT2hVriuZq;hYrfTQ>sc_&#^7JQ_d@>L6a6V*P`-gzd z7&CtUxTg6h&_b13nL6s@#kb!7&H-RxKy<|qn+SjHDH^(Jr1>^A8Q|Xm5GqH^fDr4DjwRV&5bpS2>|R=02)GF>5XQt}6HuyDDMtLl zPECf#y-ni0b%%LU7zGMN5~ZCw`^EbJPx3puc41X>y*MBJIcZZZr4suh2w# z>g^c|ylIi=gec_jVlw$CbOLGlX66HQJLE~FrDe+G>$zUv#gaI3W5nbByyIFuCyk^k z?t*TObt4D{`u$*U#YuOj^`6@J`c9S#!n2kfpz)Hhy8PyaVjbCRhMqSgzvg-GMg!?+ zRArhT>{1%@=bnHLgXZ(?+TM_ptNRw7>Kf_v&f&NMaI-~lwd(R{N_|}AyiT2ge(W6*;I{@h zFug*x^>l)jd^7?toW^L+SXJ@=s;96ZgRK0#T|=gDTb}61JzhD(exvrD!XoeloRG@l;vh zd{a5m3f>TO*e3Kg{%u||H}O>zjB;_pA@}oNDe&%h4OtL05|$ zYkpkP1R;@k2?}?>-N{$cDhtC5C@=1>;C}qE&yx7dlCJ_ z6~c@b5oQ>XC&(4H3X3>}@Klu?xxdIGfp{^_@X7q^Z){1idX{e77T6i+J;_JwLr&vq zr?cX{0sPgR-B=%U7B5;|$CE$ljV`|<`c(<8S3=wHJCWySh?;}(M@}{g4{|i+d77Je z<4+EXpOBs~d%Ws}1AVEfb{x8mVJgn0T0OV1&$zxhOt?h~dZ3`epnFomJYmv<<4S_u zIDuTi_Z+sbl%f+t48bgbCBmaUGFtm+tBjsH+|n~P;WOl`t{7UTxC^#?iGEB~LNoeP;p%Z$zeZwHWm7I_%8 zBUse(-SmmT6!nm8)!(j9DYY5#J=jAq?+!kx9Wjq1Vl9ORn!sse@+4|@V}!yP@onmpk&kQd`NfdQBfb^-N zE6F1(%X;YmWDTlUB@#P7mPKFr2*y(hj#Nb>4sO1@tZn@beI`@I)%2F=+UE!*!3&dz zW1N6vVf7m{QLALrGogeX?Iv;VRDF_|EnQeS7Xd=#SR^K%h<+l+oHpYQFnRm|ATZ#ZYYYx~sOssm)T;-=znbq>FXEahJC$TB~oS28u z`Cad)FlFeRu|l^iE7O8bhyAn1wg%bmPgK?rY@(JNQ6sJ31_bvQd^=I43LBL3brJ>A?9)4k!Rt%lf5zsIobA&!s}^~4NQ?;N~WJItW(B2_qS8f=Zd~dprkoZ zW^z_(U)9U#I@rSUWRYGU{uN*ll3c__w`clV zkM-poM(?5jH=h<>nOAQ_o@VRU_fq4+E-Tq8rSHMn_Z|bZ0`s~J$hcN#LD-kXbK_qy zaEtMCV4{WVHM8=V$Yp`HI4s8BB1-=!eS>U>NQ#$~Ul9t4Ex14Djy@!C*R8uBdcsdT zKsBfMk@Ecy*j8Z)7T3)oC0(JZ=8L?|K#9A^Qz!)eMXk97OtMnu>msb(TUA^uBrzA2 zA;qrnDu4B1nOQVGLJ6<7%KVpRF9ozl8EK@fcK=Bi*tH-P8QIf6zXxO?em(Pdh2_8- zWEBgV3Vi`_T{4$AsKMxAj*p{zU2h2&B6VIkyaOcohlw=XE#YXV;N7c(m$uQU1Dg<# z&l45+2+cZu5I5$I^_gMLTFA}T(6MR9M08V7{J`LIrB#d_s2PrS-auEG3*0Dv?tt2eKTzozSciXjHOJHVZBICfaMCo4rYIVzGmv8E zWN(+2777poK6yYVK7@m(mh_RDIY$>RGjIc=wiCFHdeIjDR>QDkvoDJ@(SA*C`A-?H zPZurBu>$(sQDGkMyZAgN60BKz_}0-+uW${$CspOpPVddQwr2h+#c-0LAekl3Rd>&1 z&;-v{KRqt?t%j~78|Qt-D)TwMw2zs>I}3{2=!e;jTSQKxT6saf6I>nA1#eZh|2rY< z_Q0*_%p;+S6zY+0jZAEp5*mC3%QKn)K=da%_cDOn;(AmKKsfB`boj5NK{>+CFXl#} zE=J3lAK?JP45*`f??+dJn~xTqVAXV$?spI%0=|y#!32RW$qxN_YC3_gY_Ir78uQ1h z5T0ElZ#Wv9j(*otk-ROj!vfA=PfFta}Ue$I#|^Pc>A z4pG9aT;Oj&Z5lWT7>+W_x%Tr9sBuu&df0BH9mGx6r6|-ZQxx&KY%dV0fRzuBvitx; z;qj)o=TtV~g@RMX+5>VXdqQ1Z*QvN$@Tt%V@3sUxVfg}Hftr0Y^6!acBfa>rxY6#G zJ?lC5Kt0$mz8XnHYpi=_KmwxMq8V;mmdxk$zLBe;KtLSL6Oz;5ntQC)92BqdJkm~9 z#9=@II-OqkI^+eL{E4@P+55$Ex_oKi>y|0Qh>gpXbj8h6CG4l{;+m^UQ=f^*vyhqp zqc>VpO^8AHWhMgpRUozI9D3sT@t1Tfs7`HqphMJ@?Jk@zTfF5TX zp=Gc&FJOx?-Rs_UAdpe0od3&3ldhck7L)lvVBL&%6@*Qsft2|)BU#>>gy$JBzv=f} ztkw8wYP+DA8L~8|O}w0cO#7vdHscl$uYeH>8er+9V((3Vd5U(Ku~sYV(ai=ZWzUMY zRkKTbKEe0Ra9R?&D|-fYHBS$nylm1ZBE7k+%Ch?hY5=53t(lVv)?O%Jf7o1&)jppp zIo_Xe0)Kx%?84=`MS&6dq=osegU*@k01t7B`H(O#mjw^5Gb4kTQ5#br_=0}r>W3bB zgD9mp&-5kN{C#=!C^(A|94jR_#mO;!OWC$)$JXZ(k26eMV$KnJ@EiE$ICuQb;4RcL zbjgOr3fL|Pl^CMx`~ha4JbO?wVa$LF5EJD!haUH$KU0J;q{$_eK!M&H z36zFOU5Gw93$0-NAB-scS#6CLC5nkOzm}r=?y%A!&-Hw_yHAWQv4h&UoTGC;Qwo%n zR$boSRVt>$9W`H~>`bge_JWXKkIaWOf3!EY_0p9B6iKa_0yjws?@oOAl_vO)GbAeq z?Ve6E#vyFC0d7sac`-NioibB>MbWcVXr;Q%ja6w}z4(YQvsAQKhl9GH-rY-U5;lBt zsnqPl`&@b#lTb4vIL$8ul4b(04H9k4O~{CZ@KB>F!bo3i)rF&L#Jf~8tlSOjulPVJM)iKm#w}7 z$^6z)*8C3hgHw}Ges%Bv8ce%$J*Sjt8>I0=6n)4H7Zy5+mh;Asl=@%6u^xqE}-jA%Ka3dEr&s7G-#z2LM|YNcDk zYA|$y;ui;rN1k!vs}4Q*(pgxFyA;|5X8g2%u1=K3!Etr5pjve49eQD<(VNFVuSHoVDC<87p(%rRt z<(CZ&h<_s`xcst#(fk^(s%301&s8xZD=%`)M&u+E-ft)uJejKj0tDVH!*nA*ah!lo z$cU8X8Hh&%!G#Lz8Knjf$@073;?{88A5|#<8OL_B;<%(&mFnH7FRFq`pIs_ki2^HR>JAA;Tm1>~miegGqECtWe0;%9XS3B(#k;##HuQl?H64+Zt4o7IAD?y(mAC5!c`+wT$*;=HeTbXlIjxwpP!B^7NJW$pK^ zdQpNa*+!mQGhv-iqm0|sAg)%TZQrOMwL0Lc=o&jPrCLmupPYOdvU$qaFqptNRgIa* z<=wh1x@?Y9p*{%%c5`HPE_Ax<)X-+PDvq-I`fA=QjFR0F*?iwNa;(Jl`7&VSB{>^) zx8E-1yWW&v4T2EvZDw9RPF)Dkc`1^N++l%roN~lsw?C-QSF=oxL;3xT89wG(m@<`k zd>(W=u`sWo3($$)WxOwb4&D4yChaoEwq+e6DafW^QfEcmB|En~Iy zveo)?4j-U~_*ei^)ll0v_-1n=n_HRx)r;K-9#naW)?3KFg7FzFN{3+e`nMyaXVoU% zk=SlvsRlCXg-2oEw=6`jGgSJWk;`dUQraTLlX_My4Vyq<7CmR$e_Llg!D9L;3f!w= zk7&yowCOJ9QEsV8t5dVDCA{N5-XX8vIg)`v#W>>r6U`^qsP`4(u{k|`nw-LP zVk`6gork6IAkm!wz;~6=t0KVaxgCYbyj+%PJ}>yWi|Tp3>L7PF^1XMeiU5=i_J9-u zR&6yPfXrwOrTf(WM{!4bqTV}J>_GlJbSPt$qCBwl$P|32HeT4SZw}nYUYP)IfhMIl zKu#sht)f7-)!~wF6#Zn{9$R{4QT4vi>xJt6|K&M}EoqWT0MxmrZ7e_rC*z2pLB;S6 zG_vZJ=VYl20P+#J6Ai^_T2?Fst8sEz8q>Aw-5B2ak|E^XaN^huoo4 zI2@oXcgdZ{-E6S=+?mD5CCd%l0nYlo*`+Il+ch7=^(JJvsUW-253V&a4NVT=r^XUjiF;L zD`-Wrb-$rr0$tV98nP}Th)rhytJ3*-!xNKjb3OL{8lRF}6_BB)@mFF*MWL;P(d(6Q z+>#p^3IS;3o++PVK{U4n#!;c{XDe93zLXEPR_<-IApGBU5%1-EM;8UV-e9(cIhxg$ zB#R3)th#!=Xr~oODHUfyuRMp3m%!gfFKq;Yk3SekJ!xz z##$5#6eU4J=7>43HruhY)dJ7*ukEt^C01m24T27FD@QI8W2m2IY1+{36(^q^WzA8M z0^7feQ(}NkNdDf4Jin{6te-L^tWOu_Ibh5>KsnlXJp#~+T7aRl&NjIYJRl)ZS(^4E zI>g77xvcc-iA2h9pdR<0Br1J*IQs{x@A0+~nRw*G6ouKMG5mm@`ft41;{BLTM%$ z-jG5dpN}-H0?9(g>I=wqS6VSWxKkk_faD$y*~S4DNx&)l@A{D*MtX|hQ);I7q`<^S z@QG?exjM+GoCan0SPHD4nFexM|5oN!{&US;S?E>`1}1fDW@66&8e|mP%)M~Hetjyy zdQ|MdT$FsJ`q5KE1nYyhr7$NSgE)eQ*US;vgoJVNZHc88FPZZZ_wnVL9^3szbI6g9qq=?OxPy+2LMcL z%-J_Ljy3k<`3VvKB+*lp$H{X6VI}H|Lv($>Not;8oj=rA|Kqd%2io~e&9I)S9d+!< zyMDwzj2!#02yHn1Cx;u09eoI0thtN^4aw{ICJ-`E`u!ue`?NsQFIVbi`)aqX8AkRq%x>Z$O225R6OMQp6-ZlYD!$b>swg~WAP zla};Dr(Yb7#k(Oj!rCM;xxOsyi=>SIX=*Xmu#lS3CnYG*Qy-r@Ivy#*j1n8HHBL1N zH{tJuZA3cyf%h(hB`z~}MpE~GT~&O>x=GJ#P?-Tpf*;G;{^O`TW|!4(DV2fxeOve) z<$(Gi=zM(ju5Y4)t2j~?zJ!xgoMBR^{UF3CgFPq@RN)~Pu!3{U&JsD#EFpdgd2l`} zQXY9ei40R)j|vbALsg#W+{ACCmY5E%gb=~pbB;7-!lpvJ-M2Tbqu?yj{8yMH;+2&s zTASNlKB5gZ9r0X=kN)%0&s57RPxqT#lLGUvqfp%l75WuLcnrz6W%1VBG`xw+zrnqN z-(<`fi)v+gpV*U6vBb2t2Eh*{JIIx zULu(0;L;RCLCK__A>EC2zhsdcvf^##=wXgsY*6b{O7Jk#?#A3>~ zq$fOYyHMXBfOH?)mhmM(onry?$MCn1dr}|d8$31_U~*Pnyvkt(dH8KSd2-k9H(89@+X=VNCUed_bU#qg$z?xTRnx9JLC1kYc5Yp z&m)lEVQ0bbh(#hp0p8kbFs&e%`@|-2zPT}oP<1y5saS=qGE4hNN%3Bf`?p_Y5XBEFrSl^ zD96yX%>}GNA@`q#b&pg2YJFR~OpJ$SRc{Y)Jh7K)aP!U1%CO?qo7i~DkhIM>Pux(a zz498s4QPbC@>{?FG#|3bcUb3IiJJuw->(<|h7**Zl^}B7=r-ZqWElHolN}tOi9hs+ zK836sk6uF-xb2XzmxjO^} ziEvcW@7af~jT2}A;RU!+DDbzKF0;{P=ixuwU@o9J3cffn)w+G|N%a96Lb!|OQra}% zi(z;D@OJdbAF_NFq2E~wEy+Cw;osf<8;U+8cVkz)cd#M{9zN^Q92P|XDN;65RdmLT zFyjwZ@6s8%rl;sM{&oGD>v61OR=iAduk|~(c01bis}pUMzX|SZgkFSI6Za-}&(yL_ zWDN7loUt;uoQOG-S!R{)P8z(wvs81wEWgQENwcalc>X@aGIcK7*<{V!qn%c2@n&)3 z*f{J_wWJyxW`0(4JUrd|jkIF>8EZjq5sxaurOO)JO84Ep?9pwiSLU45eLC3+>-^xM zf+l?ux5gipS{*)r?Z{JMe=Smx?k>EV)mavc?@B*ZsJr_j(8@x1^8=YP>)#eLi+@s| zGH(hrW*GGAqXxZIv;-Uns4ZeAJ;g`S%6%*uqsqm@XkFI)f&{Cq(MoxDx9LBs+|}BW zm@vA%@Cw`6YwSsQ|ECA3APii(c&}}%{Rc(eA)|hFaiAT$Mc4C(_Hp&i`lg5EsQY^p zw~AGHy&N0K%otD=+vb~(US?jgHicV3M-{hoBl?U?pq+DHpF+AsG(AlHKPR`)jnZJ} zGL|S(0eeeM2#yh(qpup{=)>FV9GW4Yddqd+yXC9zw!rh2Tj3CW8ncm^8B0z;nOFy@ zYAR`dC*P@GP^_C@KhiH#UZT4CLXs7zbK(T2Rdlp&~o1+HK&#DX@M5Y6ldwm~utGCAeDvW`6N1Rm=B~K9`V*!TQ z2mfD(hx+*C|jkLJqn&|~@g)rNL!Q+!yyY&7EB_!iAma$IkJvD)ZUb-sofVAm(biqpa zu^uP9J7&t;4L{C%({;Mz=zvzpRpJ!{q{*hoCsXPk|NtyMf~O zudq&*J@Ed3+v8>AB?O*P^2=8q)l+sZHxeDE0wfnPweVnq%$s-+>MZ8Rjgyh*8Iuk#nbDbI`KQXAYiqyPl%}nJrV!4@P60Hr4-Vk z55m!Iq=D^&Mr>a#EV%cnv~d1c$_8M#@i#kL$BN0ipL`u8mIK^E#r%pwMHNccH)zsV zpYm_eal2JvUX%B79=*YDz-1!9jBzfH_>t@lh)CR-ZzUOWH6cs+{g9GaX3UCM63PZ7 z(wG`k5c--W2rd}ZpD-0XpV1sDXX&#lBj^?W!WSpy%zbYN{G@yE<=ZR8)*;cz*x!$s z>Gagi7yavNxQ(C*RXAp|kTzS=z)VhQf<*9lK!A1f*~;*loakjHWEj@Z#>BC!zjU3R z=$+~)uQlhs8BsGYmcWaZ_NX7=&Z5)8xFY<6RsQm%@DVx5bq2YVp_doET9WxAD@atx zs=O3?QW)8LA|d{Fx=KJY>)HxbO~DcZaRIwPM$@@ z>s(?4r$>F81WAfaz!AUA z1?m!qzV5OQ{X^smrpb@(aD8U|#Ck2Rv^d_%JV4;9d(xPOBvsWR{MCoO^M{b5rmjp} zJ{(XVcs}emrgHjuxs(PGD^pi!_)RB7YuJ;UYoWe4X4r!R>wK!4z;c;y^Df#=)}-(e zpQ&51PA12O4f9~E%}t zub=dhAJc%;jf(JsX{o7v70s#yQN*Oi^fAh@(a-NOJ4+PKX;yP#TEv;R3bD}__o}U3 z!<~uT)C-`~$5dgK{G4vp;Bd1Ul5nn8U{{jf;1#!M4JmfJ@H|qYpweDF-~l~sFVEw0 z+so%MPMYsL23A5);oh-~bR01%Q=a-PEU*;Dn(KZsKzNiK=?QrZ2*SQI9_J)EmWy@Qph_gy!HapCkvco}&@^Lmnfo)YifE?E!B4yGEcf8^K2lH_- z`HU`=i=m4-@x#`~n}C2e%ADy5({%n<1DeijB2F=gRmp>5_COHUN-Y(|1Znww)^}5- z2*UYVL9P`gbbh*z;MlBoI{t*h6F{y1P89v_J^2KvE~ff+jGH3zPp-}UX!A_(53D;| zAp+x=rPi2(PLM;padtC1>ic$47EE1Q1RIPhp@TDjk2)npYXb{0Bxvk>mN+hT8oizK z5uAMRi^&Xg|9x=3u(zLfb}TT(?NMZYm42bhCqfCGo=erE{1K=QDs$YFyTGJ%oay3?BU8>rI)(NB$Q{L-Hoi>_@F6!>7aS7wln$8xm< znloX6=3KRtk?K=^EIzw#IN2)L17fDXNt2nmb9Qqta+AXo>lfnIOk77XeUnAyTnrAy zSmhka(SJv&_WzlpIvxMzCJ0sH zihG2-l<_5jljq~qe8$B$ZcbW)*raAlQB%hZRTwu>Zmc{u{Aewv3)s22y)&&sGFhYTkmp1!l5*6EqeO-7v0t!p{gLq@4AFWfqJA+qP}@;fp% zWi16ef-Y!Q&ISNE!vA9v_&^s;ALFv~`eD~<$)>(aeEYuoGlJf*YT~Le9tZ4*ur@bi z0m~BX1bN0&Gv}yfid;N zG=T)O!(!0v#@v5a-tf*J(G6c@38=LO2OTIE*7Rp!+`{T>Q=H+rx+ZTcwX z0!S`|TVfxH#U+R5UDSS<{Z;1?{(B9i(7ZL{Bl6Qi&6sSUJ#syQ`z&3GbkM6p*H$!3R=nI3*uisxe`nc-5 zBQo~wv%~xTrVIu@lJz>VPy5A%A*na++jd0{N_}_UaqoTPflpem8f$haH^scvdVNdE zOSw&Fs)|5n#(#<-r&P+RiQ5 z<_wpiPgR=V)m@2q2`W#kvw5C%NTklS_=0>9jcWgNsElXk{X=tR*V68Ypo6*)c0Z!% zAq+h;8j4Niy&2mD^bY~<$#JtLchti{2Zv^GYp1^>=GR*F1_5&E-zyG!k=18{g64J) zMlA$vW$eWK+FawtP*@E1Kh=}VpLH1)JXLwA)BmmJiqSh3Evr^lAw2|ejC%z?YYMuB za-9|Lrcem(?vZnG(w=fE`qNOGYO%WwJX=m^s_o(|p`T-tN94KXfg9s2W-~bv1+|M| z&xmVws%d%f?&*(=sgm%&znz`BFz3T7a3O@C6@%gApwo-J_j7s?{zM<&7rf=7pyrD9 zI-|w=*K!+*RVq%9wp(jNesfuNW>Nzmd%nYJyt-?&(&S)_P@?CwMig?$u~a!9pqA5Wg4PM1MN-)5`1Z4LLjy0;;Y$s&jMZ=9>gU zSQ-gF(}ICV?4_~4&$N=|h$G>b7Fi#DU0bcKD+tMnKZq2Dqs_sM0{`rW`*pjc1lC=^XLgFx$67d|5%`?bUr!e9zwuWJPPuGI}5aM^x&{w6nS1__kn$-8@s#%G(2p#i{bvd3X&@HsF6*k0Y zb=V)ba?=B0tS1}^2i)htPCT=je{LNKo``IMu@0;zYE*nU7+_w^%v5H@LxVZ+p0;lq zWg7xI`Ci7owTG=YS(6+dqgwU+wyq;nq=YX{Oi)W)wxcdJcDCloDvV-A(B1s(+K=d4 zjGmy_^xS90>fg2pfL!O}Ln}z9?9Yg@CPe{pXrW;HOc^|s)ANwx{Zv5t z=NKz_J{0Jd4Yu6^1?CvghM&~A@IZ2lgT@IiMLRUQaOKhU_PDdO%DF~!4{WvI$owm_ zeWoKln5i(*;Le5Q-!d=omytZ{2B(*sYeuRSf}c^cWn89A>$}wzG6kh+TG*K-HyuEi ze!Jgc`QE*gS=zNekfe!Jib`)tIV0kI&vUTOhw)YAPKAzj62Gt1TDruf3h1Tk_AF;? z*YtyQr=)6K?$kHtN+gS4s)t_%)@J{YwwD}K* zPDRJlvnJgf;{x7|xm|o@9Xb-aHwmhQHp=aJLT<6Tj2Y9Xe76;;FmLsL2N%}VMlMEl ziDT3v0b#Ta3%B1h71`$4Y}hH?8#mCV7(9DoF+M<)zrGd{v>%**KEe+3<$KhE>5$&k2|UP5KqXppYr<&{C|c#zPI%+KM~p#DMvcmSP=6Ys@2YFn#`y zD2l0@3QtIxdV!Yfj5$)Ht7V#pR#PJP*2M!u2EKl3ip=uc&YOyh|-kO9)8gk9) zj~{!?^Mg+YC8-_C(O>lvefMCWQV#C8*xKa3`0YaNTxC7d>=CHKeOv(cGt&}QSp$6~ z4Z$FKD?gi}WvoX&Zl;E{NwCBd1_o}qx%~QZNY$vbVtdS=iCOg@JX}QZ!{_s!zit}P zBx{IsNKoc0K`hYn{w;erwEum0^ZDyzeEp#HyF15Y2Ks+!iPpFe(}#1WAOaWWN z3PvJHN5BzTljX*@d7Jx2n19@Kt5Y*cD$~My1o; zSlial#qBy-tGmWyC?VKA?duOvM_4Lm`h3^>?3{0HqxZP?*0ACyGFd7#03t41pc#r~ zn^E6mTz)?1cX1iOZF>J~He10y7k(iY3e2xH%3g73PA2`{MuIO_sNjaijo;|g`@c!k zb}#couBf!2Kt8+77~(w!264B8pLqr*-O6wieLmM(QnO4yZZl{N#B&)Y_I2=&M5D!m zSGGnMJYk<}Z$q{dEd%V;RIcnR}MM)^l$MD!W>*KTv!zfvUlp0g`o7gkf?(shyyh4gc>y zE$gitHUhuc4E$HPo?3cc=UdH120XOP1K z8OaI44sF~ZWq;$g!ao}%ua5(-LpQp(A~RGf`rKT$?Fw;9A6iIz@J%GI_+23>jb=PZI|_if|x9eu0={mk|PPT*fO^Cgs`A&VQd&${AUz^IuY$SAtK-Reg>!S+w-r1Z**xEem zH3)S&!tCz;f7uw3{E~oZ(K}ue_{aMS@y?1)=jC8&xS1gO=Y+^+h~7Z>dt91Q7T>eQ zJoBI#NJ^NZ7x=j3+XN$if|`Qg7V5iH_6RYX7`Bu7%5T5${yWmP4&Ue&KB`l?zk-s~ zL>nx;s+9*q8Be4gET)9$JXxu259=-Q>_1p{!v~$fP4B!_dm}C0=<(N?PuAw5MKFWT z8@teqL5VJ&8Bt|FSu=Ltx0Fa29m*liCfq@k(1_emHPL8voYXYp`H_hVSC0cL6@tvY zSi2CYkjDHHtnWMtL z9s%E{*p?Z`q);Xk7Hx!*o) zB=kWJ|5>MK&1Ukr2PeY4j!VN315<(qvM%$)x~a9br(38ibpqIIQ2Af>@$D8PV>7Q{ z)@)D6@^nu_QyhJ5N9(a1<@uSQ)Hw7avdSbWGqZQRk}u5<=+?~}MqPh-^Q_`YQX2m8rPtX(gW9Ytt)cVbtl#TUp z?uM0>&!7#FZ0D^L>!avKnp?52p6$`Z5@&N+?#Vs%&YL2=ePtkw%jbR$wHxnP;jbOW zZN{rf%YDc!b3aZG^ zcWCbxW4Dh=sqoec+1H)Mid#i4#~M#oTi{HMC>xS0kh0SQ=BLs7IzOMmIofyTag`tC zM%>ll^xoc%k6*7bSyGyC>It5h9FLSmO`V8~WA(t3^FSA`Vbnr+uh6i#tA4xgNTZ$P zcLqd`;IlF116n;X{dR3M-qLg0g5h4A15)}AyZ)Z>`Y>nY#Lt56({1sjms~=`$Qy2P z;OyKFnlOg>x0=J~D=>B{pjKq#s?J~T(Us*}(XOJ6{5GI%u%G`P^^7arx}fSg_)2*3 z$Oc%>%#DsSXBS`v$^=heeT({k+fRpEVmtj(V&=)|Ki_fhQnz(&pv4#pxt(0B;xW#--ZQ$<^B+FNRrTlo7cBULlTj=VLU6+!r_Q#3fsu+I4 zW{WTs^9fK3!8a!LWy_BuU>m~s9b$fD`^v7B)8YH)uTh=PtoqHJNg(SPZ(T_UlKm{R zk_j)_m_@FZ;y7h4)m@(Z03+p5j=3@JT>ZCvPmG2Xs={(Sk#%45anEuQ`lq%{e*VYK z%z*beXJgslX(!Qy^#onb1=;#ML<`Mq`^xo^!jtkM_A9T}(8Nv3#}o`lsK_(sevV#i zh{2Kg5+;~ezO5Wa)$L?~zhLekn@~MiHLez29LT4GuAzH+_SX|BkCVom=Nm@OoYErv8a6C*YVfXJG9wSCxye!oKq`mzn#lUPJ`n$hj&cS21yCr8^89g zn||A0hMO|~Ieubp2M+ACax(aZrVamJy$Hjo+^YYNqAT%d`v2pOPzfO+$0|vsT2je5 zQY5j;w^Xtf38@xhj$KkoIm(fQjZ{*xB)PX$?rWsnwmIkCX@_0E{r-c`=ks{KU!Uje z^?W^_Pl@rUm*{a^XEJ<02KHgkMwIPy@AH)UV~@lmgKyq8#s>ogw@m>ymLD0QRSf=o z#eOcn{)gtY3s;xcDc$hkhdY@j{-h0%@n!KEh_csVii1wCji8lt;QdD9Hmb~2d&^$p zKY<$ED}4|6q0HXvGS%s_33DtB+MfPbVg*ECivuy4&xhspNr1RZesLwqI-$H@U67knHE>dlC>=+eN}pxn+Kf- zc6g3vViG~Uko^BnN`o5S{e6#?F(TbDK2Z*4w6>CkspXxT8&gCw~aqNit?H3 z;-znm$LIo`TIe979-(ZzI!~?V>VjeLgZ`k8HYIkm?+ur?GAkLSlGAn9jAgW;IWpwc zD?!c~SH#tOuL0lroxEEjitk5ae+0stTSI$3T&g;Eqr~s&H&J9H^Y_y&N_JO&>m;BC zbjv-XQ~H~-&`e&xQmq$81usIr~5ieTP93?oM~LCU49ePrZcRzQsT!-g1B z!E@w~R<~ij6hp*T_VsJtsnSOMi97fK%fN~3uZ7r>&OZGFKpc8@#zC`&l6uWJeFTup zsB=(589h7aZI`NG9CjhRgPOUQmIR;hC0YA=U*3e+*y22l&DuI;(*pRlHj&b;y5_b- zJcDg!32;(+3|+L z3pcm41Ur6C6RxE1d;V=cO<9ssu=neV?fhUNlyfKcJ0DjS6#rRwF4*)fl9c+&Xt|5Q zA?Z(bK{{Mz7RR@IudF_+1Z_U3ST`CpI}sK% zDeYjCa;KzSq|Pvwjzko>Rhv5R?nsIyXs{Q0Oj4x&WQB@J<@-r%}fmgpC`w# zwoI|B1z(88rreJ&XQ|_gkchMsj-Jc1g7AEFOTynKI$OW3I$wYHy49fZhyG0|K0D>4 z#$gq~8uaar1}P>vYwBKS+B)KM$S%{o@x7ougS7j z^BP)F=a!zm6N$b|Q`^!==$?U(cVC;dp#HZ%3xg(VP6l(8W3YAa&tCa+Vcgb z(U8cKCWYn$IcHNw9XYB&o&`CnRJtp+Eawyk7hivf`@A5~v}IY7vPm)rsXZg~yQm!V ztYE#w=zM%JfS-f7L$x=WzB&*@Ti#{#OL*AYdS>Ad029ow+aTykX%-OW?>+caHU9WY zgx0+w@DVak2dvB{^K99zRMO4mD|!p zqiU~V-*8F|>qWEa7YdWme#5#KsvaTyLPO9mSD((T4135TLr*Bh+!`pt1Y>Wfpi<6t zl*BfuPq$I>j0KCF>hrU{e=9ln9${_N&r#pVExOTDhz|uLH7^0nL5&+V*1|6Z&mNCH zvRmdoUgBiWeTKM=eU3PDKS?Zttz#a=1*=h)<1F?-CvLpZ0(Ya)@OckKgk_u`sgkj4 z2ch0ApmB@6g5ch?dh4L=>&>fOxufYS%S*rfooy<^`*K`{Ltbrw)?rm?gVN zd1p_FH_}}l9Z|NpK;wH+xXj_pT1%F-JNPK?1#sZ+ zt0Xx7N7L~!XaypFxy~NPW0F!~W zzXt|2mdDHfmaHL`pZs0d807CJYe~QL0*Log%_{h9?z?V^leeTQDbq|pgljB_wUu^D zKH^Ntzhjnuf5#oCZ+nRi#uZ~j-Q66+yxo~pb(t3NdH$n^s0x!VGbHpK-*x3iCTAIW z@t1o1L*W5|0w}EA?~9E#=UW#ZqCocY)s}3#ao~_?7&r8Lj%59ak=zAo%U|7irB!P0 z!xzx0>ib+egl5}q{95V0xUt|6u*~e#bt?DX(FDp5szXA9ZKY{MesE`|lV>ql%@iH& zJiKh8#)a$rNFp2~!_^!c-#y;}h--}awHWBgaf7JfW=xe<^EHvqfcS08&p&*FZSx{1 zKuao9S+#+ha;j>tj$q>MdJ`pw|Aylpq(%&W*|kc`G9CjU3hLCkLw=hjx#38jUoPKc zpq7|G)Qd=(GW@g@RIj!f!oN!zjfw%@Tsa69s8^b3(iSAy;&zG4g%!WCDVtu(oXnm! zT9FZf@~TT`U6xE)+NBmELjkOu_#NLf<8|3WpN&88wJI{3$fnV_JEd+vtg0gQ(Y^?n-gn^T;M+W{CK3%)_&!@zyJPEBs zt^kJO|B8mQd`rQuHEFs3e9uvL#c4|4RChd5SuWdyE?knnRAeq+gD2qo&G)tJU3J$91NFz%a0yrXv`0dHT3+0S7 zSH$q`vJRW_S|RR^l-=lh9=lU84ja~*V&z|c0k^(&yu&*uiIYfeF7M|3c2WSsmSUNm zaZ$QKGU+)QW5m$~&41%Tu&`oAu^GYjn(C$9JR@y&}6LalYf@wNUoYr0iGIYrWHsGq<|n->bhZ`2)lUd6A@QhAujA z;A{#tlmKAnOLDDHeP-{b`u%8l0k{`-{cg2B#=6094sZiEM&eWtS$QN~`mP&;Qt1K_ zuY-C9zctXgx83N1TaHb3*EKsMk7L5V9M~wBtp0_1676nZEV@rKi%CRbzmYFL-kC`b zR&y>lTgqhUD-b06cW{duMf+DTtsbPM`_Y3*y7u}l6H$9wSWRbDgsb)jAq+~VdR#62 z&-H>q=8Qu#YySr+H)2ntW4X%oKg}y?tLM3cKjodmNS?YCVN0V6Kt^%z2qPYBBGNLI zKjvKSW`JUeFu0=_u8x?TTM2BLf$N zEo%Is=GOLacHXE@cDxFA+rd%^uV z@&O6EWka@26-~Psp++)7y@XwKIbc5h_rM8kG`Y?*&+g98c zq}u`M+cZ6xWztm5KS<(ejVU2O5&P$MbY4DHD?PFm%DET*-6l-`;n?f?N;xn(WzqwR zqI~1|Pa&M}J!JkXS5T;g?z`+R#$~aU)?(=?{j|<+lZAP{0^Ny5fGQ%N+77bb#{is4 zFG4c{wer#8$9{^?xyQWdV_48BN~ujr~@jKZEpi{tgMgD?S_39)in?QWQV1K1P@B@B;p| z1|SOwX?;3ep4x7=;bqXK)kdnC0=m>jW2(+jjRVbTY|HH<_B9-vxx00_|I)9<5XKTv z&7r}a7|@sz-@mG8Z0{4;R`G9Q-Sp^lG;a0qM---%%evwr9`SG$EmYPw# z)N-{$cs}f?Sg+xyaxaem&Sp?83d>dFUYGbu+NifA3B)Pjb%~($khcvbs4Y8R{Sf*~ z+PEULXXZ5kHBRlN#H=OGe73Ufxny$))L4<_9{4A&_oCdf^MbTOokNf?#`WAYw>$14U(u}?N>|le!Dypx@4=*`L$0*OaJqeYjhJ3KbRE1_4KEb3Twz z+eN4USj)OiFp-vK^L-85nC$o&CFwVW%FS zof30yrqy*vq4f`q4%CS?##5r|Okntpw(OxqO!dGZWO1N(@JAh(c~xsloLBG$VehXi z&W?3!xP@OQMYV$T6CtJ6MU4Vv1mRfx8A%^;-~0ekX}UXqRc*u`9^=H%A{@KTS0Ic~ z=Krg~e6zk`!F(lAp4-k=af(IjLAG%%>FXB;4gbPNoNkeyZH%*1cPmEQCS4%9`L#$z z4vJ1aY#gipXrt(v0yZ*kKP?%pHUsaC>K&{*{)kh1j0}x{D#i)WvnL$kZuQwN@x>9o zJkztI3)jtW&JEJ|MHp>$?zztm6sWJEa8YUcvO zyKLaSWWh5jsiq04!qts=2d=yJE;uEXoXA5x86c78B$}%QEBeO?xWh{2L(hLbjO#%! zD-1$2vYCVZl+cSZXnaX!CS9Xs&bgP07rtJUiN55!>p^Zno;NDX;Iq@JP7%~d1$mIN z^a?Y|Y?PM6OeB7e%oFBHD?YI0VL&a6ovj8q_>#jMgG=1xka~4dON}`_>W)1B3h6i> z8Mc|Ajrs!)P5;B)D$`l0dS+yWmOL5L>TqCqkc~Ql+nn&hGGFugPkz zF*hZbIW<&BK)jB1R~iJE{$-kZd*evyx0jv;gZKhBQ1sGc z`G|-7OkyOn3824G5x??MMhxd9tPJpX6lRXsYs@XD(+K^qJ!L0slfsGN4jWovcY97Z zR>@Y`3fQ4qD{6NLv={GxSe+&etbTZKprh_1>{e|WFM|ARb!6qFeKIaZx_bmQUuP48 z4S~OiV22-_9vx{HDc6sia4k^bf^mS@i1y~C-3{y&QBvWZrajN8@6ij4eRrMJfbG8J zmBVYB@%B^BzEp3I*ig^WMTMY9DiWL$TupaY!$uhq1&MqyDYd zvw28$lf;v#f2G4m-4w9`bsfljT~>*;YagU1a&Ay!qam2s|K&6?qfm`zE35@%N9E64 zmihgl6DFk(HcN_{@J13t^NY2CKVM*A5RWxK!Rn@-9AVK5HQ4aU4rsKpz}9u`KIn4U zI%Xu{kJe!KS6#^{{?!GL#iSHM)(=MLe9sXDks<@DUE(Y9Tw%lRgkn%xdbj8M%Z%TF zKoYt1bYs9)KX4q%LB%HvOi9%vNM(ejXkEu@V>&IVcKcp_x?}u#3OkZ|v!^X` z6W0+Caa>SmrW+uA6JI|SrgfgzS2m3kIytTBqK#9?`-YTaMsl+JKm9cA@c2T0Co2Gx zM)UnbjasOU` z-4)>1beZiYLR0ph=tIoWwRFMp`H`<vsPBk?D`$udRi zhB_Va16E@q%i(|sJ&E0~wPtUO{PySTGViONw9{6!FWXhEB z0qH%@#5G>~>@*crnSdKz(4D*a!}BML@(x$*DBR9u5oLLfmaGO&2;Bjevn${Hl;$O{`#+BbAhO-m$LpYl7N;|f-j z9M7p&1i?ZdEEq)*^hBV+=ip>TGNC(WmzlRNH>_($`e!+EBgc~$c02}=JH*9V$4}6zlqaFz|nm`ZT zG;HO-ta^P#9AW9zw~dv1jnWc}|3lS7IL6^+UAo~#ARPPGxoj~win<v!H=62 zB;x2;MQTCGO7jzO#2!qTo=jErK~NAV9d_qWE$aU#%~=!6hpaP;CJeum&XXXS- z1*fhmqh+hxJ31$-XgMsnA2)a~-%AX{Z_=P8OBEeN{yL<}&hf|jZ4Dn9j?6s@H=w^Q z!shdL04H&(jf+Q0HEY%g)P@)9Mb1bnBYIg?vVsjsjnko@tP5U|cZYTxS%}p%1h!9; z*$nY^dh`w>{VR3F`WvkECwriGRZJz6?`+K?XVsoRw)|izc;Os(@#^ygyx?;L;gjGr z(Ek|Cf{!&Q8Pcu=h2m_S4sNO*bS0Une}J>iL6!O zXLCip>v+FCNw zh<*1#Zo3prz(`Y{215WU+)Dij^d9IWUToid&@FDTP77s=w|ikKdG#m}bUv2496c$i zvX8PBz{YMTu#8H46bOR5x-0LeUIdrW;k3QnR#aDruh!yw-}>Dw6GHNoAy;+zB;Y=( z;SPpVQ-7$3TIiDndJ4Td0x#=VvjtcFXS+qb@(Q^=W~J!o5+1CZ71i(oz&XS%9r8GF zUbbTy641J?QEXOKfo+%S#MIT!ThPvitwW5B?!A%J$D(~ZScw~dZv~qsY@1sB5H1g& z9nq@cfrChBd~SOz)BQo)%f@Lr+r~oLuZ|z-s7!0MLNBkA%%{&kL*;jfeyW8PDIbr1 zquPs$cI$!GQg;E^ubOL`o!sNH$X*Uf{M`*#bzNW_d|L>k>S-c%c}iGFK0;}E?C>%8 zNQ#=%arGL)s7h$?R}h_Kw-o2o3z?kTj&sY6$-+Gzu5ofJLjRCSOQsaZQ-3VFplkW= z@mESbWN*{^C={p7%knk(H9bj6xUJ(FPL(>FoA(ee@BYy{r>>hV?brty$;CSC`dG4@ zuDy1xxx{nq5VyF=R-4MizJQv5!YG1G!sr2GHIxpT_Ez?@@++EY^xqSQg&5yzSF<@A z6UOZvFEA2h>9}B6vZe&POU^ugsx9-%QdYJuDuVn%lh*B)M zy=lohB}MO-GhMbXv&YNt8?NCDU}Yw@$qz3c&vHD)wm7Hx89V9V4N&7i49uxqk ztsTLJpB<3w%Sy7WZB>mK(&u5Y_tvnZF5q-&ezZJ*4|-E^Zee9_OZfYm=h1ab;E&F= zP=M~#DxlF#rUQDydfk_l2pLGtGg1>lx9h` zj@Zv!3P2^J)F=^77KCv-rL-o;1oW)ih*5VYy$6$)Emd-wBtPZNayMXttG(2bAtoOr ze{u)Z1Yx50nY8VL+4da-o7;y5i;p`Fqiz^2OaaM1^&JoX)aUq!%;trbEMPwU3^YDf z-I@AKvU#<@VsQ_e*k8V%{_ceWI#RrG1$xlLV(iNML#V(d`z&*BWwDjpC-MFc>hJCh z<(M^e{z*rf`*|jK>6d_*>tsTE4mF+O(Jr>-O+iagKUu;M~+UU#y`9l~WYYJ0LcAvdFLOzMwk?#FR>#NKlH{SVR z{=Hg7Dg$YX$f-F=%8UxUhe>+*<#5NPK>)2Y!$)|CqlJuNu~2 zfYDbGr)1ZS?LZIxBCKikR>VkY3g{6k#XS~-tD^0m+Z`J$KYA!lXQ#i&Z}kZxD{IB6 z#9f3u&hZNtY}uXA-rp4M4fn_18)Aq{@C4k@zjM?&Dwc}!KTgD&zsvV}{zNva@i9ro zX?hs=<4uhBRj}mh0dr;*U4Mt;ioZqvV(E6Y_S!x9jJf{;0q)Xj@2Nn(G9q?9_v6CF zw+KZ3$GHMyM1|7`232LaDZOPvR z{TEDsgi8%ex86WRzuiyzP52_V??-)*E@xi{&D}3IXbIk1%MQqD68^lCzb$51?b4HV zt7G&rTnKs>Qf5X!*p`j{ab%4nI*=fJRkM|ccKr9SurWV)hs7-|?C0*EWzHZI^g+7f z-<)_CnkE0-bbVS_g9{N{O$SYr4~*oP@$?Vq+&4Au@^bw1oUQ}EW1Ql;@_a7?dQ2JA z?uvmXAjtBK5a9qrJnt;<&&?NACMHpnkj_Eg7pSl?IGxabr&}^^jawB!?Jd z;MfHG^px#Jfj%&xV3nc^So|-XRGHzwNdq;=7kV3J<0l8U_mI;=i*Wgmhqr?#8S7E? zi-uHlR>fD?vx3yPC9xu+3hBdsR7jXsK7r1FDg?ETBt{kv{Z#awJjT+Kp;Evr&0ld_ z(5S4kPX|bV5{)T~0wo7%nCu1%zN0bA(M^26ucsWT7O|g`B^bne3Ig%WhLMN#C|jZe zED&zl_FNF^?9}+sh@{0i4P@K=v+R(hUucRqoJvk<2x_NyTOD!&MH@5ymIfA`W$llL z2tpJo(?O5q%1&JR#jw7ufbCCTL_Z?>{I#Qf_Pb%kJj#`D26ZtOvETLpA?G{%W^NlK z*K#tTv&bsrW6WPPqE9A!0ee*g zF(ZXvl_Q19J__potBA;RGsF&e(7oZ{1L_O%2N0IBVIkA|K64fTm8N19-yzXEnM7#;)|^^^Byg6)dxu`wGm~r-9q}L z{Bm^@bhF4X*qomZp6wRKea5f& zqzc0la+=hY0E@rWxOAK6N~n=Y;PtUf*C=XFsem;-&=Ge0-?3s0D0Jtv?+U;W2iD3OozY=eTyQ#gn0B>7jl2yZ{Go@e=+x_;z};tbkaZAPa!sK-YH`gV2xO z$U0}jf%>(D1^frmib7saz}Y6zRbb}J zYte5Ytq-ZGk?9Ix2CyIwdG6SSJ)lCn!J?7}(xWzeInv`+M%SJEyezee+0edpR_7v{983}}qCYDVUW3lOT#;B_Z`2dzVl7CX?EB7y{J`+9 zJ)LnH$XnG1G;1aS%C_l4u$0lwrrbbE$NJa^@57MRP^e0fB^TClWAuCe;NV&@Ah~)M zVDL-gHKVPJ(x!V)qt1xmJ{=@A^rq|RYs9rlv}a~kJr_!^S#AI`K=$UpV#a4WAcwgM zvpM`b+H0JR|5|I7O0H372x{!NtC_y1n_J1i!!`yv{tN499{Cz;)iPAGaO4HbK!<$B zLAtP^?soj!F(V&oz!RJ*^3(f7X|~|M6f!L5HTTPy9`_%sSBIfU@PO>-0?Du)@Y2bI zCBKr7WcMl+|L$%1;BS;-&~Qm&Plkn-;0)>rNf*74qi7nC^vKvls@~z7mHV1J0`(N} zk2n8$iSz;P4lT}!7!@-;~}d|ujmGI z9KJg39=O2|IokUZ|a*#owtm8*g+*kC6(U(S&Q+lB_-WO9{YCFfZxjJ>r7>81k z|FFBObeGhGXe2QR-X+|p0A8vjb)Md)6x$#EI+~z*<3-X-h86lj14f{J9|AGy;w?wg z;4GV;zDu7m7E-}S3lx&P7-~vs-KZhp8<91tybSZ1F~T~MdBl6Cu4ze znnWX`i%!2|joRHKm1%yBPOhfoSH1^&IGv=;7(#tj1y|FPoB=Ur8_(T4!9IZwMW1g6 zb%a~&OQ))!=iu;Rt5<=uPC05O)Zotfnj zGM(PRzhQGmOL|(WNZWz(?8QB_S<6Ihe_@k6sNi@L=Z=tbE-#l_kIUjdC=q@IrwoFQ zsR@Q2|B^G~)=A=L&7#f8B1N>kwk;+&$zoL|3mZj&8`pG2o4NRDi2|Tu+wbjKS0OV_ z`P@5=*OBsb@mx{d41U2j!0Ie!7K!;OH;!I%mOeTAo^TDn^86y=Q^ixUKH9&xy=pNK z5!a|q4D14ky7!WDYL4_?Z2kRIV!JNlO*FTYW*M8806Xar+v)QHn2^L8Hsbr>2!*Hz zAn#o=BP;xyu|)Z*UN-J5@AoxWq=}+qnNVX7zk>>8M?Iw2p|hHh#Y-P!j)Yw^WRlw? zDxBUc(EyQSg;rvk6p(HONtU@emPFdJ8OV#}uz&T1cV;f|THr#tb=-qqpU%9d_Urjl zYS3O>*clV`mK%?Q*7+}?s+idv!)Z6R)kEy1uJ%2Ph*z_=Sb6-M2})mPm*U$)f1&=; zlIg*|c^>j?=@F%>wVC-)+Ju%5Ur-v*_L8UJvHh+J;K^HuOxwfSBT@y^p2ghD@MeOh zfTBr(cf^{CpVm+%Svl<7nj<6i?k5t6J=EJyi%*3!O#vv4WWG7*Hn4SV5`F=dsl1k< zxnnN|7n?2hjliFY@h~9oVl~)2GuRZLSRgh*gii8OA3F*;B1!;|&%P+%A z$~^a4;5CE4)kJf;m>Q|HJRX-yva#+v*Os%S_S51sC%P-Ra{2qjoO`yU9pC~iKwn~S z|0cV8r4QE>KM{r<`z8Gww+u;XrozS$Iwb3}Bh}qb4i-a>&oNlk$nENf)bS?dcK%yD z^C&0+6q1&^$!=SJx(=kQ<%Nw!NgdEDAYV}oDkV0X{^WF1Q+#s7^M&bz^jD&-y@Ri( zZd{u^&5%#~ak4Jt81M`>taos(>o~eE@>ISl{Mfc*Lq zpYvG|k&SDH0yM=EcX>{!^|4vHd@)M1*LCT12!5)siLA)g7FnWwrP*svt>~!793P>s zz{@WHG0>Mc2Nhr5p>=QSURLKjzzHRUxt6V?X2F*(S9n{M(u3L zsrQ=01H(6Ag8w-rQOh=Pt9c@+TI`{>`8&ilB1{slb~p1M3-yh10=o;U(qblpEa+E( z^y>G`?Ud3mjEhG+&{f#y5^YHh@i3^o%aUsmYxGOmt}S*`Q1!=CvB^IrAA8{Qw~C1A zJ%e;Dk=|*}x3M zBRTf(YsD-QoWQZm@0X%<4>HzKa(ytS-_YigTdQs|UR#<0o^Q#~k40VT^_+gm4ed>f zi28A4`Vw9(0MNp)1C&nhSm#jE5=4VN*y9!J_X}|{Lv52J?{g?PJKk|&iqHj{?=Hb% z8WNrB28yNG4UxUA8H4v+4{6q4H*8BPoAlZRTF`e4(UakL{h6{L5b62T*0cwyQy12J zx#kmlC6*$;IZIam+iQB0gs~+f!}x+ z{I3)JeKLWZdGei8oUhPt-&kS`p{9!#`X9bG6ZP4=7og+b&KvaBC7R0K?&s;v=_UuS zbBdrSIMiB{7BZkzk+qbn%|tNF$)Zo@-_M$G&(V& zpl zjXcjpCKqJoz^m4Skai?pqVBJ5$zxH% zVg2*ef(M&KRx+g9}wVj+GI}I!b|(l%U%HrP1o^~1+jYuR72!rf}@*A^|`wC+H=!)ydI(?u@f)M?2!hn*8^%(Ib!JF^byK% z#AasSn#a=B!kjtXk+NGdlAyt0L3(p9xkQ^`wbW3#%OIWgB9_?A`;K0SiA-+Yj-186 zH-5EG6?yB+wNt2%F_HENow+FoThnc%Ob(@!w)nwACD!Vq)Tuov!1bl&A}{kKbl<&YYO@O15yj!ajJu=K*E?suV-Pd0>sxEXl`u{n@Zb zf#MxUUDQ5DAyA%RXHay(OM~>r<-^RJhW`q2M;i>epG=8k3?CQ*`6xO9rRdlM)QC8M z>c@n^*AyhTKa1aB>p&Tt4Xwp&JXgB4*ou(2xw1SkJywgJHsyP-ZbLTU_JktQ*z3O z&)2eeaZowO2beZ~#;$2x&EWw=ryZamu#+X($84n~6U|0Eq`PS)RON3r)>==Nj4M-oLB9l)I`MYIesuJo*nc}CnS2y^t%B6QSiWNBps2O$klxPTgCx>rS#PB~{A zdoe^-(70ndsa{KR8ucYm5iv|xghdJ=az=|{N?dH%5Rks3LC@7zsy7B|cRWZFPPr#& zN=IFL)n*-MgQ5n^Z^lNd|1op7{c9a~Q^`0No)0y<5Qxwg{WI3L#jfa+)G9__O5bmy z?V#^SlXYI{GAqEJWveGZAj45h!1#!c-~wY>qWw(wVJ329Lzh~u)-K0vqz}d9x1d1F za1YSd<|S|+^>x0xdeZ~&1lx$S zLRD*%MLNM#52-@guZDk&s!-8~f3wDdU8sUNGB#Wz?$i>fFx}c*Z9pIPf0+Y7ASXOa zreyh@QHM+eKaYTnx25n#s8H^~xn)KGHY~X~_)0-e)5>$yG=jM$1{Gau;f*c6*4(2i zh`^q3yn^e4u+3eeam82P?icB>f#B#LBKoe;nMqU|?r)-?V8q5d|)!qj878DFfgicK8~O%+`Qw z#skv!(u0{~ps&JmkjW{uGKZ*J!zb-oZ#VB;sIT)7mU zJ!wIb@H^_7Di2e&vf^X^5MgI}{d=e+_mvHDrhB?TN8Wi~-O60bq4wdHTuJ)2ctvn+ z&h9av)zdO?=N009Nky}kGJ876N1DA4at#-34&KHCt~u%cBQj^Nt{ix%G z=?%r}VlJ^k7+izsWTTwQo^mVpdL2AMnE%Aj*ab45ae^v$cs?@=0rHR2i23dcg9oC~ zDuP=-Xbu;J$GEW+R?-dG-e{LU7DBrPdjHWYsG(2|!TH_Rbp9fTG`h@B=0g5zvCa9- zUx=ZW{Q3o?Q(*M%zmYr1uJupFFJICVK#=g3%6a~56C;I*Wf||J>%F?z@aYOh_@x<` z6Z0`LIgM`ZRG&p=%1BVy*5$mlMldT-!9Rt6v5%O)cs}j8mI*)&VYc*pDwo>!Izn>a zSxtg^KZd`6;tiNL%nZ8zq}D$^H^2}+rCRcu?W89bjU;LLs|Nvs;C$%g*zJo8>LlUR zE<&^xC4F(#ZHaUl@PGh9;=<_rRcil9f9YsFV%d5D?6?$I0bj!#WBDqF_(Q$mF2y~C}Qr>ACSk=Bqn%C z4pjG1uJJfoC9M^jim1PoAy|8?274!JKgNtvps1DX*(#eUaHHLYOvdBA2k5j+0sI6O zSw+m`=nlB{fk>SN{&F$uI(QrLL*)4Z=?}NX^Y5s8D6-SoYh1I~m|n_$`%LDCYdcL> zw-)b(zpThEqI5a4CnoK)7+23+J2;_t#vOUITxFvBB7Z|ME(1Dsk#KYs zn?4;?C_T>@e41Z~Znr*zydp;68C6Lb$+;>!DJ&SNgJlPHo0z}1UO^f%GF9C-$i}%L{4ap)$mS>Ru zDZjVn2l*X>)Y^;!5UCLwwgB&5sy_wiVjrn2v2T{)nAxB=exI}kTq~n4E?Ik}NAC`k zkCuz`@kQX9X!#M2t^P=ixYIhQ;ll&#fkIcPngToQZ?KaJB0No8X+Z*u2cME3eWI02 zkFp-hJPD4y{hb$+xOeT0gOWR);|r)4DM_T7?o$W$F!nAefX(2C%e6E*Z&0q7$ATvQ z=A99aUCI_;5RUB9Qe5!JS8t(Hi0cr$R&*j@rZwvINn`be*q#y~!%qQSa_ZEi&4=}Z z<+#OJwW-bafN7riJBWM; z+tdM-iL84{CJRad17CjE`m-g0;x(z8*u(|g?$dhE!~{@x zgZ5cbGboHs$-$Y6!&+j4-8{IwpzrlNOd+lkRE)>VXYxNHfM0pp33O$XBzIGiLVeuo`bHGsW*n8zn)8r!PVYjFcr`&KSjt@ zKxe&!d?c9*q`YXQL5)xcFo~-V9y|8R+gc(W?sMT5^K~2UG=$P8lZP z_4&FZ!fGU9rr_p6>097O#?DlX>5+@3-tD^Ik6|oh9S%{0Wa;4xVtYFjm{{_5Dk%Ss zPmy~;L4hqS^Dv;gN#!9b1O0^iAgAz7^XF}<(tR?$b_=V=CP`lkLQmmWl%>(%z?G#-p)Q-D>cJEV)sMJ0P^1#;#wTCI}RmKGI_? z(H)t!bZw#aTg?$qC)F=DmmZ%X`4Vw=Ao=cb;4WvW9wY(JORBnuFLFSll zW>4eX)|081{{GEVa+r2BC-pNdp93^TVn6STG+mvnzZ~b7A=t+B;leNXLfB!6ni)1K zaepY*dJ#Gk#4B#iex-cR6u-o;-e<7Kdatm*$(tbeb!%r#{l8cQvddvIc%b2avo>Rz=GGIr$Zn zN=V+06hG{|HPl&(k+?Rye-B0rnJ zix*guKh}=>U;y*#3$JdEzwtzG`sMTe$rUuI1FIk!t(a|=n#|mD(d@`f2D-9hPRPib!p!FE`b&UM2z%@0@st+eR2iy49o}j_UA*nEK$7#rn zY_;`bU#anPWDvT^`d{+he)pE7@TE)e_WI|FMS&rw9+kgJs+@1%IXN09*3)O1vtP9V zGG8;+azH-P!YVZ@GfT%jh#+52%O*Os5y%|KgrC7gRBv1v6lWL#_KO~!hrgiC5U*$O zrEN6O2IO3%$<~pL=p-m!ckV)SrIG(S~%i8 z>RXVTT%8pLs`UzSKQ9kJ>qvA_X1{!N{jP*(?pGs;IBCo9U3Um7Jh{*Hhc5p@ADIBN ztLE*e>>zfGFqZAqB4>y<%CX#J@C@(k zRdJ6?G?%ipZRHz%X0>8A*Q5c)UAvjYEzUw2^_Q8*O+UZ!S=EZvR^vI!WUHvwk{$96 z($5B}_*hJjsXxuWHrb`jz2vYmM&*)q$tjokMv-zqYW{(b#g z!s{;7VQJK>-h{7PB=*atwaT`Si%*%kL54&A6)Mg3H<}zRbCkGHQkz5*+vTO8Y=6TE zzr*6)n&703Lie)0YO z&NawO)+ZR#noO8}??KMP|8&!`RJZVlTcx@pdtTUxe^=mJQ3#n9RnCb~qzSWKH+g^6)BDkDhJlIf&}`OCEJ$ z9kkC=g®&9pfXJ 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%0AaXavhxwSQ!dxi-LICwB_vOZn_ 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�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%0Dic0Oia~-IJKD^m#j5}o5P-DTNSd#4Pm_D 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υ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

!oGb!rLT2ENM075YsAH&W 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�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 literal 0 HcmV?d00001 diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/perryhead_bonesANDblendweightsLODs.fbx.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/perryhead_bonesANDblendweightsLODs.fbx.meta new file mode 100644 index 00000000000..4f279c951f2 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling/perryhead_bonesANDblendweightsLODs.fbx.meta @@ -0,0 +1,138 @@ +fileFormatVersion: 2 +guid: fbaffbf3f716a9f40bfe7d38f123f669 +ModelImporter: + serializedVersion: 22200 + internalIDToNameTable: + - first: + 74: 8450808836658823645 + second: Armature|Armature|Armature|ArmatureAction|Armature|ArmatureAction + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: + - serializedVersion: 16 + name: Armature|Armature|Armature|ArmatureAction|Armature|ArmatureAction + takeName: Armature|Armature|Armature|ArmatureAction|Armature|ArmatureAction + internalID: 8450808836658823645 + firstFrame: 0 + lastFrame: 19 + wrapMode: 0 + orientationOffsetY: 0 + level: 0 + cycleOffset: 0 + loop: 0 + hasAdditiveReferencePose: 0 + loopTime: 1 + loopBlend: 0 + loopBlendOrientation: 0 + loopBlendPositionY: 0 + loopBlendPositionXZ: 0 + keepOriginalOrientation: 0 + keepOriginalPositionY: 1 + keepOriginalPositionXZ: 0 + heightFromFeet: 0 + mirror: 0 + bodyMask: 01000000010000000100000001000000010000000100000001000000010000000100000001000000010000000100000001000000 + curves: [] + events: [] + transformMask: [] + maskType: 3 + maskSource: {instanceID: 0} + additiveReferencePoseFrame: 0 + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 0 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 0 + importBlendShapeDeformPercent: 0 + remapMaterialsIfMaterialImportModeIsNone: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset b/Tests/SRPTests/Projects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset index 034359f99aa..6ff3df304ea 100644 --- a/Tests/SRPTests/Projects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset +++ b/Tests/SRPTests/Projects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset @@ -794,6 +794,9 @@ EditorBuildSettings: - enabled: 1 path: Assets/GraphicTests/Scenes/9x_Other/9007_CameraAlphaComposition.unity guid: 9bdb6076c41f9d64099cfd338b8f4c8b + - enabled: 1 + path: Assets/GraphicTests/Scenes/9x_Other/9008_AnimationFrustumCulling.unity + guid: ae8985d60efd64a4eabcad184745808a - enabled: 1 path: Assets/GraphicTests/Scenes/9x_Other/9301_MotionVectorsOff-Forward-Dynamic.unity guid: 322dc5ea5f705a245acc44fd467164ef @@ -905,6 +908,7 @@ EditorBuildSettings: - enabled: 1 path: Assets/GraphicTests/Scenes/9x_Other/9940-BRG_Simple.unity guid: 83354fd48bd3fbc4fb325e201d6b4dd5 + m_configObjects: {} - enabled: 1 path: Assets/GraphicTests/Scenes/9x_Other/9950-LineRendering.unity guid: 65ec8013d474e1a4e85d97b29e7302f0 From 75d10d6bcc727ee2e94b0cf3aaca022c248505b8 Mon Sep 17 00:00:00 2001 From: Felix Klinge Date: Thu, 12 Oct 2023 03:53:23 +0000 Subject: [PATCH 04/27] [content automatically redacted] touching PlatformDependent folder --- .../Editor/Wizard/HDWizard.Configuration.cs | 44 +++++++++++-------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.Configuration.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.Configuration.cs index 79c81cbb24b..fc623d48f61 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.Configuration.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.Configuration.cs @@ -42,8 +42,8 @@ enum LightmapEncodingQualityCopy High = 2 } - static Func GetLightmapEncodingQualityForPlatformGroup; - static Action SetLightmapEncodingQualityForPlatformGroup; + static Func GetLightmapEncodingQualityForPlatform; + static Action SetLightmapEncodingQualityForPlatform; static Func CalculateSelectedBuildTarget; static Func GetSupportedGraphicsAPIs; static Func WillEditorUseFirstGraphicsAPI; @@ -63,32 +63,32 @@ static void LoadReflectionMethods() var buildTargetGroupParameter = Expression.Parameter(typeof(BuildTargetGroup), "platformGroup"); var buildTargetParameter = Expression.Parameter(typeof(BuildTarget), "platform"); var qualityParameter = Expression.Parameter(typeof(LightmapEncodingQualityCopy), "quality"); - var getLightmapEncodingQualityForPlatformGroupInfo = playerSettingsType.GetMethod("GetLightmapEncodingQualityForPlatformGroup", BindingFlags.Static | BindingFlags.NonPublic); - var setLightmapEncodingQualityForPlatformGroupInfo = playerSettingsType.GetMethod("SetLightmapEncodingQualityForPlatformGroup", BindingFlags.Static | BindingFlags.NonPublic); + var GetLightmapEncodingQualityForPlatformInfo = playerSettingsType.GetMethod("GetLightmapEncodingQualityForPlatform", BindingFlags.Static | BindingFlags.NonPublic); + var SetLightmapEncodingQualityForPlatformInfo = playerSettingsType.GetMethod("SetLightmapEncodingQualityForPlatform", BindingFlags.Static | BindingFlags.NonPublic); var calculateSelectedBuildTargetInfo = editorUserBuildSettingsUtilsType.GetMethod("CalculateSelectedBuildTarget", BindingFlags.Static | BindingFlags.Public); var getSupportedGraphicsAPIsInfo = playerSettingsType.GetMethod("GetSupportedGraphicsAPIs", BindingFlags.Static | BindingFlags.NonPublic); var getStaticBatchingInfo = playerSettingsType.GetMethod("GetBatchingForPlatform", BindingFlags.Static | BindingFlags.NonPublic); var setStaticBatchingInfo = playerSettingsType.GetMethod("SetBatchingForPlatform", BindingFlags.Static | BindingFlags.NonPublic); var willEditorUseFirstGraphicsAPIInfo = playerSettingsEditorType.GetMethod("WillEditorUseFirstGraphicsAPI", BindingFlags.Static | BindingFlags.NonPublic); var requestCloseAndRelaunchWithCurrentArgumentsInfo = typeof(EditorApplication).GetMethod("RequestCloseAndRelaunchWithCurrentArguments", BindingFlags.Static | BindingFlags.NonPublic); - var getLightmapEncodingQualityForPlatformGroupBlock = Expression.Block( + var GetLightmapEncodingQualityForPlatformBlock = Expression.Block( new[] { qualityVariable }, - Expression.Assign(qualityVariable, Expression.Call(getLightmapEncodingQualityForPlatformGroupInfo, buildTargetGroupParameter)), + Expression.Assign(qualityVariable, Expression.Call(GetLightmapEncodingQualityForPlatformInfo, buildTargetParameter)), Expression.Convert(qualityVariable, typeof(LightmapEncodingQualityCopy)) ); - var setLightmapEncodingQualityForPlatformGroupBlock = Expression.Block( + var SetLightmapEncodingQualityForPlatformBlock = Expression.Block( new[] { qualityVariable }, Expression.Assign(qualityVariable, Expression.Convert(qualityParameter, lightEncodingQualityType)), - Expression.Call(setLightmapEncodingQualityForPlatformGroupInfo, buildTargetGroupParameter, qualityVariable) + Expression.Call(SetLightmapEncodingQualityForPlatformInfo, buildTargetParameter, qualityVariable) ); - var getLightmapEncodingQualityForPlatformGroupLambda = Expression.Lambda>(getLightmapEncodingQualityForPlatformGroupBlock, buildTargetGroupParameter); - var setLightmapEncodingQualityForPlatformGroupLambda = Expression.Lambda>(setLightmapEncodingQualityForPlatformGroupBlock, buildTargetGroupParameter, qualityParameter); + var GetLightmapEncodingQualityForPlatformLambda = Expression.Lambda>(GetLightmapEncodingQualityForPlatformBlock, buildTargetParameter); + var SetLightmapEncodingQualityForPlatformLambda = Expression.Lambda>(SetLightmapEncodingQualityForPlatformBlock, buildTargetParameter, qualityParameter); var calculateSelectedBuildTargetLambda = Expression.Lambda>(Expression.Call(null, calculateSelectedBuildTargetInfo)); var getSupportedGraphicsAPIsLambda = Expression.Lambda>(Expression.Call(null, getSupportedGraphicsAPIsInfo, buildTargetParameter), buildTargetParameter); var willEditorUseFirstGraphicsAPILambda = Expression.Lambda>(Expression.Call(null, willEditorUseFirstGraphicsAPIInfo, buildTargetParameter), buildTargetParameter); var requestCloseAndRelaunchWithCurrentArgumentsLambda = Expression.Lambda(Expression.Call(null, requestCloseAndRelaunchWithCurrentArgumentsInfo)); - GetLightmapEncodingQualityForPlatformGroup = getLightmapEncodingQualityForPlatformGroupLambda.Compile(); - SetLightmapEncodingQualityForPlatformGroup = setLightmapEncodingQualityForPlatformGroupLambda.Compile(); + GetLightmapEncodingQualityForPlatform = GetLightmapEncodingQualityForPlatformLambda.Compile(); + SetLightmapEncodingQualityForPlatform = SetLightmapEncodingQualityForPlatformLambda.Compile(); CalculateSelectedBuildTarget = calculateSelectedBuildTargetLambda.Compile(); GetSupportedGraphicsAPIs = getSupportedGraphicsAPIsLambda.Compile(); WillEditorUseFirstGraphicsAPI = willEditorUseFirstGraphicsAPILambda.Compile(); @@ -178,7 +178,7 @@ Entry[] BuildEntryList() entryList.AddRange(new Entry[] { - new Entry(QualityScope.Global, InclusiveMode.HDRP, Style.hdrpRuntimeResources, IsRuntimeResourcesCorrect, FixRuntimeResources, indent: 1), + new Entry(QualityScope.Global, InclusiveMode.HDRP, Style.hdrpRuntimeResources, IsRuntimeResourcesCorrect, FixRuntimeResources, indent: 1), new Entry(QualityScope.Global, InclusiveMode.HDRP, Style.hdrpEditorResources, IsEditorResourcesCorrect, FixEditorResources, indent: 1), new Entry(QualityScope.Global, InclusiveMode.HDRP, Style.hdrpVolumeProfile, IsDefaultVolumeProfileCorrect, FixDefaultVolumeProfile, indent: 1), new Entry(QualityScope.Global, InclusiveMode.HDRP, Style.hdrpDiffusionProfile, IsDiffusionProfileCorrect, FixDiffusionProfile, indent: 1), @@ -404,16 +404,22 @@ bool IsLightmapCorrect() { // Shame alert: plateform supporting Encodement are partly hardcoded // in editor (Standalone) and for the other part, it is all in internal code. - return GetLightmapEncodingQualityForPlatformGroup(BuildTargetGroup.Standalone) == LightmapEncodingQualityCopy.High - && GetLightmapEncodingQualityForPlatformGroup(BuildTargetGroup.Android) == LightmapEncodingQualityCopy.High - && GetLightmapEncodingQualityForPlatformGroup(BuildTargetGroup.WSA) == LightmapEncodingQualityCopy.High; + return GetLightmapEncodingQualityForPlatform(BuildTarget.StandaloneWindows) == LightmapEncodingQualityCopy.High + && GetLightmapEncodingQualityForPlatform(BuildTarget.StandaloneWindows64) == LightmapEncodingQualityCopy.High + && GetLightmapEncodingQualityForPlatform(BuildTarget.StandaloneLinux64) == LightmapEncodingQualityCopy.High + && GetLightmapEncodingQualityForPlatform(BuildTarget.StandaloneOSX) == LightmapEncodingQualityCopy.High + && GetLightmapEncodingQualityForPlatform(BuildTarget.Android) == LightmapEncodingQualityCopy.High + && GetLightmapEncodingQualityForPlatform(BuildTarget.WSAPlayer) == LightmapEncodingQualityCopy.High; } void FixLightmap(bool fromAsyncUnused) { - SetLightmapEncodingQualityForPlatformGroup(BuildTargetGroup.Standalone, LightmapEncodingQualityCopy.High); - SetLightmapEncodingQualityForPlatformGroup(BuildTargetGroup.Android, LightmapEncodingQualityCopy.High); - SetLightmapEncodingQualityForPlatformGroup(BuildTargetGroup.WSA, LightmapEncodingQualityCopy.High); + SetLightmapEncodingQualityForPlatform(BuildTarget.StandaloneWindows, LightmapEncodingQualityCopy.High); + SetLightmapEncodingQualityForPlatform(BuildTarget.StandaloneWindows64, LightmapEncodingQualityCopy.High); + SetLightmapEncodingQualityForPlatform(BuildTarget.StandaloneLinux64, LightmapEncodingQualityCopy.High); + SetLightmapEncodingQualityForPlatform(BuildTarget.StandaloneOSX, LightmapEncodingQualityCopy.High); + SetLightmapEncodingQualityForPlatform(BuildTarget.Android, LightmapEncodingQualityCopy.High); + SetLightmapEncodingQualityForPlatform(BuildTarget.WSAPlayer, LightmapEncodingQualityCopy.High); } bool IsShadowCorrect() From 6f73ac35d868fef87becf29d908128e69b73de2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Sideravi=C4=8Dius?= Date: Thu, 12 Oct 2023 03:53:23 +0000 Subject: [PATCH 05/27] [URP][RG] FB Fetch and SSAO fix This PR fixes deferred renderer not working correctly on RenderGraph path due to the fact, that render pass breaks if SSAO is used inbetween GBuffer and Deferred passes This also renames UseRenderPass to UseFramebufferFetch in DeferredLights to be more clear and less confusing. RenderGraph Epic: https://jira.unity3d.com/browse/URP-1297 POI: https://jira.unity3d.com/browse/POI-817 --- .../ScreenSpace/DecalGBufferRenderPass.cs | 4 ++- .../Runtime/DeferredLights.cs | 18 +++++----- .../Runtime/Passes/DeferredPass.cs | 4 +-- .../Runtime/Passes/GBufferPass.cs | 35 ++++++++++++++++--- .../Passes/ScreenSpaceAmbientOcclusionPass.cs | 4 +++ .../Runtime/Passes/ScriptableRenderPass.cs | 12 +++++++ .../RendererFeatures/DecalRendererFeature.cs | 2 +- .../Runtime/ScriptableRenderer.cs | 23 ++++++++++++ .../Runtime/UniversalRenderer.cs | 12 +++---- .../Runtime/UniversalRendererRenderGraph.cs | 12 +++++-- 10 files changed, 101 insertions(+), 25 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs index aefeb78e887..442fadb29a1 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs @@ -41,6 +41,8 @@ public DecalGBufferRenderPass(DecalScreenSpaceSettings settings, DecalDrawGBuffe m_PassData = new PassData(); m_GbufferAttachments = new RTHandle[4]; + + breakGBufferAndDeferredRenderPass = false; } internal void Setup(DeferredLights deferredLights) @@ -50,7 +52,7 @@ internal void Setup(DeferredLights deferredLights) public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) { - if (m_DeferredLights.UseRenderPass) + if (m_DeferredLights.UseFramebufferFetch) { m_GbufferAttachments[0] = m_DeferredLights.GbufferAttachments[0]; m_GbufferAttachments[1] = m_DeferredLights.GbufferAttachments[1]; diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs b/Packages/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs index 1e09add51eb..94ee4602c2f 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs @@ -133,12 +133,12 @@ internal enum StencilDeferredPasses internal int GBufferSpecularMetallicIndex { get { return 1; } } internal int GBufferNormalSmoothnessIndex { get { return 2; } } internal int GBufferLightingIndex { get { return 3; } } - internal int GbufferDepthIndex { get { return UseRenderPass ? GBufferLightingIndex + 1 : -1; } } - internal int GBufferRenderingLayers { get { return UseRenderingLayers ? GBufferLightingIndex + (UseRenderPass ? 1 : 0) + 1 : -1; } } + internal int GbufferDepthIndex { get { return UseFramebufferFetch ? GBufferLightingIndex + 1 : -1; } } + internal int GBufferRenderingLayers { get { return UseRenderingLayers ? GBufferLightingIndex + (UseFramebufferFetch ? 1 : 0) + 1 : -1; } } // Shadow Mask can change at runtime. Because of this it needs to come after the non-changing buffers. - internal int GBufferShadowMask { get { return UseShadowMask ? GBufferLightingIndex + (UseRenderPass ? 1 : 0) + (UseRenderingLayers ? 1 : 0) + 1 : -1; } } + internal int GBufferShadowMask { get { return UseShadowMask ? GBufferLightingIndex + (UseFramebufferFetch ? 1 : 0) + (UseRenderingLayers ? 1 : 0) + 1 : -1; } } // Color buffer count (not including dephStencil). - internal int GBufferSliceCount { get { return 4 + (UseRenderPass ? 1 : 0) + (UseShadowMask ? 1 : 0) + (UseRenderingLayers ? 1 : 0); } } + internal int GBufferSliceCount { get { return 4 + (UseFramebufferFetch ? 1 : 0) + (UseShadowMask ? 1 : 0) + (UseRenderingLayers ? 1 : 0); } } internal int GBufferInputAttachmentCount { get { return 4 + (UseShadowMask ? 1 : 0); } } @@ -173,7 +173,7 @@ internal GraphicsFormat GetGBufferFormat(int index) // internal bool UseLightLayers { get { return UniversalRenderPipeline.asset.useRenderingLayers; } } // - internal bool UseRenderPass { get; set; } + internal bool UseFramebufferFetch { get; set; } // internal bool HasDepthPrepass { get; set; } // @@ -264,7 +264,7 @@ internal DeferredLights(InitParams initParams, bool useNativeRenderPass = false) this.AccurateGbufferNormals = true; this.UseJobSystem = true; - this.UseRenderPass = useNativeRenderPass; + this.UseFramebufferFetch = useNativeRenderPass; m_LightCookieManager = initParams.lightCookieManager; } @@ -339,7 +339,7 @@ internal void SetupLights(CommandBuffer cmd, UniversalCameraData cameraData, Uni cmd.SetKeyword(ShaderGlobalKeywords.ShadowsShadowMask, isShadowMask); cmd.SetKeyword(ShaderGlobalKeywords.MixedLightingSubtractive, isSubtractive); // Backward compatibility // This should be moved to a more global scope when framebuffer fetch is introduced to more passes - cmd.SetKeyword(ShaderGlobalKeywords.RenderPassEnabled, this.UseRenderPass && cameraData.cameraType == CameraType.Game); + cmd.SetKeyword(ShaderGlobalKeywords.RenderPassEnabled, this.UseFramebufferFetch && cameraData.cameraType == CameraType.Game); cmd.SetKeyword(ShaderGlobalKeywords.LightLayers, UseLightLayers); RenderingLayerUtils.SetupProperties(CommandBufferHelpers.GetRasterCommandBuffer(cmd), RenderingLayerMaskSize); @@ -391,7 +391,7 @@ internal void ResolveMixedLightingMode(UniversalLightData lightData) // To non-renderpass path in the middle of setup, which means recreating the gbuffer attachments as well due to GBuffer4 used for RenderPass internal void DisableFramebufferFetchInput() { - this.UseRenderPass = false; + this.UseFramebufferFetch = false; CreateGbufferResources(); } @@ -483,7 +483,7 @@ public void Setup( this.DepthAttachment = depthAttachment; var inputCount = 4 + (UseShadowMask ? 1 : 0); - if (this.DeferredInputAttachments == null && this.UseRenderPass && this.GbufferAttachments.Length >= 3 || + if (this.DeferredInputAttachments == null && this.UseFramebufferFetch && this.GbufferAttachments.Length >= 3 || (this.DeferredInputAttachments != null && inputCount != this.DeferredInputAttachments.Length)) { this.DeferredInputAttachments = new RTHandle[inputCount]; diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DeferredPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DeferredPass.cs index a5542c08e11..ed807b82cd1 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DeferredPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DeferredPass.cs @@ -30,7 +30,7 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera { var lightingAttachment = m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferLightingIndex]; var depthAttachment = m_DeferredLights.DepthAttachmentHandle; - if (m_DeferredLights.UseRenderPass) + if (m_DeferredLights.UseFramebufferFetch) ConfigureInputAttachments(m_DeferredLights.DeferredInputAttachments, m_DeferredLights.DeferredInputIsTransient); // TODO: Cannot currently bind depth texture as read-only! @@ -77,7 +77,7 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur passData.depth = builder.UseTextureFragmentDepth(depth, IBaseRenderGraphBuilder.AccessFlags.Write); passData.deferredLights = m_DeferredLights; - if (!m_DeferredLights.UseRenderPass) + if (!m_DeferredLights.UseFramebufferFetch) { for (int i = 0; i < gbuffer.Length; ++i) { diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs index d15d418386d..0e1124bfb42 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs @@ -75,7 +75,7 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera if (cmd != null) { var allocateGbufferDepth = true; - if (m_DeferredLights.UseRenderPass && (m_DeferredLights.DepthCopyTexture != null && m_DeferredLights.DepthCopyTexture.rt != null)) + if (m_DeferredLights.UseFramebufferFetch && (m_DeferredLights.DepthCopyTexture != null && m_DeferredLights.DepthCopyTexture.rt != null)) { m_DeferredLights.GbufferAttachments[m_DeferredLights.GbufferDepthIndex] = m_DeferredLights.DepthCopyTexture; allocateGbufferDepth = false; @@ -96,7 +96,7 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera continue; // No need to setup temporaryRTs if we are using input attachments as they will be Memoryless - if (m_DeferredLights.UseRenderPass && (i != m_DeferredLights.GbufferDepthIndex && !m_DeferredLights.HasDepthPrepass)) + if (m_DeferredLights.UseFramebufferFetch && (i != m_DeferredLights.GbufferDepthIndex && !m_DeferredLights.HasDepthPrepass)) continue; m_DeferredLights.ReAllocateGBufferIfNeeded(cameraTextureDescriptor, i); @@ -105,7 +105,7 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera } } - if (m_DeferredLights.UseRenderPass) + if (m_DeferredLights.UseFramebufferFetch) m_DeferredLights.UpdateDeferredInputAttachments(); ConfigureTarget(m_DeferredLights.GbufferAttachments, m_DeferredLights.DepthAttachment, m_DeferredLights.GbufferFormats); @@ -132,7 +132,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData // If any sub-system needs camera normal texture, make it available. // Input attachments will only be used when this is not needed so safe to skip in that case - if (!m_DeferredLights.UseRenderPass) + if (!m_DeferredLights.UseFramebufferFetch) renderingData.commandBuffer.SetGlobalTexture(s_CameraNormalsTextureID, m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferNormalSmoothnessIndex]); } } @@ -317,5 +317,32 @@ internal static void SetGlobalGBufferTextures(RenderGraph renderGraph, TextureHa }); } } + + internal static void ResetGlobalGBufferTextures(RenderGraph renderGraph, TextureHandle[] gbuffer, TextureHandle depthTarget, + UniversalResourceData resourcesData, ref DeferredLights deferredLights) + { + using (var builder = renderGraph.AddRasterRenderPass("Reset Global GBuffer Textures", + out var passData, s_ProfilingSampler)) + { + passData.deferredLights = deferredLights; + gbuffer = resourcesData.gBuffer; + passData.gbuffer = deferredLights.GbufferTextureHandles; + + for (int i = 0; i < deferredLights.GBufferSliceCount; i++) + { + if (i != deferredLights.GBufferLightingIndex) + passData.gbuffer[i] = + builder.UseTextureFragment(gbuffer[i], i, IBaseRenderGraphBuilder.AccessFlags.Write); + } + + builder.UseTextureFragmentDepth(depthTarget, IBaseRenderGraphBuilder.AccessFlags.Write); + builder.AllowPassCulling(false); + builder.AllowGlobalStateModification(true); + + builder.SetRenderFunc((PassData data, RasterGraphContext context) => + { + }); + } + } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScreenSpaceAmbientOcclusionPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScreenSpaceAmbientOcclusionPass.cs index 82b62bcae3d..7b6f7052bbd 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScreenSpaceAmbientOcclusionPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScreenSpaceAmbientOcclusionPass.cs @@ -103,6 +103,10 @@ internal bool Setup(ref ScreenSpaceAmbientOcclusionSettings featureSettings, ref if (isRendererDeferred) { renderPassEvent = m_CurrentSettings.AfterOpaque ? RenderPassEvent.AfterRenderingOpaques : RenderPassEvent.AfterRenderingGbuffer; + + if (renderPassEvent == RenderPassEvent.AfterRenderingGbuffer) + breakGBufferAndDeferredRenderPass = true; + m_CurrentSettings.Source = ScreenSpaceAmbientOcclusionSettings.DepthSource.DepthNormals; } else diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs index 7a289ea1067..1539cf2d234 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs @@ -147,6 +147,15 @@ public enum RenderPassEvent AfterRendering = 1000, } + ///

+ /// Framebuffer fetch events in Universal RP + /// + internal enum FramebufferFetchEvent + { + None = 0, + FetchGbufferInDeferred = 1 + } + internal static class RenderPassEventsEnumValues { // we cache the values in this array at construction time to avoid runtime allocations, which we would cause if we accessed valuesInternal directly @@ -268,6 +277,8 @@ public abstract partial class ScriptableRenderPass internal bool useNativeRenderPass { get; set; } + internal bool breakGBufferAndDeferredRenderPass { get; set; } + // index to track the position in the current frame internal int renderPassQueueIndex { get; set; } @@ -313,6 +324,7 @@ public ScriptableRenderPass() isBlitRenderPass = false; profilingSampler = new ProfilingSampler($"Unnamed_{nameof(ScriptableRenderPass)}"); useNativeRenderPass = true; + breakGBufferAndDeferredRenderPass = true; renderPassQueueIndex = -1; renderTargetFormat = new GraphicsFormat[] { diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index 46cc6c8bda0..bf20b814660 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -568,7 +568,7 @@ public override void SetupRenderPasses(ScriptableRenderer renderer, in Rendering m_CopyDepthPass.MssaSamples = 1; } } - else if (m_Technique == DecalTechnique.GBuffer && m_DeferredLights.UseRenderPass) + else if (m_Technique == DecalTechnique.GBuffer && m_DeferredLights.UseFramebufferFetch) { // Need to call Configure for both of these passes to setup input attachments as first frame otherwise will raise errors m_GBufferRenderPass.Configure(null, renderingData.cameraData.cameraTargetDescriptor); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs index ecf4ce02869..94cc7901591 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs @@ -1122,6 +1122,29 @@ internal void RecordCustomRenderGraphPasses(RenderGraph renderGraph, RenderPassE } } + // ScriptableRenderPass if executed in a critical point (such as in between Deferred and GBuffer) has to have + // interruptFramebufferFetchEvent set to actually interrupt it so we could fall back to non framebuffer fetch path + internal bool InterruptFramebufferFetch(FramebufferFetchEvent fetchEvent, RenderPassEvent startInjectionPoint, RenderPassEvent endInjectionPoint) + { + int range = ScriptableRenderPass.GetRenderPassEventRange(endInjectionPoint); + int nextValue = (int) endInjectionPoint + range; + + foreach (ScriptableRenderPass pass in m_ActiveRenderPassQueue) + { + if (pass.renderPassEvent >= startInjectionPoint && (int) pass.renderPassEvent < nextValue) + switch (fetchEvent) + { + case FramebufferFetchEvent.FetchGbufferInDeferred: + if (pass.breakGBufferAndDeferredRenderPass) + return true; + break; + default: + continue; + } + } + return false; + } + internal void SetPerCameraProperties(ScriptableRenderContext context, UniversalCameraData cameraData, Camera camera, CommandBuffer cmd) { diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index f87594d4481..a7bd4f51090 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -385,7 +385,7 @@ protected override void Dispose(bool disposing) internal override void ReleaseRenderTargets() { m_ColorBufferSystem.Dispose(); - if (m_DeferredLights != null && !m_DeferredLights.UseRenderPass) + if (m_DeferredLights != null && !m_DeferredLights.UseFramebufferFetch) m_GBufferPass?.Dispose(); m_PostProcessPasses.ReleaseRenderTargets(); @@ -656,7 +656,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re m_DeferredLights.ResolveMixedLightingMode(lightData); m_DeferredLights.IsOverlay = cameraData.renderType == CameraRenderType.Overlay; - if (m_DeferredLights.UseRenderPass) + if (m_DeferredLights.UseFramebufferFetch) { // At this point we only have injected renderer features in the queue and can do assumptions on whether we'll need Framebuffer Fetch foreach (var pass in activeRenderPassQueue) @@ -912,7 +912,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re if (this.renderingModeActual == RenderingMode.Deferred) { - if (m_DeferredLights.UseRenderPass && (RenderPassEvent.AfterRenderingGbuffer == renderPassInputs.requiresDepthNormalAtEvent || !useRenderPassEnabled)) + if (m_DeferredLights.UseFramebufferFetch && (RenderPassEvent.AfterRenderingGbuffer == renderPassInputs.requiresDepthNormalAtEvent || !useRenderPassEnabled)) m_DeferredLights.DisableFramebufferFetchInput(); } @@ -1091,7 +1091,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re if (this.renderingModeActual == RenderingMode.Deferred) { - if (m_DeferredLights.UseRenderPass && (RenderPassEvent.AfterRenderingGbuffer == renderPassInputs.requiresDepthNormalAtEvent || !useRenderPassEnabled)) + if (m_DeferredLights.UseFramebufferFetch && (RenderPassEvent.AfterRenderingGbuffer == renderPassInputs.requiresDepthNormalAtEvent || !useRenderPassEnabled)) m_DeferredLights.DisableFramebufferFetchInput(); EnqueueDeferred(cameraData.cameraTargetDescriptor, requiresDepthPrepass, renderPassInputs.requiresNormalsTexture, renderingLayerProvidesByDepthNormalPass, mainLightShadows, additionalLightShadows); @@ -1462,7 +1462,7 @@ void EnqueueDeferred(RenderTextureDescriptor cameraTargetDescriptor, bool hasDep m_ActiveCameraColorAttachment ); // Need to call Configure for both of these passes to setup input attachments as first frame otherwise will raise errors - if (useRenderPassEnabled && m_DeferredLights.UseRenderPass) + if (useRenderPassEnabled && m_DeferredLights.UseFramebufferFetch) { m_GBufferPass.Configure(null, cameraTargetDescriptor); m_DeferredPass.Configure(null, cameraTargetDescriptor); @@ -1471,7 +1471,7 @@ void EnqueueDeferred(RenderTextureDescriptor cameraTargetDescriptor, bool hasDep EnqueuePass(m_GBufferPass); //Must copy depth for deferred shading: TODO wait for API fix to bind depth texture as read-only resource. - if (!useRenderPassEnabled || !m_DeferredLights.UseRenderPass) + if (!useRenderPassEnabled || !m_DeferredLights.UseFramebufferFetch) { m_GBufferCopyDepthPass.Setup(m_CameraDepthAttachment, m_DepthTexture); EnqueuePass(m_GBufferCopyDepthPass); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs index 17d730e2a3e..b3f3d6633e8 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs @@ -614,7 +614,7 @@ internal void SetupRenderGraphLights(RenderGraph renderGraph, UniversalRendering m_ForwardLights.SetupRenderGraphLights(renderGraph, renderingData, cameraData, lightData); if (this.renderingModeActual == RenderingMode.Deferred) { - m_DeferredLights.UseRenderPass = renderGraph.NativeRenderPassesEnabled; + m_DeferredLights.UseFramebufferFetch = renderGraph.NativeRenderPassesEnabled; m_DeferredLights.SetupRenderGraphLights(renderGraph, cameraData, lightData); } } @@ -826,7 +826,8 @@ private void OnMainRendering(RenderGraph renderGraph, ScriptableRenderContext co m_DeferredLights.Setup(m_AdditionalLightsShadowCasterPass); if (m_DeferredLights != null) { - m_DeferredLights.UseRenderPass = renderGraph.NativeRenderPassesEnabled; + // We need to be sure there are no custom passes in between GBuffer/Deferred passes, if there are - we disable fb fetch just to be safe` + m_DeferredLights.UseFramebufferFetch = renderGraph.NativeRenderPassesEnabled; m_DeferredLights.HasNormalPrepass = renderPassInputs.requiresNormalsTexture; m_DeferredLights.HasDepthPrepass = requiresDepthPrepass; m_DeferredLights.ResolveMixedLightingMode(lightData); @@ -844,6 +845,13 @@ private void OnMainRendering(RenderGraph renderGraph, ScriptableRenderContext co } RecordCustomRenderGraphPasses(renderGraph, RenderPassEvent.AfterRenderingGbuffer, RenderPassEvent.BeforeRenderingDeferredLights); + + var gfxDeviceType = SystemInfo.graphicsDeviceType; + // We double check for features in between GBuffer and Deferred passes just in case to know whether we need to reload the attachments + // Metal and Vulkan works fine as it just loads + if ((gfxDeviceType == GraphicsDeviceType.Vulkan || gfxDeviceType == GraphicsDeviceType.Metal) && + InterruptFramebufferFetch(FramebufferFetchEvent.FetchGbufferInDeferred,RenderPassEvent.AfterRenderingGbuffer, RenderPassEvent.BeforeRenderingDeferredLights)) + GBufferPass.ResetGlobalGBufferTextures(renderGraph, resourceData.gBuffer, resourceData.activeDepthTexture, resourceData, ref m_DeferredLights); m_DeferredPass.Render(renderGraph, frameData, resourceData.activeColorTexture, resourceData.activeDepthTexture, resourceData.gBuffer); From b3e65ba85bbd2a579b56d6eaf6be50b892c340f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20V=C3=A1zquez?= Date: Thu, 12 Oct 2023 03:53:24 +0000 Subject: [PATCH 06/27] [POI-816][HDRP]Migrating RTX resources Migrate HDRP Raytracing resources to IRenderPipelineResources, directly on GraphicsSettings. ![image](https://media.github.cds.internal.unity3d.com/user/3279/files/deb941b9-4a79-4e5f-942c-bc7d85c9d541) Also last minute add (see comments): Hidding [GPU Pipeline Tiers 0](https://github.cds.internal.unity3d.com/unity/unity/pull/22897) wrongly exposed resources in the UI (discovered when resolving conflicts) --- .../ProbeVolume/ProbeVolumeSceneData.cs | 3 - .../RenderPipelineGraphicsSettingsStripper.cs | 10 +- .../Editor/BuildProcessors/HDRPBuildData.cs | 5 +- .../BuildProcessors/SettingsStrippers.meta | 8 + .../HDRPRayTracingResourcesStripper.cs | 12 + .../HDRPRayTracingResourcesStripper.cs.meta | 2 + ...DRPDisabledComputeShaderVariantStripper.cs | 13 +- .../Editor/RenderPipeline/HDAssetFactory.cs | 30 -- .../RenderPipeline/HDRenderPipelineUI.cs | 8 - ...DRenderPipelineGlobalSettingsUI.Drawers.cs | 4 - .../HDRenderPipelineGlobalSettingsUI.Skin.cs | 2 - .../Editor/Wizard/HDWizard.Configuration.cs | 8 +- .../Runtime/Debug/RayCountManager.cs | 4 +- .../Runtime/Deprecated.cs | 6 + .../HDRenderPipeline.ScreenSpaceShadows.cs | 4 +- .../RenderPipeline/HDRenderPipeline.cs | 33 +- ...DRenderPipelineGlobalSettings.Migration.cs | 2 +- .../HDRenderPipelineGlobalSettings.cs | 35 -- .../HDRenderPipelineRayTracingResources.cs | 4 +- .../Raytracing/HDDiffuseShadowDenoiser.cs | 2 +- .../Raytracing/HDRaytracingLightCluster.cs | 14 +- .../Raytracing/HDRaytracingManager.cs | 2 +- .../Raytracing/HDReflectionDenoiser.cs | 4 +- ...nderPipeline.RaytracingAmbientOcclusion.cs | 6 +- ...enderPipeline.RaytracingIndirectDiffuse.cs | 14 +- ...derPipeline.RaytracingRecursiveRenderer.cs | 2 +- .../HDRenderPipeline.RaytracingReflection.cs | 10 +- ...Pipeline.RaytracingSubsurfaceScattering.cs | 4 +- .../Raytracing/ReblurDenoiser.cs | 2 +- .../HDRPRayTracingResources.cs | 392 ++++++++++++++++++ .../HDRPRayTracingResources.cs.meta | 2 + 31 files changed, 483 insertions(+), 164 deletions(-) create mode 100644 Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers.meta create mode 100644 Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers/HDRPRayTracingResourcesStripper.cs create mode 100644 Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers/HDRPRayTracingResourcesStripper.cs.meta create mode 100644 Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipelineResources/HDRPRayTracingResources.cs create mode 100644 Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipelineResources/HDRPRayTracingResources.cs.meta diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeSceneData.cs b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeSceneData.cs index ca0d1476d55..7da6e43ee2d 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeSceneData.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeSceneData.cs @@ -131,9 +131,6 @@ internal void SyncBakingSets() var set = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(setGUID)); AddBakingSet(set); } - - if (parentAsset != null) - EditorUtility.SetDirty(parentAsset); #endif } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Stripping/RenderPipelineGraphicsSettingsStripper.cs b/Packages/com.unity.render-pipelines.core/Runtime/Stripping/RenderPipelineGraphicsSettingsStripper.cs index 72358e6796d..7e47776967c 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Stripping/RenderPipelineGraphicsSettingsStripper.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Stripping/RenderPipelineGraphicsSettingsStripper.cs @@ -1,13 +1,14 @@ #if UNITY_EDITOR using System; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Reflection; namespace UnityEngine.Rendering { internal static partial class RenderPipelineGraphicsSettingsStripper { - private static bool CanRemoveSettings(this List strippers, Type settingsType, IRenderPipelineGraphicsSettings settings) + private static bool CanRemoveSettings(this List strippers, [DisallowNull] Type settingsType, [DisallowNull] IRenderPipelineGraphicsSettings settings) { const BindingFlags flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; @@ -26,8 +27,8 @@ private static bool CanRemoveSettings(this List strippers, Type setti } private static bool CanTransferSettingsToPlayer( - Dictionary> strippersMap, - IRenderPipelineGraphicsSettings settings, + [DisallowNull] Dictionary> strippersMap, + [DisallowNull] IRenderPipelineGraphicsSettings settings, out bool isAvailableOnPlayerBuild, out bool strippersDefined) { @@ -70,6 +71,9 @@ public static void PerformStripping( for (int i = 0; i < settingsList.Count; ++i) { var settings = settingsList[i]; + if (settings == null) + continue; + if (CanTransferSettingsToPlayer(strippersMap, settings, out var isAvailableOnPlayerBuild, out var strippersDefined)) runtimeSettingsList.Add(settings); diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/HDRPBuildData.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/HDRPBuildData.cs index 326c6d67dcf..20d22407411 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/HDRPBuildData.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/HDRPBuildData.cs @@ -44,9 +44,8 @@ public HDRPBuildData(BuildTarget buildTarget, bool isDevelopmentBuild) var hdrpGlobalSettingsInstance = HDRenderPipelineGlobalSettings.Ensure(); if (hdrpGlobalSettingsInstance != null) { - var rtxResources = hdrpGlobalSettingsInstance.renderPipelineRayTracingResources; - if (rtxResources != null) - rtxResources.ForEachFieldOfType(computeShader => rayTracingComputeShaderCache.Add(computeShader.GetInstanceID(), computeShader)); + GraphicsSettings.GetRenderPipelineSettings() + .ForEachFieldOfType(computeShader => rayTracingComputeShaderCache.Add(computeShader.GetInstanceID(), computeShader)); var runtimeShaderResources = hdrpGlobalSettingsInstance.renderPipelineResources.shaders; runtimeShaderResources?.ForEachFieldOfType(computeShader => computeShaderCache.Add(computeShader.GetInstanceID(), computeShader)); diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers.meta b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers.meta new file mode 100644 index 00000000000..f016030b118 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e14617442ccd3a546864bb2538fbf76d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers/HDRPRayTracingResourcesStripper.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers/HDRPRayTracingResourcesStripper.cs new file mode 100644 index 00000000000..d67a910b11e --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers/HDRPRayTracingResourcesStripper.cs @@ -0,0 +1,12 @@ +using UnityEngine.Rendering; +using UnityEngine.Rendering.HighDefinition; + +namespace UnityEditor.Rendering.HighDefinition +{ + class HDRPRayTracingResourcesStripper : IRenderPipelineGraphicsSettingsStripper + { + public bool active => HDRPBuildData.instance.buildingPlayerForHDRenderPipeline; + + public bool CanRemoveSettings(HDRPRayTracingResources settings) => !HDRPBuildData.instance.playerNeedRaytracing; + } +} diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers/HDRPRayTracingResourcesStripper.cs.meta b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers/HDRPRayTracingResourcesStripper.cs.meta new file mode 100644 index 00000000000..8b074742a64 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/SettingsStrippers/HDRPRayTracingResourcesStripper.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 004b29604f7c89e429d2e0695374569f \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/ShaderStrippers/HDRPDisabledComputeShaderVariantStripper.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/ShaderStrippers/HDRPDisabledComputeShaderVariantStripper.cs index 48a3c812b89..5ac35a65040 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/ShaderStrippers/HDRPDisabledComputeShaderVariantStripper.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/BuildProcessors/ShaderStrippers/HDRPDisabledComputeShaderVariantStripper.cs @@ -1,6 +1,5 @@ using System.Diagnostics.CodeAnalysis; using UnityEngine; -using UnityEngine.Rendering.HighDefinition; namespace UnityEditor.Rendering.HighDefinition { @@ -8,9 +7,17 @@ class HDRPDisabledComputeShaderVariantStripper : IComputeShaderVariantStripper { public bool active => !HDRPBuildData.instance.buildingPlayerForHDRenderPipeline; - public bool CanRemoveVariant([DisallowNull] ComputeShader shader, string shaderVariant, ShaderCompilerData shaderCompilerData) + public bool CanRemoveVariant([DisallowNull] ComputeShader shader, string _, ShaderCompilerData __) { - return HDRPBuildData.instance.computeShaderCache.ContainsKey(shader.GetInstanceID()); + var shaderInstanceID = shader.GetInstanceID(); + + if (HDRPBuildData.instance.computeShaderCache.ContainsKey(shaderInstanceID)) + return true; + + if (HDRPBuildData.instance.rayTracingComputeShaderCache.ContainsKey(shaderInstanceID)) + return true; + + return false; } } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDAssetFactory.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDAssetFactory.cs index 098b5811ae5..9e7f6a57a02 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDAssetFactory.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDAssetFactory.cs @@ -54,36 +54,6 @@ public override void Action(int instanceId, string pathName, string resourceFile } } - // Hide: User aren't suppose to have to create it. - //[MenuItem("Assets/Create/Rendering/HDRP Resources", priority = CoreUtils.Sections.section7 + CoreUtils.Priorities.assetsCreateRenderingMenuPriority)] - static void CreateRenderPipelineResources() - { - var icon = EditorGUIUtility.FindTexture("ScriptableObject Icon"); - ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance(), "New HDRenderPipelineResources.asset", icon, null); - } - - class DoCreateNewAssetHDRenderPipelineRayTracingResources : ProjectWindowCallback.EndNameEditAction - { - public override void Action(int instanceId, string pathName, string resourceFile) - { - var newAsset = CreateInstance(); - newAsset.name = Path.GetFileName(pathName); - - ResourceReloader.ReloadAllNullIn(newAsset, HDUtils.GetHDRenderPipelinePath()); - - AssetDatabase.CreateAsset(newAsset, pathName); - ProjectWindowUtil.ShowCreatedAsset(newAsset); - } - } - - // Hide: User aren't suppose to have to create it. - //[MenuItem("Assets/Create/Rendering/HDRP Ray Tracing Resources", priority = CoreUtils.Sections.section7 + CoreUtils.Priorities.assetsCreateRenderingMenuPriority + 2)] - static void CreateRenderPipelineRayTracingResources() - { - var icon = EditorGUIUtility.FindTexture("ScriptableObject Icon"); - ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, ScriptableObject.CreateInstance(), "New HDRenderPipelineRayTracingResources.asset", icon, null); - } - class DoCreateNewAssetHDRenderPipelineEditorResources : ProjectWindowCallback.EndNameEditAction { public override void Action(int instanceId, string pathName, string resourceFile) diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs index 933012f99e2..8644bd6a5bd 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs @@ -1068,15 +1068,7 @@ static void Drawer_SectionRenderingUnsorted(SerializedHDRenderPipelineAsset seri --EditorGUI.indentLevel; } - EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(serialized.renderPipelineSettings.supportRayTracing, Styles.supportRaytracing); - if (EditorGUI.EndChangeCheck()) - { - if (serialized.renderPipelineSettings.supportRayTracing.boolValue) - HDRenderPipelineGlobalSettings.instance.EnsureRayTracingResources(forceReload: false); - else - HDRenderPipelineGlobalSettings.instance.ClearRayTracingResources(); - } using (new EditorGUI.DisabledScope(!serialized.renderPipelineSettings.supportRayTracing.boolValue)) { diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/HDRenderPipelineGlobalSettingsUI.Drawers.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/HDRenderPipelineGlobalSettingsUI.Drawers.cs index 08ddc601a36..c557087496c 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/HDRenderPipelineGlobalSettingsUI.Drawers.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/HDRenderPipelineGlobalSettingsUI.Drawers.cs @@ -64,10 +64,6 @@ static void DrawResourcesSection(SerializedHDRenderPipelineGlobalSettings serial bool oldGuiEnabled = GUI.enabled; GUI.enabled = false; - EditorGUILayout.PropertyField(serialized.renderPipelineRayTracingResources, Styles.renderPipelineRayTracingResourcesContent); - - EditorGUILayout.PropertyField(serialized.renderPipelineGPUResidentDrawerResources, Styles.renderPipelineGPUResidentDrawerResourcesContent); - // Not serialized as editor only datas... Retrieve them in data EditorGUI.showMixedValue = serialized.editorResourceHasMultipleDifferentValues; var editorResources = EditorGUILayout.ObjectField(Styles.renderPipelineEditorResourcesContent, serialized.firstEditorResources, typeof(HDRenderPipelineEditorResources), allowSceneObjects: false) as HDRenderPipelineEditorResources; diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/HDRenderPipelineGlobalSettingsUI.Skin.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/HDRenderPipelineGlobalSettingsUI.Skin.cs index f26e972aa21..64ea618b33a 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/HDRenderPipelineGlobalSettingsUI.Skin.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/HDRenderPipelineGlobalSettingsUI.Skin.cs @@ -20,8 +20,6 @@ internal class Styles public static readonly GUIContent resourceLabel = EditorGUIUtility.TrTextContent("Resources"); public static readonly GUIContent renderPipelineResourcesContent = EditorGUIUtility.TrTextContent("Player Resources", "Set of resources that need to be loaded when creating stand alone"); - public static readonly GUIContent renderPipelineRayTracingResourcesContent = EditorGUIUtility.TrTextContent("Ray Tracing Resources", "Set of resources that need to be loaded when using ray tracing"); - public static readonly GUIContent renderPipelineGPUResidentDrawerResourcesContent = EditorGUIUtility.TrTextContent("GPU Resident Drawer Resources", "Set of resources that need to be loaded when the GPU Resident Drawer is enabled"); public static readonly GUIContent renderPipelineEditorResourcesContent = EditorGUIUtility.TrTextContent("Editor Resources", "Set of resources that need to be loaded for working in editor"); public static readonly GUIContent generalSettingsLabel = EditorGUIUtility.TrTextContent("Miscellaneous"); diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.Configuration.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.Configuration.cs index fc623d48f61..2a8d4e490c5 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.Configuration.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.Configuration.cs @@ -775,9 +775,8 @@ void CheckPersistantNeedReboot() bool IsDXRResourcesCorrect() { var selectedBuildTarget = CalculateSelectedBuildTarget(); - return IsHdrpGlobalSettingsUsedCorrect() - && HDRenderPipelineGlobalSettings.instance.AreRayTracingResourcesCreated() - && (SystemInfo.supportsRayTracing || selectedBuildTarget == BuildTarget.GameCoreXboxSeries || selectedBuildTarget == BuildTarget.PS5); + return IsHdrpGlobalSettingsUsedCorrect() && GraphicsSettings.TryGetRenderPipelineSettings(out var _) + && (SystemInfo.supportsRayTracing || selectedBuildTarget == BuildTarget.GameCoreXboxSeries || selectedBuildTarget == BuildTarget.PS5); } void FixDXRResources(bool fromAsyncUnused) @@ -785,9 +784,6 @@ void FixDXRResources(bool fromAsyncUnused) if (!IsHdrpGlobalSettingsUsedCorrect()) FixHdrpGlobalSettingsUsed(fromAsync: false); - if (SystemInfo.supportsRayTracing) - HDRenderPipelineGlobalSettings.instance.EnsureRayTracingResources(forceReload: true); - // IMPORTANT: We display the error only if we are D3D12 as the supportsRayTracing always return false in any other device even if OS/HW supports DXR. // The D3D12 is a separate check in the wizard, so it is fine not to display an error in case we are not D3D12. if (!SystemInfo.supportsRayTracing && IsDXRDirect3D12Correct()) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/RayCountManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/RayCountManager.cs index 9dc650bdbe0..76485b56651 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/RayCountManager.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/RayCountManager.cs @@ -53,10 +53,10 @@ class RayCountManager // Given that the requests are guaranteed to be executed in order we use a queue to store it Queue m_RayCountReadbacks = new Queue(); - public void Init(HDRenderPipelineRayTracingResources rayTracingResources) + public void Init(HDRPRayTracingResources rayTracingResources) { // Keep track of the compute shader we are going to use - m_RayCountCS = rayTracingResources.countTracedRays; + m_RayCountCS = rayTracingResources.countTracedRaysCS; // We only require 3 buffers (this supports a maximal size of 8192x8192) m_ReducedRayCountBufferOutput = new ComputeBuffer((int)RayCountValues.Count + 1, sizeof(uint)); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Deprecated.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Deprecated.cs index 45dbefef9dc..a92c0637f00 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Deprecated.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Deprecated.cs @@ -485,4 +485,10 @@ public static HDAdditionalLightData AddHDLight(this GameObject gameObject, HDLig return AddHDLight(gameObject, type); } } + + partial class HDRenderPipelineGlobalSettings + { + [SerializeField, FormerlySerializedAs("m_RenderPipelineRayTracingResources"), Obsolete("Migrated to IRenderPipelineResources. #from(23.3)")] + HDRenderPipelineRayTracingResources m_ObsoleteRenderPipelineRayTracingResources; + } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDRenderPipeline.ScreenSpaceShadows.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDRenderPipeline.ScreenSpaceShadows.cs index 688b8974ba7..30b2a67340b 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDRenderPipeline.ScreenSpaceShadows.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Shadow/HDRenderPipeline.ScreenSpaceShadows.cs @@ -189,9 +189,9 @@ void InitializeScreenSpaceShadows() // Fetch the shaders if (m_RayTracingSupported) { - m_ScreenSpaceShadowsCS = rayTracingResources.shadowRaytracingCS; + m_ScreenSpaceShadowsCS = rayTracingResources.shadowRayTracingCS; m_ScreenSpaceShadowsFilterCS = rayTracingResources.shadowFilterCS; - m_ScreenSpaceShadowsRT = rayTracingResources.shadowRaytracingRT; + m_ScreenSpaceShadowsRT = rayTracingResources.shadowRayTracingRT; // Directional shadow kernels m_ClearShadowTexture = m_ScreenSpaceShadowsCS.FindKernel("ClearShadowTexture"); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs index 7bbffd82e2a..c9ff0f61be2 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs @@ -407,7 +407,7 @@ internal Material GetMSAAColorResolveMaterial() ///
public bool rayTracingSupported { get { return m_RayTracingSupported; } } - internal HDRenderPipelineRayTracingResources rayTracingResources { get; private set; } + internal HDRPRayTracingResources rayTracingResources { get; private set; } #if UNITY_EDITOR bool m_ResourcesInitialized = false; @@ -461,12 +461,11 @@ public HDRenderPipeline(HDRenderPipelineAsset asset) //In case we are loading element in the asset pipeline (occurs when library is not fully constructed) the creation of the HDRenderPipeline is done at a time we cannot access resources. //So in this case, the reloader would fail and the resources cannot be validated. So skip validation here. //The HDRenderPipeline will be reconstructed in a few frame which will fix this issue. - if ((m_GlobalSettings.AreRuntimeResourcesCreated() == false) - || (m_GlobalSettings.AreEditorResourcesCreated() == false) - || (m_RayTracingSupported && !m_GlobalSettings.AreRayTracingResourcesCreated())) + m_ResourcesInitialized = m_GlobalSettings.AreRuntimeResourcesCreated() && + m_GlobalSettings.AreEditorResourcesCreated(); + + if (!m_ResourcesInitialized) return; - else - m_ResourcesInitialized = true; m_GlobalSettings.EnsureShadersCompiled(); #endif @@ -476,7 +475,7 @@ public HDRenderPipeline(HDRenderPipelineAsset asset) // The first thing we need to do is to set the defines that depend on the render pipeline settings bool pipelineSupportsRayTracing = PipelineSupportsRayTracing(m_Asset.currentPlatformRenderPipelineSettings); - rayTracingResources = m_GlobalSettings.renderPipelineRayTracingResources; + rayTracingResources = GraphicsSettings.GetRenderPipelineSettings(); m_RayTracingSupported = pipelineSupportsRayTracing && rayTracingResources != null; @@ -715,24 +714,6 @@ void UpgradeResourcesIfNeeded() m_GlobalSettings.EnsureRuntimeResources(forceReload: true); m_GlobalSettings.EnsureEditorResources(forceReload: true); - // Make sure to include ray-tracing resources if at least one of the defaultAsset or quality levels needs it - bool requiresRayTracingResources = m_Asset.currentPlatformRenderPipelineSettings.supportRayTracing; - - // Make sure to include ray-tracing resources if at least one of the quality levels needs it - int qualityLevelCount = QualitySettings.names.Length; - for (int i = 0; i < qualityLevelCount && !requiresRayTracingResources; ++i) - { - var hdrpAsset = QualitySettings.GetRenderPipelineAssetAt(i) as HDRenderPipelineAsset; - if (hdrpAsset != null && hdrpAsset.currentPlatformRenderPipelineSettings.supportRayTracing) - requiresRayTracingResources = true; - } - - // If ray tracing is not enabled we do not want to have ray tracing resources referenced - if (requiresRayTracingResources) - m_GlobalSettings.EnsureRayTracingResources(forceReload: true); - else - m_GlobalSettings.ClearRayTracingResources(); - if(m_Asset.currentPlatformRenderPipelineSettings.gpuResidentDrawerSettings.mode != GPUResidentDrawerMode.Disabled) m_GlobalSettings.EnsureGPUResidentDrawerResources(forceReload: true); else @@ -2071,8 +2052,6 @@ protected override void Render(ScriptableRenderContext renderContext, Camera[] c // Potentially the asset might have been deleted by the user // Obtain the asset again at least one per frame to make sure we are pointing to a valid resources. runtimeResources = m_GlobalSettings.renderPipelineResources; - rayTracingResources = m_GlobalSettings.renderPipelineRayTracingResources; - #endif if (m_GlobalSettings.lensAttenuationMode == LensAttenuationMode.ImperfectLens) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineGlobalSettings.Migration.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineGlobalSettings.Migration.cs index 3f42e0a6cd4..1f6163cf8bd 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineGlobalSettings.Migration.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineGlobalSettings.Migration.cs @@ -206,7 +206,7 @@ internal static void MigrateFromHDRPAsset(HDRenderPipelineAsset oldAsset) assetToUpgrade.m_ObsoleteRenderingPathDefaultRealtimeReflectionFrameSettings = oldAsset.m_ObsoleteRealtimeReflectionFrameSettingsMovedToDefaultSettings; assetToUpgrade.m_RenderPipelineResources = oldAsset.m_ObsoleteRenderPipelineResources; - assetToUpgrade.m_RenderPipelineRayTracingResources = oldAsset.m_ObsoleteRenderPipelineRayTracingResources; + assetToUpgrade.m_ObsoleteRenderPipelineRayTracingResources = oldAsset.m_ObsoleteRenderPipelineRayTracingResources; assetToUpgrade.beforeTransparentCustomPostProcesses.AddRange(oldAsset.m_ObsoleteBeforeTransparentCustomPostProcesses); assetToUpgrade.beforePostProcessCustomPostProcesses.AddRange(oldAsset.m_ObsoleteBeforePostProcessCustomPostProcesses); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineGlobalSettings.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineGlobalSettings.cs index 8a3b9bfc5af..ccb7b0e82d2 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineGlobalSettings.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineGlobalSettings.cs @@ -96,7 +96,6 @@ public override void Initialize(RenderPipelineGlobalSettings source = null) // ensure resources are here EnsureEditorResources(forceReload: true); EnsureRuntimeResources(forceReload: true); - EnsureRayTracingResources(forceReload: true); EnsureGPUResidentDrawerResources(forceReload: true); var defaultVolumeProfile = GetOrCreateDefaultVolumeProfile(); @@ -316,40 +315,6 @@ public Material GetDefaultMirrorMaterial() #endregion //Editor Resources - #region Ray Tracing Resources - [SerializeField] - HDRenderPipelineRayTracingResources m_RenderPipelineRayTracingResources; - internal HDRenderPipelineRayTracingResources renderPipelineRayTracingResources - { - get - { - // No ensure because it can be null if we do not use ray tracing - return m_RenderPipelineRayTracingResources; - } - } - -#if UNITY_EDITOR - // be sure to cach result for not using GC in a frame after first one. - static readonly string raytracingResourcesPath = HDUtils.GetHDRenderPipelinePath() + "Runtime/RenderPipelineResources/HDRenderPipelineRayTracingResources.asset"; - - internal void EnsureRayTracingResources(bool forceReload) - => ResourceReloader.EnsureResources(forceReload, ref m_RenderPipelineRayTracingResources, raytracingResourcesPath, AreRayTracingResourcesCreated_Internal, this); - - internal void ClearRayTracingResources() - => m_RenderPipelineRayTracingResources = null; - - // Passing method in a Func argument create a functor that create GC - // If it is static it is then only computed once but the Ensure is called after first frame which will make our GC check fail - // So create it once and store it here. - // Expected usage: HDRenderPipelineGlobalSettings.AreRayTracingResourcesCreated(anyHDRenderPipelineGlobalSettings) that will return a bool - static Func AreRayTracingResourcesCreated_Internal = global - => global.m_RenderPipelineRayTracingResources != null && !global.m_RenderPipelineRayTracingResources.Equals(null); - - internal bool AreRayTracingResourcesCreated() => AreRayTracingResourcesCreated_Internal(this); -#endif - - #endregion //Ray Tracing Resources - #region GPU Resident Drawer Resources [FormerlySerializedAs("m_RenderPipelineMacroBatcherResources")] [SerializeField] diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineRayTracingResources.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineRayTracingResources.cs index f98ab116aeb..d02c11ed893 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineRayTracingResources.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineRayTracingResources.cs @@ -1,8 +1,8 @@ -using UnityEngine.Experimental.Rendering; +using System; namespace UnityEngine.Rendering.HighDefinition { - [HDRPHelpURL("Default-Settings-Window")] + [HDRPHelpURL("Default-Settings-Window")][Obsolete("Migrated to GraphicsSettings. #from(23.3)")] partial class HDRenderPipelineRayTracingResources : HDRenderPipelineResources { // Reflection diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDDiffuseShadowDenoiser.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDDiffuseShadowDenoiser.cs index 86366b1133b..eef8c6174d5 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDDiffuseShadowDenoiser.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDDiffuseShadowDenoiser.cs @@ -31,7 +31,7 @@ public HDDiffuseShadowDenoiser() { } - public void Init(HDRenderPipelineRayTracingResources rpRTResources) + public void Init(HDRPRayTracingResources rpRTResources) { m_ShadowDenoiser = rpRTResources.diffuseShadowDenoiserCS; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs index b801b212cdd..1004835e99d 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingLightCluster.cs @@ -7,8 +7,6 @@ namespace UnityEngine.Rendering.HighDefinition class HDRaytracingLightCluster { // External data - HDRenderPipelineRuntimeResources m_RenderPipelineResources = null; - HDRenderPipelineRayTracingResources m_RenderPipelineRayTracingResources = null; HDRenderPipeline m_RenderPipeline = null; // Culling result @@ -56,10 +54,6 @@ class HDRaytracingLightCluster public void Initialize(HDRenderPipeline renderPipeline) { - // Keep track of the external buffers - m_RenderPipelineResources = HDRenderPipelineGlobalSettings.instance.renderPipelineResources; - m_RenderPipelineRayTracingResources = HDRenderPipelineGlobalSettings.instance.renderPipelineRayTracingResources; - // Keep track of the render pipeline m_RenderPipeline = renderPipeline; @@ -69,7 +63,7 @@ public void Initialize(HDRenderPipeline renderPipeline) ResizeClusterBuffer(bufferSize); // Create the material required for debug - m_DebugMaterial = CoreUtils.CreateEngineMaterial(m_RenderPipelineRayTracingResources.lightClusterDebugS); + m_DebugMaterial = CoreUtils.CreateEngineMaterial(renderPipeline.rayTracingResources.lightClusterDebugS); } public void ReleaseResources() @@ -179,7 +173,7 @@ void CullLights(CommandBuffer cmd, WorldLightsVolumes worldLightsVolumes) ResizeCullResultBuffer(totalLightCount); } - ComputeShader lightClusterCS = m_RenderPipelineRayTracingResources.lightClusterBuildCS; + ComputeShader lightClusterCS = m_RenderPipeline.rayTracingResources.lightClusterBuildCS; // Grab the kernel int lightClusterCullKernel = lightClusterCS.FindKernel(m_LightCullKernelName); @@ -203,7 +197,7 @@ void BuildLightCluster(HDCamera hdCamera, CommandBuffer cmd, WorldLightsVolumes using (new ProfilingScope(cmd, ProfilingSampler.Get(HDProfileId.RaytracingBuildCluster))) { // Grab the kernel - ComputeShader lightClusterCS = m_RenderPipelineRayTracingResources.lightClusterBuildCS; + ComputeShader lightClusterCS = m_RenderPipeline.rayTracingResources.lightClusterBuildCS; int lightClusterKernel = lightClusterCS.FindKernel(m_LightClusterKernelName); // Inject all the parameters @@ -255,7 +249,7 @@ public void EvaluateClusterDebugView(RenderGraph renderGraph, HDCamera hdCamera, passData.texHeight = hdCamera.actualHeight; passData.clusterCellSize = clusterCellSize; passData.lightCluster = builder.ReadBuffer(renderGraph.ImportBuffer(m_LightCluster)); - passData.lightClusterDebugCS = m_RenderPipelineRayTracingResources.lightClusterDebugCS; + passData.lightClusterDebugCS = m_RenderPipeline.rayTracingResources.lightClusterDebugCS; passData.lightClusterDebugKernel = passData.lightClusterDebugCS.FindKernel("DebugLightCluster"); passData.debugMaterial = m_DebugMaterial; passData.depthStencilBuffer = builder.UseDepthBuffer(depthStencilBuffer, DepthAccess.Read); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs index ed5807b7990..79ba68c8177 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRaytracingManager.cs @@ -757,7 +757,7 @@ internal void EvaluateRTASDebugView(RenderGraph renderGraph, HDCamera hdCamera) passData.pixelCoordToViewDirWS = hdCamera.mainViewConstants.pixelCoordToViewDirWS; // Other parameters - passData.debugRTASRT = rayTracingResources.rtasDebug; + passData.debugRTASRT = rayTracingResources.debugRTASRT; passData.rayTracingAccelerationStructure = RequestAccelerationStructure(hdCamera); // Depending of if we will have to denoise (or not), we need to allocate the final format, or a bigger texture diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDReflectionDenoiser.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDReflectionDenoiser.cs index 6aa40b967a2..c5c02f603ba 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDReflectionDenoiser.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDReflectionDenoiser.cs @@ -19,10 +19,10 @@ public HDReflectionDenoiser() { } - public void Init(HDRenderPipelineRayTracingResources rpRTResources) + public void Init(HDRPRayTracingResources rpRTResources) { m_ReflectionDenoiserCS = rpRTResources.reflectionDenoiserCS; - m_ReflectionFilterMapping = rpRTResources.reflectionFilterMapping; + m_ReflectionFilterMapping = rpRTResources.reflectionFilterMappingTexture; // Fetch all the kernels we shall be using s_TemporalAccumulationFullResKernel = m_ReflectionDenoiserCS.FindKernel("TemporalAccumulationFullRes"); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingAmbientOcclusion.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingAmbientOcclusion.cs index ed75ad9caf5..c30ca5cd2ba 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingAmbientOcclusion.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingAmbientOcclusion.cs @@ -14,7 +14,7 @@ partial class HDRenderPipeline void InitRayTracingAmbientOcclusion() { // Grab the kernels we need - m_RTAOApplyIntensityKernel = rayTracingResources.aoRaytracingCS.FindKernel("RTAOApplyIntensity"); + m_RTAOApplyIntensityKernel = rayTracingResources.aoRayTracingCS.FindKernel("RTAOApplyIntensity"); } private float EvaluateRayTracedAmbientOcclusionHistoryValidity(HDCamera hdCamera) @@ -112,7 +112,7 @@ TraceAmbientOcclusionResult TraceAO(RenderGraph renderGraph, HDCamera hdCamera, // Other parameters passData.raytracingCB = shaderVariablesRaytracing; - passData.aoShaderRT = rayTracingResources.aoRaytracingRT; + passData.aoShaderRT = rayTracingResources.aoRayTracingRT; passData.rayTracingAccelerationStructure = RequestAccelerationStructure(hdCamera); passData.ditheredTextureSet = GetBlueNoiseManager().DitheredTextureSet8SPP(); @@ -231,7 +231,7 @@ TextureHandle ComposeAO(RenderGraph renderGraph, HDCamera hdCamera, TextureHandl passData.actualWidth = hdCamera.actualWidth; passData.actualHeight = hdCamera.actualHeight; passData.viewCount = hdCamera.viewCount; - passData.aoShaderCS = rayTracingResources.aoRaytracingCS; + passData.aoShaderCS = rayTracingResources.aoRayTracingCS; passData.intensityKernel = m_RTAOApplyIntensityKernel; passData.outputTexture = builder.ReadWriteTexture(aoTexture); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingIndirectDiffuse.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingIndirectDiffuse.cs index 508950753d5..ac5845352dd 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingIndirectDiffuse.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingIndirectDiffuse.cs @@ -16,7 +16,7 @@ public partial class HDRenderPipeline void InitRayTracedIndirectDiffuse() { - ComputeShader indirectDiffuseShaderCS = rayTracingResources.indirectDiffuseRaytracingCS; + ComputeShader indirectDiffuseShaderCS = rayTracingResources.indirectDiffuseRayTracingCS; // Grab all the kernels we shall be using m_RaytracingIndirectDiffuseFullResKernel = indirectDiffuseShaderCS.FindKernel("RaytracingIndirectDiffuseFullRes"); @@ -78,8 +78,8 @@ DeferredLightingRTParameters PrepareIndirectDiffuseDeferredLightingRTParameters( // Shaders deferredParameters.rayMarchingCS = rayTracingResources.rayMarchingCS; - deferredParameters.gBufferRaytracingRT = rayTracingResources.gBufferRaytracingRT; - deferredParameters.deferredRaytracingCS = rayTracingResources.deferredRaytracingCS; + deferredParameters.gBufferRaytracingRT = rayTracingResources.gBufferRayTracingRT; + deferredParameters.deferredRaytracingCS = rayTracingResources.deferredRayTracingCS; deferredParameters.rayBinningCS = rayTracingResources.rayBinningCS; // Make a copy of the previous values that were defined in the CB @@ -134,7 +134,7 @@ TextureHandle DirGenRTGI(RenderGraph renderGraph, HDCamera hdCamera, GlobalIllum passData.fullResolution = fullResolution; // Grab the right kernel - passData.directionGenCS = rayTracingResources.indirectDiffuseRaytracingCS; + passData.directionGenCS = rayTracingResources.indirectDiffuseRayTracingCS; passData.dirGenKernel = fullResolution ? m_RaytracingIndirectDiffuseFullResKernel : m_RaytracingIndirectDiffuseHalfResKernel; // Grab the additional parameters @@ -215,7 +215,7 @@ TextureHandle UpscaleRTGI(RenderGraph renderGraph, HDCamera hdCamera, GlobalIllu passData.viewCount = hdCamera.viewCount; // Grab the right kernel - passData.upscaleCS = rayTracingResources.indirectDiffuseRaytracingCS; + passData.upscaleCS = rayTracingResources.indirectDiffuseRayTracingCS; passData.upscaleKernel = fullResolution ? m_IndirectDiffuseUpscaleFullResKernel : m_IndirectDiffuseUpscaleHalfResKernel; // Grab the additional parameters @@ -357,7 +357,7 @@ TextureHandle QualityRTGI(RenderGraph renderGraph, HDCamera hdCamera, TextureHan { if(m_Asset.currentPlatformRenderPipelineSettings.probeVolumeSHBands == ProbeVolumeSHBands.SphericalHarmonicsL1) { - passData.indirectDiffuseRT = rayTracingResources.indirectDiffuseRaytracingL1RT; + passData.indirectDiffuseRT = rayTracingResources.indirectDiffuseRayTracingL1RT; } else { @@ -366,7 +366,7 @@ TextureHandle QualityRTGI(RenderGraph renderGraph, HDCamera hdCamera, TextureHan } else { - passData.indirectDiffuseRT = rayTracingResources.indirectDiffuseRaytracingOffRT; + passData.indirectDiffuseRT = rayTracingResources.indirectDiffuseRayTracingOffRT; } passData.accelerationStructure = RequestAccelerationStructure(hdCamera); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingRecursiveRenderer.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingRecursiveRenderer.cs index 5b7a492cba5..2d247f4221b 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingRecursiveRenderer.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingRecursiveRenderer.cs @@ -122,7 +122,7 @@ TextureHandle RaytracingRecursiveRender(RenderGraph renderGraph, HDCamera hdCame // Other data passData.accelerationStructure = RequestAccelerationStructure(hdCamera); passData.lightCluster = RequestLightCluster(); - passData.recursiveRenderingRT = rayTracingResources.forwardRaytracing; + passData.recursiveRenderingRT = rayTracingResources.forwardRayTracing; passData.skyTexture = m_SkyManager.GetSkyReflection(hdCamera); passData.shaderVariablesRayTracingCB = m_ShaderVariablesRayTracingCB; passData.ditheredTextureSet = GetBlueNoiseManager().DitheredTextureSet8SPP(); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingReflection.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingReflection.cs index 08f49740c74..2111f38696d 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingReflection.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingReflection.cs @@ -22,7 +22,7 @@ public partial class HDRenderPipeline void InitRayTracedReflections() { - ComputeShader reflectionShaderCS = rayTracingResources.reflectionRaytracingCS; + ComputeShader reflectionShaderCS = rayTracingResources.reflectionRayTracingCS; ComputeShader reflectionBilateralFilterCS = rayTracingResources.reflectionBilateralFilterCS; // Grab all the kernels we shall be using @@ -147,7 +147,7 @@ TextureHandle DirGenRTR(RenderGraph renderGraph, HDCamera hdCamera, ScreenSpaceR passData.frameIndex = RayTracingFrameIndex(hdCamera, 32); // Grab the right kernel - passData.directionGenCS = rayTracingResources.reflectionRaytracingCS; + passData.directionGenCS = rayTracingResources.reflectionRayTracingCS; if (fullResolution) passData.dirGenKernel = transparent ? m_RaytracingReflectionsTransparentFullResKernel : m_RaytracingReflectionsFullResKernel; else @@ -423,8 +423,8 @@ DeferredLightingRTParameters PrepareReflectionDeferredLightingRTParameters(HDCam // Shaders deferredParameters.rayMarchingCS = rayTracingResources.rayMarchingCS; - deferredParameters.gBufferRaytracingRT = rayTracingResources.gBufferRaytracingRT; - deferredParameters.deferredRaytracingCS = rayTracingResources.deferredRaytracingCS; + deferredParameters.gBufferRaytracingRT = rayTracingResources.gBufferRayTracingRT; + deferredParameters.deferredRaytracingCS = rayTracingResources.deferredRayTracingCS; deferredParameters.rayBinningCS = rayTracingResources.rayBinningCS; // Make a copy of the previous values that were defined in the CB @@ -560,7 +560,7 @@ RayTracingReflectionsQualityOutput QualityRTR(RenderGraph renderGraph, HDCamera passData.ditheredTextureSet = GetBlueNoiseManager().DitheredTextureSet8SPP(); passData.shaderVariablesRayTracingCB = m_ShaderVariablesRayTracingCB; passData.skyTexture = m_SkyManager.GetSkyReflection(hdCamera); - passData.reflectionShader = rayTracingResources.reflectionRaytracingRT; + passData.reflectionShader = rayTracingResources.reflectionRayTracingRT; passData.depthBuffer = builder.ReadTexture(depthPyramid); passData.stencilBuffer = builder.ReadTexture(stencilBuffer); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingSubsurfaceScattering.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingSubsurfaceScattering.cs index 1c86d9e6c7a..415d8d7e8a4 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingSubsurfaceScattering.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/HDRenderPipeline.RaytracingSubsurfaceScattering.cs @@ -26,7 +26,7 @@ static RTHandle SubSurfaceHistoryBufferAllocatorFunction(string viewName, int fr void InitializeSubsurfaceScatteringRT() { ComputeShader rayTracingSubSurfaceCS = rayTracingResources.subSurfaceRayTracingCS; - ComputeShader deferredRayTracingCS = rayTracingResources.deferredRaytracingCS; + ComputeShader deferredRayTracingCS = rayTracingResources.deferredRayTracingCS; m_SSSClearTextureKernel = rayTracingSubSurfaceCS.FindKernel("ClearTexture"); m_RaytracingDiffuseDeferredKernel = deferredRayTracingCS.FindKernel("RaytracingDiffuseDeferred"); @@ -101,7 +101,7 @@ TextureHandle TraceRTSSS(RenderGraph renderGraph, HDCamera hdCamera, TextureHand // other required parameters passData.rayTracingSubSurfaceRT = rayTracingResources.subSurfaceRayTracingRT; passData.rayTracingSubSurfaceCS = rayTracingResources.subSurfaceRayTracingCS; - passData.deferredRayTracingCS = rayTracingResources.deferredRaytracingCS; + passData.deferredRayTracingCS = rayTracingResources.deferredRayTracingCS; passData.accelerationStructure = RequestAccelerationStructure(hdCamera); passData.lightCluster = RequestLightCluster(); passData.shaderVariablesRayTracingCB = m_ShaderVariablesRayTracingCB; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/ReblurDenoiser.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/ReblurDenoiser.cs index 1663f977e62..97027e37f2a 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/ReblurDenoiser.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Raytracing/ReblurDenoiser.cs @@ -77,7 +77,7 @@ public ReBlurDenoiser() { } - public void Init(HDRenderPipelineRayTracingResources rpRTResources) + public void Init(HDRPRayTracingResources rpRTResources) { // PreBlur m_PreBlurCS = rpRTResources.reblurPreBlurCS; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipelineResources/HDRPRayTracingResources.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipelineResources/HDRPRayTracingResources.cs new file mode 100644 index 00000000000..d931ca692ab --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipelineResources/HDRPRayTracingResources.cs @@ -0,0 +1,392 @@ +using System; +using System.ComponentModel; + +namespace UnityEngine.Rendering.HighDefinition +{ + [Serializable] + [HideInInspector] + [Category("Resources/Ray Tracing")] + [SupportedOnRenderPipeline(typeof(HDRenderPipelineAsset))] + class HDRPRayTracingResources : IRenderPipelineResources + { + public int version => 0; + + #region Reflection + [Header("Reflection")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Reflections/RaytracingReflections.raytrace")] + private RayTracingShader m_ReflectionRayTracingRT; + + public RayTracingShader reflectionRayTracingRT + { + get => m_ReflectionRayTracingRT; + set => this.SetValueAndNotify(ref m_ReflectionRayTracingRT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Reflections/RaytracingReflections.compute")] + private ComputeShader m_ReflectionRayTracingCS; + + public ComputeShader reflectionRayTracingCS + { + get => m_ReflectionRayTracingCS; + set => this.SetValueAndNotify(ref m_ReflectionRayTracingCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/RaytracingReflectionFilter.compute")] + private ComputeShader m_ReflectionBilateralFilterCS; + public ComputeShader reflectionBilateralFilterCS + { + get => m_ReflectionBilateralFilterCS; + set => this.SetValueAndNotify(ref m_ReflectionBilateralFilterCS, value); + } + #endregion + + #region Shadows + + [Header("Shadows")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Shadows/RaytracingShadow.raytrace")] + private RayTracingShader m_ShadowRayTracingRT; + public RayTracingShader shadowRayTracingRT + { + get => m_ShadowRayTracingRT; + set => this.SetValueAndNotify(ref m_ShadowRayTracingRT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Shadows/RayTracingContactShadow.raytrace")] + private RayTracingShader m_ContactShadowRayTracingRT; + public RayTracingShader contactShadowRayTracingRT + { + get => m_ContactShadowRayTracingRT; + set => this.SetValueAndNotify(ref m_ContactShadowRayTracingRT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Shadows/RaytracingShadow.compute")] + private ComputeShader m_ShadowRayTracingCS; + public ComputeShader shadowRayTracingCS + { + get => m_ShadowRayTracingCS; + set => this.SetValueAndNotify(ref m_ShadowRayTracingCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Shadows/RaytracingShadowFilter.compute")] + private ComputeShader m_ShadowFilterCS; + public ComputeShader shadowFilterCS + { + get => m_ShadowFilterCS; + set => this.SetValueAndNotify(ref m_ShadowFilterCS, value); + } + + #endregion + + #region Recursive tracing + [Header("Recursive tracing")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/RaytracingRenderer.raytrace")] + private RayTracingShader m_ForwardRayTracing; + public RayTracingShader forwardRayTracing + { + get => m_ForwardRayTracing; + set => this.SetValueAndNotify(ref m_ForwardRayTracing, value); + } + #endregion + + #region Light cluster + + [Header("Light cluster")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/RaytracingLightCluster.compute")] + private ComputeShader m_LightClusterBuildCS; + public ComputeShader lightClusterBuildCS + { + get => m_LightClusterBuildCS; + set => this.SetValueAndNotify(ref m_LightClusterBuildCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/DebugLightCluster.shader")] + private Shader m_LightClusterDebugS; + public Shader lightClusterDebugS + { + get => m_LightClusterDebugS; + set => this.SetValueAndNotify(ref m_LightClusterDebugS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/DebugLightCluster.compute")] + private ComputeShader m_LightClusterDebugCS; + public ComputeShader lightClusterDebugCS + { + get => m_LightClusterDebugCS; + set => this.SetValueAndNotify(ref m_LightClusterDebugCS, value); + } + #endregion + + #region Indirect Diffuse + [Header("Indirect Diffuse")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/IndirectDiffuse/RaytracingIndirectDiffuse_APVOff.raytrace")] + private RayTracingShader m_IndirectDiffuseRayTracingOffRT; + public RayTracingShader indirectDiffuseRayTracingOffRT + { + get => m_IndirectDiffuseRayTracingOffRT; + set => this.SetValueAndNotify(ref m_IndirectDiffuseRayTracingOffRT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/IndirectDiffuse/RaytracingIndirectDiffuse_APVL1.raytrace")] + private RayTracingShader m_IndirectDiffuseRayTracingL1RT; + public RayTracingShader indirectDiffuseRayTracingL1RT + { + get => m_IndirectDiffuseRayTracingL1RT; + set => this.SetValueAndNotify(ref m_IndirectDiffuseRayTracingL1RT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/IndirectDiffuse/RaytracingIndirectDiffuse_APVL2.raytrace")] + private RayTracingShader m_IndirectDiffuseRaytracingL2RT; + public RayTracingShader indirectDiffuseRaytracingL2RT + { + get => m_IndirectDiffuseRaytracingL2RT; + set => this.SetValueAndNotify(ref m_IndirectDiffuseRaytracingL2RT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/IndirectDiffuse/RaytracingIndirectDiffuse.compute")] + private ComputeShader m_IndirectDiffuseRayTracingCS; + public ComputeShader indirectDiffuseRayTracingCS + { + get => m_IndirectDiffuseRayTracingCS; + set => this.SetValueAndNotify(ref m_IndirectDiffuseRayTracingCS, value); + } + #endregion + + #region Ambient Occlusion + [Header("Ambient Occlusion")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/RaytracingAmbientOcclusion.raytrace")] + private RayTracingShader m_AoRayTracingRT; + public RayTracingShader aoRayTracingRT + { + get => m_AoRayTracingRT; + set => this.SetValueAndNotify(ref m_AoRayTracingRT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/RaytracingAmbientOcclusion.compute")] + private ComputeShader m_AoRayTracingCS; + public ComputeShader aoRayTracingCS + { + get => m_AoRayTracingCS; + set => this.SetValueAndNotify(ref m_AoRayTracingCS, value); + } + + #endregion + + #region Sub-Surface Scattering + [Header("Sub-Surface Scattering")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/RayTracingSubSurface.raytrace")] + private RayTracingShader m_SubSurfaceRayTracingRT; + public RayTracingShader subSurfaceRayTracingRT + { + get => m_SubSurfaceRayTracingRT; + set => this.SetValueAndNotify(ref m_SubSurfaceRayTracingRT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/SubSurface/RayTracingSubSurface.compute")] + private ComputeShader m_SubSurfaceRayTracingCS; + public ComputeShader subSurfaceRayTracingCS + { + get => m_SubSurfaceRayTracingCS; + set => this.SetValueAndNotify(ref m_SubSurfaceRayTracingCS, value); + } + + #endregion + + #region Denoising + [Header("Denoising")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/SimpleDenoiser.compute")] + private ComputeShader m_SimpleDenoiserCS; + public ComputeShader simpleDenoiserCS + { + get => m_SimpleDenoiserCS; + set => this.SetValueAndNotify(ref m_SimpleDenoiserCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReflectionDenoiser.compute")] + private ComputeShader m_ReflectionDenoiserCS; + public ComputeShader reflectionDenoiserCS + { + get => m_ReflectionDenoiserCS; + set => this.SetValueAndNotify(ref m_ReflectionDenoiserCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/DiffuseShadowDenoiser.compute")] + private ComputeShader m_DiffuseShadowDenoiserCS; + public ComputeShader diffuseShadowDenoiserCS + { + get => m_DiffuseShadowDenoiserCS; + set => this.SetValueAndNotify(ref m_DiffuseShadowDenoiserCS, value); + } + #endregion + + #region ReBlur + [Header("ReBlur")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReBlur/ReBlur_PreBlur.compute")] + private ComputeShader m_ReblurPreBlurCS; + public ComputeShader reblurPreBlurCS + { + get => m_ReblurPreBlurCS; + set => this.SetValueAndNotify(ref m_ReblurPreBlurCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReBlur/ReBlur_TemporalAccumulation.compute")] + private ComputeShader m_ReblurTemporalAccumulationCS; + public ComputeShader reblurTemporalAccumulationCS + { + get => m_ReblurTemporalAccumulationCS; + set => this.SetValueAndNotify(ref m_ReblurTemporalAccumulationCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReBlur/ReBlur_MipGeneration.compute")] + private ComputeShader m_ReblurMipGenerationCS; + public ComputeShader reblurMipGenerationCS + { + get => m_ReblurMipGenerationCS; + set => this.SetValueAndNotify(ref m_ReblurMipGenerationCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReBlur/ReBlur_HistoryFix.compute")] + private ComputeShader m_ReblurHistoryFixCS; + public ComputeShader reblurHistoryFixCS + { + get => m_ReblurHistoryFixCS; + set => this.SetValueAndNotify(ref m_ReblurHistoryFixCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReBlur/ReBlur_Blur.compute")] + private ComputeShader m_ReblurBlurCS; + public ComputeShader reblurBlurCS + { + get => m_ReblurBlurCS; + set => this.SetValueAndNotify(ref m_ReblurBlurCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReBlur/ReBlur_PostBlur.compute")] + private ComputeShader m_ReblurPostBlurCS; + public ComputeShader reblurPostBlurCS + { + get => m_ReblurPostBlurCS; + set => this.SetValueAndNotify(ref m_ReblurPostBlurCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReBlur/ReBlur_CopyHistory.compute")] + private ComputeShader m_ReblurCopyHistoryCS; + public ComputeShader reblurCopyHistoryCS + { + get => m_ReblurCopyHistoryCS; + set => this.SetValueAndNotify(ref m_ReblurCopyHistoryCS, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Denoising/ReBlur/ReBlur_TemporalStabilization.compute")] + private ComputeShader m_ReblurTemporalStabilizationCS; + public ComputeShader reblurTemporalStabilizationCS + { + get => m_ReblurTemporalStabilizationCS; + set => this.SetValueAndNotify(ref m_ReblurTemporalStabilizationCS, value); + } + #endregion + + #region Deferred Lighting + + [Header("Deferred Lighting")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Deferred/RaytracingGBuffer.raytrace")] + private RayTracingShader m_GBufferRayTracingRT; + public RayTracingShader gBufferRayTracingRT + { + get => m_GBufferRayTracingRT; + set => this.SetValueAndNotify(ref m_GBufferRayTracingRT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Deferred/RaytracingDeferred.compute")] + private ComputeShader m_DeferredRayTracingCS; + public ComputeShader deferredRayTracingCS + { + get => m_DeferredRayTracingCS; + set => this.SetValueAndNotify(ref m_DeferredRayTracingCS, value); + } + + + #endregion + + #region Path Tracing + [Header("Path Tracing")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/PathTracing/Shaders/PathTracingMain.raytrace")] + private RayTracingShader m_PathTracingRT; + public RayTracingShader pathTracingRT + { + get => m_PathTracingRT; + set => this.SetValueAndNotify(ref m_PathTracingRT, value); + } + + [SerializeField, ResourcePath("Runtime/RenderPipeline/PathTracing/Shaders/PathTracingSkySamplingData.compute")] + private ComputeShader m_PathTracingSkySamplingDataCS; + public ComputeShader pathTracingSkySamplingDataCS + { + get => m_PathTracingSkySamplingDataCS; + set => this.SetValueAndNotify(ref m_PathTracingSkySamplingDataCS, value); + } + + #endregion + + #region Ray Marching + [Header("Ray Marching")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/RayMarching.compute")] + private ComputeShader m_RayMarchingCS; + public ComputeShader rayMarchingCS + { + get => m_RayMarchingCS; + set => this.SetValueAndNotify(ref m_RayMarchingCS, value); + } + + #endregion + + #region Ray Binning + [Header("Ray Binning")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/Common/RayBinning.compute")] + private ComputeShader m_RayBinningCS; + public ComputeShader rayBinningCS + { + get => m_RayBinningCS; + set => this.SetValueAndNotify(ref m_RayBinningCS, value); + } + + + #endregion + + #region Ray count + [Header("Ray count")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/CountTracedRays.compute")] + private ComputeShader m_CountTracedRaysCS; + public ComputeShader countTracedRaysCS + { + get => m_CountTracedRaysCS; + set => this.SetValueAndNotify(ref m_CountTracedRaysCS, value); + } + + #endregion + + #region Filtering for reflections + [Header("Filtering for reflections")] + [SerializeField, ResourcePath("Runtime/RenderPipelineResources/Texture/ReflectionKernelMapping.png")] + public Texture2D m_ReflectionFilterMappingTexture; + + public Texture2D reflectionFilterMappingTexture + { + get => m_ReflectionFilterMappingTexture; + set => this.SetValueAndNotify(ref m_ReflectionFilterMappingTexture, value); + } + + #endregion + + #region Debug + [Header("Debug")] + [SerializeField, ResourcePath("Runtime/RenderPipeline/Raytracing/Shaders/RTASDebug.raytrace")] + public RayTracingShader m_RtasDebugRT; + + public RayTracingShader debugRTASRT + { + get => m_RtasDebugRT; + set => this.SetValueAndNotify(ref m_RtasDebugRT, value); + } + #endregion + } +} diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipelineResources/HDRPRayTracingResources.cs.meta b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipelineResources/HDRPRayTracingResources.cs.meta new file mode 100644 index 00000000000..7549a34d481 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipelineResources/HDRPRayTracingResources.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b1fc020655a4e1d4a8e540fe304f9b35 \ No newline at end of file From 5a8683c173f8dfd78004cc563a8f517cd0a5284d Mon Sep 17 00:00:00 2001 From: Pema Malling Date: Thu, 12 Oct 2023 03:53:27 +0000 Subject: [PATCH 07/27] Probe API revamp https://jira.unity3d.com/browse/LIGHT-1685 **FYI: I've already landed this PR in `light-transport/unified-dev`, and am now bringing it back to trunk. Keep in mind the code changes have already been reviewed once. The documentation changes however have not.** This PR makes some changes to the public light probe API, in response to some issues I found while working on a compute based probe integrator. The changes are listed below. - Renamed `WaitForAsyncOperation` and `IsAsyncOperationComplete` to `Wait` and `IsComplete`. The async nature is implicit. - Added `IDisposable` to a few interfaces that were missing it. - Made `BufferSlice` carry a type annotation, ie. `BufferSlice`. `BufferSlice.Offset` is now in _elements_, not in bytes. - Change `WriteBuffer` and `ReadBuffer` to take a `BufferSlice` instead of BufferID. This lets you write to and read from sections of buffers, which is more flexible. I added some helpers for if you want to use `BufferID` directly. I ended up having to make quite a few changes to documentation accordingly. --- .../ProbeVolume/ProbeVolumeLightingTab.cs | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs index 22abb97d5e2..3c957fcac57 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs @@ -1075,18 +1075,18 @@ static void BakeProbeVolumeOnly() var positionsBufferID = ctx.CreateBuffer(positionsBytes); using var positionsNative = new NativeArray(probePositions, Allocator.TempJob); ctx.WriteBuffer(positionsBufferID, positionsNative.Reinterpret(sizeOfFloat * 3)); - var positionsSlice = new BufferSlice(positionsBufferID, 0); + var positionsSlice = new BufferSlice(positionsBufferID, 0); LightmapParameters parameters = LightmapParameters.GetLightmapParametersForLightingSettings(lightingSettings); - integrator.Prepare(world, positionsSlice, parameters.pushoff, bounceCount); + integrator.Prepare(ctx, world, positionsSlice, parameters.pushoff, bounceCount); integrator.SetProgressReporter(progress); var positionOffset = 0; // can be used to bake portions/tiles of the full set of positions. var shBytes = (ulong)(sizeSHL2RGB * positionsLength); var directRadianceBufferId = ctx.CreateBuffer(shBytes); var indirectRadianceBufferId = ctx.CreateBuffer(shBytes); - var directRadianceSlice = new BufferSlice(directRadianceBufferId, 0); - var indirectRadianceSlice = new BufferSlice(indirectRadianceBufferId, 0); + var directRadianceSlice = new BufferSlice(directRadianceBufferId, 0); + var indirectRadianceSlice = new BufferSlice(indirectRadianceBufferId, 0); // Bake direct radiance. var integrationResult = integrator.IntegrateDirectRadiance(ctx, positionOffset, positionsLength, @@ -1101,7 +1101,7 @@ static void BakeProbeVolumeOnly() // Bake validity. var validityBytes = (ulong)(sizeOfFloat * positionsLength); var validityBufferId = ctx.CreateBuffer(validityBytes); - var validitySlice = new BufferSlice(validityBufferId, 0); + var validitySlice = new BufferSlice(validityBufferId, 0); var validityResult = integrator.IntegrateValidity(ctx, positionOffset, positionsLength, sampleCountValidity, validitySlice); Assert.AreEqual(IProbeIntegrator.ResultType.Success, validityResult.type, "IntegrateLightProbeValidity failed."); @@ -1114,7 +1114,7 @@ static void BakeProbeVolumeOnly() // Note that windowing can be controlled separately from de-ringing. // Windowing and de-ringing are done together to stay as close to legacy light probe baking behaviour as possible. var windowedDirectSHBufferId = ctx.CreateBuffer(shBytes); - var windowedDirectRadianceSlice = new BufferSlice(windowedDirectSHBufferId, 0); + var windowedDirectRadianceSlice = new BufferSlice(windowedDirectSHBufferId, 0); bool dering = true; // TODO: get this from LightProbeGroup.dering or APV UI? if (dering) { @@ -1128,7 +1128,7 @@ static void BakeProbeVolumeOnly() // Apply indirect intensity multiplier to indirect radiance. var boostedIndirectSHBufferId = ctx.CreateBuffer(shBytes); - var boostedIndirectRadianceSlice = new BufferSlice(boostedIndirectSHBufferId, 0); + var boostedIndirectRadianceSlice = new BufferSlice(boostedIndirectSHBufferId, 0); if (lightingSettings.indirectScale.Equals(1.0f) == false) { bool multiplyOk = postProcessor.ScaleSphericalHarmonicsL2(ctx, indirectRadianceSlice, boostedIndirectRadianceSlice, positionsLength, lightingSettings.indirectScale); @@ -1141,13 +1141,13 @@ static void BakeProbeVolumeOnly() // Combine direct and indirect radiance. var combinedSHBufferId = ctx.CreateBuffer(shBytes); - var combinedSHBufferSlice = new BufferSlice(combinedSHBufferId, 0); + var combinedSHBufferSlice = new BufferSlice(combinedSHBufferId, 0); bool addOk = postProcessor.AddSphericalHarmonicsL2(ctx, windowedDirectRadianceSlice, boostedIndirectRadianceSlice, combinedSHBufferSlice, positionsLength); Assert.IsTrue(addOk); // Convert radiance to irradiance and transform to the format expected by the Unity renderer. var irradianceBufferId = ctx.CreateBuffer(shBytes); - var irradianceSlice = new BufferSlice(irradianceBufferId, 0); + var irradianceSlice = new BufferSlice(irradianceBufferId, 0); bool convolvedOk = postProcessor.ConvolveRadianceToIrradiance(ctx, combinedSHBufferSlice, irradianceSlice, positionsLength); Assert.IsTrue(convolvedOk); @@ -1170,9 +1170,9 @@ static void BakeProbeVolumeOnly() Assert.IsTrue(flushOk); // Wait for read backs to complete. - bool waitResult = ctx.WaitForAsyncOperation(irradianceReadEvent); + bool waitResult = ctx.Wait(irradianceReadEvent); Debug.Assert(waitResult, "Failed to read irradiance from context."); - waitResult = ctx.WaitForAsyncOperation(validityReadEvent); + waitResult = ctx.Wait(validityReadEvent); Debug.Assert(waitResult, "Failed to read validity from context."); // Output data in result buffers is now ready, in CPU side memory, release all buffers. From 224e8319fcfb755b4cb0b566c4b2f982762be713 Mon Sep 17 00:00:00 2001 From: Manuele Bonanno Date: Thu, 12 Oct 2023 03:53:28 +0000 Subject: [PATCH 08/27] [URP] RenderGraph CopyDepth pass injection point location now matches the non-RenderGraph path The RG and non-RG paths CopyDepth pass location in the frame is different, the RG path one must match the non-RG path for consistency with projects ported from the old renderer. This PR moves the CopyDepth pass to be executed before the Skybox pass, which is the same behaviour as the non RG path. --- .../Runtime/UniversalRendererRenderGraph.cs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs index b3f3d6633e8..47fef934d60 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs @@ -891,13 +891,7 @@ private void OnMainRendering(RenderGraph renderGraph, ScriptableRenderContext co } // Custom passes come before built-in passes to keep parity with non-RG code path where custom passes are added before renderer Setup. - RecordCustomRenderGraphPasses(renderGraph, RenderPassEvent.AfterRenderingOpaques, RenderPassEvent.BeforeRenderingSkybox); - - if (cameraData.camera.clearFlags == CameraClearFlags.Skybox && cameraData.renderType != CameraRenderType.Overlay) - { - if (RenderSettings.skybox != null || (cameraData.camera.TryGetComponent(out Skybox cameraSkybox) && cameraSkybox.material != null)) - m_DrawSkyboxPass.Render(renderGraph, frameData, context, resourceData.activeColorTexture, resourceData.activeDepthTexture); - } + RecordCustomRenderGraphPasses(renderGraph, RenderPassEvent.AfterRenderingOpaques); if (requiresDepthCopyPass && m_CopyDepthMode != CopyDepthMode.AfterTransparents) { @@ -905,6 +899,14 @@ private void OnMainRendering(RenderGraph renderGraph, ScriptableRenderContext co m_CopyDepthPass.Render(renderGraph, frameData, cameraDepthTexture, resourceData.activeDepthTexture, true); } + RecordCustomRenderGraphPasses(renderGraph, RenderPassEvent.BeforeRenderingSkybox); + + if (cameraData.camera.clearFlags == CameraClearFlags.Skybox && cameraData.renderType != CameraRenderType.Overlay) + { + if (RenderSettings.skybox != null || (cameraData.camera.TryGetComponent(out Skybox cameraSkybox) && cameraSkybox.material != null)) + m_DrawSkyboxPass.Render(renderGraph, frameData, context, resourceData.activeColorTexture, resourceData.activeDepthTexture); + } + if (requiresColorCopyPass) { TextureHandle activeColor = resourceData.activeColorTexture; From 64af37742953ef47c3359a268289d3a6915d988e Mon Sep 17 00:00:00 2001 From: Ludovic Theobald Date: Thu, 12 Oct 2023 03:53:31 +0000 Subject: [PATCH 09/27] [VFX][UUM-51509] Fix Spawner Callbacks used with instancing This PR fixes issues when using spawner callbacks in instanced effects. Only the first instance was receiving the correct attributes from the spawner. --- .../VFXCustomSpawnerGameObjectPosition.cs | 25 +++++++ ...VFXCustomSpawnerGameObjectPosition.cs.meta | 3 + .../Tests/Runtime/VFXSpawnerTests.cs | 70 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXCustomSpawnerGameObjectPosition.cs create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXCustomSpawnerGameObjectPosition.cs.meta diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXCustomSpawnerGameObjectPosition.cs b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXCustomSpawnerGameObjectPosition.cs new file mode 100644 index 00000000000..daf2e50fdca --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXCustomSpawnerGameObjectPosition.cs @@ -0,0 +1,25 @@ +using System; +using UnityEngine; +using UnityEngine.VFX; + +namespace UnityEditor.VFX.Test +{ + class VFXCustomSpawnerGameObjectPosition : VFXSpawnerCallbacks + { + + public override void OnPlay(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) + { + } + + static private int s_gameObjectPositionID = Shader.PropertyToID("gameObjectPosition"); + + public override void OnUpdate(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) + { + state.vfxEventAttribute.SetVector3(s_gameObjectPositionID, vfxComponent.gameObject.transform.position); + } + + public override void OnStop(VFXSpawnerState state, VFXExpressionValues vfxValues, VisualEffect vfxComponent) + { + } + } +} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXCustomSpawnerGameObjectPosition.cs.meta b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXCustomSpawnerGameObjectPosition.cs.meta new file mode 100644 index 00000000000..9d960c9eeb1 --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXCustomSpawnerGameObjectPosition.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 73422304751f43ad8a547eb88a4bb5cc +timeCreated: 1696517435 \ No newline at end of file diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXSpawnerTests.cs b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXSpawnerTests.cs index d9484348784..666066159a3 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXSpawnerTests.cs +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXSpawnerTests.cs @@ -1699,6 +1699,76 @@ public IEnumerator Create_Two_Event_Attribute_With_Different_Layout_And_Try_Copy GameObject.DestroyImmediate(gameObj_A); GameObject.DestroyImmediate(gameObj_B); } + + [UnityTest, Description("Regression test UUM-51509")] + public IEnumerator Create_SpawnerCallback_Instanced() + { + const string customAttributeName = "gameObjectPosition"; + VFXGraph graph = VFXTestCommon.MakeTemporaryGraph(); + + var eventStart = ScriptableObject.CreateInstance(); + eventStart.eventName = "OnPlay"; + + var spawnerContext = ScriptableObject.CreateInstance(); + var blockConstantRate = ScriptableObject.CreateInstance(); + var spawnerInit = ScriptableObject.CreateInstance(); + var spawnerOutput = ScriptableObject.CreateInstance(); + + var slotCount = blockConstantRate.GetInputSlot(0); + slotCount.value = 10.0f; + + graph.TryAddCustomAttribute(customAttributeName, VFXValueType.Float3, "", false, out _); + + var customSpawnerBlock = ScriptableObject.CreateInstance(); + customSpawnerBlock.SetSettingValue("m_customType", new SerializableType(typeof(VFXCustomSpawnerGameObjectPosition))); + spawnerContext.AddChild(blockConstantRate); + spawnerContext.AddChild(customSpawnerBlock); + + var blockAttributeDesc = VFXLibrary.GetBlocks().FirstOrDefault(o => o.modelType == typeof(Block.SetAttribute)); + var blockAttribute = blockAttributeDesc.CreateInstance(); + blockAttribute.SetSettingValue("attribute", customAttributeName); + blockAttribute.SetSettingValue("Source", SetAttribute.ValueSource.Source); + spawnerInit.AddChild(blockAttribute); + + graph.AddChild(eventStart); + graph.AddChild(spawnerContext); + graph.AddChild(spawnerInit); + graph.AddChild(spawnerOutput); + + spawnerContext.LinkFrom(eventStart, 0, 0); + spawnerInit.LinkFrom(spawnerContext); + spawnerOutput.LinkFrom(spawnerInit); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(graph)); + + + GameObject gameObjectAtZero = new GameObject("GameObjectAtZero"); + gameObjectAtZero.transform.position = Vector3.zero; + VisualEffect vfxComponent0 = gameObjectAtZero.AddComponent(); + vfxComponent0.visualEffectAsset = graph.visualEffectResource.asset; + + GameObject gameObjectAtOne = new GameObject("GameObjectAtOne"); + gameObjectAtOne.transform.position = Vector3.one; + VisualEffect vfxComponent1 = gameObjectAtOne.AddComponent(); + vfxComponent1.visualEffectAsset = graph.visualEffectResource.asset; + + int maxFrame = 512; + while (vfxComponent0.culled && vfxComponent1.culled && --maxFrame > 0) + { + yield return null; + } + Assert.IsTrue(maxFrame > 0); + yield return null; + + var state0 = VFXTestCommon.GetSpawnerState(vfxComponent0, 0); + var state1 = VFXTestCommon.GetSpawnerState(vfxComponent1, 0); + + Vector3 readAttribute0 = state0.vfxEventAttribute.GetVector3(customAttributeName); + Vector3 readAttribute1 = state1.vfxEventAttribute.GetVector3(customAttributeName); + + Assert.AreEqual( Vector3.zero, readAttribute0); + Assert.AreEqual( Vector3.one, readAttribute1); + } } } #endif From 536f82b4c8e76b56ac39d6e7e4e5d2bdca005f84 Mon Sep 17 00:00:00 2001 From: Julien Ignace Date: Thu, 12 Oct 2023 03:53:33 +0000 Subject: [PATCH 10/27] Fixed layered lit displacement. Fixed Layered Lit Displacement --- .../Runtime/Material/Lit/BaseLitAPI.cs | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/BaseLitAPI.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/BaseLitAPI.cs index 01f0f313b85..219fa9be7f6 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/BaseLitAPI.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/BaseLitAPI.cs @@ -54,23 +54,6 @@ static public void SetupBaseLitKeywords(Material material) bool enableDisplacement = material.HasProperty(kDisplacementMode) && (GetFilteredDisplacementMode(material) != DisplacementMode.None); - // Displacement mapping requires a height map. - if (enableDisplacement) - { - int layerCount = material.HasProperty(kLayerCount) ? material.GetInt(kLayerCount) : 1; - - // If the layerCount is 1, then it means that the property we're fetching is not from a layered material - // thus it doesn't have a postfix - string[] postfixes = (layerCount > 1) ? new[] { "0", "1", "2", "3" } : new[] { "" }; - - for (int i = 0; i < layerCount; i++) - { - string kHeightMapN = string.Format("{0}{1}", kHeightMap, postfixes[i]); - - enableDisplacement = enableDisplacement && material.HasProperty(kHeightMapN) && (material.GetTexture(kHeightMapN) != null); - } - } - if (enableDisplacement) { var displacementMode = GetFilteredDisplacementMode(material); From f9cd627e21148f854e5955c828aafb5293f34af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Sideravi=C4=8Dius?= Date: Thu, 12 Oct 2023 03:53:36 +0000 Subject: [PATCH 11/27] [URP] Fix screenspace shadows clashing when depth priming is forced depth copy after depth priming happens after screenspace shadows and it should be vice versa due to the fact, that both events are the same. this PR increases the event of screenspace shadows by one just to guarantee the correct sequencing of the passes --- .../Runtime/RendererFeatures/ScreenSpaceShadows.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/ScreenSpaceShadows.cs b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/ScreenSpaceShadows.cs index 05114483720..3ed216b76ac 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/ScreenSpaceShadows.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/ScreenSpaceShadows.cs @@ -66,7 +66,7 @@ public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingD m_SSShadowsPass.renderPassEvent = isDeferredRenderingMode ? RenderPassEvent.AfterRenderingGbuffer - : RenderPassEvent.AfterRenderingPrePasses; + : RenderPassEvent.AfterRenderingPrePasses + 1; // We add 1 to ensure this happens after depth priming depth copy pass that might be scheduled renderer.EnqueuePass(m_SSShadowsPass); renderer.EnqueuePass(m_SSShadowsPostPass); From f44618c2894d0908b919f4233527ec149e0b920d Mon Sep 17 00:00:00 2001 From: Thomas Zeng Date: Thu, 12 Oct 2023 18:02:54 +0000 Subject: [PATCH 12/27] Disable SPI after rendering the render request. Jira: https://jira.unity3d.com/browse/UUM-49454 Fixed XR SPI is not disabled after processing the render request. --- .../Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs index 9a1a9fff5d4..0866aa1833b 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs @@ -406,6 +406,9 @@ void RecordRenderGraph(RenderRequest renderRequest, RenderGizmos(m_RenderGraph, hdCamera, GizmoSubset.PostImageEffects); + // Stop XR single pass before rendering screenspace UI + StopXRSinglePass(m_RenderGraph, hdCamera); + RenderScreenSpaceOverlayUI(m_RenderGraph, hdCamera, backBuffer); } } From 2c1c707da4eeaae3fb0bc7a7e30fcbd6e3665d26 Mon Sep 17 00:00:00 2001 From: Kenny Tan Date: Thu, 12 Oct 2023 18:03:00 +0000 Subject: [PATCH 13/27] Rendergraph 2D Optimizations - Remove Clear Commands Rendergraph Adoption POI https://jira.unity3d.com/browse/POI-817 Optimizations - Remove clear commands - Decrease number of passes - Merged passes together - Remove SetGlobalTextures --- .../Runtime/2D/Passes/Utility/LayerUtility.cs | 38 +++++ .../2D/Passes/Utility/RendererLighting.cs | 11 +- .../Runtime/2D/Renderer2D.cs | 5 - .../Runtime/2D/Renderer2DData.cs | 6 - .../2D/Rendergraph/CustomClear2DPass.cs | 148 ------------------ .../2D/Rendergraph/CustomClear2DPass.cs.meta | 2 - .../Runtime/2D/Rendergraph/DrawLight2DPass.cs | 64 +++----- .../2D/Rendergraph/DrawNormal2DPass.cs | 5 +- .../2D/Rendergraph/DrawRenderer2DPass.cs | 32 ++-- .../2D/Rendergraph/DrawShadow2DPass.cs | 56 +++---- .../2D/Rendergraph/Renderer2DRendergraph.cs | 97 +++++++----- .../FrameData/Universal2DResourceData.cs | 39 +++-- .../Shaders/2D/CustomClear2D.shader | 76 --------- .../Shaders/2D/CustomClear2D.shader.meta | 9 -- .../Shaders/2D/Light2D.shader | 3 +- 15 files changed, 190 insertions(+), 401 deletions(-) delete mode 100644 Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CustomClear2DPass.cs delete mode 100644 Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CustomClear2DPass.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.universal/Shaders/2D/CustomClear2D.shader delete mode 100644 Packages/com.unity.render-pipelines.universal/Shaders/2D/CustomClear2D.shader.meta diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Utility/LayerUtility.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Utility/LayerUtility.cs index 7ab4a7c9426..6e20afe8996 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Utility/LayerUtility.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Utility/LayerUtility.cs @@ -20,6 +20,8 @@ internal struct LayerBatch public List shadowLights; public List shadowCasters; + internal int[] activeBlendStylesIndices; + public void InitRTIds(int index) { for (var i = 0; i < 4; i++) @@ -176,6 +178,8 @@ public static LayerBatch[] CalculateBatches(ILight2DCullResult lightCullResult, i = upperLayerInBatch + 1; } + SetupActiveBlendStyles(); + return s_LayerBatches; } @@ -193,5 +197,39 @@ public static void GetFilterSettings(Renderer2DData rendererData, ref LayerBatch filterSettings.sortingLayerRange = new SortingLayerRange(layerBatch.layerRange.lowerBound, upperBound); } + + static void SetupActiveBlendStyles() + { + // Calculate active blend styles to save on total light textures allocated + for (int i = 0; i < s_LayerBatches.Length; ++i) + { + ref var layer = ref s_LayerBatches[i]; + + // Determine number of blend styles used + int size = 0; + for (var blendStyleIndex = 0; blendStyleIndex < RendererLighting.k_ShapeLightTextureIDs.Length; blendStyleIndex++) + { + var blendStyleMask = (uint)(1 << blendStyleIndex); + var blendStyleUsed = (layer.lightStats.blendStylesUsed & blendStyleMask) > 0; + + if (blendStyleUsed) + size++; + } + + if (layer.activeBlendStylesIndices == null || layer.activeBlendStylesIndices.Length != size) + layer.activeBlendStylesIndices = new int[size]; + + // Save indices so we don't have to copy the whole Light2DBlendStyle struct + var index = 0; + for (var blendStyleIndex = 0; blendStyleIndex < RendererLighting.k_ShapeLightTextureIDs.Length; blendStyleIndex++) + { + var blendStyleMask = (uint)(1 << blendStyleIndex); + var blendStyleUsed = (layer.lightStats.blendStylesUsed & blendStyleMask) > 0; + + if (blendStyleUsed) + layer.activeBlendStylesIndices[index++] = blendStyleIndex; + } + } + } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Utility/RendererLighting.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Utility/RendererLighting.cs index b76309934bd..eb500ac4b37 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Utility/RendererLighting.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Utility/RendererLighting.cs @@ -437,11 +437,11 @@ internal static void SetLightShaderGlobals(Renderer2DData rendererData, RasterCo } } - internal static void SetLightShaderGlobals(ref Light2DBlendStyle[] lightBlendStyles, RasterCommandBuffer cmd) + internal static void SetLightShaderGlobals(RasterCommandBuffer cmd, Light2DBlendStyle[] lightBlendStyles, int[] blendStyleIndices) { - for (var i = 0; i < lightBlendStyles.Length; i++) + for (var i = 0; i < blendStyleIndices.Length; i++) { - var blendStyle = lightBlendStyles[i]; + var blendStyle = lightBlendStyles[blendStyleIndices[i]]; if (i >= k_BlendFactorsPropIDs.Length) break; @@ -616,10 +616,10 @@ internal static bool SetCookieShaderGlobals(CommandBuffer cmd, Light2D light) return light.useCookieSprite; } - internal static void SetCookieShaderProperties(Light2D light, Material material) + internal static void SetCookieShaderProperties(Light2D light, MaterialPropertyBlock properties) { if (light.useCookieSprite && light.m_CookieSpriteTextureHandle.IsValid()) - material.SetTexture(light.lightType == Light2D.LightType.Sprite ? k_CookieTexID : k_PointLightCookieTexID, light.m_CookieSpriteTextureHandle); + properties.SetTexture(light.lightType == Light2D.LightType.Sprite ? k_CookieTexID : k_PointLightCookieTexID, light.m_CookieSpriteTextureHandle); } public static void ClearDirtyLighting(this IRenderPass2D pass, CommandBuffer cmd, uint blendStylesUsed) @@ -784,7 +784,6 @@ private static Material CreateLightMaterial(Renderer2DData rendererData, Light2D } } - if (isPoint && light.lightCookieSprite != null && light.lightCookieSprite.texture != null) material.EnableKeyword(k_UsePointLightCookiesKeyword); 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 90b6ff43fa6..dc9fa235665 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs @@ -44,7 +44,6 @@ internal sealed partial class Renderer2D : ScriptableRenderer Material m_BlitMaterial; Material m_BlitHDRMaterial; Material m_SamplingMaterial; - Material m_ClearMaterial; Renderer2DData m_Renderer2DData; @@ -69,8 +68,6 @@ public Renderer2D(Renderer2DData data) : base(data) m_BlitMaterial = CoreUtils.CreateEngineMaterial(data.coreBlitPS); m_BlitHDRMaterial = CoreUtils.CreateEngineMaterial(data.blitHDROverlay); m_SamplingMaterial = CoreUtils.CreateEngineMaterial(data.samplingShader); - m_ClearMaterial = CoreUtils.CreateEngineMaterial(data.customClearShader); - CustomClear2D.Initialize(m_ClearMaterial); m_Render2DLightingPass = new Render2DLightingPass(data, m_BlitMaterial, m_SamplingMaterial); // we should determine why clearing the camera target is set so late in the events... sounds like it could be earlier @@ -138,9 +135,7 @@ protected override void Dispose(bool disposing) CoreUtils.Destroy(m_BlitMaterial); CoreUtils.Destroy(m_BlitHDRMaterial); CoreUtils.Destroy(m_SamplingMaterial); - CoreUtils.Destroy(m_ClearMaterial); - CustomClear2D.Cleanup(); Blitter.Cleanup(); CleanupRenderGraphResources(); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2DData.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2DData.cs index 7b9698e266c..19205b68b93 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2DData.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2DData.cs @@ -88,9 +88,6 @@ internal enum Renderer2DDefaultMaterialType [SerializeField, Reload("Shaders/2D/Shadow2D-Unshadow-Geometry.shader")] Shader m_GeometryUnshadowShader = null; - [SerializeField, Reload("Shaders/2D/CustomClear2D.shader")] - Shader m_CustomClearShader = null; - [SerializeField, Reload("Shaders/Utils/FallbackError.shader")] Shader m_FallbackErrorShader; @@ -124,7 +121,6 @@ internal enum Renderer2DDefaultMaterialType internal Shader geometryShadowShader => m_GeometryShadowShader; internal Shader geometryUnshadowShader => m_GeometryUnshadowShader; internal Shader projectedShadowShader => m_ProjectedShadowShader; - internal Shader customClearShader => m_CustomClearShader; internal TransparencySortMode transparencySortMode => m_TransparencySortMode; internal Vector3 transparencySortAxis => m_TransparencySortAxis; internal uint lightRenderTextureMemoryBudget => m_MaxLightRenderTextureCount; @@ -201,8 +197,6 @@ protected override void OnEnable() internal RTHandle normalsRenderTarget; internal RTHandle cameraSortingLayerRenderTarget; - - // this shouldn've been in RenderingData along with other cull results internal ILight2DCullResult lightCullResult { get; set; } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CustomClear2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CustomClear2DPass.cs deleted file mode 100644 index 9388644aeff..00000000000 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CustomClear2DPass.cs +++ /dev/null @@ -1,148 +0,0 @@ -using UnityEngine.Experimental.Rendering; -using UnityEngine.Experimental.Rendering.RenderGraphModule; - -namespace UnityEngine.Rendering.Universal -{ - internal class CustomClear2D - { - static readonly string k_CustomClearPass = "CustomClear"; - static readonly string k_ClearColor = "_ClearColor"; - - private static readonly ProfilingSampler m_ProfilingSampler = new ProfilingSampler(k_CustomClearPass); - static Material m_ClearMaterial; - static Mesh s_TriangleMesh; - static MaterialPropertyBlock s_PropertyBlock = new MaterialPropertyBlock(); - - static Vector4[] clearColors = new Vector4[4]; - static Color[] intermediateColor = new Color[1]; - - internal static bool useCustomClear - { - get => SystemInfo.graphicsDeviceType == GraphicsDeviceType.Vulkan || - SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D12 || - SystemInfo.graphicsDeviceType == GraphicsDeviceType.Metal; - } - - internal static bool isMetalArm64 - { - get => SystemInfo.graphicsDeviceType == GraphicsDeviceType.Metal && - System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture == System.Runtime.InteropServices.Architecture.Arm64; - } - - internal static void Cleanup() - { - CoreUtils.Destroy(s_TriangleMesh); - } - - internal static void Initialize(Material clearMaterial) - { - m_ClearMaterial = clearMaterial; - - if (SystemInfo.graphicsShaderLevel < 30) - { - float nearClipZ = -1; - if (SystemInfo.usesReversedZBuffer) - nearClipZ = 1; - - if (!s_TriangleMesh) - { - s_TriangleMesh = new Mesh(); - s_TriangleMesh.vertices = GetFullScreenTriangleVertexPosition(nearClipZ); - s_TriangleMesh.uv = GetFullScreenTriangleTexCoord(); - s_TriangleMesh.triangles = new int[3] { 0, 1, 2 }; - } - - // Should match Common.hlsl - static Vector3[] GetFullScreenTriangleVertexPosition(float z /*= UNITY_NEAR_CLIP_VALUE*/) - { - var r = new Vector3[3]; - for (int i = 0; i < 3; i++) - { - Vector2 uv = new Vector2((i << 1) & 2, i & 2); - r[i] = new Vector3(uv.x * 2.0f - 1.0f, uv.y * 2.0f - 1.0f, z); - } - return r; - } - - // Should match Common.hlsl - static Vector2[] GetFullScreenTriangleTexCoord() - { - var r = new Vector2[3]; - for (int i = 0; i < 3; i++) - { - if (SystemInfo.graphicsUVStartsAtTop) - r[i] = new Vector2((i << 1) & 2, 1.0f - (i & 2)); - else - r[i] = new Vector2((i << 1) & 2, i & 2); - } - return r; - } - } - } - - internal static void Clear(RasterCommandBuffer cmd, Color color) - { - intermediateColor[0] = color; - Clear(cmd, intermediateColor); - } - - internal static void Clear(RasterCommandBuffer cmd, Color[] color) - { - if (useCustomClear) - Internal_Clear(cmd, color); - else - cmd.ClearRenderTarget(RTClearFlags.Color, color, 1, 0); - } - - private static void Internal_Clear(RasterCommandBuffer cmd, Color[] colors) - { - using (new ProfilingScope(cmd, m_ProfilingSampler)) - { - for (int i = 0; i < colors.Length; ++i) - clearColors[i] = colors[i]; - - int shaderPass = 0; - s_PropertyBlock.SetVectorArray(k_ClearColor, clearColors); - - if (SystemInfo.graphicsShaderLevel < 30) - cmd.DrawMesh(s_TriangleMesh, Matrix4x4.identity, m_ClearMaterial, 0, shaderPass, s_PropertyBlock); - else - cmd.DrawProcedural(Matrix4x4.identity, m_ClearMaterial, shaderPass, MeshTopology.Triangles, 3, 1, s_PropertyBlock); - } - } - - private class PassData - { - internal RTClearFlags clearFlags; - internal Color clearColor; - } - - internal static void RasterPassClear(RenderGraph graph, in TextureHandle colorHandle, in TextureHandle depthHandle, RTClearFlags clearFlags, Color clearColor) - { - if (clearFlags == RTClearFlags.None) - return; - - Debug.Assert(colorHandle.IsValid(), "Trying to clear an invalid render color target"); - - if (clearFlags != RTClearFlags.Color) - Debug.Assert(depthHandle.IsValid(), "Trying to clear an invalid depth target"); - - using (var builder = graph.AddRasterRenderPass("Clear Target", out var passData, m_ProfilingSampler)) - { - builder.UseTextureFragment(colorHandle, 0); - if (depthHandle.IsValid()) - builder.UseTextureFragmentDepth(depthHandle); - - passData.clearFlags = clearFlags; - passData.clearColor = clearColor; - - builder.AllowPassCulling(false); - - builder.SetRenderFunc((PassData data, RasterGraphContext context) => - { - context.cmd.ClearRenderTarget(data.clearFlags, data.clearColor, 1, 0); - }); - } - } - } -} diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CustomClear2DPass.cs.meta b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CustomClear2DPass.cs.meta deleted file mode 100644 index 59a159dc0d8..00000000000 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CustomClear2DPass.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 4814638baf9436a4cad958cec9e58cf8 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs index 03155de07c5..00cf0f07adc 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs @@ -16,7 +16,6 @@ internal class DrawLight2DPass : ScriptableRenderPass internal static readonly string k_ShadowMapID = "_ShadowTex"; internal static readonly string k_LightLookupID = "_LightLookup"; internal static readonly string k_FalloffLookupID = "_FalloffLookup"; - internal static Color[] clearColors = new Color[RendererLighting.k_ShapeLightTextureIDs.Length]; TextureHandle[] intermediateTexture = new TextureHandle[1]; internal static RTHandle m_FallOffRTHandle = null; @@ -24,6 +23,8 @@ internal class DrawLight2DPass : ScriptableRenderPass private int lightLookupInstanceID; private int fallOffLookupInstanceID; + internal static MaterialPropertyBlock s_PropertyBlock = new MaterialPropertyBlock(); + public void Setup(RenderGraph renderGraph, ref Renderer2DData rendererData) { // Reallocate external texture if needed @@ -63,41 +64,20 @@ private static void Execute(RasterCommandBuffer cmd, PassData passData, ref Laye { cmd.SetGlobalFloat(k_InverseHDREmulationScaleID, 1.0f / passData.rendererData.hdrEmulationScale); - var lightBlendStyles = passData.rendererData.lightBlendStyles; - - // Clear light textures - if (passData.clear) - { - for (var i = 0; i < clearColors.Length; i++) - { - if ((layerBatch.lightStats.blendStylesUsed & (uint)(1 << i)) == 0) - continue; - - Light2DManager.GetGlobalColor(layerBatch.startLayerID, i, out clearColors[i]); - } - - CustomClear2D.Clear(cmd, clearColors); - } - - for (var blendStyleIndex = 0; blendStyleIndex < lightBlendStyles.Length; blendStyleIndex++) + for (var i = 0; i < layerBatch.activeBlendStylesIndices.Length; ++i) { - var blendStyleMask = (uint)(1 << blendStyleIndex); - var blendStyleUsed = (layerBatch.lightStats.blendStylesUsed & blendStyleMask) > 0; - - if (!blendStyleUsed) - continue; - - var blendOpName = lightBlendStyles[blendStyleIndex].name; + var blendStyleIndex = layerBatch.activeBlendStylesIndices[i]; + var blendOpName = passData.rendererData.lightBlendStyles[blendStyleIndex].name; cmd.BeginSample(blendOpName); if (!passData.isVolumetric) - RendererLighting.EnableBlendStyle(cmd, blendStyleIndex, blendStyleUsed); + RendererLighting.EnableBlendStyle(cmd, i, true); var lights = passData.layerBatch.lights; - for (int i = 0; i < lights.Count; ++i) + for (int j = 0; j < lights.Count; ++j) { - var light = lights[i]; + var light = lights[j]; // Check if light is valid if (light == null || @@ -129,13 +109,13 @@ private static void Execute(RasterCommandBuffer cmd, PassData passData, ref Laye lightMaterial.SetTexture(k_FalloffLookupID, passData.fallOffLookUp); if (passData.layerBatch.lightStats.useNormalMap) - lightMaterial.SetTexture(k_NormalMapID, passData.normalMap); + s_PropertyBlock.SetTexture(k_NormalMapID, passData.normalMap); if (passData.layerBatch.lightStats.useShadows) - lightMaterial.SetTexture(k_ShadowMapID, passData.shadowMap); + s_PropertyBlock.SetTexture(k_ShadowMapID, passData.shadowMap); if (!passData.isVolumetric || (passData.isVolumetric && light.volumetricEnabled)) - RendererLighting.SetCookieShaderProperties(light, lightMaterial); + RendererLighting.SetCookieShaderProperties(light, s_PropertyBlock); // Set shader global properties RendererLighting.SetPerLightShaderGlobals(cmd, light, slotIndex, passData.isVolumetric, false, LightBatch.isBatchingSupported); @@ -150,11 +130,11 @@ private static void Execute(RasterCommandBuffer cmd, PassData passData, ref Laye } else { - cmd.DrawMesh(lightMesh, light.GetMatrix(), lightMaterial); + cmd.DrawMesh(lightMesh, light.GetMatrix(), lightMaterial, 0, 0, s_PropertyBlock); } } - RendererLighting.EnableBlendStyle(cmd, blendStyleIndex, false); + RendererLighting.EnableBlendStyle(cmd, i, false); cmd.EndSample(blendOpName); } } @@ -164,7 +144,6 @@ class PassData internal LayerBatch layerBatch; internal Renderer2DData rendererData; internal bool isVolumetric; - internal bool clear; internal TextureHandle normalMap; internal TextureHandle shadowMap; @@ -172,13 +151,7 @@ class PassData internal TextureHandle lightLookUp; } - public void Render(RenderGraph graph, Renderer2DData rendererData, ref LayerBatch layerBatch, ContextContainer frameData, TextureHandle lightTexture, TextureHandle depthTexture, bool isVolumetric = false) - { - intermediateTexture[0] = lightTexture; - Render(graph, rendererData, ref layerBatch, frameData, intermediateTexture, depthTexture, isVolumetric); - } - - public void Render(RenderGraph graph, Renderer2DData rendererData, ref LayerBatch layerBatch, ContextContainer frameData, TextureHandle[] lightTextures, TextureHandle depthTexture, bool isVolumetric = false, bool clear = false) + public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData rendererData, ref LayerBatch layerBatch, int batchIndex, bool isVolumetric = false) { Universal2DResourceData resourceData = frameData.Get(); @@ -188,13 +161,17 @@ public void Render(RenderGraph graph, Renderer2DData rendererData, ref LayerBatc using (var builder = graph.AddRasterRenderPass(!isVolumetric ? k_LightPass : k_LightVolumetricPass, out var passData, !isVolumetric ? m_ProfilingSampler : m_ProfilingSamplerVolume)) { + intermediateTexture[0] = resourceData.activeColorTexture; + var lightTextures = !isVolumetric ? resourceData.lightTextures[batchIndex] : intermediateTexture; + var depthTexture = !isVolumetric ? resourceData.intermediateDepth : resourceData.activeDepthTexture; + for (var i = 0; i < lightTextures.Length; i++) builder.UseTextureFragment(lightTextures[i], i); builder.UseTextureFragmentDepth(depthTexture); if (layerBatch.lightStats.useNormalMap) - builder.UseTexture(resourceData.normalsTexture); + builder.UseTexture(resourceData.normalsTexture[batchIndex]); if (layerBatch.lightStats.useShadows) builder.UseTexture(resourceData.shadowsTexture); @@ -211,8 +188,7 @@ public void Render(RenderGraph graph, Renderer2DData rendererData, ref LayerBatc passData.layerBatch = layerBatch; passData.rendererData = rendererData; passData.isVolumetric = isVolumetric; - passData.clear = clear; - passData.normalMap = layerBatch.lightStats.useNormalMap ? resourceData.normalsTexture : TextureHandle.nullHandle; + passData.normalMap = layerBatch.lightStats.useNormalMap ? resourceData.normalsTexture[batchIndex] : TextureHandle.nullHandle; passData.shadowMap = layerBatch.lightStats.useShadows ? resourceData.shadowsTexture : TextureHandle.nullHandle; passData.fallOffLookUp = graph.ImportTexture(m_FallOffRTHandle); passData.lightLookUp = graph.ImportTexture(m_LightLookupRTHandle); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawNormal2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawNormal2DPass.cs index bad04246a35..d8712da139f 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawNormal2DPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawNormal2DPass.cs @@ -23,11 +23,10 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData private static void Execute(RasterCommandBuffer cmd, PassData passData) { - CustomClear2D.Clear(cmd, RendererLighting.k_NormalClearColor); cmd.DrawRendererList(passData.rendererList); } - public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData rendererData, ref LayerBatch layerBatch) + public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData rendererData, ref LayerBatch layerBatch, int batchIndex) { if (!layerBatch.lightStats.useNormalMap) return; @@ -51,7 +50,7 @@ public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData drawSettings.sortingSettings = sortSettings; builder.AllowPassCulling(false); - builder.UseTextureFragment(resourceData.normalsTexture, 0); + builder.UseTextureFragment(resourceData.normalsTexture[batchIndex], 0); builder.UseTextureFragmentDepth(resourceData.intermediateDepth, IBaseRenderGraphBuilder.AccessFlags.Write); var param = new RendererListParams(renderingData.cullResults, drawSettings, filterSettings); 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 777b675466e..6339b18f7ba 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 @@ -30,11 +30,11 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData private static void Execute(RasterGraphContext context, PassData passData) { var cmd = context.cmd; - var blendStylesCount = passData.lightBlendStyles.Length; + var blendStylesCount = passData.blendStyleIndices.Length; cmd.SetGlobalFloat(k_HDREmulationScaleID, passData.hdrEmulationScale); cmd.SetGlobalColor(k_RendererColorID, Color.white); - RendererLighting.SetLightShaderGlobals(ref passData.lightBlendStyles, cmd); + RendererLighting.SetLightShaderGlobals(cmd, passData.lightBlendStyles, passData.blendStyleIndices); #if UNITY_EDITOR cmd.SetGlobalTexture(k_DefaultWhiteTextureID, context.defaultResources.whiteTexture); @@ -47,10 +47,7 @@ private static void Execute(RasterGraphContext context, PassData passData) for (var blendStyleIndex = 0; blendStyleIndex < blendStylesCount; blendStyleIndex++) { cmd.SetGlobalTexture(RendererLighting.k_ShapeLightTextureIDs[blendStyleIndex], passData.lightTextures[blendStyleIndex]); - - var blendStyleMask = (uint)(1 << blendStyleIndex); - var blendStyleUsed = (passData.layerBlendStylesUsed & blendStyleMask) > 0; - RendererLighting.EnableBlendStyle(cmd, blendStyleIndex, blendStyleUsed); + RendererLighting.EnableBlendStyle(cmd, blendStyleIndex, true); } } else @@ -75,10 +72,10 @@ private static void Execute(RasterGraphContext context, PassData passData) class PassData { internal Light2DBlendStyle[] lightBlendStyles; + internal int[] blendStyleIndices; internal float hdrEmulationScale; internal bool isSceneLit; internal bool layerUseLights; - internal uint layerBlendStylesUsed; internal TextureHandle[] lightTextures; internal RendererListHandle rendererList; @@ -87,19 +84,20 @@ class PassData #endif } - public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData rendererData, ref LayerBatch layerBatch, ref FilteringSettings filterSettings, in TextureHandle cameraColorAttachment, in TextureHandle cameraDepthAttachment, in TextureHandle[] lightTextures) + public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData rendererData, ref LayerBatch layerBatch, int batchIndex, ref FilteringSettings filterSettings) { UniversalRenderingData renderingData = frameData.Get(); UniversalCameraData cameraData = frameData.Get(); UniversalLightData lightData = frameData.Get(); + Universal2DResourceData resourceData = frameData.Get(); using (var builder = graph.AddRasterRenderPass(k_RenderPass, out var passData, m_ProfilingSampler)) { passData.lightBlendStyles = rendererData.lightBlendStyles; + passData.blendStyleIndices = layerBatch.activeBlendStylesIndices; passData.hdrEmulationScale = rendererData.hdrEmulationScale; passData.isSceneLit = rendererData.lightCullResult.IsSceneLit(); passData.layerUseLights = layerBatch.lightStats.useLights; - passData.layerBlendStylesUsed = layerBatch.lightStats.blendStylesUsed; #if UNITY_EDITOR passData.isLitView = true; @@ -124,15 +122,17 @@ public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData if (layerBatch.lightStats.useLights) { - passData.lightTextures = lightTextures; - for (var i = 0; i < lightTextures.Length; i++) - { - builder.UseTexture(lightTextures[i]); - } + passData.lightTextures = resourceData.lightTextures[batchIndex]; + for (var i = 0; i < passData.lightTextures.Length; i++) + builder.UseTexture(passData.lightTextures[i]); } - builder.UseTextureFragment(cameraColorAttachment, 0); - builder.UseTextureFragmentDepth(cameraDepthAttachment, IBaseRenderGraphBuilder.AccessFlags.Read); + IBaseRenderGraphBuilder.AccessFlags accessFlags = IBaseRenderGraphBuilder.AccessFlags.Read; + if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Metal) + accessFlags = IBaseRenderGraphBuilder.AccessFlags.Write; + + builder.UseTextureFragment(resourceData.activeColorTexture, 0); + builder.UseTextureFragmentDepth(resourceData.activeDepthTexture, accessFlags); builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawShadow2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawShadow2DPass.cs index ce94ff5e60f..7b4829aaae2 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawShadow2DPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawShadow2DPass.cs @@ -38,7 +38,7 @@ private static void ExecuteShadowPass(LowLevelCommandBuffer cmd, PassData passDa } } - private static void ExecuteLightPass(LowLevelCommandBuffer cmd, PassData passData, ref LayerBatch layerBatch, Light2D light, bool clear) + private static void ExecuteLightPass(LowLevelCommandBuffer cmd, PassData passData, ref LayerBatch layerBatch, Light2D light) { using (new ProfilingScope(cmd, m_ExecuteLightProfilingSampler)) { @@ -52,30 +52,10 @@ private static void ExecuteLightPass(LowLevelCommandBuffer cmd, PassData passDat cmd.SetGlobalFloat(DrawLight2DPass.k_InverseHDREmulationScaleID, 1.0f / passData.rendererData.hdrEmulationScale); - var lightBlendStyles = passData.rendererData.lightBlendStyles; - - // Clear light textures - if (clear) + for (var i = 0; i < layerBatch.activeBlendStylesIndices.Length; i++) { - for (var i = 0; i < DrawLight2DPass.clearColors.Length; i++) - { - if ((layerBatch.lightStats.blendStylesUsed & (uint)(1 << i)) == 0) - continue; - - Light2DManager.GetGlobalColor(layerBatch.startLayerID, i, out DrawLight2DPass.clearColors[i]); - } - - cmd.ClearRenderTarget(RTClearFlags.Color, DrawLight2DPass.clearColors, 1, 0); - } + var blendStyleIndex = layerBatch.activeBlendStylesIndices[i]; - for (var blendStyleIndex = 0; blendStyleIndex < lightBlendStyles.Length; blendStyleIndex++) - { - var blendStyleMask = (uint)(1 << blendStyleIndex); - var blendStyleUsed = (layerBatch.lightStats.blendStylesUsed & blendStyleMask) > 0; - - if (!blendStyleUsed) - continue; - // Check if light is valid if (light == null || light.lightType == Light2D.LightType.Global || @@ -89,11 +69,11 @@ private static void ExecuteLightPass(LowLevelCommandBuffer cmd, PassData passDat layerBatch.endLayerValue != light.GetTopMostLitLayer())) continue; - var blendOpName = lightBlendStyles[blendStyleIndex].name; + var blendOpName = passData.rendererData.lightBlendStyles[blendStyleIndex].name; cmd.BeginSample(blendOpName); if (!passData.isVolumetric) - RendererLighting.EnableBlendStyle(cmd, blendStyleIndex, blendStyleUsed); + RendererLighting.EnableBlendStyle(cmd, i, true); var lightMaterial = passData.rendererData.GetLightMaterial(light, passData.isVolumetric); var lightMesh = light.lightMesh; @@ -112,13 +92,13 @@ private static void ExecuteLightPass(LowLevelCommandBuffer cmd, PassData passDat lightMaterial.SetTexture(DrawLight2DPass.k_FalloffLookupID, passData.fallOffLookUp); if (passData.layerBatch.lightStats.useNormalMap) - lightMaterial.SetTexture(DrawLight2DPass.k_NormalMapID, passData.normalMap); + DrawLight2DPass.s_PropertyBlock.SetTexture(DrawLight2DPass.k_NormalMapID, passData.normalMap); if (passData.layerBatch.lightStats.useShadows) - lightMaterial.SetTexture(DrawLight2DPass.k_ShadowMapID, passData.shadowTarget); + DrawLight2DPass.s_PropertyBlock.SetTexture(DrawLight2DPass.k_ShadowMapID, passData.shadowTarget); if (!passData.isVolumetric || (passData.isVolumetric && light.volumetricEnabled)) - RendererLighting.SetCookieShaderProperties(light, lightMaterial); + RendererLighting.SetCookieShaderProperties(light, DrawLight2DPass.s_PropertyBlock); // Set shader global properties RendererLighting.SetPerLightShaderGlobals(cmd, light, slotIndex, passData.isVolumetric, true, LightBatch.isBatchingSupported); @@ -133,10 +113,10 @@ private static void ExecuteLightPass(LowLevelCommandBuffer cmd, PassData passDat } else { - cmd.DrawMesh(lightMesh, light.GetMatrix(), lightMaterial); + cmd.DrawMesh(lightMesh, light.GetMatrix(), lightMaterial, 0, 0, DrawLight2DPass.s_PropertyBlock); } - RendererLighting.EnableBlendStyle(cmd, blendStyleIndex, false); + RendererLighting.EnableBlendStyle(cmd, i, false); cmd.EndSample(blendOpName); } } @@ -158,7 +138,7 @@ class PassData internal RenderTargetIdentifier[] lightTexturesRT; } - public void Render(RenderGraph graph, Renderer2DData rendererData, ref LayerBatch layerBatch, ContextContainer frameData, bool isVolumetric = false) + public void Render(RenderGraph graph, ContextContainer frameData, Renderer2DData rendererData, ref LayerBatch layerBatch, int batchIndex, bool isVolumetric = false) { Universal2DResourceData resourceData = frameData.Get(); @@ -171,32 +151,32 @@ public void Render(RenderGraph graph, Renderer2DData rendererData, ref LayerBatc using (var builder = graph.AddLowLevelPass(!isVolumetric ? k_ShadowPass : k_ShadowVolumetricPass, out var passData, !isVolumetric ? m_ProfilingSampler : m_ProfilingSamplerVolume)) { - if (passData.lightTexturesRT == null) - passData.lightTexturesRT = new RenderTargetIdentifier[RendererLighting.k_ShapeLightTextureIDs.Length]; - passData.layerBatch = layerBatch; passData.rendererData = rendererData; passData.isVolumetric = isVolumetric; passData.shadowTarget = shadowTexture; passData.shadowDepth = depthTexture; passData.lightDepth = !isVolumetric ? resourceData.intermediateDepth : resourceData.activeDepthTexture; - passData.normalMap = layerBatch.lightStats.useNormalMap ? resourceData.normalsTexture : TextureHandle.nullHandle; + passData.normalMap = layerBatch.lightStats.useNormalMap ? resourceData.normalsTexture[batchIndex] : TextureHandle.nullHandle; passData.fallOffLookUp = graph.ImportTexture(DrawLight2DPass.m_FallOffRTHandle); passData.lightLookUp = graph.ImportTexture(DrawLight2DPass.m_LightLookupRTHandle); if (!isVolumetric) - passData.lightTextures = resourceData.lightTextures; + passData.lightTextures = resourceData.lightTextures[batchIndex]; else { intermediateTexture[0] = resourceData.activeColorTexture; passData.lightTextures = intermediateTexture; } + if (passData.lightTexturesRT == null || passData.lightTexturesRT.Length != passData.lightTextures.Length) + passData.lightTexturesRT = new RenderTargetIdentifier[passData.lightTextures.Length]; + for (int i = 0; i < passData.lightTextures.Length; ++i) builder.UseTexture(passData.lightTextures[i], IBaseRenderGraphBuilder.AccessFlags.Write); if (layerBatch.lightStats.useNormalMap) - builder.UseTexture(resourceData.normalsTexture); + builder.UseTexture(resourceData.normalsTexture[batchIndex]); builder.UseTexture(shadowTexture, IBaseRenderGraphBuilder.AccessFlags.Write); builder.UseTexture(depthTexture, IBaseRenderGraphBuilder.AccessFlags.Write); @@ -222,7 +202,7 @@ public void Render(RenderGraph graph, Renderer2DData rendererData, ref LayerBatc { var light = data.layerBatch.shadowLights[i]; ExecuteShadowPass(context.cmd, data, light); - ExecuteLightPass(context.cmd, data, ref data.layerBatch, light, i == 0 && !data.isVolumetric); + ExecuteLightPass(context.cmd, data, ref data.layerBatch, light); } }); } 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 ff08818bbfc..a3dae3e9163 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 @@ -35,7 +35,6 @@ internal enum Renderer2DResource internal sealed partial class Renderer2D { - TextureHandle[] m_LightTextureHandles = new TextureHandle[RendererLighting.k_ShapeLightTextureIDs.Length]; RTHandle m_RenderGraphCameraColorHandle; RTHandle m_RenderGraphCameraDepthHandle; RTHandle m_RenderGraphBackbufferColorHandle; @@ -47,6 +46,9 @@ internal sealed partial class Renderer2D DrawShadow2DPass m_ShadowPass = new DrawShadow2DPass(); DrawRenderer2DPass m_RendererPass = new DrawRenderer2DPass(); + LayerBatch[] m_LayerBatches; + int m_BatchCount; + bool ppcUpscaleRT = false; private struct ImportResourceSummary @@ -158,11 +160,32 @@ ImportResourceSummary GetImportResourceSummary(RenderGraph renderGraph, Universa return output; } + void InitializeLayerBatches() + { + Universal2DResourceData resourceData = frameData.Get(); + + m_LayerBatches = LayerUtility.CalculateBatches(m_Renderer2DData.lightCullResult, out m_BatchCount); + + // Initialize textures dependent on batch size + if (resourceData.normalsTexture.Length != m_BatchCount) + resourceData.normalsTexture = new TextureHandle[m_BatchCount]; + + if (resourceData.lightTextures.Length != m_BatchCount) + resourceData.lightTextures = new TextureHandle[m_BatchCount][]; + + // Initialize light textures based on active blend styles to save on resources + for (int i = 0; i < resourceData.lightTextures.Length; ++i) + { + if (resourceData.lightTextures[i] == null || resourceData.lightTextures[i].Length != m_LayerBatches[i].activeBlendStylesIndices.Length) + resourceData.lightTextures[i] = new TextureHandle[m_LayerBatches[i].activeBlendStylesIndices.Length]; + } + } + void CreateResources(RenderGraph renderGraph) { Universal2DResourceData resourceData = frameData.Get(); UniversalCameraData cameraData = frameData.Get(); - + ref var cameraTargetDescriptor = ref cameraData.cameraTargetDescriptor; var cameraTargetFilterMode = FilterMode.Bilinear; bool lastCameraInTheStack = cameraData.resolveFinalTarget; @@ -230,12 +253,20 @@ void CreateResources(RenderGraph renderGraph) desc.autoGenerateMips = false; desc.depthBufferBits = 0; - resourceData.normalsTexture = UniversalRenderer.CreateRenderGraphTexture(renderGraph, desc, "_NormalMap", true); + for (int i = 0; i < resourceData.normalsTexture.Length; ++i) + resourceData.normalsTexture[i] = UniversalRenderer.CreateRenderGraphTexture(renderGraph, desc, "_NormalMap", true, RendererLighting.k_NormalClearColor); - for (var i = 0; i < RendererLighting.k_ShapeLightTextureIDs.Length; i++) - m_LightTextureHandles[i] = UniversalRenderer.CreateRenderGraphTexture(renderGraph, desc, RendererLighting.k_ShapeLightTextureIDs[i], false, FilterMode.Bilinear); + for (int i = 0; i < resourceData.lightTextures.Length; ++i) + { + for (var j = 0; j < m_LayerBatches[i].activeBlendStylesIndices.Length; ++j) + { + var index = m_LayerBatches[i].activeBlendStylesIndices[j]; + if (!Light2DManager.GetGlobalColor(m_LayerBatches[i].startLayerID, index, out var clearColor)) + clearColor = Color.black; - resourceData.lightTextures = m_LightTextureHandles; + resourceData.lightTextures[i][j] = UniversalRenderer.CreateRenderGraphTexture(renderGraph, desc, RendererLighting.k_ShapeLightTextureIDs[j], true, clearColor, FilterMode.Bilinear); + } + } } // Shadow desc @@ -372,6 +403,8 @@ internal override void OnBeginRenderGraphFrame() internal override void OnRecordRenderGraph(RenderGraph renderGraph, ScriptableRenderContext context) { + InitializeLayerBatches(); + CreateResources(renderGraph); SetupRenderGraphCameraProperties(renderGraph, false); @@ -416,13 +449,6 @@ private void OnMainRendering(RenderGraph renderGraph) Universal2DResourceData resourceData = frameData.Get(); UniversalCameraData cameraData = frameData.Get(); - RTClearFlags clearFlags = RTClearFlags.None; - - if (cameraData.renderType == CameraRenderType.Base) - clearFlags = RTClearFlags.All; - else if (cameraData.clearDepth) - clearFlags = RTClearFlags.Depth; - // Color Grading LUT bool requiredColorGradingLutPass = cameraData.postProcessEnabled && m_PostProcessPasses.isCreated; @@ -438,31 +464,32 @@ private void OnMainRendering(RenderGraph renderGraph) RendererLighting.lightBatch.Reset(); // Main render passes - var layerBatches = LayerUtility.CalculateBatches(m_Renderer2DData.lightCullResult, out var batchCount); - for (var i = 0; i < batchCount; i++) - { - ref var layerBatch = ref layerBatches[i]; - // Normal Pass - m_NormalPass.Render(renderGraph, frameData, m_Renderer2DData, ref layerBatch); + // Normal Pass + for (var i = 0; i < m_BatchCount; i++) + m_NormalPass.Render(renderGraph, frameData, m_Renderer2DData, ref m_LayerBatches[i], i); - // Shadow Pass (TODO: Optimize RT swapping between shadow and light textures) - m_ShadowPass.Render(renderGraph, m_Renderer2DData, ref layerBatch, frameData); + // Shadow Pass (TODO: Optimize RT swapping between shadow and light textures) + for (var i = 0; i < m_BatchCount; i++) + m_ShadowPass.Render(renderGraph, frameData, m_Renderer2DData, ref m_LayerBatches[i], i); - // Shadow pass already clears textures - bool clearLightTextures = !layerBatch.lightStats.useShadows; + // Light Pass + for (var i = 0; i < m_BatchCount; i++) + m_LightPass.Render(renderGraph, frameData, m_Renderer2DData, ref m_LayerBatches[i], i); - // Light Pass - m_LightPass.Render(renderGraph, m_Renderer2DData, ref layerBatch, frameData, m_LightTextureHandles, resourceData.intermediateDepth, clear: clearLightTextures); + // Default Render Pass + for (var i = 0; i < m_BatchCount; i++) + { + ref var layerBatch = ref m_LayerBatches[i]; - // Clear camera targets for Metal Arm64 platform - if (CustomClear2D.isMetalArm64 && i == 0) - CustomClear2D.RasterPassClear(renderGraph, resourceData.activeColorTexture, resourceData.activeDepthTexture, clearFlags, cameraData.backgroundColor); + LayerUtility.GetFilterSettings(m_Renderer2DData, ref m_LayerBatches[i], cameraSortingLayerBoundsIndex, out var filterSettings); + m_RendererPass.Render(renderGraph, frameData, m_Renderer2DData, ref layerBatch, i, ref filterSettings); - LayerUtility.GetFilterSettings(m_Renderer2DData, ref layerBatch, cameraSortingLayerBoundsIndex, out var filterSettings); + // Shadow Volumetric Pass + m_ShadowPass.Render(renderGraph, frameData, m_Renderer2DData, ref m_LayerBatches[i], i, true); - // Default Render Pass - m_RendererPass.Render(renderGraph, frameData, m_Renderer2DData, ref layerBatch, ref filterSettings, resourceData.activeColorTexture, resourceData.activeDepthTexture, m_LightTextureHandles); + // Light Volumetric Pass + m_LightPass.Render(renderGraph, frameData, m_Renderer2DData, ref m_LayerBatches[i], i, true); // Camera Sorting Layer Pass if (m_Renderer2DData.useCameraSortingLayerTexture) @@ -473,19 +500,13 @@ private void OnMainRendering(RenderGraph renderGraph) m_CopyCameraSortingLayerPass.Render(renderGraph, resourceData.activeColorTexture, resourceData.cameraSortingLayerTexture); filterSettings.sortingLayerRange = new SortingLayerRange((short)(cameraSortingLayerBoundsIndex + 1), layerBatch.layerRange.upperBound); - m_RendererPass.Render(renderGraph, frameData, m_Renderer2DData, ref layerBatch, ref filterSettings, resourceData.activeColorTexture, resourceData.activeDepthTexture, m_LightTextureHandles); + m_RendererPass.Render(renderGraph, frameData, m_Renderer2DData, ref layerBatch, i, ref filterSettings); } else if (cameraSortingLayerBoundsIndex == layerBatch.layerRange.upperBound) { m_CopyCameraSortingLayerPass.Render(renderGraph, resourceData.activeColorTexture, resourceData.cameraSortingLayerTexture); } } - - // Shadow Volumetric Pass - m_ShadowPass.Render(renderGraph, m_Renderer2DData, ref layerBatch, frameData, true); - - // Light Volumetric Pass - m_LightPass.Render(renderGraph, m_Renderer2DData, ref layerBatch, frameData, resourceData.activeColorTexture, resourceData.activeDepthTexture, isVolumetric: true); } bool shouldRenderUI = cameraData.rendersOverlayUI; diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/Universal2DResourceData.cs b/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/Universal2DResourceData.cs index b907c9525de..8afac9dd1a9 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/Universal2DResourceData.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/Universal2DResourceData.cs @@ -64,6 +64,26 @@ internal TextureHandle activeDepthTexture } } + TextureHandle[][] CheckAndGetTextureHandle(ref TextureHandle[][] handle) + { + if (!CheckAndWarnAboutAccessibility()) + return new TextureHandle[][] { new TextureHandle[] { TextureHandle.nullHandle } }; + + return handle; + } + + void CheckAndSetTextureHandle(ref TextureHandle[][] handle, TextureHandle[][] newHandle) + { + if (!CheckAndWarnAboutAccessibility()) + return; + + if (handle == null || handle.Length != newHandle.Length) + handle = new TextureHandle[newHandle.Length][]; + + for (int i = 0; i < newHandle.Length; i++) + handle[i] = newHandle[i]; + } + /// /// The backbuffer color used to render directly to screen. All passes can write to it depending on frame setup. /// @@ -105,19 +125,19 @@ internal TextureHandle intermediateDepth } private TextureHandle _intermediateDepth; - internal TextureHandle[] lightTextures + internal TextureHandle[][] lightTextures { get => CheckAndGetTextureHandle(ref _lightTextures); set => CheckAndSetTextureHandle(ref _lightTextures, value); } - private TextureHandle[] _lightTextures = new TextureHandle[RenderGraphUtils.LightTextureSize]; + private TextureHandle[][] _lightTextures = new TextureHandle[0][]; - internal TextureHandle normalsTexture + internal TextureHandle[] normalsTexture { get => CheckAndGetTextureHandle(ref _cameraNormalsTexture); set => CheckAndSetTextureHandle(ref _cameraNormalsTexture, value); } - private TextureHandle _cameraNormalsTexture; + private TextureHandle[] _cameraNormalsTexture = new TextureHandle[0]; internal TextureHandle shadowsTexture { @@ -185,15 +205,14 @@ internal TextureHandle overlayUITexture } private TextureHandle _overlayUITexture; - /// public override void Reset() { + _intermediateDepth = TextureHandle.nullHandle; _backBufferColor = TextureHandle.nullHandle; _backBufferDepth = TextureHandle.nullHandle; _cameraColor = TextureHandle.nullHandle; _cameraDepth = TextureHandle.nullHandle; - _cameraNormalsTexture = TextureHandle.nullHandle; _shadowsTexture = TextureHandle.nullHandle; _shadowsDepth = TextureHandle.nullHandle; _upscaleTexture = TextureHandle.nullHandle; @@ -203,10 +222,12 @@ public override void Reset() _afterPostProcessColor = TextureHandle.nullHandle; _overlayUITexture = TextureHandle.nullHandle; + for (int i = 0; i < _cameraNormalsTexture.Length; i++) + _cameraNormalsTexture[i] = TextureHandle.nullHandle; + for (int i = 0; i < _lightTextures.Length; i++) - _lightTextures[i] = TextureHandle.nullHandle; + for (int j = 0; j < _lightTextures[i].Length; j++) + _lightTextures[i][j] = TextureHandle.nullHandle; } - - } } diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/CustomClear2D.shader b/Packages/com.unity.render-pipelines.universal/Shaders/2D/CustomClear2D.shader deleted file mode 100644 index 4e6bc054ddd..00000000000 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/CustomClear2D.shader +++ /dev/null @@ -1,76 +0,0 @@ -Shader "Hidden/2D/CustomClear" -{ - HLSLINCLUDE - - //#pragma target 4.5 - //#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch - #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" - #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DynamicScaling.hlsl" - #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" - - float4 _BlitScaleBias; - half4 _ClearColor[4]; - - struct Attributes - { - uint vertexID : SV_VertexID; - UNITY_VERTEX_INPUT_INSTANCE_ID - }; - - struct Varyings - { - float4 positionCS : SV_POSITION; - float2 texcoord : TEXCOORD0; - UNITY_VERTEX_OUTPUT_STEREO - }; - - Varyings Vert(Attributes input) - { - Varyings output; - UNITY_SETUP_INSTANCE_ID(input); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); - output.positionCS = GetFullScreenTriangleVertexPosition(input.vertexID); - output.texcoord = GetFullScreenTriangleTexCoord(input.vertexID); - return output; - } - - void ClearColor(Varyings input, - out half4 buffer0 : SV_Target0, - out half4 buffer1 : SV_Target1, - out half4 buffer2 : SV_Target2, - out half4 buffer3 : SV_Target3) - { - buffer0 = _ClearColor[0]; - buffer1 = _ClearColor[1]; - buffer2 = _ClearColor[2]; - buffer3 = _ClearColor[3]; - } - - ENDHLSL - - SubShader - { - Tags{ "RenderPipeline" = "UniversalPipeline" } - - // 0: Clear color, alpha and stencil to zero - Pass - { - ZWrite Off ZTest Always Blend Off Cull Off - Name "ClearColor" - Stencil - { - WriteMask 255 - Ref 0 - Comp Always - Pass Replace - } - - HLSLPROGRAM - #pragma vertex Vert - #pragma fragment ClearColor - ENDHLSL - } - } - - Fallback Off -} diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/CustomClear2D.shader.meta b/Packages/com.unity.render-pipelines.universal/Shaders/2D/CustomClear2D.shader.meta deleted file mode 100644 index 1d70d33ea0d..00000000000 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/CustomClear2D.shader.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 3f8babf5b863f184b9f0a372c0a633ab -ShaderImporter: - externalObjects: {} - defaultTextures: [] - nonModifiableTextures: [] - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Light2D.shader b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Light2D.shader index 8f2a9b7b834..f65f834f214 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Light2D.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Light2D.shader @@ -13,8 +13,9 @@ Shader "Hidden/Light2D" Pass { - Blend[_SrcBlend][_DstBlend] + Blend [_SrcBlend][_DstBlend] ZWrite Off + ZTest [_HandleZTest] Cull Off HLSLPROGRAM From eb09441b2d92ce8c42f1803b2eaf3b06737f6ae1 Mon Sep 17 00:00:00 2001 From: Manuele Bonanno Date: Thu, 12 Oct 2023 18:03:02 +0000 Subject: [PATCH 14/27] [URP] Render Graph rendering debugger fixes Rendering debugger pixel validation is broken when RG is enabled. If postprocessing is disabled, the Map Overlays are broken as well. This PR fixes all the remaining issues and rendering debugger should now be fully functional in the RG path. --- .../Runtime/Utilities/CoreUtils.cs | 13 +++++++++++++ .../Runtime/FrameData/UniversalResourceData.cs | 8 ++++---- .../Runtime/Passes/PostProcessPassRenderGraph.cs | 3 +++ .../Runtime/UniversalRendererDebug.cs | 2 ++ .../Runtime/UniversalRendererRenderGraph.cs | 5 +++++ 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Utilities/CoreUtils.cs b/Packages/com.unity.render-pipelines.core/Runtime/Utilities/CoreUtils.cs index 6d354c370ee..0ffbe2ec79c 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Utilities/CoreUtils.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Utilities/CoreUtils.cs @@ -950,6 +950,19 @@ public static void DrawFullScreen(CommandBuffer commandBuffer, Material material commandBuffer.DrawProcedural(Matrix4x4.identity, material, shaderPassId, MeshTopology.Triangles, 3, 1, properties); } + /// + /// Draws a full screen triangle. + /// + /// RasterCommandBuffer used for rendering commands. + /// Material used on the full screen triangle. + /// Optional material property block for the provided material. + /// Index of the material pass. + public static void DrawFullScreen(RasterCommandBuffer commandBuffer, Material material, + MaterialPropertyBlock properties = null, int shaderPassId = 0) + { + DrawFullScreen(commandBuffer.m_WrappedCommandBuffer, material, properties, shaderPassId); + } + /// /// Draws a full screen triangle. /// diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalResourceData.cs b/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalResourceData.cs index 730cd4b9d49..a8ccbadcbe6 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalResourceData.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalResourceData.cs @@ -233,23 +233,23 @@ public TextureHandle internalColorLut /// the backbuffer color as standard output because the later cannot be sampled back (or may not be in HDR format). /// If used, DebugHandler will perform the blit from DebugScreenTexture to BackBufferColor. ///
- public TextureHandle debugScreenColor + internal TextureHandle debugScreenColor { get => CheckAndGetTextureHandle(ref _debugScreenColor); set => CheckAndSetTextureHandle(ref _debugScreenColor, value); } - private TextureHandle _debugScreenColor; + internal TextureHandle _debugScreenColor; /// /// Depth output of post-process passes (uberPost and finalPost) when HDR debug views are enabled. It replaces /// the backbuffer depth as standard output because the later cannot be sampled back. /// - public TextureHandle debugScreenDepth + internal TextureHandle debugScreenDepth { get => CheckAndGetTextureHandle(ref _debugScreenDepth); set => CheckAndSetTextureHandle(ref _debugScreenDepth, value); } - private TextureHandle _debugScreenDepth; + internal TextureHandle _debugScreenDepth; /// /// After Post Process Color. Stores the contents of the main color target after the post processing passes. diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs index 86597346b28..885b8bea206 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs @@ -1445,6 +1445,7 @@ public void RenderFinalPassRenderGraph(RenderGraph renderGraph, ContextContainer } DebugHandler debugHandler = GetActiveDebugHandler(cameraData); bool resolveToDebugScreen = debugHandler != null && debugHandler.WriteToDebugScreenTexture(cameraData.resolveFinalTarget); + // TODO: this uses renderingData.commandBuffer in the RenderGraph path!! Fix it to run in a proper RenderGraph pass debugHandler?.UpdateShaderGlobalPropertiesForFinalValidationPass(cmd, cameraData, !m_HasFinalPass && !resolveToDebugScreen); bool outputToHDR = cameraData.isHDROutputActive; @@ -1541,6 +1542,7 @@ public void RenderFinalPassRenderGraph(RenderGraph renderGraph, ContextContainer if (isTaaSharpeningEnabled) { material.EnableKeyword(ShaderKeywordStrings.Rcas); + // TODO: this uses renderingData.commandBuffer in the RenderGraph path!! Fix it to run in a proper RenderGraph pass FSRUtils.SetRcasConstantsLinear(cmd, cameraData.taaSettings.contrastAdaptiveSharpening); } @@ -1803,6 +1805,7 @@ public void RenderPostProcessingRenderGraph(RenderGraph renderGraph, ContextCont } DebugHandler debugHandler = GetActiveDebugHandler(cameraData); + // TODO: this uses renderingData.commandBuffer in the RenderGraph path!! Fix it to run in a proper RenderGraph pass debugHandler?.UpdateShaderGlobalPropertiesForFinalValidationPass(renderingData.commandBuffer, cameraData, !m_HasFinalPass && !resolveToDebugScreen); RenderUberPost(renderGraph, cameraData, postProcessingData, in currentSource, in postProcessingTarget, in lutTexture, in overlayUITexture, requireHDROutput, resolveToDebugScreen); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererDebug.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererDebug.cs index d417be88a82..570f251329d 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererDebug.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererDebug.cs @@ -133,6 +133,8 @@ private void CopyToDebugTexture(RenderGraph renderGraph, TextureHandle source, T passData.dest = builder.UseTextureFragment(destination, 0); + builder.AllowPassCulling(false); + builder.SetRenderFunc((CopyToDebugTexturePassData data, RasterGraphContext context) => { Blitter.BlitTexture(context.cmd, data.src, new Vector4(1,1,0,0), 0, false); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs index 47fef934d60..21acfb1dd58 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs @@ -635,6 +635,7 @@ internal override void OnRecordRenderGraph(RenderGraph renderGraph, ScriptableRe useRenderPassEnabled = renderGraph.NativeRenderPassesEnabled; + // TODO: this uses renderingData.commandBuffer in the RenderGraph path!! Fix it to run in a proper RenderGraph pass SetupMotionVectorGlobalMatrix(renderingData.commandBuffer, cameraData); SetupRenderGraphLights(renderGraph, renderingData, cameraData, lightData); @@ -1122,6 +1123,9 @@ private void OnAfterRendering(RenderGraph renderGraph) // make sure we are accessing the proper camera color in case it was replaced by injected passes cameraColor = resourceData.cameraColor; + // TODO: this uses renderingData.commandBuffer in the RenderGraph path!! Fix it to run in a proper RenderGraph pass + debugHandler?.UpdateShaderGlobalPropertiesForFinalValidationPass(renderingData.commandBuffer, cameraData, !resolveToDebugScreen); + m_FinalBlitPass.Render(renderGraph, cameraData, cameraColor, target, overlayUITexture); resourceData.activeColorID = UniversalResourceData.ActiveID.BackBuffer; resourceData.activeDepthID = UniversalResourceData.ActiveID.BackBuffer; @@ -1151,6 +1155,7 @@ private void OnAfterRendering(RenderGraph renderGraph) TextureHandle overlayUITexture = resourceData.overlayUITexture; TextureHandle debugScreenTexture = resourceData.debugScreenColor; + // TODO: this uses renderingData.commandBuffer in the RenderGraph path!! Fix it to run in a proper RenderGraph pass debugHandler.Render(renderGraph, renderingData.commandBuffer, cameraData, debugScreenTexture, overlayUITexture, debugHandlerColorTarget); } From 787c292e848eb241d8711ceb8b268c2d4eb7eed9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Leli=C3=A8vre?= Date: Thu, 12 Oct 2023 18:03:05 +0000 Subject: [PATCH 15/27] Added push marker global define Add PushMarker API to help profile shaders on platforms that supports it (PS5 only) --- .../ShaderLibrary/Common.hlsl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl b/Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl index 80a8bdb9c1a..90a1f60c35b 100644 --- a/Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl +++ b/Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl @@ -245,6 +245,11 @@ #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Macros.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Random.hlsl" +#if !defined(SHADER_API_PS5) +#define PushMarker(str) +#define PopMarker() +#endif + #ifdef SHADER_API_XBOXONE // TODO: to move in .nda package in 21.1 #define PLATFORM_SUPPORTS_PRIMITIVE_ID_IN_PIXEL_SHADER #endif From beeb0de7fffca430dc94113b5eec926c6af05e27 Mon Sep 17 00:00:00 2001 From: Julien Ignace Date: Thu, 12 Oct 2023 18:03:05 +0000 Subject: [PATCH 16/27] Add buginfo file for HDRP package Add buginfo file for HDRP package --- Packages/com.unity.render-pipelines.high-definition/.buginfo | 1 + 1 file changed, 1 insertion(+) create mode 100644 Packages/com.unity.render-pipelines.high-definition/.buginfo diff --git a/Packages/com.unity.render-pipelines.high-definition/.buginfo b/Packages/com.unity.render-pipelines.high-definition/.buginfo new file mode 100644 index 00000000000..e13772f5bdb --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/.buginfo @@ -0,0 +1 @@ +area: HD RP From 24b2be8582af963e74e3f2c1ece79bb2e0f45304 Mon Sep 17 00:00:00 2001 From: Esmeralda Salamone Date: Fri, 13 Oct 2023 05:51:52 +0000 Subject: [PATCH 17/27] [ShaderGraph] Compare Properties by ID instead of Ref Fix for this issue: https://jira.unity3d.com/browse/UUM-52909. Due to some perf improvements and caching, a previous comparison by reference was no longer valid in undo/redo (which undergoes serialization). This quick fix compares properties by ID instead of reference. --- .../Editor/Data/Actions/GraphViewActions.cs | 12 +++--------- .../Editor/Data/Graphs/GraphConcretization.cs | 3 ++- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Packages/com.unity.shadergraph/Editor/Data/Actions/GraphViewActions.cs b/Packages/com.unity.shadergraph/Editor/Data/Actions/GraphViewActions.cs index f107e887c6e..8ce97c85749 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Actions/GraphViewActions.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Actions/GraphViewActions.cs @@ -108,10 +108,8 @@ void DragGraphInput(GraphData graphData) var drawState = node.drawState; drawState.position = new Rect(nodePosition, drawState.position.size); node.drawState = drawState; + node.property = property; // this did come after, but it's not clear why. graphData.AddNode(node); - - // Setting the guid requires the graph to be set first. - node.property = property; break; } case ShaderKeyword keyword: @@ -129,10 +127,8 @@ void DragGraphInput(GraphData graphData) var drawState = node.drawState; drawState.position = new Rect(nodePosition, drawState.position.size); node.drawState = drawState; - graphData.AddNode(node); - - // Setting the guid requires the graph to be set first. node.keyword = keyword; + graphData.AddNode(node); break; } case ShaderDropdown dropdown: @@ -152,10 +148,8 @@ void DragGraphInput(GraphData graphData) var drawState = node.drawState; drawState.position = new Rect(nodePosition, drawState.position.size); node.drawState = drawState; - graphData.AddNode(node); - - // Setting the guid requires the graph to be set first. node.dropdown = dropdown; + graphData.AddNode(node); } break; } diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/GraphConcretization.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/GraphConcretization.cs index 8cc862c10bc..cbe3684becb 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/GraphConcretization.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/GraphConcretization.cs @@ -14,7 +14,8 @@ public static void ConcretizeNode(AbstractMaterialNode node) public static void ConcretizeProperties(GraphData graph) { - var propertyNodes = graph.GetNodes().Where(n => !graph.m_Properties.Any(p => p == n.property)).ToArray(); + // get all property nodes whose property doesn't exist? + var propertyNodes = graph.GetNodes().Where(n => !graph.m_Properties.Any(p => p.value.objectId == n.property.objectId)).ToArray(); foreach (var pNode in propertyNodes) graph.ReplacePropertyNodeWithConcreteNodeNoValidate(pNode); } From 779d6169453d1197f20964276f7e958e30c87acc Mon Sep 17 00:00:00 2001 From: Mircea Catana Date: Fri, 13 Oct 2023 19:47:23 +0000 Subject: [PATCH 18/27] [URP] Globals API Implements new globals api for textures. Provides better resource tracking, with the possibility to reclaim memory early and prevents api misuse that the previous command buffer approach allowed. https://docs.google.com/document/d/1AocoeM9R3QGQi4KVMNc_k_24ZeuHNt0FH1coAJdALkU/edit#heading=h.xd8euqu66dx4 --- .../RenderGraph/Viewer/RenderGraphDebugger.cs | 90 ++++++++++++++++++- .../RenderGraph/Viewer/RenderGraphView.cs | 47 +++++----- .../Runtime/Common/DynamicArray.cs | 21 ++++- .../Compiler/NativePassCompiler.cs | 20 ++++- .../RenderGraph/Compiler/PassCommandBuffer.cs | 21 +++-- .../RenderGraph/Compiler/ResourcesData.cs | 2 +- .../RenderGraph/IRenderGraphBuilder.cs | 41 ++++++++- .../Runtime/RenderGraph/RenderGraph.cs | 31 +++++++ .../RenderGraph/RenderGraphBuilders.cs | 81 ++++++++++++++--- .../Runtime/RenderGraph/RenderGraphPass.cs | 5 ++ .../Tests/Editor/RenderGraphTests.cs | 31 ------- .../Rendergraph/CopyCameraSortingLayerPass.cs | 3 +- .../2D/Rendergraph/Renderer2DRendergraph.cs | 6 +- .../Decal/DBuffer/DBufferDepthCopyPass.cs | 4 +- .../Decal/DBuffer/DBufferRenderPass.cs | 16 ++-- .../ScreenSpace/DecalGBufferRenderPass.cs | 4 - .../ScreenSpace/DecalScreenSpaceRenderPass.cs | 1 - .../AdditionalLightsShadowCasterPass.cs | 38 +++----- .../Runtime/Passes/CopyColorPass.cs | 5 +- .../Runtime/Passes/CopyDepthPass.cs | 11 ++- .../Runtime/Passes/DeferredPass.cs | 8 +- .../Runtime/Passes/DepthNormalOnlyPass.cs | 13 ++- .../Runtime/Passes/DepthOnlyPass.cs | 2 - .../Runtime/Passes/DrawObjectsPass.cs | 2 +- .../Runtime/Passes/DrawScreenSpaceUIPass.cs | 20 +++-- .../Runtime/Passes/GBufferPass.cs | 60 ++++--------- .../Passes/MainLightShadowCasterPass.cs | 39 +++----- .../Runtime/Passes/MotionVectorRenderPass.cs | 10 ++- .../Runtime/Passes/PostProcessPass.cs | 12 ++- .../Passes/PostProcessPassRenderGraph.cs | 35 +++++--- .../Passes/ScreenSpaceAmbientOcclusionPass.cs | 36 ++++++-- .../RendererFeatures/ScreenSpaceShadows.cs | 5 +- .../Runtime/ScriptableRenderer.cs | 4 +- .../Runtime/UniversalRenderer.cs | 2 +- .../Runtime/UniversalRendererRenderGraph.cs | 65 +++++--------- .../CustomRenderPipeline/CustomRenderer.cs | 4 +- .../CopyDepthPrepassFeature.cs | 4 +- 37 files changed, 500 insertions(+), 299 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/Viewer/RenderGraphDebugger.cs b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/Viewer/RenderGraphDebugger.cs index ba14a67335f..f8123c4030c 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/Viewer/RenderGraphDebugger.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/Viewer/RenderGraphDebugger.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using UnityEngine.Experimental.Rendering.RenderGraphModule; using UnityEngine.Experimental.Rendering.RenderGraphModule.NativeRenderPassCompiler; +using UnityEngine.Rendering; internal class RenderGraphDebugger : IRenderGraphDebugger { @@ -19,7 +20,7 @@ public void OutputGraph(NativePassCompiler graph) if (captureNextGraph) { var view = RenderGraphWindow.OpenGraphVisualizer(); - CollectGraphDebugData(graph.contextData, graph.graph.m_ResourcesForDebugOnly, view); + CollectGraphDebugData(graph.contextData, graph.graph, view); view.UpdateNodeVisualisation(); captureNextGraph = false; } @@ -32,10 +33,92 @@ public enum InputUsageType Fetch //Used with fetch ops } + // Actual values of global variables when a certain pass executes + class PassGlobalState + { + public PassGlobalState() { } + public PassGlobalState(PassGlobalState copyFrom) + { + values = new DynamicArray>(copyFrom.values); + } + + public void SetGlobalValue(int shaderPropertyId, ResourceHandle value) + { + if (TryFind(shaderPropertyId, out var index)) + { + values[index].Item2 = value; + } + else + { + values.Add(ValueTuple.Create(shaderPropertyId, value)); + } + } + + public ResourceHandle GetGlobalValue(int shaderPropertyId) + { + if (TryFind(shaderPropertyId, out var index)) + { + return values[index].Item2; + } + return new ResourceHandle(); + } + + public bool IsUsedAsGlobal(ResourceHandle h) + { + for (int i = 0; i < values.size; i++) + { + if (h.index == values[i].Item2.index) + { + return true; + } + } + return false; + } + + private bool TryFind(int shaderPropertyId, out int idx) + { + for (int i = 0; i < values.size; i++) + { + if (shaderPropertyId == values[i].Item1) + { + idx = i; + return true; + } + } + idx = -1; + return false; + } + + DynamicArray> values = new DynamicArray>(); + } + + private static RenderGraphWindow debugWindow; static void CollectGraphDebugData(CompilerContextData ctx, - RenderGraphResourceRegistry resources, RenderGraphView view) + NativePassCompiler.RenderGraphInputInfo inputInfo, RenderGraphView view) { + var resources = inputInfo.m_ResourcesForDebugOnly; + + // Derive the state of the global variables at each pass + List passGlobals = new List(ctx.passData.Length); + for (var i = 0; i < ctx.passData.Length; i++) + passGlobals.Add(null); + passGlobals[0] = new PassGlobalState();// first pass has empty globals set + + for (var i = 0; i < ctx.passData.Length; i++) + { + ref readonly var pass = ref ctx.passData.ElementAt(i); + if (pass.passId == ctx.passData.Length-1) continue; // last pass doesn't matter + var nextGlobalState = new PassGlobalState(passGlobals[pass.passId]); + var globals = inputInfo.m_RenderPasses[pass.passId].setGlobalsList; + foreach (var g in globals) + { + nextGlobalState.SetGlobalValue(g.Item2, g.Item1.handle); + } + + passGlobals[pass.passId + 1] = nextGlobalState; + } + //loop over all passes to add them and their resources to the graph for (int passIndex = 0; passIndex < ctx.passData.Length; passIndex++) { @@ -297,7 +380,8 @@ static void CollectGraphDebugData(CompilerContextData ctx, if (pointToVer.written) { - view.AddConnection(prevPass.identifier, pass.identifier, resourceVersionedName, resourceName, mergeMessage, use); + bool isGlobal = passGlobals[pass.passId].IsUsedAsGlobal(inputResource); + view.AddConnection(prevPass.identifier, pass.identifier, resourceVersionedName, resourceName, mergeMessage, use, isGlobal); } } } diff --git a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/Viewer/RenderGraphView.cs b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/Viewer/RenderGraphView.cs index c763bc77b18..18f4db2ae3a 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/Viewer/RenderGraphView.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/Viewer/RenderGraphView.cs @@ -262,21 +262,23 @@ internal void AddNRP(string nrpString) foreach (var pass in nrpPasses) { - nrp.title += pass.title + " "; + nrp.title += pass.title + ", "; m_Passes.Remove(pass); MoveConnections(pass, nrp, nrp.m_MergedPasses); } - for (int i = 0; i < nrp.m_InputPort.Count; ++i) + for (int i = nrp.m_InputPort.Count-1; i >= 0; i--) { - if (LinqButNotLinq.Any(nrp.m_InputPort[i].connections) == false) + bool isGlobal = (nrp.m_InputPort[i].portType == typeof(bool)); //HACK: Find a better way to keep track of globals + if (LinqButNotLinq.Any(nrp.m_InputPort[i].connections) == false && !isGlobal) { + nrp.inputContainer.Remove(nrp.m_InputPort[i]); nrp.m_InputPort.RemoveAt(i); } } - for (int i = 0; i < nrp.m_OutputPort.Count; ++i) + for (int i = nrp.m_OutputPort.Count-1; i >= 0; i--) { if (LinqButNotLinq.Any(nrp.m_OutputPort[i].connections) == false) { @@ -311,7 +313,8 @@ void MoveConnections(RenderGraphNode origin, RenderGraphNode destination, List node.m_ID == from); var toNode = m_Passes.Find(node => node.m_ID == to); @@ -457,23 +460,28 @@ internal void AddConnection(string from, string to, string resourceName, Port fromPort = fromNode.GetPort(Direction.Output, resourceNameNoVersion); if (fromPort == null) { - fromPort = fromNode.AddPort(Direction.Output, resourceNameNoVersion); + fromPort = fromNode.AddPort(Direction.Output, resourceNameNoVersion, isGlobal); } Port toPort = toNode.GetPort(Direction.Input, resourceNameNoVersion); if (toPort == null) { - toPort = toNode.AddPort(Direction.Input, resourceNameNoVersion); + toPort = toNode.AddPort(Direction.Input, resourceNameNoVersion, isGlobal); } //connect ports - var edge = new RenderGraphEdge(); - edge.view = this; - edge.tooltip = mergeMessage; - edge.input = toPort; - edge.output = fromPort; - toPort.Connect(edge); - fromPort.Connect(edge); + if (!isGlobal) + { + var edge = new RenderGraphEdge(); + edge.view = this; + edge.tooltip = mergeMessage; + edge.input = toPort; + edge.output = fromPort; + toPort.Connect(edge); + fromPort.Connect(edge); + + AddElement(edge); + } //save input/output connections to make sorting the view easier if (!fromNode.m_Outputs.Contains(toNode)) @@ -485,8 +493,6 @@ internal void AddConnection(string from, string to, string resourceName, { toNode.m_Inputs.Add(fromNode); } - - AddElement(edge); } internal ResourceNode AddResource(string resourceID, string label, RenderGraphWindow.ResourceDebugData data) @@ -910,10 +916,9 @@ public Port GetPort(Direction direction, string connectionName) return null; } - public Port AddPort(Direction portDirection, string connectionName, - Port.Capacity capacity = Port.Capacity.Multi) + public Port AddPort(Direction portDirection, string connectionName, bool isGlobal) { - var n = InstantiatePort(Orientation.Horizontal, portDirection, capacity, typeof(string)); + var n = InstantiatePort(Orientation.Horizontal, portDirection, Port.Capacity.Multi, (isGlobal) ? typeof(bool) : typeof(string)); n.name = connectionName; n.portName = connectionName; if (portDirection == Direction.Output) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Common/DynamicArray.cs b/Packages/com.unity.render-pipelines.core/Runtime/Common/DynamicArray.cs index ce8fd3889ec..c7744463131 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Common/DynamicArray.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Common/DynamicArray.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics; namespace UnityEngine.Rendering @@ -62,7 +63,7 @@ public DynamicArray(int size) /// Constructor. This overload allows you to only allocate memory without setting the size. /// /// The nubmer of elements to allocate. - /// If true, also set the size of the array to the passed in capacity. If false, only allocate data but keep the size at 0./// + /// If true, also set the size of the array to the passed in capacity. If false, only allocate data but keep the size at 0./// public DynamicArray(int capacity, bool resize) { m_Array = new T[capacity]; @@ -72,6 +73,20 @@ public DynamicArray(int capacity, bool resize) #endif } + /// + /// Constructor. This constructor allocates memory and does a deep copy of the provided array. + /// + /// Array to be copied + public DynamicArray(DynamicArray deepCopy) + { + m_Array = new T[deepCopy.size]; + size = deepCopy.size; + Array.Copy(deepCopy.m_Array, m_Array, size); +#if DEVELOPMENT_BUILD || UNITY_EDITOR + version = 0; +#endif + } + /// /// Clear the array of all elements. /// @@ -102,7 +117,7 @@ public int Add(in T value) // Grow array if needed; if (index >= m_Array.Length) { - var newArray = new T[m_Array.Length * 2]; + var newArray = new T[Math.Max(m_Array.Length * 2,1)]; Array.Copy(m_Array, newArray, m_Array.Length); m_Array = newArray; } @@ -193,7 +208,7 @@ public void RemoveRange(int index, int count) { if (count == 0) return; - + #if DEVELOPMENT_BUILD || UNITY_EDITOR if (index < 0 || index >= size || count < 0 || index + count > size) throw new ArgumentOutOfRangeException(); diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs index 4932d058e59..cbeb76019e5 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs @@ -519,6 +519,18 @@ void FindResourceUsageRanges() } } + static bool IsGlobalTextureInPass(RenderGraphPass pass, ResourceHandle handle) + { + foreach (var g in pass.setGlobalsList) + { + if (g.Item1.handle.index == handle.index) + { + return true; + } + } + return false; + } + void DetectMemoryLessResources() { using (new ProfilingScope(ProfilingSampler.Get(NativeCompilerProfileId.NRPRGComp_DetectMemorylessResources))) @@ -536,6 +548,8 @@ void DetectMemoryLessResources() ref var createInfo = ref contextData.UnversionedResourceData(createdRes); if (createdRes.type == RenderGraphResourceType.Texture && createInfo.isImported == false) { + bool isGlobal = IsGlobalTextureInPass(graph.m_RenderPasses[subPass.passId], createdRes); + // Note: You could think but what if the texture is used as a regular non-frambuffer attachment texture // surely it can't be memoryless then? // That is true, but it can never happen as the fact these passes got merged means the textures cannot be used @@ -549,7 +563,7 @@ void DetectMemoryLessResources() ref var destInfo = ref contextData.UnversionedResourceData(destroyedRes); if (destroyedRes.type == RenderGraphResourceType.Texture && destInfo.isImported == false) { - if (createdRes.index == destroyedRes.index) + if (createdRes.index == destroyedRes.index && !isGlobal) { createInfo.memoryLess = true; destInfo.memoryLess = true; @@ -1023,7 +1037,7 @@ private void GenerateBeginRenderPassCommand(ref NativePassData nativePass, re #if DEVELOPMENT_BUILD || UNITY_EDITOR if (nativePass.attachments.size == 0 || nativePass.numNativeSubPasses == 0) throw new Exception("Empty render pass"); - + nativePass.GetPassNames(contextData, passNamesForDebug); #endif @@ -1036,7 +1050,7 @@ private void GenerateBeginRenderPassCommand(ref NativePassData nativePass, re hasDepth, ref contextData.nativeSubPassData, nativePass.firstNativeSubPass, - nativePass.numNativeSubPasses, + nativePass.numNativeSubPasses, passNamesForDebug); } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassCommandBuffer.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassCommandBuffer.cs index 3bf1f7571dc..1429e8d4818 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassCommandBuffer.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassCommandBuffer.cs @@ -383,30 +383,39 @@ internal static unsafe void AddCommand(int passID, ref PassCommandBufferData da internal static unsafe void Execute(in ExecuteNodeCommand* cmd, ref PassCommandBufferState state) { + var pass = state.passes[cmd->passID]; + #if THROW_ON_SETRENDERTARGET_DEBUG - if (state.passes[cmd->passID].type == RenderGraphPassType.Raster) + if (pass.type == RenderGraphPassType.Raster) { CommandBuffer.ThrowOnSetRenderTarget = true; } #endif try { - state.rgContext.executingPass = state.passes[cmd->passID]; + state.rgContext.executingPass = pass; - if (!state.passes[cmd->passID].HasRenderFunc()) + if (!pass.HasRenderFunc()) { throw new InvalidOperationException(string.Format("RenderPass {0} was not provided with an execute function.", state.passes[cmd->passID].name)); } - using (new ProfilingScope(state.rgContext.cmd, state.passes[cmd->passID].customSampler)) + using (new ProfilingScope(state.rgContext.cmd, pass.customSampler)) { - state.passes[cmd->passID].Execute(state.rgContext); + pass.Execute(state.rgContext); + + foreach (var tex in pass.setGlobalsList) + { + state.rgContext.cmd.SetGlobalTexture(tex.Item2, tex.Item1); + } } + + } finally { #if THROW_ON_SETRENDERTARGET_DEBUG - if (state.passes[cmd->passID].type == RenderGraphPassType.Raster) + if (pass.type == RenderGraphPassType.Raster) { CommandBuffer.ThrowOnSetRenderTarget = false; } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/ResourcesData.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/ResourcesData.cs index 6dcce740b06..3ecc5bbcb5a 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/ResourcesData.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/ResourcesData.cs @@ -139,7 +139,7 @@ internal class ResourcesData public NativeList[] versionedData; // Flattened fixed size array storing up to MaxVersions versions per resource id. public NativeList[] readerData; // Flattened fixed size array storing up to MaxReaders per resource id per version. public const int MaxVersions = 20; // A quite arbitrary limit should be enough for most graphs. Increasing it shouldn't be a problem but will use more memory as these lists use a fixed size upfront allocation. - public const int MaxReaders = 10; // A quite arbitrary limit should be enough for most graphs. Increasing it shouldn't be a problem but will use more memory as these lists use a fixed size upfront allocation. + public const int MaxReaders = 35; // A quite arbitrary limit should be enough for most graphs. Increasing it shouldn't be a problem but will use more memory as these lists use a fixed size upfront allocation. public DynamicArray[] resourceNames; diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphBuilder.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphBuilder.cs index aaf33988581..cdab554882d 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphBuilder.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphBuilder.cs @@ -55,6 +55,41 @@ public enum AccessFlags /// Note that except for special cases where you want to refer to a specific version return value is generally discarded. public TextureHandle UseTexture(in TextureHandle input, AccessFlags flags = AccessFlags.Read); + /// + /// Declare that this pass uses the texture assigned to the global texture slot. The actual texture referenced is indirectly specified here it depends + /// on the value previous passes that were added to the graph set for the global texture slot. If no previous pass set a texture to the global slot an + /// exception will be raised. + /// + /// The global texture slot read by shaders in this pass. Use Shader.PropertyToID to generate these ids. + /// A combination of flags indicating how the resource will be used during the pass. Default value is set to AccessFlag.Read + public void UseGlobalTexture(int glboalTextureSlotId, AccessFlags flags = AccessFlags.Read); + + /// + /// Indicate that this pass will reference all textures in global texture slots known to the graph. The default setting is true. + /// It is highly recommended if you know which globals you pass will access to set this value to false and do UseTexture(glboalTextureSlotId) instead + /// to ensure the graph can maximally optimize resource use and lifetimes. + /// + /// Note that in some cases it is difficult/impossible to know which globals a pass will access. This is for example true if your pass renders objects + /// in the scene (e.g. using CommandBuffer.DrawRendererList) that might be using arbitrary shaders which in turn may access arbitrary global textures. + /// In this situation you will either have to ensure *all* shaders are well behaved and do not access spurious globals our make sure your rendererlists + /// filters allow only shaders that are known to be well behaved to pass. + /// + /// If true the pass from which this is called will reference all global textures. + public void UseAllGlobalTextures(bool enable); + + /// + /// Make this pass set a global texture slot *at the end* of this pass. During this pass the global texture will still have it's + /// old value. Only after this pass the global texture slot will take on the new value specified. + /// Generally this pass will also do a UseTexture(write) on this texture handle to indicate it is generating this texture, but this is not really a requirement + /// you can have a pass that simply sets up a new value in a global texture slot but doesn't write it. + /// Although counter-intuitive at first, this call doesn't actually have a dependency on the passed in texture handle. It's only when a subsequent pass has + /// a dependency on the global texture slot that subsequent pass will get a dependency on the currently set global texture for that slot. This means + /// globals slots can be set witout overhead if you're unsure if a resource will be used or not, the graph will still maintain the correct lifetimes. + /// + /// The texture value to set in the global texture slot. This can be an null handle to clear the global texture slot. + /// The global texture slot to set the value for. Use Shader.PropertyToID to generate the id. + public void PostSetGlobalTexture(in TextureHandle input, int globalPropertyID); + /// /// Declare that this pass uses the input compute buffer. /// @@ -168,7 +203,7 @@ public interface IRasterRenderGraphBuilder : IBaseRenderGraphBuilder { /// /// Use the texture as an rendertarget attachment. - /// + /// /// Writing: /// Indicate this pass will write a texture through rendertarget rasterization writes. /// The graph will automatically bind the texture as an MRT output on the indicated index slot. @@ -178,7 +213,7 @@ public interface IRasterRenderGraphBuilder : IBaseRenderGraphBuilder /// Reading: /// Indicates this pass will read a texture on the current fragment position but not unnecessarily modify it. Although not explicitly visible in shader code /// Reading may happen depending on the rasterization state, e.g. Blending (read and write) or Z-Testing (read only) may read the buffer. - /// + /// /// Note: The rendergraph does not know what content will be rendered in the bound texture. By default it assumes only partial data /// is written (e.g. a small rectangle is drawn on the screen) so it will preserve the existing rendertarget content (e.g. behind/around the triangle) /// if you know you will write the full screen the AccessFlags.WriteAll should be used instead as it will give better performance. @@ -196,7 +231,7 @@ public interface IRasterRenderGraphBuilder : IBaseRenderGraphBuilder /// This informs the graph that any shaders in pass will only read from this texture at the current fragment position using the /// LOAD_FRAMEBUFFER_INPUT(idx)/LOAD_FRAMEBUFFER_INPUT_MS(idx,sampleIdx) macros. The index passed to LOAD_FRAMEBUFFER_INPUT needs /// to match the index passed to UseTextureFragmentInput for this texture. - /// + /// /// /// Texture to use during this pass. /// Index the shader will use to access this texture. diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs index c4cf3522f53..a9577854abc 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs @@ -1393,6 +1393,7 @@ internal void ClearCompiledGraph() for (int i = 0; i < (int)RenderGraphResourceType.Count; ++i) m_CompiledResourcesInfos[i].Clear(); m_CompiledPassInfos.Clear(); + registeredGlobals.Clear(); } void InvalidateContext() @@ -2209,6 +2210,11 @@ void PostRenderPassExecute(ref CompiledPassInfo passInfo, InternalRenderGraphCon { RenderGraphPass pass = passInfo.pass; + foreach (var tex in pass.setGlobalsList) + { + rgContext.cmd.SetGlobalTexture(tex.Item2, tex.Item1); + } + if (passInfo.needGraphicsFence) passInfo.fence = rgContext.cmd.CreateAsyncGraphicsFence(); @@ -2447,6 +2453,31 @@ void CleanupDebugData() } #endregion + + + Dictionary registeredGlobals = new Dictionary(); + + internal void SetGlobal(TextureHandle h, int globalPropertyId) + { + registeredGlobals[globalPropertyId] = h; + } + + internal bool IsGlobal(int globalPropertyId) + { + return registeredGlobals.ContainsKey(globalPropertyId); + } + + internal Dictionary.ValueCollection AllGlobals() + { + return registeredGlobals.Values; + } + + internal TextureHandle GetGlobal(int globalPropertyId) + { + TextureHandle h; + registeredGlobals.TryGetValue(globalPropertyId, out h); + return h; + } } /// diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs index 4e94903fb5d..aec9eada50f 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using UnityEngine.Rendering; +using static UnityEngine.Rendering.DebugUI; +using ValueTuple = System.ValueTuple; namespace UnityEngine.Experimental.Rendering.RenderGraphModule { @@ -14,6 +16,7 @@ internal class RenderGraphBuilders : IBaseRenderGraphBuilder, IComputeRenderGrap RenderGraph m_RenderGraph; bool m_Disposed; + public RenderGraphBuilders() { m_RenderPass = null; @@ -37,6 +40,9 @@ public void Setup(RenderGraphPass renderPass, RenderGraphResourceRegistry resour m_RenderGraph = renderGraph; m_Disposed = false; + // For now we reference all globals by default + renderPass.useAllGlobalTextures = true; + if (renderPass.type == RenderGraphPassType.Raster) { CommandBuffer.ThrowOnSetRenderTarget = true; @@ -99,20 +105,42 @@ protected virtual void Dispose(bool disposing) if (m_Disposed) return; - if (disposing) + try { - m_RenderGraph.OnPassAdded(m_RenderPass); - } - if (m_RenderPass.type == RenderGraphPassType.Raster) - { - CommandBuffer.ThrowOnSetRenderTarget = false; + if (disposing) + { + // Use all globals simply means this... we do a UseTexture on all globals so the pass has the correct dependencies. + // This of course goes to show how bad an idea shader-system wide globals really are dependency/lifetime tracking wise :-) + if (m_RenderPass.useAllGlobalTextures) + { + foreach (var texture in m_RenderGraph.AllGlobals()) + { + this.UseTexture(texture, IBaseRenderGraphBuilder.AccessFlags.Read); + } + } + + // Set globals on the graph fronted side so subsequent passes can have pass dependencies on these global texture handles + foreach (var t in m_RenderPass.setGlobalsList) + { + m_RenderGraph.SetGlobal(t.Item1, t.Item2); + } + + m_RenderGraph.OnPassAdded(m_RenderPass); + } } + finally + { + if (m_RenderPass.type == RenderGraphPassType.Raster) + { + CommandBuffer.ThrowOnSetRenderTarget = false; + } - m_RenderPass = null; - m_Resources = null; - m_RenderGraph = null; - m_Disposed = true; + m_RenderPass = null; + m_Resources = null; + m_RenderGraph = null; + m_Disposed = true; + } } private ResourceHandle UseResource(in ResourceHandle handle, IBaseRenderGraphBuilder.AccessFlags flags) @@ -239,6 +267,29 @@ public TextureHandle UseTexture(in TextureHandle input, IBaseRenderGraphBuilder. return h; } + public void UseGlobalTexture(int globalPropertyID, IBaseRenderGraphBuilder.AccessFlags flags) + { + var h = m_RenderGraph.GetGlobal(globalPropertyID); + if (h.IsValid()) + { + UseTexture(h, flags); + } + else + { + throw new ArgumentException("Trying to read global texture property {globalPropertyID} but no previous pass in the graph assigned a value to this global."); + } + } + + public void UseAllGlobalTextures(bool enable) + { + m_RenderPass.useAllGlobalTextures = enable; + } + + public void PostSetGlobalTexture(in TextureHandle input, int globalPropertyID) + { + m_RenderPass.setGlobalsList.Add(ValueTuple.Create(input, globalPropertyID)); + } + // Shared validation between UseTextureFragment/UseTextureFragmentDepth private void CheckUseFragment(TextureHandle tex, IBaseRenderGraphBuilder.AccessFlags flags, bool isDepth) { @@ -297,10 +348,18 @@ private void CheckUseFragment(TextureHandle tex, IBaseRenderGraphBuilder.AccessF if (GraphicsFormatUtility.IsDepthFormat(info.format)) { var name = m_Resources.GetRenderGraphResourceName(tex.handle); - throw new InvalidOperationException($"Trying to UseTextureFragment on a texture thas has a depth format. Use a texture with a color format instead. (pass '{m_RenderPass.name}' resource '{name}')."); + throw new InvalidOperationException($"Trying to UseTextureFragment on a texture that has a depth format. Use a texture with a color format instead. (pass '{m_RenderPass.name}' resource '{name}')."); } } } + + foreach (var globalTex in m_RenderPass.setGlobalsList) + { + if (globalTex.Item1.handle.index == tex.handle.index) + { + throw new InvalidOperationException($"Trying to UseTextureFragment on a texture is currently set on a global texture slot. Shaders might be using the texture using samplers. You should ensure textures are not set as globals when using them as fragment attachments."); + } + } #endif } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs index bc198d9c678..126b014dce9 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs @@ -43,6 +43,9 @@ abstract class RenderGraphPass public List usedRendererListList = new List(); + public List> setGlobalsList = new List>(); + public bool useAllGlobalTextures; + public RenderGraphPass() { for (int i = 0; i < (int)RenderGraphResourceType.Count; ++i) @@ -66,6 +69,8 @@ public void Clear() } usedRendererListList.Clear(); + setGlobalsList.Clear(); + useAllGlobalTextures = false; enableAsyncCompute = false; allowPassCulling = true; allowRendererListCulling = true; diff --git a/Packages/com.unity.render-pipelines.core/Tests/Editor/RenderGraphTests.cs b/Packages/com.unity.render-pipelines.core/Tests/Editor/RenderGraphTests.cs index c612a01242a..f25d064ed72 100644 --- a/Packages/com.unity.render-pipelines.core/Tests/Editor/RenderGraphTests.cs +++ b/Packages/com.unity.render-pipelines.core/Tests/Editor/RenderGraphTests.cs @@ -487,37 +487,6 @@ public void GraphicsPassReadWaitOnAsyncPipe() Assert.AreEqual(0, compiledPasses[1].syncToPassIndex); } - [Test] - public void GlobalStateIsGuarded() - { - TextureHandle texture0; - texture0 = m_RenderGraph.CreateTexture(new TextureDesc(Vector2.one) { colorFormat = GraphicsFormat.R8G8B8A8_UNorm }); - - - RenderGraphParameters pars; - pars.executionName = "test"; - pars.currentFrameIndex = 0; - pars.rendererListCulling = false; - pars.scriptableRenderContext = new ScriptableRenderContext(); - pars.commandBuffer = new CommandBuffer(); - pars.invalidContextForTesting = true; - - Assert.Throws(() => - { - using (m_RenderGraph.RecordAndExecute(in pars)) - { - using (var builder = m_RenderGraph.AddRasterRenderPass("Async_TestPass0", out var passData)) - { - builder.AllowGlobalStateModification(false); - builder.SetRenderFunc((RenderGraphTestPassData data, RasterGraphContext context) => - { - context.cmd.SetGlobalTexture("test", texture0); - }); - } - } - }); - } - [Test] public void UseTextureFragmentValidation() { diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CopyCameraSortingLayerPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CopyCameraSortingLayerPass.cs index 401069ff9d2..edd282e3c6f 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CopyCameraSortingLayerPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/CopyCameraSortingLayerPass.cs @@ -11,6 +11,7 @@ internal class CopyCameraSortingLayerPass : ScriptableRenderPass private static readonly ProfilingSampler m_ProfilingSampler = new ProfilingSampler(k_CopyCameraSortingLayerPass); private static readonly ProfilingSampler m_ExecuteProfilingSampler = new ProfilingSampler("Copy"); public static readonly string k_CameraSortingLayerTexture = "_CameraSortingLayerTexture"; + private static readonly int k_CameraSortingLayerTextureId = Shader.PropertyToID(k_CameraSortingLayerTexture); static Material m_BlitMaterial; public CopyCameraSortingLayerPass(Material blitMaterial) @@ -71,7 +72,7 @@ public void Render(RenderGraph graph, in TextureHandle cameraColorAttachment, in }); } - RenderGraphUtils.SetGlobalTexture(graph, k_CameraSortingLayerTexture, destination, "Set Camera Sorting Layer Texture"); + RenderGraphUtils.SetGlobalTexture(graph, k_CameraSortingLayerTextureId, destination, "Set Camera Sorting Layer Texture"); } } } 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 a3dae3e9163..403a60c19c9 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 @@ -362,7 +362,7 @@ void CreateResources(RenderGraph renderGraph) { importSummary.cameraColorParams.discardOnLastUse = lastCameraInTheStack; importSummary.cameraDepthParams.discardOnLastUse = lastCameraInTheStack; - + resourceData.cameraColor = renderGraph.ImportTexture(m_RenderGraphCameraColorHandle, importSummary.cameraColorParams); resourceData.cameraDepth = renderGraph.ImportTexture(m_RenderGraphCameraDepthHandle, importSummary.cameraDepthParams); } @@ -395,7 +395,7 @@ void CreateResources(RenderGraph renderGraph) resourceData.afterPostProcessColor = UniversalRenderer.CreateRenderGraphTexture(renderGraph, postProcessDesc, "_AfterPostProcessTexture", true); } - internal override void OnBeginRenderGraphFrame() + public override void OnBeginRenderGraphFrame() { Universal2DResourceData resourceData = frameData.Create(); resourceData.InitFrame(); @@ -420,7 +420,7 @@ internal override void OnRecordRenderGraph(RenderGraph renderGraph, ScriptableRe OnAfterRendering(renderGraph); } - internal override void OnEndRenderGraphFrame() + public override void OnEndRenderGraphFrame() { Universal2DResourceData resourceData = frameData.Get(); resourceData.EndFrame(); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferDepthCopyPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferDepthCopyPass.cs index 14ffeb8454f..538473173fc 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferDepthCopyPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferDepthCopyPass.cs @@ -24,7 +24,6 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer TextureHandle cameraDepthTexture = resourceData.cameraDepthTexture; - TextureHandle src, dest; if (renderer.renderingModeActual == RenderingMode.Deferred) { @@ -44,8 +43,7 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer dest = cameraData.cameraTargetDescriptor.msaaSamples > 1 ? depthTarget : resourceData.activeDepthTexture; } - //TODO: bindAsCameraDepth should be investigated as without it DBufferDepth will not be bound correctly, though it should - Render(renderGraph, dest, src, resourceData, cameraData, cameraData.cameraTargetDescriptor.msaaSamples > 1); + Render(renderGraph, dest, src, resourceData, cameraData, false); } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs index d8a5597c0d5..f82d8b9fe11 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs @@ -231,9 +231,6 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer TextureHandle depthTarget = renderer.renderingModeActual == RenderingMode.Deferred ? resourceData.activeDepthTexture : (cameraData.cameraTargetDescriptor.msaaSamples > 1 ? resourceData.dBufferDepth : resourceData.activeDepthTexture); - RenderGraphUtils.SetGlobalTexture(renderGraph, Shader.PropertyToID("_CameraDepthTexture"), cameraDepthTexture); - RenderGraphUtils.SetGlobalTexture(renderGraph, Shader.PropertyToID("_CameraNormalsTexture"), cameraNormalsTexture); - using (var builder = renderGraph.AddRasterRenderPass("DBuffer Pass", out var passData, m_ProfilingSampler)) { InitPassData(ref passData); @@ -272,6 +269,8 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer } builder.UseTextureFragmentDepth(depthTarget, IBaseRenderGraphBuilder.AccessFlags.Write); + if (cameraData.cameraTargetDescriptor.msaaSamples > 1) + builder.PostSetGlobalTexture(depthTarget, Shader.PropertyToID("_CameraDepthTexture")); if (cameraDepthTexture.IsValid()) builder.UseTexture(cameraDepthTexture, IBaseRenderGraphBuilder.AccessFlags.Read); @@ -282,6 +281,12 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer passData.rendererList = renderGraph.CreateRendererList(param); builder.UseRendererList(passData.rendererList); + for (int i = 0; i < RenderGraphUtils.DBufferSize; ++i) + { + if (dbufferHandles[i].IsValid()) + builder.PostSetGlobalTexture(dbufferHandles[i], Shader.PropertyToID(s_DBufferNames[i])); + } + builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); @@ -292,11 +297,6 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer }); } - for (int i = 0; i < RenderGraphUtils.DBufferSize; ++i) - { - if (dbufferHandles[i].IsValid()) - RenderGraphUtils.SetGlobalTexture(renderGraph, Shader.PropertyToID(s_DBufferNames[i]), dbufferHandles[i]); - } resourceData.dBuffer = dbufferHandles; } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs index 442fadb29a1..b5db3aa4d01 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs @@ -153,10 +153,6 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer UniversalResourceData resourceData = frameData.Get(); TextureHandle cameraDepthTexture = resourceData.cameraDepthTexture; - // By calling SetGlobalTexture we would break active render pass and using framebuffer fetch would be impossible - if (!renderGraph.NativeRenderPassesEnabled) - RenderGraphUtils.SetGlobalTexture(renderGraph, Shader.PropertyToID("_CameraDepthTexture"), cameraDepthTexture); - using (var builder = renderGraph.AddRasterRenderPass("Decal GBuffer Pass", out var passData, m_ProfilingSampler)) { UniversalRenderingData renderingData = frameData.Get(); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs index 10f6d9064de..11454cf9acb 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs @@ -108,7 +108,6 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer UniversalResourceData resourceData = frameData.Get(); TextureHandle cameraDepthTexture = resourceData.cameraDepthTexture; - RenderGraphUtils.SetGlobalTexture(renderGraph, Shader.PropertyToID("_CameraDepthTexture"), cameraDepthTexture); using (var builder = renderGraph.AddRasterRenderPass("Decal Screen Space Pass", out var passData, m_ProfilingSampler)) { 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 ff6f62aa249..5eeb219a353 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs @@ -873,46 +873,34 @@ internal TextureHandle Render(RenderGraph graph, ContextContainer frameData) builder.UseRendererList(passData.shadowRendererListsHdl[globalShadowSliceIndex]); } - passData.shadowmapTexture = UniversalRenderer.CreateRenderGraphTexture(graph, m_AdditionalLightsShadowmapHandle.rt.descriptor, "Additional Shadowmap", true, ShadowUtils.m_ForceShadowPointSampling ? FilterMode.Point : FilterMode.Bilinear); - builder.UseTextureFragmentDepth(passData.shadowmapTexture, IBaseRenderGraphBuilder.AccessFlags.Write); + shadowTexture = UniversalRenderer.CreateRenderGraphTexture(graph, m_AdditionalLightsShadowmapHandle.rt.descriptor, "_AdditionalLightsShadowmapTexture", true, ShadowUtils.m_ForceShadowPointSampling ? FilterMode.Point : FilterMode.Bilinear); + builder.UseTextureFragmentDepth(shadowTexture, IBaseRenderGraphBuilder.AccessFlags.Write); + } + else + { + shadowTexture = graph.defaultResources.blackTexture; } // RENDERGRAPH TODO: Need this as shadowmap is only used as Global Texture and not a buffer, so would get culled by RG builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); - builder.SetRenderFunc((PassData data, RasterGraphContext context) => - { - if (!data.emptyShadowmap) - data.pass.RenderAdditionalShadowmapAtlas(context.cmd, ref data, true); - }); - - shadowTexture = passData.shadowmapTexture; - } - - using (var builder = graph.AddRasterRenderPass("Set Additional Shadow Globals", out var passData, base.profilingSampler)) - { - InitEmptyPassData(ref passData, cameraData, lightData, shadowData); - passData.shadowmapTexture = shadowTexture; - if (shadowTexture.IsValid()) - builder.UseTexture(shadowTexture, IBaseRenderGraphBuilder.AccessFlags.Read); - - builder.AllowPassCulling(false); - builder.AllowGlobalStateModification(true); + builder.PostSetGlobalTexture(shadowTexture, passData.shadowmapID); builder.SetRenderFunc((PassData data, RasterGraphContext context) => { - if (data.emptyShadowmap) + if (!data.emptyShadowmap) + { + data.pass.RenderAdditionalShadowmapAtlas(context.cmd, ref data, true); + } + else { data.pass.SetEmptyAdditionalShadowmapAtlas(context.cmd); - data.shadowmapTexture = context.defaultResources.defaultShadowTexture; } - - context.cmd.SetGlobalTexture(data.shadowmapID, data.shadowmapTexture); }); - return passData.shadowmapTexture; + return shadowTexture; } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/CopyColorPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/CopyColorPass.cs index 1c8efac7e91..61bf9a4b428 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/CopyColorPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/CopyColorPass.cs @@ -198,6 +198,9 @@ internal TextureHandle Render(RenderGraph renderGraph, ContextContainer frameDat passData.downsamplingMethod = m_DownsamplingMethod; passData.sampleOffsetShaderHandle = m_SampleOffsetShaderHandle; + if (destination.IsValid()) + builder.PostSetGlobalTexture(destination, Shader.PropertyToID("_CameraOpaqueTexture")); + // TODO RENDERGRAPH: culling? force culling off for testing builder.AllowPassCulling(false); @@ -207,8 +210,6 @@ internal TextureHandle Render(RenderGraph renderGraph, ContextContainer frameDat }); } - RenderGraphUtils.SetGlobalTexture(renderGraph, "_CameraOpaqueTexture", destination, "Set Camera Opaque Texture"); - return destination; } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/CopyDepthPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/CopyDepthPass.cs index c03cc3ffe79..c9a48c47505 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/CopyDepthPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/CopyDepthPass.cs @@ -184,6 +184,8 @@ private static void ExecutePass(RasterCommandBuffer cmd, PassData passData, RTHa cmd.SetViewport(passData.cameraData.pixelRect); else cmd.SetViewport(new Rect(0, 0, passData.cameraData.cameraTargetDescriptor.width, passData.cameraData.cameraTargetDescriptor.height)); + + copyDepthMaterial.SetTexture(Shader.PropertyToID("_CameraDepthAttachment"), source); Blitter.BlitTexture(cmd, source, scaleBias, copyDepthMaterial, 0); } } @@ -227,7 +229,6 @@ public void Render(RenderGraph renderGraph, TextureHandle destination, TextureHa { // TODO RENDERGRAPH: should call the equivalent of Setup() to initialise everything correctly MssaSamples = -1; - RenderGraphUtils.SetGlobalTexture(renderGraph, "_CameraDepthAttachment", source, "Set Global CameraDepthAttachment"); using (var builder = renderGraph.AddRasterRenderPass(passName, out var passData, base.profilingSampler)) { @@ -236,6 +237,7 @@ public void Render(RenderGraph renderGraph, TextureHandle destination, TextureHa passData.cameraData = cameraData; passData.copyResolvedDepth = m_CopyResolvedDepth; passData.copyToDepth = CopyToDepth; + if (CopyToDepth) { // Writes depth using custom depth output @@ -252,8 +254,12 @@ public void Render(RenderGraph renderGraph, TextureHandle destination, TextureHa // Writes depth as "grayscale color" output passData.destination = builder.UseTextureFragment(destination, 0, IBaseRenderGraphBuilder.AccessFlags.Write); } + passData.source = builder.UseTexture(source, IBaseRenderGraphBuilder.AccessFlags.Read); + if (bindAsCameraDepth && destination.IsValid()) + builder.PostSetGlobalTexture(destination, Shader.PropertyToID("_CameraDepthTexture")); + // TODO RENDERGRAPH: culling? force culling off for testing builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); @@ -263,9 +269,6 @@ public void Render(RenderGraph renderGraph, TextureHandle destination, TextureHa ExecutePass(context.cmd, data, data.source, data.destination); }); } - - if (bindAsCameraDepth) - RenderGraphUtils.SetGlobalTexture(renderGraph, "_CameraDepthTexture", destination, "Set Global CameraDepthTexture"); } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DeferredPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DeferredPass.cs index ed807b82cd1..c2ee2e037c0 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DeferredPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DeferredPass.cs @@ -98,6 +98,10 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur } } + // Without NRP GBuffer textures are set after GBuffer, we only do this here to avoid breaking the pass + if (renderGraph.NativeRenderPassesEnabled) + GBufferPass.SetGlobalGBufferTextures(builder, gbuffer, ref m_DeferredLights); + builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); @@ -106,10 +110,6 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur data.deferredLights.ExecuteDeferredPass(context.cmd, data.cameraData, data.lightData, data.shadowData); }); } - - // Without NRP GBuffer textures are set after GBuffer, we only do this here to avoid breaking the pass - if (renderGraph.NativeRenderPassesEnabled) - GBufferPass.SetGlobalGBufferTextures(renderGraph, gbuffer, resourceData, ref m_DeferredLights); } // ScriptableRenderPass diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs index dd86e1356af..c45614f5642 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs @@ -197,6 +197,16 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur passData.rendererList = renderGraph.CreateRendererList(param); builder.UseRendererList(passData.rendererList); + UniversalRenderer universalRenderer = cameraData.renderer as UniversalRenderer; + if (universalRenderer != null) + { + var renderingMode = universalRenderer.renderingModeActual; + if (cameraNormalsTexture.IsValid() && renderingMode != RenderingMode.Deferred) + builder.PostSetGlobalTexture(cameraNormalsTexture, Shader.PropertyToID("_CameraNormalsTexture")); + if (cameraDepthTexture.IsValid() && renderingMode != RenderingMode.Deferred) + builder.PostSetGlobalTexture(cameraDepthTexture, Shader.PropertyToID("_CameraDepthTexture")); + } + // TODO RENDERGRAPH: culling? force culling off for testing builder.AllowPassCulling(false); // Required here because of RenderingLayerUtils.SetupProperties @@ -208,9 +218,6 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur ExecutePass(context.cmd, data, data.rendererList); }); } - - RenderGraphUtils.SetGlobalTexture(renderGraph, "_CameraNormalsTexture", cameraNormalsTexture, "Set Camera Normals Texture"); - RenderGraphUtils.SetGlobalTexture(renderGraph,"_CameraDepthTexture", cameraDepthTexture, "Set Global CameraDepthTexture"); } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DepthOnlyPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DepthOnlyPass.cs index a78afb21813..14f11395cbb 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DepthOnlyPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DepthOnlyPass.cs @@ -135,8 +135,6 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, ref Te ExecutePass(context.cmd, data.rendererList); }); } - - RenderGraphUtils.SetGlobalTexture(renderGraph,"_CameraDepthTexture", cameraDepthTexture, "Set Global CameraDepthTexture"); } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs index 9ca41681008..839103958c2 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs @@ -291,7 +291,6 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur ExecutePass(context.cmd, data, data.rendererListHdl, data.objectsWithErrorRendererListHdl, yFlip); }); - } } } @@ -400,6 +399,7 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur TextureHandle ssaoTexture = resourceData.ssaoTexture; if (ssaoTexture.IsValid()) builder.UseTexture(ssaoTexture, IBaseRenderGraphBuilder.AccessFlags.Read); + RenderGraphUtils.UseDBufferIfValid(builder, resourceData); } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DrawScreenSpaceUIPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DrawScreenSpaceUIPass.cs index bc04ff0f727..f0f9b9853b5 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DrawScreenSpaceUIPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/DrawScreenSpaceUIPass.cs @@ -24,7 +24,7 @@ public DrawScreenSpaceUIPass(RenderPassEvent evt, bool renderOffscreen) { base.profilingSampler = new ProfilingSampler(nameof(DrawScreenSpaceUIPass)); renderPassEvent = evt; - useNativeRenderPass = false; + useNativeRenderPass = false; m_RenderOffscreen = renderOffscreen; m_PassData = new PassData(); } @@ -147,7 +147,7 @@ private class PassData // Specific to RG cases which have to go through LowLevel commands private class LowLevelPassData - { + { internal RendererListHandle rendererList; internal TextureHandle colorTarget; internal TextureHandle depthTarget; @@ -159,7 +159,7 @@ internal void RenderOffscreen(RenderGraph renderGraph, ContextContainer frameDat // Vulkan backend doesn't support SetSRGBWhite() calls in Render Pass and we have some of them at Imgui levels on native side // For now, D3D12 crashes with UI Canvas (uGUI) within a raster render pass - // TODO: add granularity to UIOverlayRendererList to have one specific rendererList for Imgui to be called through LowLevelPass while the rest can use RasterRenderPass + // TODO: add granularity to UIOverlayRendererList to have one specific rendererList for Imgui to be called through LowLevelPass while the rest can use RasterRenderPass if(SystemInfo.graphicsDeviceType == GraphicsDeviceType.Vulkan || SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D12) { using (var builder = renderGraph.AddLowLevelPass("Draw Screen Space UI Pass - Offscreen", out var passData, base.profilingSampler)) @@ -177,6 +177,9 @@ internal void RenderOffscreen(RenderGraph renderGraph, ContextContainer frameDat TextureHandle depthBuffer = UniversalRenderer.CreateRenderGraphTexture(renderGraph, depthDescriptor, "_OverlayUITexture_Depth", false); passData.depthTarget = builder.UseTexture(depthBuffer, IBaseRenderGraphBuilder.AccessFlags.ReadWrite); + if (output.IsValid()) + builder.PostSetGlobalTexture(output, ShaderPropertyId.overlayUITexture); + builder.SetRenderFunc((LowLevelPassData data, LowLevelGraphContext context) => { context.legacyCmd.SetRenderTarget(data.colorTarget, data.depthTarget); @@ -202,21 +205,22 @@ internal void RenderOffscreen(RenderGraph renderGraph, ContextContainer frameDat TextureHandle depthBuffer = UniversalRenderer.CreateRenderGraphTexture(renderGraph, depthDescriptor, "_OverlayUITexture_Depth", false); builder.UseTextureFragmentDepth(depthBuffer, IBaseRenderGraphBuilder.AccessFlags.ReadWrite); + if (output.IsValid()) + builder.PostSetGlobalTexture(output, ShaderPropertyId.overlayUITexture); + builder.SetRenderFunc((PassData data, RasterGraphContext context) => { ExecutePass(context.cmd, data, data.rendererList); }); - } + } } - - RenderGraphUtils.SetGlobalTexture(renderGraph, ShaderPropertyId.overlayUITexture, output); } internal void RenderOverlay(RenderGraph renderGraph, Camera camera, in TextureHandle colorBuffer, in TextureHandle depthBuffer) { // Vulkan backend doesn't support SetSRGBWhite() calls in Render Pass and we have some of them at Imgui levels on native side // For now, D3D12 crashes with UI Canvas (uGUI) within a raster render pass - // TODO: add granularity to UIOverlayRendererList to have one specific rendererList for Imgui to be called through LowLevelPass while the rest can use RasterRenderPass + // TODO: add granularity to UIOverlayRendererList to have one specific rendererList for Imgui to be called through LowLevelPass while the rest can use RasterRenderPass if(SystemInfo.graphicsDeviceType == GraphicsDeviceType.Vulkan || SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D12) { using (var builder = renderGraph.AddLowLevelPass("Draw Screen Space UI Pass - Overlay", out var passData, base.profilingSampler)) @@ -230,7 +234,7 @@ internal void RenderOverlay(RenderGraph renderGraph, Camera camera, in TextureHa builder.SetRenderFunc((LowLevelPassData data, LowLevelGraphContext context) => { context.legacyCmd.SetRenderTarget(data.colorTarget, data.depthTarget); - + ExecutePass(context.cmd, data, data.rendererList); }); } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs index 0e1124bfb42..b9df7c59004 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs @@ -252,6 +252,7 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur RenderGraphUtils.UseDBufferIfValid(builder, resourceData); resourceData.gBuffer = gbuffer; + passData.depth = builder.UseTextureFragmentDepth(cameraDepth, IBaseRenderGraphBuilder.AccessFlags.Write); passData.deferredLights = m_DeferredLights; @@ -259,6 +260,10 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur builder.UseRendererList(passData.rendererListHdl); builder.UseRendererList(passData.objectsWithErrorRendererListHdl); + // With NRP GBuffer textures are set after Deferred, we do this to avoid breaking the pass + if (!renderGraph.NativeRenderPassesEnabled) + GBufferPass.SetGlobalGBufferTextures(builder, gbuffer, ref m_DeferredLights); + builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); @@ -267,54 +272,25 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur ExecutePass(context.cmd, data, data.rendererListHdl, data.objectsWithErrorRendererListHdl); }); } - - // With NRP GBuffer textures are set after Deferred, we do this to avoid breaking the pass - if (!renderGraph.NativeRenderPassesEnabled) - GBufferPass.SetGlobalGBufferTextures(renderGraph, gbuffer, resourceData, ref m_DeferredLights); } - internal static void SetGlobalGBufferTextures(RenderGraph renderGraph, TextureHandle[] gbuffer, UniversalResourceData resourceData, ref DeferredLights deferredLights) + internal static void SetGlobalGBufferTextures(IRasterRenderGraphBuilder builder, TextureHandle[] gbuffer, ref DeferredLights deferredLights) { - using (var builder = renderGraph.AddRasterRenderPass("Set Global GBuffer Textures", out var passData, s_ProfilingSampler)) + for (int i = 0; i < gbuffer.Length; i++) { - passData.deferredLights = deferredLights; - gbuffer = resourceData.gBuffer; - passData.gbuffer = deferredLights.GbufferTextureHandles; - - for (int i = 0; i < deferredLights.GBufferSliceCount; i++) - { - if (i != deferredLights.GBufferLightingIndex) - passData.gbuffer[i] = builder.UseTexture(gbuffer[i], IBaseRenderGraphBuilder.AccessFlags.Read); - } - - TextureHandle[] dBufferHandles = resourceData.dBuffer; - for (int i = 0; i < dBufferHandles.Length; ++i) - { - var dbuffer = dBufferHandles[i]; - if (dbuffer.IsValid()) - builder.UseTexture(dbuffer); - } - - builder.AllowPassCulling(false); - builder.AllowGlobalStateModification(true); + if (i != deferredLights.GBufferLightingIndex && gbuffer[i].IsValid()) + builder.PostSetGlobalTexture(gbuffer[i], Shader.PropertyToID(DeferredLights.k_GBufferNames[i])); + } - builder.SetRenderFunc((PassData data, RasterGraphContext context) => - { - for (int i = 0; i < data.gbuffer.Length; i++) - { - if (i != data.deferredLights.GBufferLightingIndex) - context.cmd.SetGlobalTexture(DeferredLights.k_GBufferNames[i], data.gbuffer[i]); - } - // If any sub-system needs camera normal texture, make it available. - // Input attachments will only be used when this is not needed so safe to skip in that case - context.cmd.SetGlobalTexture(s_CameraNormalsTextureID, data.gbuffer[data.deferredLights.GBufferNormalSmoothnessIndex]); + // If any sub-system needs camera normal texture, make it available. + // Input attachments will only be used when this is not needed so safe to skip in that case + if (gbuffer[deferredLights.GBufferNormalSmoothnessIndex].IsValid()) + builder.PostSetGlobalTexture(gbuffer[deferredLights.GBufferNormalSmoothnessIndex], s_CameraNormalsTextureID); - if (data.deferredLights.UseRenderingLayers) - { - context.cmd.SetGlobalTexture(DeferredLights.k_GBufferNames[data.deferredLights.GBufferRenderingLayers], data.gbuffer[data.deferredLights.GBufferRenderingLayers]); - context.cmd.SetGlobalTexture("_CameraRenderingLayersTexture", data.gbuffer[data.deferredLights.GBufferRenderingLayers]); - } - }); + if (deferredLights.UseRenderingLayers && gbuffer[deferredLights.GBufferRenderingLayers].IsValid()) + { + builder.PostSetGlobalTexture(gbuffer[deferredLights.GBufferRenderingLayers], Shader.PropertyToID(DeferredLights.k_GBufferNames[deferredLights.GBufferRenderingLayers])); + builder.PostSetGlobalTexture(gbuffer[deferredLights.GBufferRenderingLayers], Shader.PropertyToID("_CameraRenderingLayersTexture")); } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs index 9db0075ebae..af6922b83dd 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs @@ -431,47 +431,36 @@ internal TextureHandle Render(RenderGraph graph, ContextContainer frameData) builder.UseRendererList(passData.shadowRendererListsHandle[cascadeIndex]); } - passData.shadowmapTexture = UniversalRenderer.CreateRenderGraphTexture(graph, m_MainLightShadowmapTexture.rt.descriptor, "Main Shadowmap", true, ShadowUtils.m_ForceShadowPointSampling ? FilterMode.Point : FilterMode.Bilinear); - builder.UseTextureFragmentDepth(passData.shadowmapTexture, IBaseRenderGraphBuilder.AccessFlags.Write); + shadowTexture = UniversalRenderer.CreateRenderGraphTexture(graph, m_MainLightShadowmapTexture.rt.descriptor, "_MainLightShadowmapTexture", true, ShadowUtils.m_ForceShadowPointSampling ? FilterMode.Point : FilterMode.Bilinear); + builder.UseTextureFragmentDepth(shadowTexture, IBaseRenderGraphBuilder.AccessFlags.Write); + } + else + { + shadowTexture = graph.defaultResources.defaultShadowTexture; } // Need this as shadowmap is only used as Global Texture and not a buffer, so would get culled by RG builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); - builder.SetRenderFunc((PassData data, RasterGraphContext context) => - { - if (!data.emptyShadowmap) - data.pass.RenderMainLightCascadeShadowmap(context.cmd, ref data, true); - }); - - shadowTexture = passData.shadowmapTexture; - } - - using (var builder = graph.AddRasterRenderPass("Set Main Shadow Globals", out var passData, base.profilingSampler)) - { - InitEmptyPassData(ref passData, renderingData, cameraData, lightData, shadowData); - - passData.shadowmapTexture = shadowTexture; if (shadowTexture.IsValid()) - builder.UseTexture(shadowTexture, IBaseRenderGraphBuilder.AccessFlags.Read); - - builder.AllowPassCulling(false); - builder.AllowGlobalStateModification(true); + builder.PostSetGlobalTexture(shadowTexture, m_MainLightShadowmapID); builder.SetRenderFunc((PassData data, RasterGraphContext context) => { - if (data.emptyShadowmap) + if (!data.emptyShadowmap) + { + data.pass.RenderMainLightCascadeShadowmap(context.cmd, ref data, true); + } + else { data.pass.SetEmptyMainLightCascadeShadowmap(context.cmd); - data.shadowmapTexture = context.defaultResources.defaultShadowTexture; } - - context.cmd.SetGlobalTexture(data.shadowmapID, data.shadowmapTexture); }); - return passData.shadowmapTexture; } + + return shadowTexture; } }; } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MotionVectorRenderPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MotionVectorRenderPass.cs index 8c53b8f0325..85011dd2055 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MotionVectorRenderPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MotionVectorRenderPass.cs @@ -192,7 +192,7 @@ private void InitRendererLists(ref PassData passData, ref CullingResults cullRes var drawingSettings = GetDrawingSettings(passData.camera, supportsDynamicBatching); var filteringSettings = new FilteringSettings(RenderQueueRange.opaque, passData.camera.cullingMask); var renderStateBlock = new RenderStateBlock(RenderStateMask.Nothing); - if(useRenderGraph) + if (useRenderGraph) RenderingUtils.CreateRendererListWithRenderStateBlock(renderGraph, ref cullResults, drawingSettings, filteringSettings, renderStateBlock, ref passData.rendererListHdl); else RenderingUtils.CreateRendererListWithRenderStateBlock(context, ref cullResults, drawingSettings, filteringSettings, renderStateBlock, ref passData.rendererList); @@ -218,14 +218,16 @@ internal void Render(RenderGraph renderGraph, ContextContainer frameData, Textur default(ScriptableRenderContext), renderGraph, true); builder.UseRendererList(passData.rendererListHdl); + if (motionVectorColor.IsValid()) + builder.PostSetGlobalTexture(motionVectorColor, Shader.PropertyToID(k_MotionVectorTextureName)); + if (motionVectorDepth.IsValid()) + builder.PostSetGlobalTexture(motionVectorDepth, Shader.PropertyToID(k_MotionVectorDepthTextureName)); + builder.SetRenderFunc((PassData data, RasterGraphContext context) => { ExecutePass(context.cmd, data, data.rendererListHdl); }); } - - RenderGraphUtils.SetGlobalTexture(renderGraph,k_MotionVectorTextureName, motionVectorColor, "Set Motion Vector Color Texture"); - RenderGraphUtils.SetGlobalTexture(renderGraph,k_MotionVectorDepthTextureName, motionVectorDepth, "Set Motion Vector Depth Texture"); } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPass.cs index d382c763616..5be89bad675 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPass.cs @@ -85,10 +85,10 @@ internal partial class PostProcessPass : ScriptableRenderPass // Use Fast conversions between SRGB and Linear bool m_UseFastSRGBLinearConversion; - + // Support Screen Space Lens Flare post process effect bool m_SupportScreenSpaceLensFlare; - + // Support Data Driven Lens Flare post process effect bool m_SupportDataDrivenLensFlare; @@ -1670,6 +1670,7 @@ class MaterialLibrary public readonly Material cameraMotionBlur; public readonly Material paniniProjection; public readonly Material bloom; + public readonly Material[] bloomUpsample; public readonly Material temporalAntialiasing; public readonly Material scalingSetup; public readonly Material easu; @@ -1698,6 +1699,10 @@ public MaterialLibrary(PostProcessData data) finalPass = Load(data.shaders.finalPostPassPS); lensFlareDataDriven = Load(data.shaders.LensFlareDataDrivenPS); lensFlareScreenSpace = Load(data.shaders.LensFlareScreenSpacePS); + + bloomUpsample = new Material[k_MaxPyramidSize]; + for (uint i = 0; i < k_MaxPyramidSize; ++i) + bloomUpsample[i] = Load(data.shaders.bloomPS); } Material Load(Shader shader) @@ -1731,6 +1736,9 @@ internal void Cleanup() CoreUtils.Destroy(finalPass); CoreUtils.Destroy(lensFlareDataDriven); CoreUtils.Destroy(lensFlareScreenSpace); + + for (uint i = 0; i < k_MaxPyramidSize; ++i) + CoreUtils.Destroy(bloomUpsample[i]); } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs index 885b8bea206..79b7596d80e 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs @@ -191,8 +191,7 @@ public void RenderSMAA(RenderGraph renderGraph, UniversalResourceData resourceDa RTHandle sourceTextureHdl = data.sourceTexture; // Pass 3: Neighborhood blending - cmd.SetGlobalTexture(ShaderConstants._BlendTexture, data.blendTexture); - + SMAAMaterial.SetTexture(ShaderConstants._BlendTexture, data.blendTexture); Vector2 viewportScale = sourceTextureHdl.useScaling ? new Vector2(sourceTextureHdl.rtHandleProperties.rtHandleScale.x, sourceTextureHdl.rtHandleProperties.rtHandleScale.y) : Vector2.one; Blitter.BlitTexture(cmd, sourceTextureHdl, viewportScale, SMAAMaterial, 2); }); @@ -281,6 +280,7 @@ private class BloomSetupPassData internal bool highQualityFilteringValue; internal bool useRGBM; internal Material material; + internal Material[] upsampleMaterials; } private class BloomPassData @@ -330,6 +330,7 @@ public void RenderBloomTexture(RenderGraph renderGraph, in TextureHandle source, passData.highQualityFilteringValue = m_Bloom.highQualityFiltering.value; passData.useRGBM = m_UseRGBM; passData.material = bloomMaterial; + passData.upsampleMaterials = m_Materials.bloomUpsample; // TODO RENDERGRAPH: properly setup dependencies between passes builder.AllowPassCulling(false); @@ -341,6 +342,13 @@ public void RenderBloomTexture(RenderGraph renderGraph, in TextureHandle source, bloomMaterial.SetVector(ShaderConstants._Params, data.bloomParams); CoreUtils.SetKeyword(bloomMaterial, ShaderKeywordStrings.BloomHQ, data.highQualityFilteringValue); CoreUtils.SetKeyword(bloomMaterial, ShaderKeywordStrings.UseRGBM, data.useRGBM); + + for (uint i = 0; i < k_MaxPyramidSize; ++i) + { + data.upsampleMaterials[i].SetVector(ShaderConstants._Params, data.bloomParams); + CoreUtils.SetKeyword(data.upsampleMaterials[i], ShaderKeywordStrings.BloomHQ, data.highQualityFilteringValue); + CoreUtils.SetKeyword(data.upsampleMaterials[i], ShaderKeywordStrings.UseRGBM, data.useRGBM); + } }); } @@ -433,7 +441,10 @@ public void RenderBloomTexture(RenderGraph renderGraph, in TextureHandle source, builder.AllowGlobalStateModification(true); passData.sourceTexture = builder.UseTexture(highMip, IBaseRenderGraphBuilder.AccessFlags.Read); passData.sourceTextureLowMip = builder.UseTexture(lowMip, IBaseRenderGraphBuilder.AccessFlags.Read); - passData.material = bloomMaterial; + + // We need a separate material for each upsample pass because setting the low texture mip source + // gets overriden by the time the render func is executed. + passData.material = m_Materials.bloomUpsample[i]; builder.SetRenderFunc((BloomPassData data, RasterGraphContext context) => { @@ -441,7 +452,7 @@ public void RenderBloomTexture(RenderGraph renderGraph, in TextureHandle source, var cmd = context.cmd; RTHandle sourceTextureHdl = data.sourceTexture; - cmd.SetGlobalTexture(ShaderConstants._SourceTexLowMip, data.sourceTextureLowMip); + data.material.SetTexture(ShaderConstants._SourceTexLowMip, data.sourceTextureLowMip); Vector2 viewportScale = sourceTextureHdl.useScaling ? new Vector2(sourceTextureHdl.rtHandleProperties.rtHandleScale.x, sourceTextureHdl.rtHandleProperties.rtHandleScale.y) : Vector2.one; Blitter.BlitTexture(cmd, sourceTextureHdl, viewportScale, material, 3); @@ -582,8 +593,7 @@ public void RenderDoFGaussian(RenderGraph renderGraph, UniversalResourceData res RTHandle sourceTextureHdl = data.sourceTexture; // Downscale & prefilter color + coc - cmd.SetGlobalTexture(ShaderConstants._FullCoCTexture, data.cocTexture); - + dofmaterial.SetTexture(ShaderConstants._FullCoCTexture, data.cocTexture); Vector2 viewportScale = sourceTextureHdl.useScaling ? new Vector2(sourceTextureHdl.rtHandleProperties.rtHandleScale.x, sourceTextureHdl.rtHandleProperties.rtHandleScale.y) : Vector2.one; Blitter.BlitTexture(cmd, sourceTextureHdl, viewportScale, dofmaterial, 1); }); @@ -604,7 +614,7 @@ public void RenderDoFGaussian(RenderGraph renderGraph, UniversalResourceData res RTHandle sourceTexture = data.sourceTexture; // Blur - cmd.SetGlobalTexture(ShaderConstants._HalfCoCTexture, data.cocTexture); + dofmaterial.SetTexture(ShaderConstants._HalfCoCTexture, data.cocTexture); Vector2 viewportScale = sourceTexture.useScaling ? new Vector2(sourceTexture.rtHandleProperties.rtHandleScale.x, sourceTexture.rtHandleProperties.rtHandleScale.y) : Vector2.one; Blitter.BlitTexture(cmd, sourceTexture, viewportScale, dofmaterial, 2); }); @@ -625,7 +635,7 @@ public void RenderDoFGaussian(RenderGraph renderGraph, UniversalResourceData res RTHandle sourceTextureHdl = data.sourceTexture; // Blur - cmd.SetGlobalTexture(ShaderConstants._HalfCoCTexture, data.cocTexture); + dofmaterial.SetTexture(ShaderConstants._HalfCoCTexture, data.cocTexture); Vector2 viewportScale = sourceTextureHdl.useScaling ? new Vector2(sourceTextureHdl.rtHandleProperties.rtHandleScale.x, sourceTextureHdl.rtHandleProperties.rtHandleScale.y) : Vector2.one; Blitter.BlitTexture(cmd, sourceTextureHdl, viewportScale, dofmaterial, 3); }); @@ -647,9 +657,8 @@ public void RenderDoFGaussian(RenderGraph renderGraph, UniversalResourceData res RTHandle sourceTextureHdl = data.sourceTexture; // Composite - cmd.SetGlobalTexture(ShaderConstants._ColorTexture, data.colorTexture); - cmd.SetGlobalTexture(ShaderConstants._FullCoCTexture, data.cocTexture); - + dofmaterial.SetTexture(ShaderConstants._ColorTexture, data.colorTexture); + dofmaterial.SetTexture(ShaderConstants._FullCoCTexture, data.cocTexture); Vector2 viewportScale = sourceTextureHdl.useScaling ? new Vector2(sourceTextureHdl.rtHandleProperties.rtHandleScale.x, sourceTextureHdl.rtHandleProperties.rtHandleScale.y) : Vector2.one; Blitter.BlitTexture(cmd, sourceTextureHdl, viewportScale, dofmaterial, 4); }); @@ -773,7 +782,7 @@ public void RenderDoFBokeh(RenderGraph renderGraph, UniversalResourceData resour RTHandle sourceTextureHdl = data.sourceTexture; // Downscale & prefilter color + coc - cmd.SetGlobalTexture(ShaderConstants._FullCoCTexture, data.cocTexture); + dofmaterial.SetTexture(ShaderConstants._FullCoCTexture, data.cocTexture); Vector2 viewportScale = sourceTextureHdl.useScaling ? new Vector2(sourceTextureHdl.rtHandleProperties.rtHandleScale.x, sourceTextureHdl.rtHandleProperties.rtHandleScale.y) : Vector2.one; Blitter.BlitTexture(cmd, sourceTextureHdl, viewportScale, dofmaterial, 1); }); @@ -833,7 +842,7 @@ public void RenderDoFBokeh(RenderGraph renderGraph, UniversalResourceData resour // Composite // TODO RENDERGRAPH: Look into loadstore op in BlitDstDiscardContent - cmd.SetGlobalTexture(ShaderConstants._DofTexture, data.dofTexture); + dofmaterial.SetTexture(ShaderConstants._DofTexture, data.dofTexture); Vector2 viewportScale = sourceTextureHdl.useScaling ? new Vector2(sourceTextureHdl.rtHandleProperties.rtHandleScale.x, sourceTextureHdl.rtHandleProperties.rtHandleScale.y) : Vector2.one; Blitter.BlitTexture(cmd, sourceTextureHdl, viewportScale, dofmaterial, 4); }); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScreenSpaceAmbientOcclusionPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScreenSpaceAmbientOcclusionPass.cs index 7b6f7052bbd..66868132957 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScreenSpaceAmbientOcclusionPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/ScreenSpaceAmbientOcclusionPass.cs @@ -323,6 +323,8 @@ private class PassData internal Material material; internal TextureHandle source; internal TextureHandle destination; + internal TextureHandle depthTexture; + internal TextureHandle normalTexture; } private void InitSetupPassData(ref SetupPassData data) @@ -358,7 +360,8 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer ExecuteSetupPass(renderGraph, cameraData, resourceData); // Ambient Occlusion Pass... - ExecuteOcclusionPass(renderGraph, resourceData, in aoTexture); + UniversalRenderer renderer = cameraData.renderer as UniversalRenderer; + ExecuteOcclusionPass(renderGraph, resourceData, in aoTexture, renderer.renderingModeActual); // Blur & Upsample Passes... switch (m_BlurType) @@ -375,10 +378,6 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer default: throw new ArgumentOutOfRangeException(); } - - // The global SSAO texture only needs to be set if After Opaque is disabled... - if (!m_CurrentSettings.AfterOpaque) - RenderGraphUtils.SetGlobalTexture(renderGraph,k_SSAOTextureName, finalTexture, "Set SSAO Texture"); } private void ExecuteSetupPass(RenderGraph renderGraph, UniversalCameraData cameraData, UniversalResourceData resourceData) @@ -437,7 +436,7 @@ private void CreateRenderTextureHandles(RenderGraph renderGraph, UniversalResour resourceData.ssaoTexture = finalTexture; } - private void ExecuteOcclusionPass(RenderGraph renderGraph, UniversalResourceData resourceData, in TextureHandle aoTexture) + private void ExecuteOcclusionPass(RenderGraph renderGraph, UniversalResourceData resourceData, in TextureHandle aoTexture, RenderingMode renderingMode) { using (IRasterRenderGraphBuilder builder = renderGraph.AddRasterRenderPass("SSAO_Occlusion", out PassData passData, m_ProfilingSampler)) { @@ -450,15 +449,17 @@ private void ExecuteOcclusionPass(RenderGraph renderGraph, UniversalResourceData builder.UseTextureFragment(aoTexture, 0, IBaseRenderGraphBuilder.AccessFlags.Write); // Get the resources - TextureHandle cameraDepthTexture = resourceData.cameraDepthTexture; + TextureHandle cameraDepthTexture = renderingMode == RenderingMode.Deferred ? resourceData.activeDepthTexture : resourceData.cameraDepthTexture; TextureHandle cameraNormalsTexture = resourceData.cameraNormalsTexture; if (cameraDepthTexture.IsValid()) - builder.UseTexture(cameraDepthTexture, IBaseRenderGraphBuilder.AccessFlags.Read); + passData.depthTexture = builder.UseTexture(cameraDepthTexture, IBaseRenderGraphBuilder.AccessFlags.Read); if (m_CurrentSettings.Source == ScreenSpaceAmbientOcclusionSettings.DepthSource.DepthNormals) + { if (cameraNormalsTexture.IsValid()) - builder.UseTexture(cameraNormalsTexture, IBaseRenderGraphBuilder.AccessFlags.Read); + passData.normalTexture = builder.UseTexture(cameraNormalsTexture, IBaseRenderGraphBuilder.AccessFlags.Read); + } builder.SetRenderFunc((data, context) => RenderGraphRenderFunc(data, context)); } @@ -499,6 +500,10 @@ private void ExecuteBilateralBlurPasses(RenderGraph renderGraph, in TextureHandl passData.afterOpaque = m_CurrentSettings.AfterOpaque; passData.shaderPassID = (int) (passData.afterOpaque ? ShaderPasses.BilateralAfterOpaque : ShaderPasses.BilateralBlurFinal); + // The global SSAO texture only needs to be set if After Opaque is disabled... + if (!m_CurrentSettings.AfterOpaque && finalTexture.IsValid()) + builder.PostSetGlobalTexture(finalTexture, Shader.PropertyToID(k_SSAOTextureName)); + // Set up the builder builder.SetRenderFunc((data, context) => RenderGraphRenderFunc(data, context)); } @@ -527,6 +532,10 @@ private void ExecuteGaussianBlurPasses(RenderGraph renderGraph, in TextureHandle passData.afterOpaque = m_CurrentSettings.AfterOpaque; passData.shaderPassID = (int) (passData.afterOpaque ? ShaderPasses.GaussianAfterOpaque : ShaderPasses.GaussianBlurVertical); + // The global SSAO texture only needs to be set if After Opaque is disabled... + if (!m_CurrentSettings.AfterOpaque && finalTexture.IsValid()) + builder.PostSetGlobalTexture(finalTexture, Shader.PropertyToID(k_SSAOTextureName)); + // Set up the builder builder.SetRenderFunc((data, context) => RenderGraphRenderFunc(data, context)); } @@ -543,6 +552,10 @@ private void ExecuteKawaseBlurPasses(RenderGraph renderGraph, in TextureHandle a passData.afterOpaque = m_CurrentSettings.AfterOpaque; passData.shaderPassID = (int) (passData.afterOpaque ? ShaderPasses.KawaseAfterOpaque : ShaderPasses.KawaseBlur); + // The global SSAO texture only needs to be set if After Opaque is disabled... + if (!m_CurrentSettings.AfterOpaque && finalTexture.IsValid()) + builder.PostSetGlobalTexture(finalTexture, Shader.PropertyToID(k_SSAOTextureName)); + // Set up the builder builder.SetRenderFunc((data, context) => RenderGraphRenderFunc(data, context)); } @@ -550,6 +563,11 @@ private void ExecuteKawaseBlurPasses(RenderGraph renderGraph, in TextureHandle a private static void RenderGraphRenderFunc(PassData data, RasterGraphContext context) { + if (data.depthTexture.IsValid()) + data.material.SetTexture(Shader.PropertyToID("_CameraDepthTexture"), data.depthTexture); + if (data.normalTexture.IsValid()) + data.material.SetTexture(Shader.PropertyToID("_CameraNormalsTexture"), data.normalTexture); + Blitter.BlitTexture(context.cmd, data.source, Vector2.one, data.material, data.shaderPassID); } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/ScreenSpaceShadows.cs b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/ScreenSpaceShadows.cs index 3ed216b76ac..718ff6e7b0a 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/ScreenSpaceShadows.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/ScreenSpaceShadows.cs @@ -197,13 +197,14 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer InitPassData(ref passData); builder.AllowGlobalStateModification(true); + if (color.IsValid()) + builder.PostSetGlobalTexture(color, m_ScreenSpaceShadowmapTextureID); + builder.SetRenderFunc((PassData data, RasterGraphContext rgContext) => { ExecutePass(rgContext.cmd, data, data.target); }); } - - RenderGraphUtils.SetGlobalTexture(renderGraph, m_ScreenSpaceShadowmapTextureID, color); } private static void ExecutePass(RasterCommandBuffer cmd, PassData data, RTHandle target) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs index 94cc7901591..7347a3a544a 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs @@ -766,7 +766,7 @@ public virtual void FinishRendering(CommandBuffer cmd) /// /// Override this method to initialize before recording the render graph, such as resources. /// - internal virtual void OnBeginRenderGraphFrame() + public virtual void OnBeginRenderGraphFrame() { } @@ -782,7 +782,7 @@ internal virtual void OnRecordRenderGraph(RenderGraph renderGraph, ScriptableRen /// /// Override this method to cleanup things after recording the render graph, such as resources. /// - internal virtual void OnEndRenderGraphFrame() + public virtual void OnEndRenderGraphFrame() { } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index a7bd4f51090..560d832d90c 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -1705,6 +1705,6 @@ internal override void EnableSwapBufferMSAA(bool enable) m_ColorBufferSystem.EnableMSAA(enable); } - internal override bool supportsNativeRenderPassRendergraphCompiler { get => true; } + internal override bool supportsNativeRenderPassRendergraphCompiler { get => SystemInfo.graphicsDeviceType != GraphicsDeviceType.Direct3D12; } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs index 21acfb1dd58..9d7d3b02fb8 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs @@ -619,7 +619,10 @@ internal void SetupRenderGraphLights(RenderGraph renderGraph, UniversalRendering } } - internal override void OnBeginRenderGraphFrame() + /// + /// Called before recording the render graph. Can be used to initialize resources. + /// + public override void OnBeginRenderGraphFrame() { UniversalResourceData resourceData = frameData.Get(); resourceData.InitFrame(); @@ -675,7 +678,10 @@ internal override void OnRecordRenderGraph(RenderGraph renderGraph, ScriptableRe EndRenderGraphXRRendering(renderGraph); } - internal override void OnEndRenderGraphFrame() + /// + /// Called after recording the render graph. Can be used to clean up resources. + /// + public override void OnEndRenderGraphFrame() { UniversalResourceData resourceData = frameData.Get(); resourceData.EndFrame(); @@ -791,9 +797,16 @@ private void OnMainRendering(RenderGraph renderGraph, ScriptableRenderContext co depthTarget = (useDepthPriming && (cameraData.renderType == CameraRenderType.Base || cameraData.clearDepth)) ? resourceData.activeDepthTexture : depthTarget; if (renderPassInputs.requiresNormalsTexture) + { DepthNormalPrepassRender(renderGraph, renderPassInputs, depthTarget); + } else + { m_DepthPrepass.Render(renderGraph, frameData, ref depthTarget); + + if (!useDepthPriming && depthTarget.IsValid()) + RenderGraphUtils.SetGlobalTexture(renderGraph, Shader.PropertyToID("_CameraDepthTexture"), depthTarget, "Set Global Depth Texture"); + } } // depth priming still needs to copy depth because the prepass doesn't target anymore CameraDepthTexture @@ -805,9 +818,6 @@ private void OnMainRendering(RenderGraph renderGraph, ScriptableRenderContext co m_PrimedDepthCopyPass.Render(renderGraph, frameData, cameraDepthTexture, depth, true); } - if (cameraData.renderType == CameraRenderType.Base && !requiresDepthPrepass && !requiresDepthCopyPass) - RenderGraphUtils.SetGlobalTexture(renderGraph, "_CameraDepthTexture", SystemInfo.usesReversedZBuffer ? renderGraph.defaultResources.blackTexture : renderGraph.defaultResources.whiteTexture, "Set default Camera Depth Texture"); - RecordCustomRenderGraphPasses(renderGraph, RenderPassEvent.AfterRenderingPrePasses); if (requiredColorGradingLutPass) @@ -1226,10 +1236,8 @@ internal void SetRenderingLayersGlobalTextures(RenderGraph renderGraph) { UniversalResourceData resourceData = frameData.Get(); - RenderGraphUtils.SetGlobalTexture(renderGraph, m_RenderingLayersTextureName, resourceData.renderingLayersTexture, "Set Rendering Layers Texture"); - - if (renderingModeActual == RenderingMode.Deferred) // As this is requested by render pass we still want to set it - RenderGraphUtils.SetGlobalTexture(renderGraph, "_CameraRenderingLayersTexture", resourceData.renderingLayersTexture, "Set Deferred Rendering Layers Texture"); + if (resourceData.renderingLayersTexture.IsValid() && renderingModeActual != RenderingMode.Deferred) + RenderGraphUtils.SetGlobalTexture(renderGraph, Shader.PropertyToID(m_RenderingLayersTextureName), resourceData.renderingLayersTexture, "Set Global Rendering Layers Texture"); } void CreateCameraDepthCopyTexture(RenderGraph renderGraph, RenderTextureDescriptor descriptor, bool isDepthTexture) @@ -1381,54 +1389,23 @@ internal static void UseDBufferIfValid(IRasterRenderGraphBuilder builder, Univer private class PassData { internal TextureHandle texture; - internal string name; internal int nameID; } - /// - /// Records a RenderGraph pass that binds a global texture - /// - /// - /// - /// - /// - public static void SetGlobalTexture(RenderGraph graph, string name, TextureHandle texture, string passName = "Set Global Texture") + public static void SetGlobalTexture(RenderGraph graph, int nameId, TextureHandle handle, string passName = "Set Global Texture") { using (var builder = graph.AddRasterRenderPass(passName, out var passData, s_SetGlobalTextureProfilingSampler)) { - passData.texture = builder.UseTexture(texture, IBaseRenderGraphBuilder.AccessFlags.Read); - passData.name = name; + passData.nameID = nameId; + passData.texture = builder.UseTexture(handle, IBaseRenderGraphBuilder.AccessFlags.Read); builder.AllowPassCulling(false); builder.AllowGlobalStateModification(true); - builder.SetRenderFunc((PassData data, RasterGraphContext context) => - { - context.cmd.SetGlobalTexture(data.name, data.texture); - }); - } - } - - /// - /// Records a RenderGraph pass that binds a global texture - /// - /// - /// - /// - /// - public static void SetGlobalTexture(RenderGraph graph, int nameID, TextureHandle texture, string passName = "Set Global Texture") - { - using (var builder = graph.AddRasterRenderPass(passName, out var passData, s_SetGlobalTextureProfilingSampler)) - { - passData.texture = builder.UseTexture(texture, IBaseRenderGraphBuilder.AccessFlags.Read); - passData.nameID = nameID; - - builder.AllowPassCulling(false); - builder.AllowGlobalStateModification(true); + builder.PostSetGlobalTexture(handle, nameId); builder.SetRenderFunc((PassData data, RasterGraphContext context) => { - context.cmd.SetGlobalTexture(data.nameID, data.texture); }); } } diff --git a/Tests/SRPTests/Packages/com.unity.testing.urp/Scripts/Runtime/CustomRenderPipeline/CustomRenderer.cs b/Tests/SRPTests/Packages/com.unity.testing.urp/Scripts/Runtime/CustomRenderPipeline/CustomRenderer.cs index 542f9d7038c..c6153cb04a6 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.urp/Scripts/Runtime/CustomRenderPipeline/CustomRenderer.cs +++ b/Tests/SRPTests/Packages/com.unity.testing.urp/Scripts/Runtime/CustomRenderPipeline/CustomRenderer.cs @@ -73,13 +73,13 @@ private void SetupRenderGraphLights(RenderGraph renderGraph) m_ForwardLights.SetupRenderGraphLights(renderGraph, renderingData ,cameraData, lightData); } - internal override void OnBeginRenderGraphFrame() + public override void OnBeginRenderGraphFrame() { UniversalResourceData resourceData = frameData.Get(); resourceData.InitFrame(); } - internal override void OnEndRenderGraphFrame() + public override void OnEndRenderGraphFrame() { UniversalResourceData resourceData = frameData.Get(); resourceData.EndFrame(); diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/190_SampleDepth/CopyDepthPrepassFeature.cs b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/190_SampleDepth/CopyDepthPrepassFeature.cs index 0308c9f5973..b405b04445e 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/190_SampleDepth/CopyDepthPrepassFeature.cs +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/190_SampleDepth/CopyDepthPrepassFeature.cs @@ -152,8 +152,8 @@ public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer TextureHandle copiedDepth2 = UniversalRenderer.CreateRenderGraphTexture(renderGraph, depthDesc, "CopiedDepth2", false); m_CopyDepthPass1.Render(renderGraph, copiedDepth1, activeDepth, resourceData, cameraData, false, "First Copy"); - m_CopyDepthPass1.Render(renderGraph, copiedDepth2, copiedDepth1, resourceData, cameraData, false, "Second Copy"); - m_CopyDepthPass1.Render(renderGraph, activeDepth, copiedDepth2, resourceData, cameraData, false, "Third Copy"); + m_CopyDepthPass2.Render(renderGraph, copiedDepth2, copiedDepth1, resourceData, cameraData, false, "Second Copy"); + m_CopyDepthPass3.Render(renderGraph, activeDepth, copiedDepth2, resourceData, cameraData, false, "Third Copy"); } public void Dispose() From d9b3105ac153c5cb3aeb114ef67f18a15b476c09 Mon Sep 17 00:00:00 2001 From: Kleber Garcia Date: Fri, 13 Oct 2023 19:47:23 +0000 Subject: [PATCH 19/27] [Jira # UUM-52109] Fixing half res transparent hardware DRS off by 1 Fixing issues with hardware DRS on console (manifestation is usually bright qnan pixels on the right of the screen). Lowres transparent (aka half res transparent) can be off by one pixel with the hardware resolution dynamic scale. The reason is a small mismatch between RTHandle and the runtime. Unfortunately fixing this problem might require a heavier rewrite to ensure the RTHandle scale works well. As a fix we can compute the error of this scale and plumb it in as a custom DRS scaler (only for the HW path) and fix the issue. Issue only present on xbox as qnans in the border (triggered by only certain resolutions using hardware DRS with transparent lowres). --- .../Runtime/RenderPipeline/Camera/HDCamera.cs | 40 ++++++++++++++++++- .../HDRenderPipeline.Prepass.cs | 11 ++--- .../HDRenderPipeline.RenderGraph.cs | 7 +++- .../ShaderLibrary/UpsampleTransparent.shader | 9 +++-- 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Camera/HDCamera.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Camera/HDCamera.cs index a564eb72b42..f640c56d574 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Camera/HDCamera.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Camera/HDCamera.cs @@ -442,8 +442,41 @@ internal void Set(VisualEnvironment visualEnv, Vector3 camPosWS) private Camera m_parentCamera = null; // Used for recursive rendering, e.g. a reflection in a scene view. internal Camera parentCamera { get { return m_parentCamera; } } + private Vector2 m_LowResHWDRSFactor = new Vector2(0.0f, 0.0f); + + internal Vector2 lowResDrsFactor => DynamicResolutionHandler.instance.HardwareDynamicResIsEnabled() ? m_LowResHWDRSFactor : new Vector2(RTHandles.rtHandleProperties.rtHandleScale.x, RTHandles.rtHandleProperties.rtHandleScale.y); internal float lowResScale = 0.5f; internal bool isLowResScaleHalf { get { return lowResScale == 0.5f; } } + internal Rect lowResViewport + { + get + { + return new Rect( + 0.0f, 0.0f, + (float)Mathf.RoundToInt(((float)actualWidth) * lowResScale), + (float)Mathf.RoundToInt(((float)actualHeight) * lowResScale)); + } + } + + static private Vector2 CalculateLowResHWDrsFactor(Vector2Int scaledSize, DynamicResolutionHandler resolutionHandler, float lowResFactor) + { + // This function fixes some float precision issues against the runtime + drs system + low res transparency (on hardware DRS only). + // + // In hardware DRS the actual size underneath can be different because the runtime does a computation the following way: + // finalLowRes = ceil(round(fullRes * lowResMultiplier) * drsPerc) + // + // meanwhile the SRP does it this way: + // finalLowRes = round(ceil(fullRes * drsPerc) * lowResMultiplier) + // + // Unfortunately changing this would cause quite a bit of unknowns all over since its a change required on RTHandle scaling. + // Its safer to fix it case by case for now, and this problem has only been seen on xb1 HW drs on low res transparent. + // In this case we compute the error between both computations, and plumb it as the DRS percentate. This ultimately means that low res transparency. + // + Vector2Int originalLowResHWViewport = new Vector2Int(Mathf.RoundToInt((float)RTHandles.maxWidth * lowResFactor), Mathf.RoundToInt((float)RTHandles.maxHeight * lowResFactor)); + Vector2Int lowResHWViewport = resolutionHandler.GetScaledSize(originalLowResHWViewport); + Vector2 lowResViewport = new Vector2(Mathf.RoundToInt((float)scaledSize.x * lowResFactor), Mathf.RoundToInt((float)scaledSize.y * lowResFactor)); + return lowResViewport / (Vector2)lowResHWViewport; + } //Setting a parent camera also tries to use the parent's camera exposure textures. //One example is planar reflection probe volume being pre exposed. @@ -1190,13 +1223,18 @@ internal void Update(FrameSettings currentFrameSettings, HDRenderPipeline hdrp, m_DepthBufferMipChainInfo.ComputePackedMipChainInfo(nonScaledViewport); lowResScale = 0.5f; + m_LowResHWDRSFactor = Vector2.one; if (canDoDynamicResolution) { - Vector2Int scaledSize = DynamicResolutionHandler.instance.GetScaledSize(new Vector2Int(actualWidth, actualHeight)); + Vector2Int orignalSize = new Vector2Int(actualWidth, actualHeight); + Vector2Int scaledSize = DynamicResolutionHandler.instance.GetScaledSize(orignalSize); actualWidth = scaledSize.x; actualHeight = scaledSize.y; globalMipBias += DynamicResolutionHandler.instance.CalculateMipBias(scaledSize, nonScaledViewport, UpsampleSyncPoint() <= DynamicResolutionHandler.UpsamplerScheduleType.AfterDepthOfField); + + //setting up constants for low resolution rendering (i.e. transparent low res) lowResScale = DynamicResolutionHandler.instance.GetLowResMultiplier(lowResScale); + m_LowResHWDRSFactor = CalculateLowResHWDrsFactor(scaledSize, DynamicResolutionHandler.instance, lowResScale); } var screenWidth = actualWidth; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.Prepass.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.Prepass.cs index b72e066c81a..a70a1aa8158 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.Prepass.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.Prepass.cs @@ -1329,12 +1329,11 @@ void DecalNormalPatch(RenderGraph renderGraph, HDCamera hdCamera, ref PrepassOut class DownsampleDepthForLowResPassData { public bool useGatherDownsample; - public float sourceWidth; - public float sourceHeight; public float downsampleScale; public Material downsampleDepthMaterial; public TextureHandle depthTexture; public TextureHandle downsampledDepthBuffer; + public Rect viewport; // Data needed for potentially writing public Vector2Int mip0Offset; @@ -1375,8 +1374,7 @@ void DownsampleDepthForLowResTransparency(RenderGraph renderGraph, HDCamera hdCa passData.computesMip1OfAtlas = computeMip1OfPyramid; passData.downsampleScale = hdCamera.lowResScale; - passData.sourceWidth = hdCamera.actualWidth; - passData.sourceHeight = hdCamera.actualHeight; + passData.viewport = hdCamera.lowResViewport; passData.depthTexture = builder.ReadTexture(output.depthPyramidTexture); if (computeMip1OfPyramid) { @@ -1405,10 +1403,7 @@ void DownsampleDepthForLowResTransparency(RenderGraph renderGraph, HDCamera hdCa data.downsampleDepthMaterial.SetVector(HDShaderIDs._ScaleBias, new Vector4(uvScaleX, uvScaleY, 0.0f, 0.0f)); } - float destWidth = data.sourceWidth * data.downsampleScale; - float destHeight = data.sourceHeight * data.downsampleScale; - Rect targetViewport = new Rect(0.0f, 0.0f, destWidth, destHeight); - context.cmd.SetViewport(targetViewport); + context.cmd.SetViewport(data.viewport); context.cmd.DrawProcedural(Matrix4x4.identity, data.downsampleDepthMaterial, 0, MeshTopology.Triangles, 3, 1, null); if (data.computesMip1OfAtlas) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs index 0866aa1833b..717dd7a0fa4 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.RenderGraph.cs @@ -1319,6 +1319,7 @@ class RenderLowResTransparentPassData public ShaderVariablesGlobal globalCB; public FrameSettings frameSettings; public RendererListHandle rendererList; + public Rect viewport; } TextureHandle RenderLowResTransparent(RenderGraph renderGraph, HDCamera hdCamera, TextureHandle downsampledDepth, CullingResults cullingResults, RendererListHandle rendererList) @@ -1329,6 +1330,7 @@ TextureHandle RenderLowResTransparent(RenderGraph renderGraph, HDCamera hdCamera passData.lowResScale = hdCamera.lowResScale; passData.frameSettings = hdCamera.frameSettings; passData.rendererList = builder.UseRendererList(rendererList); + passData.viewport = hdCamera.lowResViewport; builder.UseDepthBuffer(downsampledDepth, DepthAccess.ReadWrite); // We need R16G16B16A16_SFloat as we need a proper alpha channel for compositing. var output = builder.UseColorBuffer(renderGraph.CreateTexture(new TextureDesc(Vector2.one * hdCamera.lowResScale, true, true) @@ -1340,6 +1342,7 @@ TextureHandle RenderLowResTransparent(RenderGraph renderGraph, HDCamera hdCamera UpdateOffscreenRenderingConstants(ref data.globalCB, true, 1.0f / data.lowResScale); ConstantBuffer.PushGlobal(context.cmd, data.globalCB, HDShaderIDs._ShaderVariablesGlobal); + context.cmd.SetViewport(data.viewport); DrawTransparentRendererList(context.renderContext, context.cmd, data.frameSettings, data.rendererList); UpdateOffscreenRenderingConstants(ref data.globalCB, false, 1.0f); @@ -1411,7 +1414,9 @@ void CombineAndUpsampleTransparent(RenderGraph renderGraph, HDCamera hdCamera, T passData.passIndex = 1; passData.upsampleMaterial = m_UpsampleTransparency; - passData.shaderParams = new Vector4(hdCamera.lowResScale, 1.0f / hdCamera.lowResScale, 0.0f, 0.0f); + + Vector2 lowResDrsFactor = hdCamera.lowResDrsFactor; + passData.shaderParams = new Vector4(hdCamera.lowResScale, 1.0f / hdCamera.lowResScale, lowResDrsFactor.x, lowResDrsFactor.y); passData.lowResTransparentBuffer = builder.ReadTexture(lowResTransparentBuffer); passData.downsampledDepthBuffer = builder.ReadTexture(downsampledDepthBuffer); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/UpsampleTransparent.shader b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/UpsampleTransparent.shader index 1c37fa4477b..18726abbc46 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/UpsampleTransparent.shader +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/UpsampleTransparent.shader @@ -48,12 +48,13 @@ Shader "Hidden/HDRP/UpsampleTransparent" { float2 fullResTexelSize = _ScreenSize.zw; float2 halfResTexelSize = _Params.y * fullResTexelSize; + float2 lowResDRSScale = _Params.zw; #ifdef NEAREST_DEPTH // The following is an implementation of NVIDIA's http://developer.download.nvidia.com/assets/gamedev/files/sdk/11/OpacityMappingSDKWhitePaper.pdf - float4 lowResDepths = GATHER_RED_TEXTURE2D_X(_LowResDepthTexture, s_linear_clamp_sampler, ClampAndScaleUVForBilinear(uv, halfResTexelSize)); + float4 lowResDepths = GATHER_RED_TEXTURE2D_X(_LowResDepthTexture, s_linear_clamp_sampler, ClampAndScaleUV(uv, halfResTexelSize, 0.5, lowResDRSScale)); // Gather UVs float2 topLeftUV = uv - 0.5f * halfResTexelSize; @@ -88,7 +89,7 @@ Shader "Hidden/HDRP/UpsampleTransparent" if (countBelowThresh == NEIGHBOUR_SEARCH) { // Bilinear. - return SAMPLE_TEXTURE2D_X_LOD(_LowResTransparent, s_linear_clamp_sampler, ClampAndScaleUVForBilinear(uv, halfResTexelSize), 0); + return SAMPLE_TEXTURE2D_X_LOD(_LowResTransparent, s_linear_clamp_sampler, ClampAndScaleUV(uv, halfResTexelSize, 0.5, lowResDRSScale), 0); } else { @@ -98,12 +99,12 @@ Shader "Hidden/HDRP/UpsampleTransparent" #else // Important note! The reason we need to do ClampAndScaleUVForBilinear is because the candidate for nearestUV are going to be the ones // used for bilinear. We are using the same UVs used for bilinear -hence the uv clamp for bilinear- it is just the filtering that is different. - return SAMPLE_TEXTURE2D_X_LOD(_LowResTransparent, s_point_clamp_sampler, ClampAndScaleUVForBilinear(nearestUV), 0); + return SAMPLE_TEXTURE2D_X_LOD(_LowResTransparent, s_point_clamp_sampler, ClampAndScaleUV(nearestUV, halfResTexelSize, 0.5, lowResDRSScale), 0); #endif } #else // BILINEAR - return SAMPLE_TEXTURE2D_X_LOD(_LowResTransparent, s_linear_clamp_sampler, ClampAndScaleUVForBilinear(uv, halfResTexelSize), 0.0); + return SAMPLE_TEXTURE2D_X_LOD(_LowResTransparent, s_linear_clamp_sampler, ClampAndScaleUV(uv, halfResTexelSize, 0.5, lowResDRSScale), 0.0); #endif } From 51c850226051a36cfd5fbc4cd6bab90efa78313a Mon Sep 17 00:00:00 2001 From: Elizabeth LeGros Date: Fri, 13 Oct 2023 19:47:26 +0000 Subject: [PATCH 20/27] [ShaderGraph] Update main preview continuously https://jira.unity3d.com/browse/UUM-47201 addressing some of the issues detailed here --- .../Editor/Drawing/Views/GraphEditorView.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/GraphEditorView.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/GraphEditorView.cs index 932a1ac5d4f..4def3cece40 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Views/GraphEditorView.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/GraphEditorView.cs @@ -703,7 +703,7 @@ void OnNodeChanged(AbstractMaterialNode inNode, ModificationScope scope) HashSet m_NodeViewHashSet = new HashSet(); HashSet m_GroupHashSet = new HashSet(); - + float lastUpdate = 0f; public void HandleGraphChanges(bool wasUndoRedoPerformed) { UnregisterGraphViewCallbacks(); @@ -717,6 +717,11 @@ public void HandleGraphChanges(bool wasUndoRedoPerformed) }); previewManager.HandleGraphChanges(); + if(Time.realtimeSinceStartup - lastUpdate >= 0.03f && EditorWindow.focusedWindow == m_EditorWindow && m_UserViewSettings.isPreviewVisible) + { + lastUpdate = Time.realtimeSinceStartup; + previewManager.UpdateMasterPreview(ModificationScope.Node); + } m_InspectorView.HandleGraphChanges(); if (m_Graph.addedEdges.Any() || m_Graph.removedEdges.Any()) From b7320a053993271ca3d804f549edc29f521b9993 Mon Sep 17 00:00:00 2001 From: Daniel Suttor Date: Sat, 14 Oct 2023 12:46:08 +0000 Subject: [PATCH 21/27] Fix Prefab view cloud rendering Fix regression of cloud rendering being applied on top of the prefab view. --- .../Lighting/VolumetricLighting/VolumetricCloudsCombine.shader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/VolumetricLighting/VolumetricCloudsCombine.shader b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/VolumetricLighting/VolumetricCloudsCombine.shader index 0c27f86fb82..b02ddb6c895 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/VolumetricLighting/VolumetricCloudsCombine.shader +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/VolumetricLighting/VolumetricCloudsCombine.shader @@ -211,7 +211,7 @@ Shader "Hidden/HDRP/VolumetricCloudsCombine" ZWrite Off // If this is a background pixel, we want the cloud value, otherwise we do not. - Blend One OneMinusSrcAlpha + Blend One OneMinusSrcAlpha, Zero One Blend 1 One OneMinusSrcAlpha // before refraction Blend 2 One OneMinusSrcAlpha // before refraction alpha From 61d53b125d1c08793deb7b2200a7fe6801b4ff27 Mon Sep 17 00:00:00 2001 From: Justin Schwartz Date: Sat, 14 Oct 2023 12:46:10 +0000 Subject: [PATCH 22/27] URP APV Scenario Blending Support using Compute POI: https://jira.unity3d.com/browse/POI-816 - SRP production ready This PR adds "Scenario Blending" support to URP using Compute Shaders. It is meant as a replacement for https://github.cds.internal.unity3d.com/unity/unity/pull/27688, which was a non-Compute version. This PR has the advantage of being simpler, with less code changed for the core Probe Volume System. However, it does have the downside of not being able to run on platforms that do not support Compute Shaders. --- .../ProbeVolume/ProbeReferenceVolume.cs | 6 +- .../ProbeVolume/ProbeVolumeBakingSet.cs | 4 - .../SerializedUniversalRenderPipelineAsset.cs | 4 + .../UniversalRenderPipelineAssetUI.Drawers.cs | 12 +++ .../UniversalRenderPipelineAssetUI.Skin.cs | 2 + .../Data/UniversalRenderPipelineAsset.cs | 20 +++++ .../Runtime/ScriptableRendererData.cs | 8 +- .../Runtime/UniversalRenderPipeline.cs | 4 +- .../Shaders/ProbeVolumeBlendStates.compute | 75 +++++++++++++++++++ .../ProbeVolumeBlendStates.compute.meta | 7 ++ 10 files changed, 131 insertions(+), 11 deletions(-) create mode 100644 Packages/com.unity.render-pipelines.universal/Shaders/ProbeVolumeBlendStates.compute create mode 100644 Packages/com.unity.render-pipelines.universal/Shaders/ProbeVolumeBlendStates.compute.meta diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolume.cs b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolume.cs index e5cb1ec413c..f3dfa90576f 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolume.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolume.cs @@ -230,7 +230,7 @@ public struct PerScenarioData } public Dictionary scenarios = new Dictionary(); - + // Brick data. public NativeArray bricks { get; internal set; } @@ -803,7 +803,7 @@ internal void RegisterBakingSet(ProbeVolumePerSceneData data) else { Debug.Assert(perSceneDataList.Count > 0); - var sceneBakingSet = sceneData.GetBakingSetForScene(data.sceneGUID); // It can be null if the scene was never added to a baking set and we are baking in single scene mode, in that case we don't have a baking set for it yet and we need to skip + var sceneBakingSet = sceneData.GetBakingSetForScene(data.sceneGUID); // It can be null if the scene was never added to a baking set and we are baking in single scene mode, in that case we don't have a baking set for it yet and we need to skip if (sceneBakingSet != null && !string.IsNullOrEmpty(data.sceneGUID) && sceneBakingSet != m_CurrentBakingSet) { @@ -1040,7 +1040,7 @@ internal void UnloadCell(Cell cell) cell.loaded = false; cell.debugProbes = null; - + ClearDebugData(); } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs index 5b1dbf5fccc..e9f533e9a0e 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs @@ -529,10 +529,6 @@ internal void BlendLightingScenario(string otherScenario, float blendingFactor) { if (!string.IsNullOrEmpty(otherScenario) && !ProbeReferenceVolume.instance.enableScenarioBlending) { - if (!ProbeBrickBlendingPool.isSupported) - Debug.LogError("Blending between lighting scenarios is not supported by this render pipeline."); - else - Debug.LogError("Blending between lighting scenarios is disabled in the render pipeline settings."); return; } diff --git a/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/SerializedUniversalRenderPipelineAsset.cs b/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/SerializedUniversalRenderPipelineAsset.cs index ed32e259af0..5f34ae65114 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/SerializedUniversalRenderPipelineAsset.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/SerializedUniversalRenderPipelineAsset.cs @@ -32,8 +32,10 @@ internal class SerializedUniversalRenderPipelineAsset internal SerializedProperty lightProbeSystem; internal SerializedProperty probeVolumeTextureSize; + internal SerializedProperty probeVolumeBlendingTextureSize; internal SerializedProperty supportProbeVolumeStreaming; internal SerializedProperty supportProbeVolumeScenarios; + internal SerializedProperty supportProbeVolumeScenarioBlending; internal SerializedProperty probeVolumeSHBands; public SerializedProperty additionalLightsRenderingModeProp { get; } @@ -113,8 +115,10 @@ public SerializedUniversalRenderPipelineAsset(SerializedObject serializedObject) lightProbeSystem = serializedObject.FindProperty("m_LightProbeSystem"); probeVolumeTextureSize = serializedObject.FindProperty("m_ProbeVolumeMemoryBudget"); + probeVolumeBlendingTextureSize = serializedObject.FindProperty("m_ProbeVolumeBlendingMemoryBudget"); supportProbeVolumeStreaming = serializedObject.FindProperty("m_SupportProbeVolumeStreaming"); supportProbeVolumeScenarios = serializedObject.FindProperty("m_SupportProbeVolumeScenarios"); + supportProbeVolumeScenarioBlending = serializedObject.FindProperty("m_SupportProbeVolumeScenarioBlending"); probeVolumeSHBands = serializedObject.FindProperty("m_ProbeVolumeSHBands"); mainLightRenderingModeProp = serializedObject.FindProperty("m_MainLightRenderingMode"); diff --git a/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/UniversalRenderPipelineAssetUI.Drawers.cs b/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/UniversalRenderPipelineAssetUI.Drawers.cs index 65d63550a4b..ad3fb2a3660 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/UniversalRenderPipelineAssetUI.Drawers.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/UniversalRenderPipelineAssetUI.Drawers.cs @@ -254,6 +254,18 @@ static void DrawLighting(SerializedUniversalRenderPipelineAsset serialized, Edit EditorGUILayout.PropertyField(serialized.probeVolumeSHBands, Styles.probeVolumeSHBands); EditorGUILayout.PropertyField(serialized.supportProbeVolumeStreaming, Styles.supportProbeVolumeStreaming); EditorGUILayout.PropertyField(serialized.supportProbeVolumeScenarios, Styles.supportProbeVolumeScenarios); + if (serialized.supportProbeVolumeScenarios.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serialized.supportProbeVolumeScenarioBlending, Styles.supportProbeVolumeScenarioBlending); + if (serialized.supportProbeVolumeScenarioBlending.boolValue) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(serialized.probeVolumeBlendingTextureSize, Styles.probeVolumeBlendingMemoryBudget); + EditorGUI.indentLevel--; + } + EditorGUI.indentLevel--; + } int estimatedVMemCost = ProbeReferenceVolume.instance.GetVideoMemoryCost(); if (estimatedVMemCost == 0) diff --git a/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/UniversalRenderPipelineAssetUI.Skin.cs b/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/UniversalRenderPipelineAssetUI.Skin.cs index df2a763b819..be8d0e41733 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/UniversalRenderPipelineAssetUI.Skin.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineAsset/UniversalRenderPipelineAssetUI.Skin.cs @@ -53,8 +53,10 @@ internal static class Styles // Probe volumes public static readonly GUIContent lightProbeSystemContent = EditorGUIUtility.TrTextContent("Light Probe System", "What system to use for Light Probes."); public static readonly GUIContent probeVolumeMemoryBudget = EditorGUIUtility.TrTextContent("Memory Budget", "Determines the width and height of the 3D textures used to store lighting data from probes. Depth is fixed."); + public static readonly GUIContent probeVolumeBlendingMemoryBudget = EditorGUIUtility.TrTextContent("Blending Memory Budget", "Determines the width and height of the 3D textures used to store light scenario blending data from probes. Depth is fixed."); public static readonly GUIContent supportProbeVolumeStreaming = EditorGUIUtility.TrTextContent("Enable Streaming", "Enable steaming of Cells in the Probe Volume system."); public static readonly GUIContent supportProbeVolumeScenarios = EditorGUIUtility.TrTextContent("Enable Lighting Scenarios", "Enable Lighting Scenario Baking in the Probe Volume system."); + public static readonly GUIContent supportProbeVolumeScenarioBlending = EditorGUIUtility.TrTextContent("Enable Lighting Scenario Blending", "Enable Lighting Scenario Blending in the Probe Volume system.\nNote: Lighting Scenario Blending requires Compute Shader support."); public static readonly GUIContent probeVolumeSHBands = EditorGUIUtility.TrTextContent("SH Bands", "The number of Spherical Harmonic bands used by Probe Volumes to store lighting data. Choosing L2 provides better quality but with higher memory and runtime costs."); // Additional lights diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs index 07d04809955..e0a16411d9a 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Data/UniversalRenderPipelineAsset.cs @@ -482,8 +482,10 @@ public partial class UniversalRenderPipelineAsset : RenderPipelineAsset m_ProbeVolumeMemoryBudget = value; } + /// + /// Probe Volume Blending Memory Budget. + /// + public ProbeVolumeBlendingTextureMemoryBudget probeVolumeBlendingMemoryBudget + { + get => m_ProbeVolumeBlendingMemoryBudget; + internal set => m_ProbeVolumeBlendingMemoryBudget = value; + } + /// /// Support Streaming for Probe Volumes. /// @@ -1224,6 +1235,15 @@ public bool supportProbeVolumeScenarios internal set { m_SupportProbeVolumeScenarios = value; } } + /// + /// Support Lighting Scenario Blending for Probe Volumes. + /// + public bool supportProbeVolumeScenarioBlending + { + get { return m_SupportProbeVolumeScenarioBlending; } + internal set { m_SupportProbeVolumeScenarioBlending = value; } + } + /// /// Probe Volumes SH Bands. /// diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRendererData.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRendererData.cs index 92eea917f88..411ceff41ed 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRendererData.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ScriptableRendererData.cs @@ -91,9 +91,11 @@ public sealed class ProbeVolumeResources [Reload("Shaders/Debug/NumbersDisplayTex.png")] public Texture2D probeSamplingDebugTexture; - // Disable this since it requires compute - //[Reload("Shaders/ProbeVolumeBlendStates.compute")] - //public ComputeShader probeVolumeBlendStatesCS; + /// + /// Compute Shader used for Blending. + /// + [Reload("Shaders/ProbeVolumeBlendStates.compute")] + public ComputeShader probeVolumeBlendStatesCS; } /// diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs index 2be5a0f69ea..1131c9a8698 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs @@ -267,17 +267,19 @@ public UniversalRenderPipeline(UniversalRenderPipelineAsset asset) SupportedRenderingFeatures.active.overridesLightProbeSystem = apvIsEnabled; if (apvIsEnabled) { + bool supportBlending = SystemInfo.supportsComputeShaders && asset.supportProbeVolumeScenarios && asset.supportProbeVolumeScenarioBlending; var pvr = ProbeReferenceVolume.instance; ProbeReferenceVolume.instance.Initialize(new ProbeVolumeSystemParameters { memoryBudget = asset.probeVolumeMemoryBudget, + blendingMemoryBudget = asset.probeVolumeBlendingMemoryBudget, probeDebugShader = asset.scriptableRendererData.probeVolumeResources.probeVolumeDebugShader, fragmentationDebugShader = asset.scriptableRendererData.probeVolumeResources.probeVolumeFragmentationDebugShader, probeSamplingDebugShader = asset.scriptableRendererData.probeVolumeResources.probeVolumeSamplingDebugShader, probeSamplingDebugMesh = asset.scriptableRendererData.probeVolumeResources.probeSamplingDebugMesh, probeSamplingDebugTexture = asset.scriptableRendererData.probeVolumeResources.probeSamplingDebugTexture, offsetDebugShader = asset.scriptableRendererData.probeVolumeResources.probeVolumeOffsetDebugShader, - scenarioBlendingShader = null, // Disable this since it requires compute 'data.probeVolumeResources.probeVolumeBlendStatesCS,' + scenarioBlendingShader = supportBlending ? asset.scriptableRendererData.probeVolumeResources.probeVolumeBlendStatesCS : null, sceneData = m_GlobalSettings.GetOrCreateAPVSceneData(), shBands = asset.probeVolumeSHBands, supportGPUStreaming = asset.supportProbeVolumeStreaming, diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/ProbeVolumeBlendStates.compute b/Packages/com.unity.render-pipelines.universal/Shaders/ProbeVolumeBlendStates.compute new file mode 100644 index 00000000000..e67034c9f36 --- /dev/null +++ b/Packages/com.unity.render-pipelines.universal/Shaders/ProbeVolumeBlendStates.compute @@ -0,0 +1,75 @@ +#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch glcore gles3 + +#pragma kernel BlendScenarios + +#pragma multi_compile _ PROBE_VOLUMES_L2 + +#include "Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBlendStates.hlsl" + +Texture3D _State0_L0_L1Rx; +Texture3D _State0_L1G_L1Ry; +Texture3D _State0_L1B_L1Rz; + +Texture3D _State1_L0_L1Rx; +Texture3D _State1_L1G_L1Ry; +Texture3D _State1_L1B_L1Rz; + +RWTexture3D _Out_L0_L1Rx; +RWTexture3D _Out_L1G_L1Ry; +RWTexture3D _Out_L1B_L1Rz; + +#ifdef PROBE_VOLUMES_L2 +Texture3D _State0_L2_0; +Texture3D _State0_L2_1; +Texture3D _State0_L2_2; +Texture3D _State0_L2_3; + +Texture3D _State1_L2_0; +Texture3D _State1_L2_1; +Texture3D _State1_L2_2; +Texture3D _State1_L2_3; + +RWTexture3D _Out_L2_0; +RWTexture3D _Out_L2_1; +RWTexture3D _Out_L2_2; +RWTexture3D _Out_L2_3; +#endif + +float4 _ChunkList[1000]; + +float4 _PoolDim_LerpFactor; +#define _DstPoolDim _PoolDim_LerpFactor.xy +#define _LerpFactor _PoolDim_LerpFactor.z + +uint3 IndexToChunk(uint index, float2 poolSize) +{ + uint coordZ = index / (poolSize.x*poolSize.y); + uint offsetXY = index - coordZ * (poolSize.x*poolSize.y); + return uint3(offsetXY % poolSize.x, offsetXY / poolSize.x, coordZ); +} + +[numthreads(4, 4, 4)] +void BlendScenarios(uint3 probe : SV_DispatchThreadID, uint3 brick : SV_GroupID) +{ + uint chunkIndex = brick.z; + probe.z -= 4 * chunkIndex; + + // Load + APVResources resources0, resources1; + LOAD_APV_RES(resources0, _State0); + LOAD_APV_RES(resources1, _State1); + + uint3 srcChunk = _ChunkList[chunkIndex].xyz; + APVSample state0 = LoadAndDecodeAPV(resources0, probe + srcChunk); + APVSample state1 = LoadAndDecodeAPV(resources1, probe + srcChunk); + + // Blend + state0 = BlendAPVSamples(state0, state1, _LerpFactor); + + // Store + APVResourcesRW output; + LOAD_APV_RES(output, _Out); + + uint3 dstChunk = IndexToChunk(_ChunkList[chunkIndex].w, _DstPoolDim); + EncodeAndStoreAPV(output, state0, probe + dstChunk); +} diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/ProbeVolumeBlendStates.compute.meta b/Packages/com.unity.render-pipelines.universal/Shaders/ProbeVolumeBlendStates.compute.meta new file mode 100644 index 00000000000..f3249e51db1 --- /dev/null +++ b/Packages/com.unity.render-pipelines.universal/Shaders/ProbeVolumeBlendStates.compute.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b9a23f869c4fd45f19c5ada54dd82176 +ComputeShaderImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From ed82b04830b2c451834c2b4f2ddbbf48147da78f Mon Sep 17 00:00:00 2001 From: Esmeralda Salamone Date: Sat, 14 Oct 2023 12:46:13 +0000 Subject: [PATCH 23/27] [ShaderGraph] Property generation fixes (Exposed/Global/Material permutations) Previously, various circumstances resulted in incorrect material property generation for shadergraph blackboard properties. Exposed Global -> Generates a material property, but this configuration undermines its globality and we shouldn't allow it. Hidden Material -> causes the material property to not generate, which means default values are ignored. This fix causes globals to always work with the `Shader.SetGlobal...` scripting API. Hidden Materials now generate a material property with the [HideInInspector] attribute, which allows default values to be saved. Also fixed some minor/cosmetic 'custom binding' related bugs. This is the implementation of: https://jira.unity3d.com/browse/PLATGRAPH-2177. Further details can be found here: https://docs.google.com/document/d/1u9RHjVAuHa-Wx7NWoQGGaN99GqU4-cePQJTdAOIhV1o/edit?usp=sharing Additional considerations for keywords: https://docs.google.com/document/d/1Q78mx1O24kxJcYabbEBt37a1WAg7p92i80lhBvn3wSM/edit This is approved as a part of: https://jira.unity3d.com/browse/POI-816. --- .../Data/Graphs/AbstractShaderProperty.cs | 7 +- .../Data/Graphs/CubemapShaderProperty.cs | 2 +- .../Editor/Data/Graphs/ShaderDropdown.cs | 1 + .../Editor/Data/Graphs/ShaderInput.cs | 2 +- .../Editor/Data/Graphs/ShaderKeyword.cs | 2 + .../Graphs/Texture2DArrayShaderProperty.cs | 2 +- .../Data/Graphs/Texture3DShaderProperty.cs | 2 +- .../Controllers/ShaderInputViewController.cs | 2 +- .../PropertyDrawers/EnumPropertyDrawer.cs | 4 +- .../ShaderInputPropertyDrawer.cs | 211 ++++++++++-------- .../PropertyDrawers/TextPropertyDrawer.cs | 4 +- .../ToggleDataPropertyDrawer.cs | 4 +- .../Editor/Drawing/MaterialGraphEditWindow.cs | 6 + 13 files changed, 141 insertions(+), 108 deletions(-) diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/AbstractShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/AbstractShaderProperty.cs index 3707175163d..2624b8eea1f 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/AbstractShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/AbstractShaderProperty.cs @@ -66,7 +66,9 @@ internal virtual HLSLDeclaration GetDefaultHLSLDeclaration() [SerializeField] internal HLSLDeclaration hlslDeclarationOverride; - private bool shouldForceExposed => hlslDeclarationOverride == HLSLDeclaration.HybridPerInstance; + override internal bool isExposed => base.isExposed && shouldForceExposed; + + internal bool shouldForceExposed => (hlslDeclarationOverride == HLSLDeclaration.HybridPerInstance || GetDefaultHLSLDeclaration() == HLSLDeclaration.UnityPerMaterial) && isExposable; internal Precision precision { @@ -109,7 +111,8 @@ internal virtual string GetPropertyBlockString() return string.Empty; } - internal bool shouldGeneratePropertyBlock => generatePropertyBlock || shouldForceExposed; + internal bool shouldGeneratePropertyBlock => (generatePropertyBlock || shouldForceExposed) + && GetDefaultHLSLDeclaration() != HLSLDeclaration.Global; // the more complex interface for complex properties (defaulted for simple properties) internal virtual void AppendPropertyBlockStrings(ShaderStringBuilder builder) diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/CubemapShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/CubemapShaderProperty.cs index c158fcad275..670392d2dff 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/CubemapShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/CubemapShaderProperty.cs @@ -28,7 +28,7 @@ internal override string GetPropertyBlockString() return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{referenceName}(\"{displayName}\", CUBE) = \"\" {{}}"; } - internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => false; // disable UI, nothing to choose + internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => (decl != HLSLDeclaration.HybridPerInstance) && (decl != HLSLDeclaration.DoNotDeclare); internal override void ForeachHLSLProperty(Action action) { diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderDropdown.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderDropdown.cs index 76db1e5a116..77dafd7b010 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderDropdown.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderDropdown.cs @@ -27,6 +27,7 @@ public List entries set => m_Entries = value; } + internal override bool isCustomSlotAllowed { get => false; } public override bool allowedInMainGraph { get => false; } [SerializeField] diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderInput.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderInput.cs index 999b8792195..68a5b0d10f4 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderInput.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderInput.cs @@ -220,7 +220,7 @@ internal bool generatePropertyBlock // this is basically the "exposed" toggl set => m_GeneratePropertyBlock = value; } - internal bool isExposed => isExposable && generatePropertyBlock; + internal virtual bool isExposed => isExposable && generatePropertyBlock; public virtual bool allowedInSubGraph { diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderKeyword.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderKeyword.cs index 7bea5559ec4..667d28a0966 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderKeyword.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ShaderKeyword.cs @@ -118,6 +118,8 @@ public bool isBuiltIn set => m_IsEditable = !value; } + internal override bool isCustomSlotAllowed => false; + internal override bool isExposable => !isBuiltIn && (keywordDefinition != KeywordDefinition.Predefined); internal override bool isRenamable => !isBuiltIn; diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture2DArrayShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture2DArrayShaderProperty.cs index ff6d8bab4d4..8dd37e977c1 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture2DArrayShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture2DArrayShaderProperty.cs @@ -26,7 +26,7 @@ internal override string GetPropertyBlockString() return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{referenceName}(\"{displayName}\", 2DArray) = \"\" {{}}"; } - internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => false; // disable UI, nothing to choose + internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => (decl != HLSLDeclaration.HybridPerInstance) && (decl != HLSLDeclaration.DoNotDeclare); internal override void ForeachHLSLProperty(Action action) { diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture3DShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture3DShaderProperty.cs index 83c4365dca2..5887d5bd8fd 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture3DShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Texture3DShaderProperty.cs @@ -26,7 +26,7 @@ internal override string GetPropertyBlockString() return $"{hideTagString}{modifiableTagString}[NoScaleOffset]{referenceName}(\"{displayName}\", 3D) = \"white\" {{}}"; } - internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => false; // disable UI, nothing to choose + internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => (decl != HLSLDeclaration.HybridPerInstance) && (decl != HLSLDeclaration.DoNotDeclare); internal override void ForeachHLSLProperty(Action action) { diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Controllers/ShaderInputViewController.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Controllers/ShaderInputViewController.cs index c3d6cf540ab..4e154055133 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Controllers/ShaderInputViewController.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Controllers/ShaderInputViewController.cs @@ -225,7 +225,7 @@ void InitializeViewModel() } ViewModel.model = Model; ViewModel.isSubGraph = DataStore.State.isSubGraph; - ViewModel.isInputExposed = (DataStore.State.isSubGraph || (Model.isExposable && Model.generatePropertyBlock)); + ViewModel.isInputExposed = (DataStore.State.isSubGraph || Model.isExposed); ViewModel.inputName = Model.displayName; switch (Model) { diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/EnumPropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/EnumPropertyDrawer.cs index 5cade065e88..38d143502b7 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/EnumPropertyDrawer.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/EnumPropertyDrawer.cs @@ -18,9 +18,11 @@ internal VisualElement CreateGUI( string labelName, Enum defaultValue, out VisualElement propertyVisualElement, - int indentLevel = 0) + int indentLevel = 0, + string tooltip = null) { var row = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel)); + row.tooltip = tooltip; propertyVisualElement = new EnumField(defaultValue); row.Add((EnumField)propertyVisualElement, (field) => { diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs index 55558241f20..c54f549683c 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs @@ -187,8 +187,9 @@ void BuildExposedField(PropertySheet propertySheet) this._postChangeValueCallback(false, ModificationScope.Graph); }, new ToggleData(shaderInput.isExposed), - "Exposed", - out var exposedToggleVisualElement)); + "Show In Inspector", + out var exposedToggleVisualElement, + tooltip: "Hide or Show this property in the material inspector.")); exposedToggle = exposedToggleVisualElement as Toggle; } } @@ -248,12 +249,21 @@ void UpdateEnableState() { // some changes may change the exposed state exposedToggle?.SetValueWithoutNotify(shaderInput.isExposed); - exposedToggle?.SetEnabled(shaderInput.isExposable && !shaderInput.isAlwaysExposed); if (shaderInput is ShaderKeyword keyword) { keywordScopeField?.SetEnabled(!keyword.isBuiltIn && (keyword.keywordDefinition != KeywordDefinition.Predefined)); + exposedToggle?.SetEnabled((keyword.keywordDefinition != KeywordDefinition.Predefined)); this._exposedFieldChangedCallback(keyword.generatePropertyBlock); // change exposed icon appropriately } + else if (shaderInput is AbstractShaderProperty property) + { + // this is the best field to represent whether the toggle should be presented or not. + exposedToggle?.SetEnabled(property.shouldForceExposed); + } + else + { + exposedToggle?.SetEnabled(shaderInput.isExposable && !shaderInput.isAlwaysExposed); + } } void BuildDisplayNameField(PropertySheet propertySheet) @@ -262,7 +272,8 @@ void BuildDisplayNameField(PropertySheet propertySheet) propertySheet.Add(textPropertyDrawer.CreateGUI( null, (string)shaderInput.displayName, - "Name")); + "Name", + tooltip: "Display name used in the material inspector.")); m_DisplayNameField = textPropertyDrawer.textField; m_DisplayNameField.RegisterValueChangedCallback( @@ -297,7 +308,8 @@ void BuildReferenceNameField(PropertySheet propertySheet) propertySheet.Add(m_ReferenceNameDrawer.CreateGUI( null, (string)shaderInput.referenceNameForEditing, - "Reference")); + "Reference", + tooltip: "HLSL identifier used in the generated shader code. Use this with the material scripting API.")); m_ReferenceNameField = m_ReferenceNameDrawer.textField; m_ReferenceNameField.RegisterValueChangedCallback( @@ -371,6 +383,7 @@ public void UpgradeDefaultReferenceName() this._postChangeValueCallback(true, ModificationScope.Graph); } + bool isCurrentPropertyGlobal; void BuildPropertyFields(PropertySheet propertySheet) { if (shaderInput is AbstractShaderProperty property) @@ -400,6 +413,12 @@ void BuildPropertyFields(PropertySheet propertySheet) } } + isCurrentPropertyGlobal = property.GetDefaultHLSLDeclaration() == HLSLDeclaration.Global; + + BuildPrecisionField(propertySheet, property); + BuildHLSLDeclarationOverrideFields(propertySheet, property); + BuildExposedField(propertySheet); + switch (property) { case IShaderPropertyDrawer propDrawer: @@ -459,12 +478,6 @@ void BuildPropertyFields(PropertySheet propertySheet) HandleGradientPropertyField(propertySheet, gradientProperty); break; } - - BuildPrecisionField(propertySheet, property); - - BuildExposedField(propertySheet); - - BuildHLSLDeclarationOverrideFields(propertySheet, property); } BuildCustomBindingField(propertySheet, shaderInput); @@ -480,6 +493,9 @@ void BuildPropertyFields(PropertySheet propertySheet) void BuildHLSLDeclarationOverrideFields(PropertySheet propertySheet, AbstractShaderProperty property) { + if (isSubGraph) + return; + var hlslDecls = Enum.GetValues(typeof(HLSLDeclaration)); var allowedDecls = new List(); @@ -493,9 +509,11 @@ void BuildHLSLDeclarationOverrideFields(PropertySheet propertySheet, AbstractSha allowedDecls.Add(decl); } + const string tooltip = "Indicate where the property is expected to be changed."; if (anyAllowed) { - var propRow = new PropertyRow(PropertyDrawerUtils.CreateLabel("Shader Declaration", 1)); + var propRow = new PropertyRow(PropertyDrawerUtils.CreateLabel("Scope", 0)); + propRow.tooltip = tooltip; var popupField = new PopupField( allowedDecls, property.GetDefaultHLSLDeclaration(), @@ -505,48 +523,19 @@ void BuildHLSLDeclarationOverrideFields(PropertySheet propertySheet, AbstractSha popupField.RegisterValueChangedCallback( evt => { - this._preChangeValueCallback("Change Override"); + this._preChangeValueCallback("Change Scope"); if (property.hlslDeclarationOverride == evt.newValue) return; property.hlslDeclarationOverride = evt.newValue; - this._postChangeValueCallback(); + property.overrideHLSLDeclaration = true; + UpdateEnableState(); + this._exposedFieldChangedCallback(evt.newValue != HLSLDeclaration.Global); + property.generatePropertyBlock = evt.newValue != HLSLDeclaration.Global; + this._postChangeValueCallback(true, ModificationScope.Graph); }); propRow.Add(popupField); - - var toggleOverride = new ToggleDataPropertyDrawer(); - propertySheet.Add(toggleOverride.CreateGUI( - newValue => - { - if (property.overrideHLSLDeclaration == newValue.isOn) - return; - - this._preChangeValueCallback("Override Property Declaration"); - - // add or remove the sub field based on what the toggle is - if (newValue.isOn) - { - // setup initial state based on current state - property.hlslDeclarationOverride = property.GetDefaultHLSLDeclaration(); - property.overrideHLSLDeclaration = newValue.isOn; - popupField.value = property.hlslDeclarationOverride; - propertySheet.Add(propRow); - } - else - { - property.overrideHLSLDeclaration = newValue.isOn; - propRow.RemoveFromHierarchy(); - } - - this._postChangeValueCallback(false, ModificationScope.Graph); - }, - new ToggleData(property.overrideHLSLDeclaration), - "Override Property Declaration", out var overrideToggle)); - - // set up initial state - overrideToggle.SetEnabled(anyAllowed); - if (property.overrideHLSLDeclaration) - propertySheet.Add(propRow); + propertySheet.Add(propRow); } } @@ -554,22 +543,28 @@ void BuildPrecisionField(PropertySheet propertySheet, AbstractShaderProperty pro { var enumPropertyDrawer = new EnumPropertyDrawer(); propertySheet.Add(enumPropertyDrawer.CreateGUI(newValue => - { - this._preChangeValueCallback("Change Precision"); - if (property.precision == (Precision)newValue) - return; - property.precision = (Precision)newValue; - this._precisionChangedCallback(); - this._postChangeValueCallback(); - }, (PropertyDrawerUtils.UIPrecisionForShaderGraphs)property.precision, "Precision", PropertyDrawerUtils.UIPrecisionForShaderGraphs.Inherit, out var precisionField)); + { + this._preChangeValueCallback("Change Precision"); + if (property.precision == (Precision)newValue) + return; + property.precision = (Precision)newValue; + this._precisionChangedCallback(); + this._postChangeValueCallback(); + }, + (PropertyDrawerUtils.UIPrecisionForShaderGraphs)property.precision, + "Precision", + PropertyDrawerUtils.UIPrecisionForShaderGraphs.Inherit, + out var precisionField, + tooltip: "Request that the property uses Single 32-bit or Half 16-bit floating point precision.")); if (property is Serialization.MultiJsonInternal.UnknownShaderPropertyType) precisionField.SetEnabled(false); } void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderProperty vector1ShaderProperty) { + var floatType = isCurrentPropertyGlobal ? FloatType.Default : vector1ShaderProperty.floatType; // Handle vector 1 mode parameters - switch (vector1ShaderProperty.floatType) + switch (floatType) { case FloatType.Slider: var floatPropertyDrawer = new FloatPropertyDrawer(); @@ -582,7 +577,7 @@ void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderPrope _postChangeValueCallback(); }, vector1ShaderProperty.value, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var propertyFloatField)); // Min field @@ -645,7 +640,7 @@ void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderPrope this._postChangeValueCallback(); }, (int)vector1ShaderProperty.value, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var integerPropertyField)); break; @@ -660,12 +655,12 @@ void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderPrope this._postChangeValueCallback(); }, vector1ShaderProperty.value, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var defaultFloatPropertyField)); break; } - if (!isSubGraph) + if (!isSubGraph && !isCurrentPropertyGlobal) { var enumPropertyDrawer = new EnumPropertyDrawer(); propertySheet.Add(enumPropertyDrawer.CreateGUI( @@ -675,12 +670,14 @@ void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderPrope vector1ShaderProperty.floatType = (FloatType)newValue; this._postChangeValueCallback(true); }, - vector1ShaderProperty.floatType, + (FloatTypeForUI)vector1ShaderProperty.floatType, "Mode", - FloatType.Default, - out var modePropertyEnumField)); + FloatTypeForUI.Default, + out var modePropertyEnumField, + tooltip: "Indicate how this float property should appear in the material inspector UI.")); } } + enum FloatTypeForUI { Default = FloatType.Default, Integer = FloatType.Integer, Slider = FloatType.Slider } void HandleVector2ShaderProperty(PropertySheet propertySheet, Vector2ShaderProperty vector2ShaderProperty) { @@ -691,7 +688,7 @@ void HandleVector2ShaderProperty(PropertySheet propertySheet, Vector2ShaderPrope propertySheet.Add(vector2PropertyDrawer.CreateGUI( newValue => _changeValueCallback(newValue), vector2ShaderProperty.value, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var propertyVec2Field)); } @@ -704,7 +701,7 @@ void HandleVector3ShaderProperty(PropertySheet propertySheet, Vector3ShaderPrope propertySheet.Add(vector3PropertyDrawer.CreateGUI( newValue => _changeValueCallback(newValue), vector3ShaderProperty.value, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var propertyVec3Field)); } @@ -717,7 +714,7 @@ void HandleVector4ShaderProperty(PropertySheet propertySheet, Vector4ShaderPrope propertySheet.Add(vector4PropertyDrawer.CreateGUI( newValue => _changeValueCallback(newValue), vector4Property.value, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var propertyVec4Field)); } @@ -748,13 +745,13 @@ void HandleColorProperty(PropertySheet propertySheet, ColorShaderProperty colorP this._postChangeValueCallback(); }, colorProperty.value, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var propertyColorField)); var colorField = (ColorField)propertyColorField; colorField.hdr = colorProperty.colorMode == ColorMode.HDR; - if (!isSubGraph) + if (!isSubGraph && !isCurrentPropertyGlobal) { var enumPropertyDrawer = new EnumPropertyDrawer(); @@ -800,11 +797,11 @@ void HandleTexture2DProperty(PropertySheet propertySheet, Texture2DShaderPropert this._postChangeValueCallback(); }, texture2DProperty.value.texture, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var texture2DField )); - if (!isSubGraph) + if (!isSubGraph && !isCurrentPropertyGlobal) { var enumPropertyDrawer = new EnumPropertyDrawer(); propertySheet.Add(enumPropertyDrawer.CreateGUI( @@ -819,10 +816,13 @@ out var texture2DField texture2DProperty.defaultType, "Mode", Texture2DShaderProperty.DefaultType.White, - out var textureModeField)); + out var textureModeField, + tooltip: "Fallback texture if none is provided.")); textureModeField.SetEnabled(texture2DProperty.generatePropertyBlock); - + } + if (!isSubGraph) + { var togglePropertyDrawer = new ToggleDataPropertyDrawer(); propertySheet.Add(togglePropertyDrawer.CreateGUI( newValue => @@ -850,7 +850,7 @@ void HandleTexture2DArrayProperty(PropertySheet propertySheet, Texture2DArraySha this._postChangeValueCallback(); }, texture2DArrayProperty.value.textureArray, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var texture2DArrayField )); } @@ -1109,7 +1109,7 @@ void HandleTexture3DProperty(PropertySheet propertySheet, Texture3DShaderPropert this._postChangeValueCallback(); }, texture3DShaderProperty.value.texture, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var texture3DField )); } @@ -1125,7 +1125,7 @@ void HandleCubemapProperty(PropertySheet propertySheet, CubemapShaderProperty cu this._postChangeValueCallback(); }, cubemapProperty.value.cubemap, - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var propertyCubemapField )); } @@ -1141,7 +1141,7 @@ void HandleBooleanProperty(PropertySheet propertySheet, BooleanShaderProperty bo this._postChangeValueCallback(); }, new ToggleData(booleanProperty.value), - "Default", + isCurrentPropertyGlobal ? "Preview Value" : "Default Value", out var propertyToggle)); } @@ -1158,7 +1158,7 @@ void HandleMatrix2PropertyField(PropertySheet propertySheet, Matrix2ShaderProper propertySheet.Add(matrixPropertyDrawer.CreateGUI( newValue => { this._changeValueCallback(newValue); }, matrix2Property.value, - "Default", + "Preview Value", out var propertyMatrixField)); } @@ -1175,7 +1175,7 @@ void HandleMatrix3PropertyField(PropertySheet propertySheet, Matrix3ShaderProper propertySheet.Add(matrixPropertyDrawer.CreateGUI( newValue => { this._changeValueCallback(newValue); }, matrix3Property.value, - "Default", + "Preview Value", out var propertyMatrixField)); } @@ -1192,7 +1192,7 @@ void HandleMatrix4PropertyField(PropertySheet propertySheet, Matrix4ShaderProper propertySheet.Add(matrixPropertyDrawer.CreateGUI( newValue => { this._changeValueCallback(newValue); }, matrix4Property.value, - "Default", + "Preview Value", out var propertyMatrixField)); } @@ -1242,7 +1242,7 @@ void HandleGradientPropertyField(PropertySheet propertySheet, GradientShaderProp this._postChangeValueCallback(); }, gradientShaderProperty.value, - "Default", + "Default Value", out var propertyGradientField)); } @@ -1268,29 +1268,45 @@ void BuildKeywordFields(PropertySheet propertySheet, ShaderInput shaderInput) return; keyword.keywordDefinition = (KeywordDefinition)newValue; UpdateEnableState(); + this._postChangeValueCallback(true, ModificationScope.Nothing); }, keyword.keywordDefinition, "Definition", KeywordDefinition.ShaderFeature, - out var typeField)); + out var typeField, + tooltip: "Indicate how the keyword is defined and under what circumstances its permutations will be compiled.")); - typeField.SetEnabled(!keyword.isBuiltIn); + if (keyword.keywordDefinition == KeywordDefinition.ShaderFeature && isSubGraph) + { + var help = new HelpBoxRow(MessageType.Info); + var warning = new TextElement(); + warning.tabIndex = 1; + warning.style.alignSelf = Align.Center; + warning.text = "Shader Feature Keywords in SubGraphs do not generate variant permutations."; + help.Add(warning); + propertySheet.Add(help); + } + typeField.SetEnabled(!keyword.isBuiltIn); { - propertySheet.Add(enumPropertyDrawer.CreateGUI( + var isOverridablePropertyDrawer = new ToggleDataPropertyDrawer(); + bool enabledState = keyword.keywordDefinition != KeywordDefinition.Predefined; + bool toggleState = keyword.keywordScope == KeywordScope.Global || !enabledState; + propertySheet.Add(isOverridablePropertyDrawer.CreateGUI( newValue => { - this._preChangeValueCallback("Change Keyword scope"); - if (keyword.keywordScope == (KeywordScope)newValue) - return; - keyword.keywordScope = (KeywordScope)newValue; + this._preChangeValueCallback("Change Keyword Is Overridable"); + keyword.keywordScope = newValue.isOn + ? KeywordScope.Global + : KeywordScope.Local; }, - keyword.keywordScope, - "Scope", - KeywordScope.Local, - out keywordScopeField)); + new ToggleData(toggleState), + "Is Overridable", + out keywordScopeField, + tooltip: "Indicate whether this keyword's state can be overridden through the Shader.SetKeyword scripting interface.")); + keywordScopeField.SetEnabled(enabledState); } - + BuildExposedField(propertySheet); { propertySheet.Add(enumPropertyDrawer.CreateGUI( newValue => @@ -1303,7 +1319,8 @@ void BuildKeywordFields(PropertySheet propertySheet, ShaderInput shaderInput) (KeywordShaderStageDropdownUI)keyword.keywordStages, "Stages", KeywordShaderStageDropdownUI.All, - out keywordScopeField)); + out keywordScopeField, + tooltip: "Indicates which shader stages this keyword is relevant for.")); } switch (keyword.keywordType) @@ -1315,8 +1332,6 @@ void BuildKeywordFields(PropertySheet propertySheet, ShaderInput shaderInput) BuildEnumKeywordField(propertySheet, keyword); break; } - - BuildExposedField(propertySheet); } void BuildBooleanKeywordField(PropertySheet propertySheet, ShaderKeyword keyword) @@ -1335,7 +1350,7 @@ void BuildBooleanKeywordField(PropertySheet propertySheet, ShaderKeyword keyword this._postChangeValueCallback(false, ModificationScope.Graph); }, new ToggleData(keyword.value == 1), - "Default", + keyword.keywordDefinition == KeywordDefinition.Predefined ? "Preview Value" : "Default Value", out var boolKeywordField)); } @@ -1358,7 +1373,7 @@ void BuildEnumKeywordField(PropertySheet propertySheet, ShaderKeyword keyword) this._postChangeValueCallback(false, ModificationScope.Graph); }); - AddPropertyRowToSheet(propertySheet, field, "Default"); + AddPropertyRowToSheet(propertySheet, field, keyword.keywordDefinition == KeywordDefinition.Predefined ? "Preview Value" : "Default Value"); var container = new IMGUIContainer(() => OnKeywordGUIHandler()) { name = "ListContainer" }; AddPropertyRowToSheet(propertySheet, container, "Entries"); diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/TextPropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/TextPropertyDrawer.cs index 3e144cab545..248099f39cb 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/TextPropertyDrawer.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/TextPropertyDrawer.cs @@ -19,10 +19,12 @@ internal VisualElement CreateGUI( ValueChangedCallback valueChangedCallback, string fieldToDraw, string labelName, - int indentLevel = 0) + int indentLevel = 0, + string tooltip = null) { label = PropertyDrawerUtils.CreateLabel(labelName, indentLevel); var propertyRow = new PropertyRow(label); + propertyRow.tooltip = tooltip; textField = new TextField(512, false, false, ' ') { isDelayed = true }; propertyRow.Add(textField, textField => diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ToggleDataPropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ToggleDataPropertyDrawer.cs index 00db2f4da52..d49a50c0016 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ToggleDataPropertyDrawer.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ToggleDataPropertyDrawer.cs @@ -18,9 +18,11 @@ internal VisualElement CreateGUI( ToggleData fieldToDraw, string labelName, out VisualElement propertyToggle, - int indentLevel = 0) + int indentLevel = 0, + string tooltip = null) { var row = new PropertyRow(PropertyDrawerUtils.CreateLabel(labelName, indentLevel)); + row.tooltip = tooltip; // Create and assign toggle as out variable here so that callers can also do additional work with enabling/disabling if needed propertyToggle = new Toggle(); row.Add((Toggle)propertyToggle, (toggle) => diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/MaterialGraphEditWindow.cs b/Packages/com.unity.shadergraph/Editor/Drawing/MaterialGraphEditWindow.cs index d4190342f1d..21295a3ff99 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/MaterialGraphEditWindow.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/MaterialGraphEditWindow.cs @@ -988,6 +988,12 @@ public void ToSubGraph() : fromSlot.concreteValueType.ToString(); prop.SetDisplayNameAndSanitizeForGraph(subGraph, propName); + if (fromProperty.useCustomSlotLabel) + { + prop.useCustomSlotLabel = true; + prop.customSlotLabel = fromProperty.customSlotLabel; + } + subGraph.AddGraphInput(prop); if (fromProperty != null) { From eb0ac09fd751ab186ce840a5443b30a0f8f497e3 Mon Sep 17 00:00:00 2001 From: Peter John Long Date: Sat, 14 Oct 2023 12:46:23 +0000 Subject: [PATCH 24/27] update TestCaseFilters.asset to add to 5020_PathTracing_Depth_1 consoles update TestCaseFilters.asset for HDRP_DXR to add to 5020_PathTracing_Depth_1 to be excluded on consoles --- .../Projects/HDRP_DXR_Tests/Assets/Tests/TestCaseFilters.asset | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Tests/SRPTests/Projects/HDRP_DXR_Tests/Assets/Tests/TestCaseFilters.asset b/Tests/SRPTests/Projects/HDRP_DXR_Tests/Assets/Tests/TestCaseFilters.asset index e8bd2fe1e01..11ae30266ee 100644 --- a/Tests/SRPTests/Projects/HDRP_DXR_Tests/Assets/Tests/TestCaseFilters.asset +++ b/Tests/SRPTests/Projects/HDRP_DXR_Tests/Assets/Tests/TestCaseFilters.asset @@ -56,6 +56,7 @@ MonoBehaviour: - {fileID: 102900000, guid: a469a947680f48644967493aba255270, type: 3} - {fileID: 102900000, guid: 151529e60a002004f921ef6ebbc361ae, type: 3} - {fileID: 102900000, guid: efb54c201f4649344a2b5369d723e9de, type: 3} + - {fileID: 102900000, guid: b8027b89c6fd3d5428a58472925a4f8b, type: 3} ColorSpace: -1 BuildPlatform: 42 GraphicsDevice: 4 @@ -95,6 +96,7 @@ MonoBehaviour: - {fileID: 102900000, guid: a469a947680f48644967493aba255270, type: 3} - {fileID: 102900000, guid: 151529e60a002004f921ef6ebbc361ae, type: 3} - {fileID: 102900000, guid: efb54c201f4649344a2b5369d723e9de, type: 3} + - {fileID: 102900000, guid: b8027b89c6fd3d5428a58472925a4f8b, type: 3} ColorSpace: -1 BuildPlatform: 44 GraphicsDevice: 4 From dede2c8f82ca6f9e9bebc9bcf71aeedc2b827a8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Leli=C3=A8vre?= Date: Sat, 14 Oct 2023 12:46:24 +0000 Subject: [PATCH 25/27] Fix doc example custom pass outline Fix doc example custom pass outline, see https://forum.unity.com/threads/viewport-is-incorrect-in-a-custom-pass-running-in-afterpostprocess-when-using-dynamic-resolution.1008029/#post-9370811 for more information. --- .../Documentation~/Custom-Pass-Scripting.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Custom-Pass-Scripting.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Custom-Pass-Scripting.md index df3dac5d830..f69013582eb 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Custom-Pass-Scripting.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Custom-Pass-Scripting.md @@ -179,7 +179,12 @@ Shader "Hidden/Outline" color = float4(CustomPassSampleCameraColor(posInput.positionNDC.xy, 0), 1); // When sampling RTHandle texture, always use _RTHandleScale.xy to scale your UVs first. - float2 uv = posInput.positionNDC.xy * _RTHandleScale.xy; + float2 scaling = _RTHandleScale.xy; + if (_CustomPassInjectionPoint == CUSTOMPASSINJECTIONPOINT_AFTER_POST_PROCESS) + scaling *= rcp(_DynamicResolutionFullscreenScale.xy); + + // When sampling RTHandle texture, always use _RTHandleScale.xy to scale your UVs first. + float2 uv = posInput.positionNDC.xy * scaling; float4 outline = SAMPLE_TEXTURE2D_X_LOD(_OutlineBuffer, s_linear_clamp_sampler, uv, 0); outline.a = 0; @@ -189,7 +194,7 @@ Shader "Hidden/Outline" // Search neighbors for (int i = 0; i < MAXSAMPLES; i++) { - float2 uvN = uv + _ScreenSize.zw * _RTHandleScale.xy * samplingPositions[i]; + float2 uvN = uv + _ScreenSize.zw * scaling * samplingPositions[i]; float4 neighbour = SAMPLE_TEXTURE2D_X_LOD(_OutlineBuffer, s_linear_clamp_sampler, uvN, 0); if (Luminance(neighbour) > luminanceThreshold) From a9f99eaf9c9f7a85aca075b23a82c2877ac7342e Mon Sep 17 00:00:00 2001 From: Julien Fryer Date: Sat, 14 Oct 2023 12:46:26 +0000 Subject: [PATCH 26/27] [VFX] Add missing buginfo This PR adds missing buginfo files to VFX package and module --- Packages/com.unity.visualeffectgraph/.buginfo | 1 + 1 file changed, 1 insertion(+) create mode 100644 Packages/com.unity.visualeffectgraph/.buginfo diff --git a/Packages/com.unity.visualeffectgraph/.buginfo b/Packages/com.unity.visualeffectgraph/.buginfo new file mode 100644 index 00000000000..caec292fc5d --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/.buginfo @@ -0,0 +1 @@ +area: Visual Effects \ No newline at end of file From 7553a3741731c30c5b3000f75178597c17f34506 Mon Sep 17 00:00:00 2001 From: Elizabeth LeGros Date: Sat, 14 Oct 2023 12:46:26 +0000 Subject: [PATCH 27/27] [ShaderGraph] Fix sprite previews for URP Sets default material properties that are needed by sprite previews. This is a bit of a hotfix- it's probably better if the sprite target were to create these as hidden material properties so that these default values could be setup. --- .../Editor/Drawing/PreviewManager.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs b/Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs index 1f60923460f..ce8006a755a 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs @@ -11,7 +11,6 @@ using Object = UnityEngine.Object; using Unity.Profiling; - namespace UnityEditor.ShaderGraph.Drawing { delegate void OnPrimaryMasterChanged(); @@ -518,6 +517,9 @@ bool TimedNodesShouldUpdate(EditorWindow editorWindow) } private static readonly ProfilerMarker RenderPreviewsMarker = new ProfilerMarker("RenderPreviews"); + private static int k_spriteProps = Shader.PropertyToID("unity_SpriteProps"); + private static int k_spriteColor = Shader.PropertyToID("unity_SpriteColor"); + private static int k_rendererColor = Shader.PropertyToID("_RendererColor"); public void RenderPreviews(EditorWindow editorWindow, bool requestShaders = true) { using (RenderPreviewsMarker.Auto()) @@ -673,6 +675,11 @@ public void RenderPreviews(EditorWindow editorWindow, bool requestShaders = true previewTransform *= Matrix4x4.Scale(scale * Vector3.one * (Vector3.one).magnitude / mesh.bounds.size.magnitude); previewTransform *= Matrix4x4.Translate(-mesh.bounds.center); + //bugfix for some variables that need to be setup for URP Sprite material previews. Want a better isolated place to put them, + //but I dont believe such a place exists and would be too costly to add. + masterRenderData.shaderData.mat.SetVector(k_spriteProps, new Vector4(1, 1, -1, 0)); + masterRenderData.shaderData.mat.SetVector(k_spriteColor, new Vector4(1, 1, 1, 1)); + masterRenderData.shaderData.mat.SetVector(k_rendererColor, new Vector4(1, 1, 1, 1)); RenderPreview(masterRenderData, mesh, previewTransform, perMaterialPreviewProperties); }