From a987d96b9588ed6da5e24829f21728f4c81d1ea9 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Fri, 3 Dec 2021 12:09:40 +0200 Subject: [PATCH 01/38] Adding rendering layers and decal layers --- .../Editor/Decal/DecalPass.template | 2 + .../Editor/Decal/DecalProjectorEditor.Skin.cs | 1 + .../Editor/Decal/DecalProjectorEditor.cs | 12 ++ ...edUniversalRenderPipelineGlobalSettings.cs | 18 +++ ...rsalRenderPipelineGlobalSettingsUI.Skin.cs | 10 ++ .../DecalRendererFeatureEditor.cs | 4 + .../ShaderGraph/Includes/ShaderPassDecal.hlsl | 16 ++ .../Includes/ShaderVariablesDecal.hlsl | 1 + .../Targets/UniversalDecalSubTarget.cs | 15 ++ .../Decal/DBuffer/DBufferRenderPass.cs | 24 ++- .../Runtime/Decal/DecalProjector.cs | 37 +++++ .../Entities/DecalCreateDrawCallSystem.cs | 10 ++ .../Runtime/Decal/Entities/DecalDrawSystem.cs | 12 ++ .../Decal/Entities/DecalEntityManager.cs | 1 + .../Decal/Entities/DecalUpdateCachedSystem.cs | 4 + .../ScreenSpace/DecalGBufferRenderPass.cs | 65 +++++++- .../ScreenSpace/DecalScreenSpaceRenderPass.cs | 28 +++- .../Runtime/DeferredLights.cs | 11 +- .../Runtime/Passes/DepthNormalOnlyPass.cs | 45 +++++- .../Runtime/Passes/DrawObjectsPass.cs | 30 ++++ .../Runtime/Passes/GBufferPass.cs | 6 + .../Runtime/Passes/ScriptableRenderPass.cs | 20 ++- .../RendererFeatures/DecalRendererFeature.cs | 15 +- .../Runtime/ScriptableRenderer.cs | 15 +- .../Runtime/UniversalRenderPipelineCore.cs | 1 + .../UniversalRenderPipelineGlobalSettings.cs | 46 ++++++ .../Runtime/UniversalRenderer.cs | 143 ++++++++++++++++-- .../DeclareRenderingLayerTexture.hlsl | 28 ++++ .../DeclareRenderingLayerTexture.hlsl.meta | 7 + .../ShaderLibrary/Input.hlsl | 3 + .../ShaderLibrary/RealtimeLights.hlsl | 15 ++ .../ShaderVariablesFunctions.hlsl | 5 + .../ShaderLibrary/UnityGBuffer.hlsl | 8 +- .../Shaders/BakedLit.shader | 2 + .../Shaders/BakedLitDepthNormalsPass.hlsl | 16 +- .../Shaders/ComplexLit.shader | 1 + .../Shaders/DepthNormalsPass.hlsl | 18 ++- .../Shaders/Lit.shader | 9 ++ .../Shaders/LitDepthNormalsPass.hlsl | 18 ++- .../Shaders/LitForwardPass.hlsl | 15 +- .../Shaders/SimpleLit.shader | 4 + .../Shaders/SimpleLitDepthNormalsPass.hlsl | 17 ++- .../Shaders/Unlit.shader | 1 + .../Shaders/UnlitDepthNormalsPass.hlsl | 17 ++- .../Shaders/Utils/StencilDeferred.shader | 5 +- 45 files changed, 725 insertions(+), 56 deletions(-) create mode 100644 com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl create mode 100644 com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl.meta diff --git a/com.unity.render-pipelines.universal/Editor/Decal/DecalPass.template b/com.unity.render-pipelines.universal/Editor/Decal/DecalPass.template index 1a019c30d84..a552aeecb0c 100644 --- a/com.unity.render-pipelines.universal/Editor/Decal/DecalPass.template +++ b/com.unity.render-pipelines.universal/Editor/Decal/DecalPass.template @@ -63,7 +63,9 @@ Pass #endif #if _RENDER_PASS_ENABLED #define GBUFFER3 0 + #define GBUFFER4 1 FRAMEBUFFER_INPUT_HALF(GBUFFER3); + FRAMEBUFFER_INPUT_HALF(GBUFFER4); #endif // Includes $splice(PreGraphIncludes) diff --git a/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.Skin.cs b/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.Skin.cs index f764176dfb7..f661bd434f8 100644 --- a/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.Skin.cs +++ b/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.Skin.cs @@ -13,6 +13,7 @@ partial class DecalProjectorEditor static readonly GUIContent k_HeightContent = EditorGUIUtility.TrTextContent("Height", "Sets the height of the projection plan."); static readonly GUIContent k_ProjectionDepthContent = EditorGUIUtility.TrTextContent("Projection Depth", "Sets the projection depth of the projector."); static readonly GUIContent k_MaterialContent = EditorGUIUtility.TrTextContent("Material", "Specifies the Material this component projects as a decal."); + static readonly GUIContent k_DecalLayerMaskContent = EditorGUIUtility.TrTextContent("Decal Layer", "Specify the decal layer mask to use for this projector. RenderingLayerMask of Mesh matching this value will receive the decal. Enable Layers in Decal section of HDRP settings to access it."); static readonly GUIContent k_DistanceContent = EditorGUIUtility.TrTextContent("Draw Distance", "Sets the distance from the Camera at which URP stop rendering the decal."); static readonly GUIContent k_FadeScaleContent = EditorGUIUtility.TrTextContent("Start Fade", "Controls the distance from the Camera at which this component begins to fade the decal out."); static readonly GUIContent k_AngleFadeContent = EditorGUIUtility.TrTextContent("Angle Fade", "Controls the fade out range of the decal based on the angle between the Decal backward direction and the vertex normal of the receiving surface. Requires 'Decal Layers' to be enabled in the URP Asset and Frame Settings."); diff --git a/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs b/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs index 5649ddf4f13..efe08dd52b7 100644 --- a/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs +++ b/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs @@ -55,6 +55,7 @@ static void UpdateColorsInHandlesIfRequired() SerializedProperty m_Offset; SerializedProperty[] m_OffsetValues; SerializedProperty m_FadeFactor; + SerializedProperty m_DecalLayerMask; int layerMask => (target as Component).gameObject.layer; bool layerMaskHasMultipleValues @@ -181,6 +182,7 @@ private void OnEnable() m_Offset.FindPropertyRelative("z"), }; m_FadeFactor = serializedObject.FindProperty("m_FadeFactor"); + m_DecalLayerMask = serializedObject.FindProperty("m_DecalLayerMask"); ReinitSavedRatioSizePivotPosition(); } @@ -605,6 +607,16 @@ public override void OnInspectorGUI() EditorGUILayout.PropertyField(m_MaterialProperty, k_MaterialContent); materialChanged = EditorGUI.EndChangeCheck(); + bool decalLayerEnabled = false; + //if (hdrp != null) + { + decalLayerEnabled = true; + using (new EditorGUI.DisabledScope(!decalLayerEnabled)) + { + EditorGUILayout.PropertyField(m_DecalLayerMask, k_DecalLayerMaskContent); + } + } + foreach (var target in targets) { var decalProjector = target as DecalProjector; diff --git a/com.unity.render-pipelines.universal/Editor/GlobalSettings/SerializedUniversalRenderPipelineGlobalSettings.cs b/com.unity.render-pipelines.universal/Editor/GlobalSettings/SerializedUniversalRenderPipelineGlobalSettings.cs index cb045dc847c..88327fd0dfe 100644 --- a/com.unity.render-pipelines.universal/Editor/GlobalSettings/SerializedUniversalRenderPipelineGlobalSettings.cs +++ b/com.unity.render-pipelines.universal/Editor/GlobalSettings/SerializedUniversalRenderPipelineGlobalSettings.cs @@ -17,6 +17,15 @@ class SerializedUniversalRenderPipelineGlobalSettings public SerializedProperty lightLayerName6; public SerializedProperty lightLayerName7; + public SerializedProperty decalLayerName0; + public SerializedProperty decalLayerName1; + public SerializedProperty decalLayerName2; + public SerializedProperty decalLayerName3; + public SerializedProperty decalLayerName4; + public SerializedProperty decalLayerName5; + public SerializedProperty decalLayerName6; + public SerializedProperty decalLayerName7; + public SerializedProperty stripDebugVariants; public SerializedProperty stripUnusedPostProcessingVariants; public SerializedProperty stripUnusedVariants; @@ -44,6 +53,15 @@ public SerializedUniversalRenderPipelineGlobalSettings(SerializedObject serializ lightLayerName6 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.lightLayerName6); lightLayerName7 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.lightLayerName7); + decalLayerName0 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.decalLayerName0); + decalLayerName1 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.decalLayerName1); + decalLayerName2 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.decalLayerName2); + decalLayerName3 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.decalLayerName3); + decalLayerName4 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.decalLayerName4); + decalLayerName5 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.decalLayerName5); + decalLayerName6 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.decalLayerName6); + decalLayerName7 = serializedObject.Find((UniversalRenderPipelineGlobalSettings s) => s.decalLayerName7); + stripDebugVariants = serializedObject.FindProperty("m_StripDebugVariants"); stripUnusedPostProcessingVariants = serializedObject.FindProperty("m_StripUnusedPostProcessingVariants"); stripUnusedVariants = serializedObject.FindProperty("m_StripUnusedVariants"); diff --git a/com.unity.render-pipelines.universal/Editor/GlobalSettings/UniversalRenderPipelineGlobalSettingsUI.Skin.cs b/com.unity.render-pipelines.universal/Editor/GlobalSettings/UniversalRenderPipelineGlobalSettingsUI.Skin.cs index 1b8b116e8b9..07ea1887439 100644 --- a/com.unity.render-pipelines.universal/Editor/GlobalSettings/UniversalRenderPipelineGlobalSettingsUI.Skin.cs +++ b/com.unity.render-pipelines.universal/Editor/GlobalSettings/UniversalRenderPipelineGlobalSettingsUI.Skin.cs @@ -16,6 +16,16 @@ internal class Styles public static readonly GUIContent lightLayerName6 = EditorGUIUtility.TrTextContent("Light Layer 6", "The display name for Light Layer 6."); public static readonly GUIContent lightLayerName7 = EditorGUIUtility.TrTextContent("Light Layer 7", "The display name for Light Layer 7."); + public static readonly GUIContent decalLayersLabel = EditorGUIUtility.TrTextContent("Decal Layer Names (3D)", "If the Decal Layers feature is enabled in the URP Asset, Unity allocates memory for processing Decal Layers. In the Deferred Rendering Path, this allocation includes an extra render target in GPU memory, which reduces performance."); + public static readonly GUIContent decalLayerName0 = EditorGUIUtility.TrTextContent("Decal Layer 0", "The display name for Decal Layer 0."); + public static readonly GUIContent decalLayerName1 = EditorGUIUtility.TrTextContent("Decal Layer 1", "The display name for Decal Layer 1."); + public static readonly GUIContent decalLayerName2 = EditorGUIUtility.TrTextContent("Decal Layer 2", "The display name for Decal Layer 2."); + public static readonly GUIContent decalLayerName3 = EditorGUIUtility.TrTextContent("Decal Layer 3", "The display name for Decal Layer 3."); + public static readonly GUIContent decalLayerName4 = EditorGUIUtility.TrTextContent("Decal Layer 4", "The display name for Decal Layer 4."); + public static readonly GUIContent decalLayerName5 = EditorGUIUtility.TrTextContent("Decal Layer 5", "The display name for Decal Layer 5."); + public static readonly GUIContent decalLayerName6 = EditorGUIUtility.TrTextContent("Decal Layer 6", "The display name for Decal Layer 6."); + public static readonly GUIContent decalLayerName7 = EditorGUIUtility.TrTextContent("Decal Layer 7", "The display name for Decal Layer 7."); + public static readonly GUIContent miscSettingsLabel = EditorGUIUtility.TrTextContent("Shader Stripping", "Shader Stripping settings"); public static readonly GUIContent stripDebugVariantsLabel = EditorGUIUtility.TrTextContent("Strip Debug Variants", "When disabled, all debug display shader variants are removed when you build for the Unity Player. This decreases build time, but prevents the use of Rendering Debugger in Player builds."); public static readonly GUIContent stripUnusedPostProcessingVariantsLabel = EditorGUIUtility.TrTextContent("Strip Unused Post Processing Variants", "Controls whether strips automatically post processing shader variants based on VolumeProfile components. It strips based on VolumeProfiles in project and not scenes that actually uses it."); diff --git a/com.unity.render-pipelines.universal/Editor/RendererFeatures/DecalRendererFeatureEditor.cs b/com.unity.render-pipelines.universal/Editor/RendererFeatures/DecalRendererFeatureEditor.cs index 2f0c6fc88ec..e433180f099 100644 --- a/com.unity.render-pipelines.universal/Editor/RendererFeatures/DecalRendererFeatureEditor.cs +++ b/com.unity.render-pipelines.universal/Editor/RendererFeatures/DecalRendererFeatureEditor.cs @@ -11,6 +11,7 @@ private struct Styles { public static GUIContent Technique = EditorGUIUtility.TrTextContent("Technique", "This option determines what method is used for rendering decals."); public static GUIContent MaxDrawDistance = EditorGUIUtility.TrTextContent("Max Draw Distance", "Maximum global draw distance of decals."); + public static GUIContent DecalLayers = EditorGUIUtility.TrTextContent("Decal Layers", "When enabled, URP allocates Shader variants and memory to the decals layers buffer. This allows you to use decal layers in this Renderer."); public static GUIContent SurfaceData = EditorGUIUtility.TrTextContent("Surface Data", "Allows specifying which decals surface data should be blended with surfaces."); public static GUIContent NormalBlend = EditorGUIUtility.TrTextContent("Normal Blend", "Controls the quality of normal reconstruction. The higher the value the more accurate normal reconstruction and the cost on performance."); public static GUIContent UseGBuffer = EditorGUIUtility.TrTextContent("Use GBuffer", "Uses traditional GBuffer decals, if renderer is set to deferred. Support only base color, normal and emission. Ignored when using forward rendering."); @@ -18,6 +19,7 @@ private struct Styles private SerializedProperty m_Technique; private SerializedProperty m_MaxDrawDistance; + private SerializedProperty m_DecalLayers; private SerializedProperty m_DBufferSettings; private SerializedProperty m_DBufferSurfaceData; private SerializedProperty m_ScreenSpaceSettings; @@ -33,6 +35,7 @@ private void Init() SerializedProperty settings = serializedObject.FindProperty("m_Settings"); m_Technique = settings.FindPropertyRelative("technique"); m_MaxDrawDistance = settings.FindPropertyRelative("maxDrawDistance"); + m_DecalLayers = settings.FindPropertyRelative("decalLayers"); m_DBufferSettings = settings.FindPropertyRelative("dBufferSettings"); m_DBufferSurfaceData = m_DBufferSettings.FindPropertyRelative("surfaceData"); m_ScreenSpaceSettings = settings.FindPropertyRelative("screenSpaceSettings"); @@ -67,6 +70,7 @@ public override void OnInspectorGUI() } EditorGUILayout.PropertyField(m_MaxDrawDistance, Styles.MaxDrawDistance); + EditorGUILayout.PropertyField(m_DecalLayers, Styles.DecalLayers); } private void ValidateGraphicsApis() diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl index 4dc1d7ddb05..ae25d5eb465 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl @@ -36,6 +36,10 @@ #define DECAL_LOAD_NORMAL #endif +#ifdef _DECAL_LAYERS +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl" +#endif + #if defined(DECAL_LOAD_NORMAL) #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" #endif @@ -179,6 +183,18 @@ void Frag(PackedVaryings packedInput, half angleFadeFactor = 1.0; +#ifdef _DECAL_LAYERS + //float4 renderingLayers = LoadSceneRenderingLayer(input.positionCS.xy); + //uint meshRenderingLayers = uint(renderingLayers.r * 255.0); +#ifdef _RENDER_PASS_ENABLED + uint meshRenderingLayers = UnpackInt(LOAD_FRAMEBUFFER_INPUT(GBUFFER4, input.positionCS.xy), 16); +#else + uint meshRenderingLayers = LoadSceneRenderingLayer(input.positionCS.xy); +#endif + uint decalRenderingLayer = uint(UNITY_ACCESS_INSTANCED_PROP(Decal, _DecalLayerMaskFromDecal)) << 8; + clip((meshRenderingLayers & decalRenderingLayer) != 0 ? 1 : -1); +#endif + #if defined(DECAL_PROJECTOR) #if UNITY_REVERSED_Z #if _RENDER_PASS_ENABLED diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl index df05522f108..49eac3ef53b 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderVariablesDecal.hlsl @@ -1,3 +1,4 @@ UNITY_INSTANCING_BUFFER_START(Decal) UNITY_DEFINE_INSTANCED_PROP(half4x4, _NormalToWorld) +UNITY_DEFINE_INSTANCED_PROP(float, _DecalLayerMaskFromDecal) UNITY_INSTANCING_BUFFER_END(Decal) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs index 734fa568b39..e7817d4517f 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs @@ -928,17 +928,28 @@ static class Descriptors definition = KeywordDefinition.MultiCompile, scope = KeywordScope.Global, }; + + public static readonly KeywordDescriptor DecalLayers = new KeywordDescriptor() + { + displayName = "Decal Layers", + referenceName = "_DECAL_LAYERS", + type = KeywordType.Boolean, + definition = KeywordDefinition.MultiCompile, + scope = KeywordScope.Global, + }; } public static KeywordCollection DBufferMesh = new KeywordCollection { { CoreKeywordDescriptors.DBuffer }, + { Descriptors.DecalLayers }, { Descriptors.LodCrossFade, new FieldCondition(Fields.LodCrossFade, true) }, }; public static KeywordCollection DBufferProjector = new KeywordCollection { { CoreKeywordDescriptors.DBuffer }, + { Descriptors.DecalLayers }, }; public static readonly KeywordCollection ScreenSpaceMesh = new KeywordCollection @@ -954,6 +965,7 @@ static class Descriptors { CoreKeywordDescriptors.ShadowsShadowmask }, { CoreKeywordDescriptors.ClusteredRendering }, { Descriptors.DecalsNormalBlend }, + { Descriptors.DecalLayers }, { Descriptors.LodCrossFade, new FieldCondition(Fields.LodCrossFade, true) }, }; @@ -965,6 +977,7 @@ static class Descriptors { CoreKeywordDescriptors.ShadowsSoft }, { CoreKeywordDescriptors.ClusteredRendering }, { Descriptors.DecalsNormalBlend }, + { Descriptors.DecalLayers }, }; public static readonly KeywordCollection GBufferMesh = new KeywordCollection @@ -977,6 +990,7 @@ static class Descriptors { CoreKeywordDescriptors.LightmapShadowMixing }, { CoreKeywordDescriptors.MixedLightingSubtractive }, { Descriptors.DecalsNormalBlend }, + { Descriptors.DecalLayers }, { CoreKeywordDescriptors.GBufferNormalsOct }, { CoreKeywordDescriptors.RenderPassEnabled }, { Descriptors.LodCrossFade, new FieldCondition(Fields.LodCrossFade, true) }, @@ -987,6 +1001,7 @@ static class Descriptors { CoreKeywordDescriptors.MainLightShadows }, { CoreKeywordDescriptors.ShadowsSoft }, { Descriptors.DecalsNormalBlend }, + { Descriptors.DecalLayers }, { CoreKeywordDescriptors.GBufferNormalsOct }, { CoreKeywordDescriptors.RenderPassEnabled }, }; diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs index 034fc78fdc0..1ff227c26c8 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs @@ -24,6 +24,8 @@ internal class DBufferRenderPass : ScriptableRenderPass private int m_DBufferCount; private ProfilingSampler m_ProfilingSampler; + private bool m_DecalLayers; + private RTHandle m_DBufferDepth; private RTHandle m_CameraDepthTexture; private RTHandle m_CameraDepthAttachment; @@ -36,16 +38,21 @@ internal class DBufferRenderPass : ScriptableRenderPass internal RTHandle cameraDepthTexture => m_CameraDepthTexture; internal RTHandle cameraDepthAttachment => m_CameraDepthAttachment; - public DBufferRenderPass(Material dBufferClear, DBufferSettings settings, DecalDrawDBufferSystem drawSystem) + public DBufferRenderPass(Material dBufferClear, DBufferSettings settings, DecalDrawDBufferSystem drawSystem, bool decalLayers) { renderPassEvent = RenderPassEvent.AfterRenderingPrePasses + 1; - ConfigureInput(ScriptableRenderPassInput.Normal); // Require depth + + var scriptableRenderPassInput = ScriptableRenderPassInput.Normal; + if (decalLayers) + scriptableRenderPassInput |= ScriptableRenderPassInput.RenderingLayer; + ConfigureInput(scriptableRenderPassInput); m_DrawSystem = drawSystem; m_Settings = settings; m_DBufferClear = dBufferClear; m_ProfilingSampler = new ProfilingSampler("DBuffer Render"); m_FilteringSettings = new FilteringSettings(RenderQueueRange.opaque, -1); + m_DecalLayers = decalLayers; m_ShaderTagIdList = new List(); m_ShaderTagIdList.Add(new ShaderTagId(DecalShaderPassNames.DBufferMesh)); @@ -58,7 +65,7 @@ public DBufferRenderPass(Material dBufferClear, DBufferSettings settings, DecalD m_DBufferDepth = RTHandles.Alloc(s_DBufferDepthName, name: s_DBufferDepthName); m_CameraDepthTexture = RTHandles.Alloc("_CameraDepthTexture", name: "_CameraDepthTexture"); - m_CameraDepthAttachment = RTHandles.Alloc("_CameraDepthAttachment", name: "_CameraDepthAttachment"); + //m_CameraDepthAttachment = RTHandles.Alloc("_CameraDepthAttachment", name: "_CameraDepthAttachment"); } public void Dispose() @@ -70,6 +77,11 @@ public void Dispose() handle.Release(); } + public void Setup(RTHandle depthTextureHandle) + { + m_CameraDepthAttachment = depthTextureHandle; + } + public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) { // base @@ -133,15 +145,21 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData context.ExecuteCommandBuffer(cmd); cmd.Clear(); + // todo this should be set by depth normal prepass if (isDeferred) { cmd.SetGlobalTexture("_CameraNormalsTexture", deferredLights.GbufferAttachmentIdentifiers[deferredLights.GBufferNormalSmoothnessIndex]); + + //if (m_DecalLayers) + // cmd.SetGlobalTexture("_CameraDecalLayersTexture", deferredLights.GbufferAttachmentIdentifiers[deferredLights.GBufferRenderingLayers]); } CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DBufferMRT1, m_Settings.surfaceData == DecalSurfaceData.Albedo); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DBufferMRT2, m_Settings.surfaceData == DecalSurfaceData.AlbedoNormal); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DBufferMRT3, m_Settings.surfaceData == DecalSurfaceData.AlbedoNormalMAOS); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalLayers, m_DecalLayers); + // TODO: This should be replace with mrt clear once we support it // Clear render targets ClearDBuffers(cmd, renderingData.cameraData); diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/DecalProjector.cs b/com.unity.render-pipelines.universal/Runtime/Decal/DecalProjector.cs index 8ace3653f42..1635664e8a8 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/DecalProjector.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/DecalProjector.cs @@ -3,6 +3,32 @@ namespace UnityEngine.Rendering.Universal { + /// Decal Layers. + [Flags] + public enum DecalLayerEnum + { + /// The light will no affect any object. + Nothing = 0, // Custom name for "Nothing" option + /// Decal Layer 0. + DecalLayerDefault = 1 << 0, + /// Decal Layer 1. + DecalLayer1 = 1 << 1, + /// Decal Layer 2. + DecalLayer2 = 1 << 2, + /// Decal Layer 3. + DecalLayer3 = 1 << 3, + /// Decal Layer 4. + DecalLayer4 = 1 << 4, + /// Decal Layer 5. + DecalLayer5 = 1 << 5, + /// Decal Layer 6. + DecalLayer6 = 1 << 6, + /// Decal Layer 7. + DecalLayer7 = 1 << 7, + /// Everything. + Everything = 0xFF, // Custom name for "Everything" option + } + /// The scaling mode to apply to decals that use the Decal Projector. public enum DecalScaleMode { @@ -162,6 +188,17 @@ public Vector2 uvBias } } + [SerializeField] + DecalLayerEnum m_DecalLayerMask = DecalLayerEnum.DecalLayerDefault; + /// + /// The layer of the decal. + /// + public DecalLayerEnum decalLayerMask + { + get => m_DecalLayerMask; + set => m_DecalLayerMask = value; + } + [SerializeField] private DecalScaleMode m_ScaleMode = DecalScaleMode.ScaleInvariant; /// diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalCreateDrawCallSystem.cs b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalCreateDrawCallSystem.cs index de7926bb2cd..289b27a81b4 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalCreateDrawCallSystem.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalCreateDrawCallSystem.cs @@ -18,6 +18,7 @@ internal class DecalDrawCallChunk : DecalChunk { public NativeArray decalToWorlds; public NativeArray normalToDecals; + public NativeArray decalLayerMasks; public NativeArray subCalls; public NativeArray subCallCounts; @@ -27,6 +28,7 @@ public override void RemoveAtSwapBack(int entityIndex) { RemoveAtSwapBack(ref decalToWorlds, entityIndex, count); RemoveAtSwapBack(ref normalToDecals, entityIndex, count); + RemoveAtSwapBack(ref decalLayerMasks, entityIndex, count); RemoveAtSwapBack(ref subCalls, entityIndex, count); count--; } @@ -35,6 +37,7 @@ public override void SetCapacity(int newCapacity) { decalToWorlds.ResizeArray(newCapacity); normalToDecals.ResizeArray(newCapacity); + decalLayerMasks.ResizeArray(newCapacity); subCalls.ResizeArray(newCapacity); capacity = newCapacity; } @@ -48,6 +51,7 @@ public override void Dispose() decalToWorlds.Dispose(); normalToDecals.Dispose(); + decalLayerMasks.Dispose(); subCalls.Dispose(); count = 0; capacity = 0; @@ -105,6 +109,7 @@ private void Execute(DecalCachedChunk cachedChunk, DecalCulledChunk culledChunk, sceneLayerMasks = cachedChunk.sceneLayerMasks, fadeFactors = cachedChunk.fadeFactors, boundingSpheres = cachedChunk.boundingSpheres, + decalLayerMasks = cachedChunk.decalLayerMasks, cameraPosition = culledChunk.cameraPosition, sceneCullingMask = culledChunk.sceneCullingMask, @@ -115,6 +120,7 @@ private void Execute(DecalCachedChunk cachedChunk, DecalCulledChunk culledChunk, decalToWorldsDraw = drawCallChunk.decalToWorlds, normalToDecalsDraw = drawCallChunk.normalToDecals, + decalLayerMasksDraw = drawCallChunk.decalLayerMasks, subCalls = drawCallChunk.subCalls, subCallCount = drawCallChunk.subCallCounts, }; @@ -139,6 +145,7 @@ struct DrawCallJob : IJob [ReadOnly] public NativeArray sceneLayerMasks; [ReadOnly] public NativeArray fadeFactors; [ReadOnly] public NativeArray boundingSpheres; + [ReadOnly] public NativeArray decalLayerMasks; public Vector3 cameraPosition; public ulong sceneCullingMask; @@ -149,6 +156,7 @@ struct DrawCallJob : IJob [WriteOnly] public NativeArray decalToWorldsDraw; [WriteOnly] public NativeArray normalToDecalsDraw; + [WriteOnly] public NativeArray decalLayerMasksDraw; [WriteOnly] public NativeArray subCalls; [WriteOnly] public NativeArray subCallCount; @@ -194,6 +202,8 @@ public void Execute() normalToDecals.c3 = new float4(fadeFactor * 1.0f, angleFade.x, angleFade.y, uvScaleBias.w); normalToDecalsDraw[instanceIndex] = normalToDecals; + decalLayerMasksDraw[instanceIndex] = (float)decalLayerMasks[decalIndex]; + instanceIndex++; int instanceCount = instanceIndex - instanceStart; diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalDrawSystem.cs b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalDrawSystem.cs index 955a999bbd6..480a638a61c 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalDrawSystem.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalDrawSystem.cs @@ -11,6 +11,7 @@ internal abstract class DecalDrawSystem protected DecalEntityManager m_EntityManager; private Matrix4x4[] m_WorldToDecals; private Matrix4x4[] m_NormalToDecals; + private float[] m_DecalLayerMasks; private ProfilingSampler m_Sampler; public Material overrideMaterial { get; set; } @@ -21,6 +22,7 @@ public DecalDrawSystem(string sampler, DecalEntityManager entityManager) m_WorldToDecals = new Matrix4x4[250]; m_NormalToDecals = new Matrix4x4[250]; + m_DecalLayerMasks = new float[250]; m_Sampler = new ProfilingSampler(sampler); } @@ -80,6 +82,7 @@ private void Draw(CommandBuffer cmd, DecalEntityChunk decalEntityChunk, DecalCac for (int j = subCall.start; j < subCall.end; ++j) { decalCachedChunk.propertyBlock.SetMatrix("_NormalToWorld", decalDrawCallChunk.normalToDecals[j]); + decalCachedChunk.propertyBlock.SetFloat("_DecalLayerMaskFromDecal", decalDrawCallChunk.decalLayerMasks[j]); cmd.DrawMesh(mesh, decalDrawCallChunk.decalToWorlds[j], material, 0, passIndex, decalCachedChunk.propertyBlock); } } @@ -102,7 +105,11 @@ private void DrawInstanced(CommandBuffer cmd, DecalEntityChunk decalEntityChunk, var normalToWorldSlice = decalDrawCallChunk.normalToDecals.Reinterpret(); NativeArray.Copy(normalToWorldSlice, subCall.start, m_NormalToDecals, 0, subCall.count); + var decalLayerMaskSlice = decalDrawCallChunk.decalLayerMasks.Reinterpret(); + NativeArray.Copy(decalLayerMaskSlice, subCall.start, m_DecalLayerMasks, 0, subCall.count); + decalCachedChunk.propertyBlock.SetMatrixArray("_NormalToWorld", m_NormalToDecals); + decalCachedChunk.propertyBlock.SetFloatArray("_DecalLayerMaskFromDecal", m_DecalLayerMasks); cmd.DrawMeshInstanced(mesh, 0, material, passIndex, m_WorldToDecals, subCall.end - subCall.start, decalCachedChunk.propertyBlock); } } @@ -156,6 +163,7 @@ private void Draw(in CameraData cameraData, DecalEntityChunk decalEntityChunk, D for (int j = subCall.start; j < subCall.end; ++j) { decalCachedChunk.propertyBlock.SetMatrix("_NormalToWorld", decalDrawCallChunk.normalToDecals[j]); + decalCachedChunk.propertyBlock.SetFloat("_DecalLayerMaskFromDecal", decalDrawCallChunk.decalLayerMasks[j]); Graphics.DrawMesh(mesh, decalCachedChunk.decalToWorlds[j], material, decalCachedChunk.layerMasks[j], cameraData.camera, 0, decalCachedChunk.propertyBlock); } } @@ -178,7 +186,11 @@ private void DrawInstanced(in CameraData cameraData, DecalEntityChunk decalEntit var normalToWorldSlice = decalDrawCallChunk.normalToDecals.Reinterpret(); NativeArray.Copy(normalToWorldSlice, subCall.start, m_NormalToDecals, 0, subCall.count); + var decalLayerMaskSlice = decalDrawCallChunk.decalLayerMasks.Reinterpret(); + NativeArray.Copy(decalLayerMaskSlice, subCall.start, m_DecalLayerMasks, 0, subCall.count); + decalCachedChunk.propertyBlock.SetMatrixArray("_NormalToWorld", m_NormalToDecals); + decalCachedChunk.propertyBlock.SetFloatArray("_DecalLayerMaskFromDecal", m_DecalLayerMasks); Graphics.DrawMeshInstanced(mesh, 0, material, m_WorldToDecals, subCall.count, decalCachedChunk.propertyBlock, ShadowCastingMode.On, true, 0, cameraData.camera); } diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalEntityManager.cs b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalEntityManager.cs index bdb073e75ce..d1bb72ae925 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalEntityManager.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalEntityManager.cs @@ -349,6 +349,7 @@ public void UpdateDecalEntityData(DecalEntity decalEntity, DecalProjector decalP cachedChunk.sceneLayerMasks[arrayIndex] = sceneLayerMask; cachedChunk.fadeFactors[arrayIndex] = fadeFactor; cachedChunk.scaleModes[arrayIndex] = decalProjector.scaleMode; + cachedChunk.decalLayerMasks[arrayIndex] = decalProjector.decalLayerMask; cachedChunk.positions[arrayIndex] = decalProjector.transform.position; cachedChunk.rotation[arrayIndex] = decalProjector.transform.rotation; diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalUpdateCachedSystem.cs b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalUpdateCachedSystem.cs index 5823c692c9d..770b0a4714e 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalUpdateCachedSystem.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalUpdateCachedSystem.cs @@ -28,6 +28,7 @@ internal class DecalCachedChunk : DecalChunk public NativeArray fadeFactors; public NativeArray boundingSpheres; public NativeArray scaleModes; + public NativeArray decalLayerMasks; public NativeArray positions; public NativeArray rotation; public NativeArray scales; @@ -49,6 +50,7 @@ public override void RemoveAtSwapBack(int entityIndex) RemoveAtSwapBack(ref boundingSphereArray, entityIndex, count); RemoveAtSwapBack(ref boundingSpheres, entityIndex, count); RemoveAtSwapBack(ref scaleModes, entityIndex, count); + RemoveAtSwapBack(ref decalLayerMasks, entityIndex, count); RemoveAtSwapBack(ref positions, entityIndex, count); RemoveAtSwapBack(ref rotation, entityIndex, count); RemoveAtSwapBack(ref scales, entityIndex, count); @@ -69,6 +71,7 @@ public override void SetCapacity(int newCapacity) fadeFactors.ResizeArray(newCapacity); boundingSpheres.ResizeArray(newCapacity); scaleModes.ResizeArray(newCapacity); + decalLayerMasks.ResizeArray(newCapacity); positions.ResizeArray(newCapacity); rotation.ResizeArray(newCapacity); scales.ResizeArray(newCapacity); @@ -94,6 +97,7 @@ public override void Dispose() fadeFactors.Dispose(); boundingSpheres.Dispose(); scaleModes.Dispose(); + decalLayerMasks.Dispose(); positions.Dispose(); rotation.Dispose(); scales.Dispose(); diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs index af51fc88dd8..d06bc0a05ba 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs @@ -18,15 +18,19 @@ internal class DecalGBufferRenderPass : ScriptableRenderPass private DecalScreenSpaceSettings m_Settings; private DeferredLights m_DeferredLights; private RTHandle[] m_GbufferAttachments; + private bool m_DecalLayers; - public DecalGBufferRenderPass(DecalScreenSpaceSettings settings, DecalDrawGBufferSystem drawSystem) + public DecalGBufferRenderPass(DecalScreenSpaceSettings settings, DecalDrawGBufferSystem drawSystem, bool decalLayers) { renderPassEvent = RenderPassEvent.AfterRenderingGbuffer; + if (decalLayers) + ConfigureInput(ScriptableRenderPassInput.RenderingLayer); m_DrawSystem = drawSystem; m_Settings = settings; m_ProfilingSampler = new ProfilingSampler("Decal GBuffer Render"); m_FilteringSettings = new FilteringSettings(RenderQueueRange.opaque, -1); + m_DecalLayers = decalLayers; m_ShaderTagIdList = new List(); if (drawSystem == null) @@ -40,19 +44,65 @@ internal void Setup(DeferredLights deferredLights) m_DeferredLights = deferredLights; } - public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) + //public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) // todo find out why on camera setup fails here { if (m_DeferredLights.UseRenderPass) { + //if (m_GbufferAttachments == null) m_GbufferAttachments = new RTHandle[] { - m_DeferredLights.GbufferAttachments[0], m_DeferredLights.GbufferAttachments[1], - m_DeferredLights.GbufferAttachments[2], m_DeferredLights.GbufferAttachments[3] + m_DeferredLights.GbufferAttachments[0], m_DeferredLights.GbufferAttachments[1], + m_DeferredLights.GbufferAttachments[2], m_DeferredLights.GbufferAttachments[3] }; - ConfigureInputAttachments(m_DeferredLights.DepthCopyTexture, false); + + //m_GbufferAttachments = m_DeferredLights.GbufferAttachmentIdentifiers; + + if (m_DecalLayers) + { + var deferredInputAttachments = new RTHandle[] + { + //m_DeferredLights.DepthCopyTexture, + m_DeferredLights.GbufferAttachments[m_DeferredLights.GbufferDepthIndex], + m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers], + }; + + var deferredInputIsTransient = new bool[] + { + true, false, // todo + }; + + ConfigureInputAttachments(deferredInputAttachments, deferredInputIsTransient); + } + else + { + var deferredInputAttachments = new RTHandle[] + { + //m_DeferredLights.DepthCopyTexture, + m_DeferredLights.GbufferAttachments[m_DeferredLights.GbufferDepthIndex], + }; + + var deferredInputIsTransient = new bool[] + { + true, + }; + + ConfigureInputAttachments(deferredInputAttachments, deferredInputIsTransient); + } } else - m_GbufferAttachments = m_DeferredLights.GbufferAttachments; + { + //m_GbufferAttachments = m_DeferredLights.GbufferAttachmentIdentifiers; + + //if (m_GbufferAttachments == null) + m_GbufferAttachments = new RTHandle[] + { + m_DeferredLights.GbufferAttachments[0], m_DeferredLights.GbufferAttachments[1], + m_DeferredLights.GbufferAttachments[2], m_DeferredLights.GbufferAttachments[3] + }; + if (m_DeferredLights.GbufferAttachments[0].rt == null) + Debug.Assert(m_DeferredLights.GbufferAttachments[0].rt != null); + } ConfigureTarget(m_GbufferAttachments, m_DeferredLights.DepthAttachmentHandle); } @@ -74,6 +124,8 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendMedium, m_Settings.normalBlend == DecalNormalBlend.Medium); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendHigh, m_Settings.normalBlend == DecalNormalBlend.High); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalLayers, m_DecalLayers); + context.ExecuteCommandBuffer(cmd); cmd.Clear(); @@ -95,6 +147,7 @@ public override void OnCameraCleanup(CommandBuffer cmd) CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendLow, false); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendMedium, false); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendHigh, false); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalLayers, false); } } } diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs index 74970574bd1..3672936e59c 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs @@ -16,16 +16,23 @@ internal class DecalScreenSpaceRenderPass : ScriptableRenderPass private List m_ShaderTagIdList; private DecalDrawScreenSpaceSystem m_DrawSystem; private DecalScreenSpaceSettings m_Settings; + private bool m_DecalLayers; + //RenderTargetIdentifier m_ColorTargetIndentifiers; - public DecalScreenSpaceRenderPass(DecalScreenSpaceSettings settings, DecalDrawScreenSpaceSystem drawSystem) + public DecalScreenSpaceRenderPass(DecalScreenSpaceSettings settings, DecalDrawScreenSpaceSystem drawSystem, bool decalLayers) { renderPassEvent = RenderPassEvent.AfterRenderingSkybox; - ConfigureInput(ScriptableRenderPassInput.Depth); // Require depth + + var scriptableRenderPassInput = ScriptableRenderPassInput.Depth; // Require depth + if (decalLayers) + scriptableRenderPassInput |= ScriptableRenderPassInput.RenderingLayer; + ConfigureInput(scriptableRenderPassInput); m_DrawSystem = drawSystem; m_Settings = settings; m_ProfilingSampler = new ProfilingSampler("Decal Screen Space Render"); m_FilteringSettings = new FilteringSettings(RenderQueueRange.opaque, -1); + m_DecalLayers = decalLayers; m_ShaderTagIdList = new List(); @@ -35,6 +42,19 @@ public DecalScreenSpaceRenderPass(DecalScreenSpaceSettings settings, DecalDrawSc m_ShaderTagIdList.Add(new ShaderTagId(DecalShaderPassNames.DecalScreenSpaceMesh)); } + /*public void Setup(RenderTargetIdentifier colorAttachments) + { + m_ColorTargetIndentifiers = colorAttachments; + } + + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) + { + // todo + // here to break pass in case of decal layers + ConfigureTarget(m_ColorTargetIndentifiers); + ConfigureClear(ClearFlag.None, Color.black); + }*/ + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { SortingCriteria sortingCriteria = SortingCriteria.CommonTransparent; @@ -52,6 +72,8 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendMedium, m_Settings.normalBlend == DecalNormalBlend.Medium); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendHigh, m_Settings.normalBlend == DecalNormalBlend.High); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalLayers, m_DecalLayers); + context.ExecuteCommandBuffer(cmd); cmd.Clear(); @@ -73,6 +95,8 @@ public override void OnCameraCleanup(CommandBuffer cmd) CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendLow, false); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendMedium, false); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalNormalBlendHigh, false); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalLayers, false); + } } } diff --git a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs index 8e254643072..59ad1ad8ad3 100644 --- a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs +++ b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs @@ -153,7 +153,7 @@ internal GraphicsFormat GetGBufferFormat(int index) else if (index == GBufferShadowMask) // Optional: shadow mask is outputed in mixed lighting subtractive mode for non-static meshes only return GraphicsFormat.R8G8B8A8_UNorm; else if (index == GBufferRenderingLayers) // Optional: rendering layers is outputed when light layers are enabled (subset of rendering layers) - return GraphicsFormat.R8_UNorm; + return GraphicsFormat.R16_UNorm; else return GraphicsFormat.None; } @@ -161,13 +161,17 @@ internal GraphicsFormat GetGBufferFormat(int index) // This may return different values depending on what lights are rendered for a given frame. internal bool UseShadowMask { get { return this.MixedLightingSetup != MixedLightingSetup.None; } } // - internal bool UseRenderingLayers { get { return UniversalRenderPipeline.asset.supportsLightLayers; } } + internal bool UseRenderingLayers { get { return UniversalRenderPipeline.asset.supportsLightLayers || UseDecalLayers; } } + // + internal bool UseDecalLayers { get; set; } // internal bool UseRenderPass { get; set; } // internal bool HasDepthPrepass { get; set; } // internal bool HasNormalPrepass { get; set; } + // + internal bool HasRenderingLayerPrepass { get; set; } // This is an overlay camera being rendered. internal bool IsOverlay { get; set; } // Not all platforms support R8G8B8A8_SNorm, so we need to check for the support and force accurate GBuffer normals and relevant shader variants @@ -302,6 +306,7 @@ internal void SetupLights(ScriptableRenderContext context, ref RenderingData ren CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MixedLightingSubtractive, isSubtractive); // Backward compatibility // This should be moved to a more global scope when framebuffer fetch is introduced to more passes CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.RenderPassEnabled, this.UseRenderPass && renderingData.cameraData.cameraType == CameraType.Game); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.LightLayers, UseRenderingLayers); } context.ExecuteCommandBuffer(cmd); @@ -387,6 +392,7 @@ public void Setup(ref RenderingData renderingData, AdditionalLightsShadowCasterPass additionalLightsShadowCasterPass, bool hasDepthPrepass, bool hasNormalPrepass, + bool hasRenderingLayerPrepass, RTHandle depthCopyTexture, RTHandle depthAttachment, RTHandle colorAttachment) @@ -394,6 +400,7 @@ public void Setup(ref RenderingData renderingData, m_AdditionalLightsShadowCasterPass = additionalLightsShadowCasterPass; this.HasDepthPrepass = hasDepthPrepass; this.HasNormalPrepass = hasNormalPrepass; + this.HasRenderingLayerPrepass = hasRenderingLayerPrepass; this.DepthCopyTexture = depthCopyTexture; diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs index 9904b389e83..ad7f0636ccf 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs @@ -10,10 +10,14 @@ public class DepthNormalOnlyPass : ScriptableRenderPass private RTHandle depthHandle { get; set; } private RTHandle normalHandle { get; set; } + private RTHandle renderingLayersHandle { get; set; } + internal bool enableRenderingLayers { get; set; } = false; private FilteringSettings m_FilteringSettings; // Constants private static readonly List k_DepthNormals = new List { new ShaderTagId("DepthNormals"), new ShaderTagId("DepthNormalsOnly") }; + private static readonly RTHandle[] k_ColorAttachment1 = new RTHandle[1]; + private static readonly RTHandle[] k_ColorAttachment2 = new RTHandle[2]; /// /// Create the DepthNormalOnlyPass @@ -45,15 +49,41 @@ public void Setup(RTHandle depthHandle, RTHandle normalHandle) this.depthHandle = depthHandle; this.normalHandle = normalHandle; this.shaderTagIds = k_DepthNormals; + this.enableRenderingLayers = false; } + /// + /// Configure the pass + /// + public void Setup(RTHandle depthHandle, RTHandle normalHandle, RTHandle decalLayerHandle) + { + Setup(depthHandle, normalHandle); + this.renderingLayersHandle = decalLayerHandle; + this.enableRenderingLayers = true; + } + + /// public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) { + RTHandle[] colorHandles; + if (this.enableRenderingLayers) + { + k_ColorAttachment2[0] = normalHandle; + k_ColorAttachment2[1] = renderingLayersHandle; + colorHandles = k_ColorAttachment2; + } + else + { + k_ColorAttachment1[0] = normalHandle; + colorHandles = k_ColorAttachment1; + } + + if (renderingData.cameraData.renderer.useDepthPriming && (renderingData.cameraData.renderType == CameraRenderType.Base || renderingData.cameraData.clearDepth)) - ConfigureTarget(normalHandle, renderingData.cameraData.renderer.cameraDepthTargetHandle); + ConfigureTarget(colorHandles, renderingData.cameraData.renderer.cameraDepthTargetHandle); else - ConfigureTarget(normalHandle, depthHandle); + ConfigureTarget(colorHandles, depthHandle); ConfigureClear(ClearFlag.All, Color.black); } @@ -69,6 +99,11 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData context.ExecuteCommandBuffer(cmd); cmd.Clear(); + CoreUtils.SetKeyword(cmd, "_DECAL_LAYERS", this.enableRenderingLayers); + + context.ExecuteCommandBuffer(cmd); + cmd.Clear(); + var sortFlags = renderingData.cameraData.defaultOpaqueSortFlags; var drawSettings = CreateDrawingSettings(this.shaderTagIds, ref renderingData, sortFlags); drawSettings.perObjectData = PerObjectData.None; @@ -77,6 +112,11 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData Camera camera = cameraData.camera; context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref m_FilteringSettings); + + // todo check if add normal here too + if (this.enableRenderingLayers) + cmd.SetGlobalTexture("_CameraDecalLayersTexture", renderingLayersHandle); + } context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); @@ -91,6 +131,7 @@ public override void OnCameraCleanup(CommandBuffer cmd) } normalHandle = null; depthHandle = null; + renderingLayersHandle = null; } } } diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs index 6dec7c5cc5d..c5bda7cdbc5 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs @@ -21,6 +21,9 @@ public class DrawObjectsPass : ScriptableRenderPass bool m_UseDepthPriming; + RTHandle[] m_ColorTargetIndentifiers; + RTHandle m_DepthTargetIndentifiers; + static readonly int s_DrawObjectPassDataPropID = Shader.PropertyToID("_DrawObjectPassData"); public DrawObjectsPass(string profilerTag, ShaderTagId[] shaderTagIds, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference) @@ -44,6 +47,31 @@ public DrawObjectsPass(string profilerTag, ShaderTagId[] shaderTagIds, bool opaq } } + public void Setup() + { + m_ColorTargetIndentifiers = null; + m_DepthTargetIndentifiers = null; + } + + public void Setup(RTHandle[] colorAttachments, RTHandle depthAttachment) + { + m_ColorTargetIndentifiers = colorAttachments; + m_DepthTargetIndentifiers = depthAttachment; + } + + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) + { + if (m_ColorTargetIndentifiers == null) + { + // Todo configure reset function here + ConfigureTarget(-1, -1); + overrideCameraTarget = false; + return; + } + ConfigureTarget(m_ColorTargetIndentifiers, m_DepthTargetIndentifiers); + //ConfigureClear(ClearFlag.None, Color.black); // todo? + } + public DrawObjectsPass(string profilerTag, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference) : this(profilerTag, new ShaderTagId[] { new ShaderTagId("SRPDefaultUnlit"), new ShaderTagId("UniversalForward"), new ShaderTagId("UniversalForwardOnly") }, @@ -94,6 +122,8 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData : new Vector4(flipSign, 0.0f, 1.0f, 1.0f); cmd.SetGlobalVector(ShaderPropertyId.scaleBiasRt, scaleBias); + CoreUtils.SetKeyword(cmd, "_DECAL_LAYERS", this.m_ColorTargetIndentifiers != null); + context.ExecuteCommandBuffer(cmd); cmd.Clear(); diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs index c5fdbc13f87..ad9855f5383 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs @@ -88,6 +88,10 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera if (i == m_DeferredLights.GbufferDepthIndex && !allocateGbufferDepth) continue; + // todo + if (i == m_DeferredLights.GBufferRenderingLayers && m_DeferredLights.HasRenderingLayerPrepass) + continue; + // No need to setup temporaryRTs if we are using input attachments as they will be Memoryless if (m_DeferredLights.UseRenderPass && i != m_DeferredLights.GBufferShadowMask && i != m_DeferredLights.GBufferRenderingLayers && (i != m_DeferredLights.GbufferDepthIndex && !m_DeferredLights.HasDepthPrepass)) continue; @@ -150,6 +154,8 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData // Input attachments will only be used when this is not needed so safe to skip in that case if (!m_DeferredLights.UseRenderPass) gbufferCommands.SetGlobalTexture(s_CameraNormalsTextureID, m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferNormalSmoothnessIndex]); + if (!m_DeferredLights.UseRenderPass && m_DeferredLights.UseRenderingLayers) + gbufferCommands.SetGlobalTexture("_CameraDecalLayersTexture", m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers]); } context.ExecuteCommandBuffer(gbufferCommands); diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs index cfe67b30fad..dafc4a127b9 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs @@ -19,7 +19,10 @@ public enum ScriptableRenderPassInput Depth = 1 << 0, Normal = 1 << 1, Color = 1 << 2, - Motion = 1 << 3 + Motion = 1 << 3, + RenderingLayer = 1 << 4, + DecalLayers = 1 << 5, + LightLayers = 1 << 6, } // Note: Spaced built-in events so we can add events in between them @@ -728,6 +731,21 @@ public void Blit(CommandBuffer cmd, ref RenderingData data, Material material, i renderer.SwapColorBuffer(cmd); } + /// + /// Add a blit command to the context for execution. This applies the material to the color target. + /// + /// Command buffer to record command for execution. + /// Source texture or target identifier to blit from. + /// Material to use. + /// Shader pass to use. Default is 0. + public void Blit(CommandBuffer cmd, ref RenderingData data, RenderTargetIdentifier source, Material material, int passIndex = 0) + { + var renderer = data.cameraData.renderer; + + Blit(cmd, source, renderer.GetCameraColorFrontBuffer(cmd), material, passIndex); + renderer.SwapColorBuffer(cmd); + } + /// /// Creates DrawingSettings based on current the rendering state. /// diff --git a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index 6cae34c5b24..7bca40f0017 100644 --- a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -61,6 +61,7 @@ internal class DecalSettings { public DecalTechniqueOption technique = DecalTechniqueOption.Automatic; public float maxDrawDistance = 1000f; + public bool decalLayers = false; public DBufferSettings dBufferSettings; public DecalScreenSpaceSettings screenSpaceSettings; } @@ -372,7 +373,8 @@ private void RecreateSystemsIfNeeded(ScriptableRenderer renderer, in CameraData { case DecalTechnique.ScreenSpace: m_DecalDrawScreenSpaceSystem = new DecalDrawScreenSpaceSystem(m_DecalEntityManager); - m_ScreenSpaceDecalRenderPass = new DecalScreenSpaceRenderPass(m_ScreenSpaceSettings, intermediateRendering ? m_DecalDrawScreenSpaceSystem : null); + m_ScreenSpaceDecalRenderPass = new DecalScreenSpaceRenderPass(m_ScreenSpaceSettings, + intermediateRendering ? m_DecalDrawScreenSpaceSystem : null, m_Settings.decalLayers); break; case DecalTechnique.GBuffer: @@ -380,13 +382,14 @@ private void RecreateSystemsIfNeeded(ScriptableRenderer renderer, in CameraData m_DeferredLights = universalRenderer.deferredLights; m_DrawGBufferSystem = new DecalDrawGBufferSystem(m_DecalEntityManager); - m_GBufferRenderPass = new DecalGBufferRenderPass(m_ScreenSpaceSettings, intermediateRendering ? m_DrawGBufferSystem : null); + m_GBufferRenderPass = new DecalGBufferRenderPass(m_ScreenSpaceSettings, + intermediateRendering ? m_DrawGBufferSystem : null, m_Settings.decalLayers); break; case DecalTechnique.DBuffer: m_CopyDepthPass = new CopyDepthPass(RenderPassEvent.AfterRenderingPrePasses, m_CopyDepthMaterial); m_DecalDrawDBufferSystem = new DecalDrawDBufferSystem(m_DecalEntityManager); - m_DBufferRenderPass = new DBufferRenderPass(m_DBufferClearMaterial, m_DBufferSettings, m_DecalDrawDBufferSystem); + m_DBufferRenderPass = new DBufferRenderPass(m_DBufferClearMaterial, m_DBufferSettings, m_DecalDrawDBufferSystem, m_Settings.decalLayers); m_DecalDrawForwardEmissiveSystem = new DecalDrawFowardEmissiveSystem(m_DecalEntityManager); m_ForwardEmissivePass = new DecalForwardEmissivePass(m_DecalDrawForwardEmissiveSystem); @@ -394,7 +397,7 @@ private void RecreateSystemsIfNeeded(ScriptableRenderer renderer, in CameraData if (universalRenderer.actualRenderingMode == RenderingMode.Deferred) { m_DBufferRenderPass.deferredLights = universalRenderer.deferredLights; - m_DBufferRenderPass.deferredLights.DisableFramebufferFetchInput(); + //m_DBufferRenderPass.deferredLights.DisableFramebufferFetchInput(); } break; } @@ -459,6 +462,7 @@ public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingD switch (m_Technique) { case DecalTechnique.ScreenSpace: + //m_ScreenSpaceDecalRenderPass.Setup(renderer.cameraColorTarget); // todo throws warnining for depth renderer.EnqueuePass(m_ScreenSpaceDecalRenderPass); break; case DecalTechnique.GBuffer: @@ -484,10 +488,13 @@ public override void SetupRenderPasses(ScriptableRenderer renderer, in Rendering { var universalRenderer = renderer as UniversalRenderer; if (universalRenderer.actualRenderingMode == RenderingMode.Deferred) + { m_CopyDepthPass.Setup( renderer.cameraDepthTargetHandle, universalRenderer.m_DepthTexture ); + m_DBufferRenderPass.Setup(renderer.cameraDepthTargetHandle); + } else { m_CopyDepthPass.Setup( diff --git a/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs b/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs index 6611b892988..d27f2a3125a 100644 --- a/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs @@ -1323,8 +1323,21 @@ void SetRenderPassAttachments(CommandBuffer cmd, ScriptableRenderPass renderPass } else { + // Todo: investigate performance cost of this + bool colorAttachmentCheck = false; + for (int i = 0; i < m_ActiveColorAttachments.Length; i++) + { + if (renderPass.colorAttachments[i] != m_ActiveColorAttachments[i]) + { + colorAttachmentCheck = true; + break; + } + } + + //colorAttachmentCheck = false; + // Only setup render target if current render pass attachments are different from the active ones - if (passColorAttachment.nameID != m_ActiveColorAttachments[0] || passDepthAttachment.nameID != m_ActiveDepthAttachment || finalClearFlag != ClearFlag.None || + if (colorAttachmentCheck || passColorAttachment.nameID != m_ActiveColorAttachments[0] || passDepthAttachment.nameID != m_ActiveDepthAttachment || finalClearFlag != ClearFlag.None || renderPass.colorStoreActions[0] != m_ActiveColorStoreActions[0] || renderPass.depthStoreAction != m_ActiveDepthStoreAction) { if (passColorAttachment.useRTHandle && passDepthAttachment.useRTHandle) diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs index e0cd6fb63f2..c7568d3596d 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs @@ -385,6 +385,7 @@ public static class ShaderKeywordStrings public static readonly string DecalNormalBlendLow = "_DECAL_NORMAL_BLEND_LOW"; public static readonly string DecalNormalBlendMedium = "_DECAL_NORMAL_BLEND_MEDIUM"; public static readonly string DecalNormalBlendHigh = "_DECAL_NORMAL_BLEND_HIGH"; + public static readonly string DecalLayers = "_DECAL_LAYERS"; public static readonly string SmaaLow = "_SMAA_PRESET_LOW"; public static readonly string SmaaMedium = "_SMAA_PRESET_MEDIUM"; diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineGlobalSettings.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineGlobalSettings.cs index c93c0604c48..dfe573e5b0c 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineGlobalSettings.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineGlobalSettings.cs @@ -157,6 +157,15 @@ internal static UniversalRenderPipelineGlobalSettings Create(string path, Univer assetCreated.lightLayerName5 = System.String.Copy(src.lightLayerName5); assetCreated.lightLayerName6 = System.String.Copy(src.lightLayerName6); assetCreated.lightLayerName7 = System.String.Copy(src.lightLayerName7); + + assetCreated.decalLayerName0 = System.String.Copy(src.decalLayerName0); + assetCreated.decalLayerName1 = System.String.Copy(src.decalLayerName1); + assetCreated.decalLayerName2 = System.String.Copy(src.decalLayerName2); + assetCreated.decalLayerName3 = System.String.Copy(src.decalLayerName3); + assetCreated.decalLayerName4 = System.String.Copy(src.decalLayerName4); + assetCreated.decalLayerName5 = System.String.Copy(src.decalLayerName5); + assetCreated.decalLayerName6 = System.String.Copy(src.decalLayerName6); + assetCreated.decalLayerName7 = System.String.Copy(src.decalLayerName7); } AssetDatabase.SaveAssets(); @@ -216,6 +225,15 @@ internal void UpdateRenderingLayerNames() m_RenderingLayerNames[index++] = lightLayerName6; m_RenderingLayerNames[index++] = lightLayerName7; + m_RenderingLayerNames[index++] = decalLayerName0; + m_RenderingLayerNames[index++] = decalLayerName1; + m_RenderingLayerNames[index++] = decalLayerName2; + m_RenderingLayerNames[index++] = decalLayerName3; + m_RenderingLayerNames[index++] = decalLayerName4; + m_RenderingLayerNames[index++] = decalLayerName5; + m_RenderingLayerNames[index++] = decalLayerName6; + m_RenderingLayerNames[index++] = decalLayerName7; + // Unused for (int i = index; i < m_RenderingLayerNames.Length; ++i) { @@ -272,6 +290,25 @@ public string[] prefixedLightLayerNames /// Name for light layer 7. public string lightLayerName7 = k_DefaultLightLayerNames[7]; + static readonly string[] k_DefaultDecalLayerNames = { "Decal Layer default", "Decal Layer 1", "Decal Layer 2", "Decal Layer 3", "Decal Layer 4", "Decal Layer 5", "Decal Layer 6", "Decal Layer 7" }; + + /// Name for decal layer 0. + public string decalLayerName0 = k_DefaultDecalLayerNames[0]; + /// Name for decal layer 1. + public string decalLayerName1 = k_DefaultDecalLayerNames[1]; + /// Name for decal layer 2. + public string decalLayerName2 = k_DefaultDecalLayerNames[2]; + /// Name for decal layer 3. + public string decalLayerName3 = k_DefaultDecalLayerNames[3]; + /// Name for decal layer 4. + public string decalLayerName4 = k_DefaultDecalLayerNames[4]; + /// Name for decal layer 5. + public string decalLayerName5 = k_DefaultDecalLayerNames[5]; + /// Name for decal layer 6. + public string decalLayerName6 = k_DefaultDecalLayerNames[6]; + /// Name for decal layer 7. + public string decalLayerName7 = k_DefaultDecalLayerNames[7]; + [System.NonSerialized] string[] m_LightLayerNames = null; /// @@ -309,6 +346,15 @@ internal void ResetRenderingLayerNames() lightLayerName5 = k_DefaultLightLayerNames[5]; lightLayerName6 = k_DefaultLightLayerNames[6]; lightLayerName7 = k_DefaultLightLayerNames[7]; + + decalLayerName0 = k_DefaultDecalLayerNames[0]; + decalLayerName1 = k_DefaultDecalLayerNames[1]; + decalLayerName2 = k_DefaultDecalLayerNames[2]; + decalLayerName3 = k_DefaultDecalLayerNames[3]; + decalLayerName4 = k_DefaultDecalLayerNames[4]; + decalLayerName5 = k_DefaultDecalLayerNames[5]; + decalLayerName6 = k_DefaultDecalLayerNames[6]; + decalLayerName7 = k_DefaultDecalLayerNames[7]; } #endregion diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 515bd1a1c8e..6415029ad5d 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -97,6 +97,7 @@ private static class Profiling RTHandle m_XRTargetHandleAlias; internal RTHandle m_DepthTexture; RTHandle m_NormalsTexture; + RTHandle m_DecalLayersTexture; RTHandle m_OpaqueColor; RTHandle m_MotionVectorColor; RTHandle m_MotionVectorDepth; @@ -302,6 +303,7 @@ protected override void Dispose(bool disposing) m_XRTargetHandleAlias?.Release(); m_DepthTexture?.Release(); m_NormalsTexture?.Release(); + m_DecalLayersTexture?.Release(); m_OpaqueColor?.Release(); m_MotionVectorColor?.Release(); m_MotionVectorDepth?.Release(); @@ -395,12 +397,6 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re return; } - if (m_DeferredLights != null) - { - m_DeferredLights.ResolveMixedLightingMode(ref renderingData); - m_DeferredLights.IsOverlay = cameraData.renderType == CameraRenderType.Overlay; - } - // Assign the camera color target early in case it is needed during AddRenderPasses. bool isPreviewCamera = cameraData.isPreviewCamera; var createColorTexture = m_IntermediateTextureMode == IntermediateTextureMode.Always && !isPreviewCamera; @@ -408,6 +404,21 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // Gather render passe input requirements RenderPassInputSummary renderPassInputs = GetRenderPassInputs(ref renderingData); + bool renderingLayerProvidesByDepthNormalPass = renderPassInputs.requiresRenderingLayer && + renderPassInputs.requiresNormalsTexture; + + bool renderingLayerProvidesRenderObjectPass = renderPassInputs.requiresRenderingLayer && + !renderPassInputs.requiresNormalsTexture && m_RenderingMode == RenderingMode.Forward; + + // todo: investigate the order of call, had to change because of requiresRenderingLayer + if (m_DeferredLights != null) + { + m_DeferredLights.UseDecalLayers = renderPassInputs.requiresRenderingLayer; + + m_DeferredLights.ResolveMixedLightingMode(ref renderingData); + m_DeferredLights.IsOverlay = cameraData.renderType == CameraRenderType.Overlay; + } + // Should apply post-processing after rendering this camera? bool applyPostProcessing = cameraData.postProcessEnabled && m_PostProcessPasses.isCreated; @@ -494,6 +505,8 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re createDepthTexture |= (this.actualRenderingMode == RenderingMode.Deferred && !useRenderPassEnabled); // Some render cases (e.g. Material previews) have shown we need to create a depth texture when we're forcing a prepass. createDepthTexture |= m_DepthPrimingMode == DepthPrimingMode.Forced; + // Todo seems like with mrt depth is not taken from first target + createDepthTexture |= (renderingLayerProvidesRenderObjectPass); #if ENABLE_VR && ENABLE_XR_MODULE // URP can't handle msaa/size mismatch between depth RT and color RT(for now we create intermediate textures to ensure they match) @@ -570,7 +583,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re EnqueuePass(m_AdditionalLightsShadowCasterPass); bool requiresDepthCopyPass = !requiresDepthPrepass - && (renderingData.cameraData.requiresDepthTexture || cameraHasPostProcessingWithDepth) + && (renderingData.cameraData.requiresDepthTexture || cameraHasPostProcessingWithDepth || renderPassInputs.requiresDepthTexture) && createDepthTexture; if ((DebugHandler != null) && DebugHandler.IsActiveForCamera(ref cameraData)) @@ -608,7 +621,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re if ((this.actualRenderingMode == RenderingMode.Deferred && !this.useRenderPassEnabled) || requiresDepthPrepass || requiresDepthCopyPass) { var depthDescriptor = cameraTargetDescriptor; - if (requiresDepthPrepass) + if (requiresDepthPrepass && this.actualRenderingMode != RenderingMode.Deferred) { depthDescriptor.graphicsFormat = GraphicsFormat.None; depthDescriptor.depthStencilFormat = k_DepthStencilFormat; @@ -630,6 +643,39 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re CommandBufferPool.Release(cmd); } + if (renderPassInputs.requiresRenderingLayer) + { + ref var renderingLayersTexture = ref m_DecalLayersTexture; + string renderingLayersTextureName = "_CameraDecalLayersTexture"; + + + if (this.actualRenderingMode == RenderingMode.Deferred) + { + renderingLayersTexture = ref m_DeferredLights.GbufferAttachments[(int)m_DeferredLights.GBufferRenderingLayers]; + renderingLayersTextureName = renderingLayersTexture.name; + } + + var renderingLayersDescriptor = cameraTargetDescriptor; + renderingLayersDescriptor.depthBufferBits = 0; + // Never have MSAA on this depth texture. When doing MSAA depth priming this is the texture that is resolved to and used for post-processing. + if (requiresDepthPrepass) + renderingLayersDescriptor.msaaSamples = 1;// Depth-Only pass don't use MSAA + // Find compatible render-target format for storing normals. + // Shader code outputs normals in signed format to be compatible with deferred gbuffer layout. + // Deferred gbuffer format is signed so that normals can be blended for terrain geometry. + if (this.actualRenderingMode == RenderingMode.Deferred) + renderingLayersDescriptor.graphicsFormat = m_DeferredLights.GetGBufferFormat(m_DeferredLights.GBufferRenderingLayers); // the one used by the gbuffer. + else + renderingLayersDescriptor.graphicsFormat = GraphicsFormat.R16_UNorm; + + RenderingUtils.ReAllocateIfNeeded(ref renderingLayersTexture, renderingLayersDescriptor, FilterMode.Point, TextureWrapMode.Clamp, name: renderingLayersTextureName); + + CommandBuffer cmd = CommandBufferPool.Get(); + cmd.SetGlobalTexture(renderingLayersTexture.name, renderingLayersTexture.nameID); + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } + // Allocate normal texture if used if (requiresDepthPrepass && renderPassInputs.requiresNormalsTexture) { @@ -673,7 +719,10 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // to get them before the SSAO pass. int gbufferNormalIndex = m_DeferredLights.GBufferNormalSmoothnessIndex; - m_DepthNormalPrepass.Setup(m_ActiveCameraDepthAttachment, m_DeferredLights.GbufferAttachments[gbufferNormalIndex]); + if (renderingLayerProvidesByDepthNormalPass) + m_DepthNormalPrepass.Setup(m_ActiveCameraDepthAttachment, m_DeferredLights.GbufferAttachments[gbufferNormalIndex], m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers]); + else + m_DepthNormalPrepass.Setup(m_ActiveCameraDepthAttachment, m_DeferredLights.GbufferAttachments[gbufferNormalIndex]); // Only render forward-only geometry, as standard geometry will be rendered as normal into the gbuffer. if (RenderPassEvent.AfterRenderingGbuffer <= renderPassInputs.requiresDepthNormalAtEvent && @@ -682,7 +731,10 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re } else { - m_DepthNormalPrepass.Setup(m_DepthTexture, m_NormalsTexture); + if (renderingLayerProvidesByDepthNormalPass) + m_DepthNormalPrepass.Setup(m_DepthTexture, m_NormalsTexture, m_DecalLayersTexture); + else + m_DepthNormalPrepass.Setup(m_DepthTexture, m_NormalsTexture); } EnqueuePass(m_DepthNormalPrepass); @@ -723,7 +775,30 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re if (m_DeferredLights.UseRenderPass && (RenderPassEvent.AfterRenderingGbuffer == renderPassInputs.requiresDepthNormalAtEvent || !useRenderPassEnabled)) m_DeferredLights.DisableFramebufferFetchInput(); - EnqueueDeferred(ref renderingData, requiresDepthPrepass, renderPassInputs.requiresNormalsTexture, mainLightShadows, additionalLightShadows); + EnqueueDeferred(ref renderingData, requiresDepthPrepass, renderPassInputs.requiresNormalsTexture, renderingLayerProvidesByDepthNormalPass, mainLightShadows, additionalLightShadows); + + /*if (!useRenderPassEnabled) + { + for (int i = 0; i < activeRenderPassQueue.Count; ++i) + { + ScriptableRenderPass pass = activeRenderPassQueue[i]; + + if ((pass.input & ScriptableRenderPassInput.RenderingLayer) != 0 && !pass.overrideCameraTarget && + RenderPassEvent.AfterRenderingGbuffer <= pass.renderPassEvent && + pass.renderPassEvent <= RenderPassEvent.BeforeRenderingDeferredLights) + { + if (m_DeferredLights != null && m_DeferredLights.UseRenderingLayers) + { + var rts = (RenderTargetIdentifier[])m_DeferredLights.GbufferAttachmentIdentifiers.Clone(); + if (rts.Length > m_DeferredLights.GBufferRenderingLayers) // todo + rts[m_DeferredLights.GBufferRenderingLayers] = 0; + + pass.ConfigureTarget(rts, m_DeferredLights.DepthAttachmentIdentifier); + pass.ConfigureClear(ClearFlag.None, Color.black); + } + } + } + }*/ } else { @@ -762,6 +837,19 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re m_RenderOpaqueForwardPass.ConfigureColorStoreAction(opaquePassColorStoreAction); m_RenderOpaqueForwardPass.ConfigureDepthStoreAction(opaquePassDepthStoreAction); + if (renderingLayerProvidesRenderObjectPass) + { + RTHandle[] rts = new RTHandle[] + { + m_ActiveCameraColorAttachment, + m_DecalLayersTexture, + }; + + m_RenderOpaqueForwardPass.Setup(rts, m_ActiveCameraDepthAttachment); + } + else + m_RenderOpaqueForwardPass.Setup(); + EnqueuePass(m_RenderOpaqueForwardPass); } @@ -996,13 +1084,14 @@ public override void FinishRendering(CommandBuffer cmd) m_ActiveCameraDepthAttachment = null; } - void EnqueueDeferred(ref RenderingData renderingData, bool hasDepthPrepass, bool hasNormalPrepass, bool applyMainShadow, bool applyAdditionalShadow) + void EnqueueDeferred(ref RenderingData renderingData, bool hasDepthPrepass, bool hasNormalPrepass, bool hasRenderingLayerPrepass, bool applyMainShadow, bool applyAdditionalShadow) { m_DeferredLights.Setup( ref renderingData, applyAdditionalShadow ? m_AdditionalLightsShadowCasterPass : null, hasDepthPrepass, hasNormalPrepass, + hasRenderingLayerPrepass, m_DepthTexture, m_ActiveCameraDepthAttachment, m_ActiveCameraColorAttachment @@ -1035,8 +1124,10 @@ private struct RenderPassInputSummary internal bool requiresNormalsTexture; internal bool requiresColorTexture; internal bool requiresMotionVectors; + internal bool requiresRenderingLayer; internal RenderPassEvent requiresDepthNormalAtEvent; internal RenderPassEvent requiresDepthTextureEarliestEvent; + internal RenderPassEvent requiresRenderingLayerAtEvent; } private RenderPassInputSummary GetRenderPassInputs(ref RenderingData renderingData) @@ -1046,6 +1137,7 @@ private RenderPassInputSummary GetRenderPassInputs(ref RenderingData renderingDa RenderPassInputSummary inputSummary = new RenderPassInputSummary(); inputSummary.requiresDepthNormalAtEvent = RenderPassEvent.BeforeRenderingOpaques; inputSummary.requiresDepthTextureEarliestEvent = RenderPassEvent.BeforeRenderingPostProcessing; + inputSummary.requiresRenderingLayerAtEvent = RenderPassEvent.AfterRenderingSkybox; for (int i = 0; i < activeRenderPassQueue.Count; ++i) { ScriptableRenderPass pass = activeRenderPassQueue[i]; @@ -1053,6 +1145,7 @@ private RenderPassInputSummary GetRenderPassInputs(ref RenderingData renderingDa bool needsNormals = (pass.input & ScriptableRenderPassInput.Normal) != ScriptableRenderPassInput.None; bool needsColor = (pass.input & ScriptableRenderPassInput.Color) != ScriptableRenderPassInput.None; bool needsMotion = (pass.input & ScriptableRenderPassInput.Motion) != ScriptableRenderPassInput.None; + bool needsRenderingLayer = (pass.input & ScriptableRenderPassInput.RenderingLayer) != ScriptableRenderPassInput.None; bool eventBeforeMainRendering = pass.renderPassEvent <= beforeMainRenderingEvent; inputSummary.requiresDepthTexture |= needsDepth; @@ -1060,10 +1153,20 @@ private RenderPassInputSummary GetRenderPassInputs(ref RenderingData renderingDa inputSummary.requiresNormalsTexture |= needsNormals; inputSummary.requiresColorTexture |= needsColor; inputSummary.requiresMotionVectors |= needsMotion; + inputSummary.requiresRenderingLayer |= needsRenderingLayer; if (needsDepth) inputSummary.requiresDepthTextureEarliestEvent = (RenderPassEvent)Mathf.Min((int)pass.renderPassEvent, (int)inputSummary.requiresDepthTextureEarliestEvent); if (needsNormals || needsDepth) inputSummary.requiresDepthNormalAtEvent = (RenderPassEvent)Mathf.Min((int)pass.renderPassEvent, (int)inputSummary.requiresDepthNormalAtEvent); + if (needsRenderingLayer) + inputSummary.requiresRenderingLayerAtEvent = (RenderPassEvent)Mathf.Min((int)pass.renderPassEvent, (int)inputSummary.requiresRenderingLayerAtEvent); + } + + // Only normal prepass can supply rendering layer at pre pass event + if (inputSummary.requiresRenderingLayerAtEvent <= beforeMainRenderingEvent) + { + inputSummary.requiresDepthNormalAtEvent = inputSummary.requiresRenderingLayerAtEvent; + inputSummary.requiresNormalsTexture = true; } return inputSummary; @@ -1109,6 +1212,22 @@ void CreateCameraRenderTarget(ScriptableRenderContext context, ref RenderTexture CommandBufferPool.Release(cmd); } + void CreateDecalLayerRenderTarget(ScriptableRenderContext context, ref RenderTextureDescriptor descriptor, bool primedDepth) + { + CommandBuffer cmd = CommandBufferPool.Get(); + using (new ProfilingScope(null, Profiling.createCameraRenderTarget)) + { + var desc = descriptor; + desc.graphicsFormat = GraphicsFormat.R16_UNorm; + desc.depthBufferBits = 0; + //desc.msaaSamples = primedDepth ? m_RendererMSAASamples : 1; + RenderingUtils.ReAllocateIfNeeded(ref m_DecalLayersTexture, desc, FilterMode.Point); + } + + context.ExecuteCommandBuffer(cmd); + CommandBufferPool.Release(cmd); + } + bool PlatformRequiresExplicitMsaaResolve() { #if UNITY_EDITOR diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl new file mode 100644 index 00000000000..ad601bc2e50 --- /dev/null +++ b/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl @@ -0,0 +1,28 @@ +#ifndef UNITY_DECLARE_RENDERING_LAYER_TEXTURE_INCLUDED +#define UNITY_DECLARE_RENDERING_LAYER_TEXTURE_INCLUDED +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + +TEXTURE2D_X_FLOAT(_CameraDecalLayersTexture); +SAMPLER(sampler_CameraDecalLayersTexture); + +SamplerState my_point_clamp_sampler; + +float SampleSceneRenderingLayer(float2 uv) +{ + return SAMPLE_TEXTURE2D_X(_CameraDecalLayersTexture, sampler_CameraDecalLayersTexture, UnityStereoTransformScreenSpaceTex(uv)).r; +} + +uint LoadSceneRenderingLayer(uint2 uv) +{ + //uv.y = _ScreenSize.y - uv.y; + float encodedValue = LOAD_TEXTURE2D_X(_CameraDecalLayersTexture, uv).r; + return UnpackInt(encodedValue, 16);// uint(encodedValue * 65025.5); +} + +/*uint LoadSceneDecalLayer(uint2 uv) +{ + //uv.y = _ScreenSize.y - uv.y; + float encodedValue = LOAD_TEXTURE2D_X(_CameraDecalLayersTexture, uv).r; + return uint(encodedValue * 65025.5); +}*/ +#endif diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl.meta b/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl.meta new file mode 100644 index 00000000000..306470c9994 --- /dev/null +++ b/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6db8433897838284fa5c7571f3088db8 +ShaderIncludeImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl index cc314272276..026078a1edd 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl @@ -10,6 +10,9 @@ #define RENDERING_LIGHT_LAYERS_MASK (255) #define RENDERING_LIGHT_LAYERS_MASK_SHIFT (0) #define DEFAULT_LIGHT_LAYERS (RENDERING_LIGHT_LAYERS_MASK >> RENDERING_LIGHT_LAYERS_MASK_SHIFT) +#define RENDERING_DECAL_LAYERS_MASK (65280) +#define RENDERING_DECAL_LAYERS_MASK_SHIFT (8) +#define DEFAULT_DECAL_LAYERS (RENDERING_DECAL_LAYERS_MASK >> RENDERING_DECAL_LAYERS_MASK_SHIFT) #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderTypes.cs.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Deprecated.hlsl" diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl index c7a42331207..32859d5cc38 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl @@ -22,6 +22,21 @@ uint GetMeshRenderingLightLayer() #endif } +uint GetMeshRenderingDecalLayer() +{ +#ifdef _DECAL_LAYERS + return (asuint(unity_RenderingLayer.x) & RENDERING_DECAL_LAYERS_MASK) >> RENDERING_DECAL_LAYERS_MASK_SHIFT; +#else + return DEFAULT_DECAL_LAYERS; +#endif +} + +float EncodeMeshRenderingLayer(uint renderingLayer) +{ + //return (renderingLayer & 0x0000FFFF) / (255.0 * 255.0); // todo expose as property + return PackInt(renderingLayer, 16); +} + // Abstraction over Light shading data. struct Light { diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl index 71cbd4f9411..fc8e69317ff 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl @@ -417,4 +417,9 @@ float2 GetNormalizedScreenSpaceUV(float4 positionCS) #define UnityStereoTransformScreenSpaceTex(uv) uv #endif // defined(UNITY_SINGLE_PASS_STEREO) +uint GetMeshRenderingLayer() +{ + return asuint(unity_RenderingLayer.x); +} + #endif // UNITY_SHADER_VARIABLES_FUNCTIONS_INCLUDED diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl index b2a206eef27..ebb55237348 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl @@ -142,9 +142,9 @@ FragmentOutput SurfaceDataToGbuffer(SurfaceData surfaceData, InputData inputData output.GBUFFER_SHADOWMASK = inputData.shadowMask; // will have unity_ProbesOcclusion value if subtractive lighting is used (baked) #endif #ifdef _LIGHT_LAYERS - uint renderingLayers = GetMeshRenderingLightLayer(); + uint renderingLayers = GetMeshRenderingLayer(); // Note: we need to mask out only 8bits of the layer mask before encoding it as otherwise any value > 255 will map to all layers active - output.GBUFFER_LIGHT_LAYERS = float4((renderingLayers & 0x000000FF) / 255.0, 0.0, 0.0, 0.0); + output.GBUFFER_LIGHT_LAYERS = float4(EncodeMeshRenderingLayer(renderingLayers), 0.0, 0.0, 0.0); #endif return output; @@ -216,9 +216,9 @@ FragmentOutput BRDFDataToGbuffer(BRDFData brdfData, InputData inputData, half sm output.GBUFFER_SHADOWMASK = inputData.shadowMask; // will have unity_ProbesOcclusion value if subtractive lighting is used (baked) #endif #ifdef _LIGHT_LAYERS - uint renderingLayers = GetMeshRenderingLightLayer(); + uint renderingLayers = GetMeshRenderingLayer(); // Note: we need to mask out only 8bits of the layer mask before encoding it as otherwise any value > 255 will map to all layers active - output.GBUFFER_LIGHT_LAYERS = float4((renderingLayers & 0x000000FF) / 255.0, 0.0, 0.0, 0.0); + output.GBUFFER_LIGHT_LAYERS = float4(EncodeMeshRenderingLayer(renderingLayers), 0.0, 0.0, 0.0); #endif return output; diff --git a/com.unity.render-pipelines.universal/Shaders/BakedLit.shader b/com.unity.render-pipelines.universal/Shaders/BakedLit.shader index 7b363afa37a..8ecedbf07ee 100644 --- a/com.unity.render-pipelines.universal/Shaders/BakedLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/BakedLit.shader @@ -131,6 +131,7 @@ Shader "Universal Render Pipeline/Baked Lit" // ------------------------------------- // Unity defined keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant + #pragma multi_compile _ _DECAL_LAYERS //-------------------------------------- // GPU Instancing @@ -166,6 +167,7 @@ Shader "Universal Render Pipeline/Baked Lit" // ------------------------------------- // Unity defined keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant + #pragma multi_compile _ _DECAL_LAYERS //-------------------------------------- // Defines diff --git a/com.unity.render-pipelines.universal/Shaders/BakedLitDepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/BakedLitDepthNormalsPass.hlsl index 2f1dab427c6..7e00dbd5250 100644 --- a/com.unity.render-pipelines.universal/Shaders/BakedLitDepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/BakedLitDepthNormalsPass.hlsl @@ -50,7 +50,13 @@ Varyings DepthNormalsVertex(Attributes input) return output; } -float4 DepthNormalsFragment(Varyings input) : SV_TARGET +void DepthNormalsFragment( + Varyings input + , out half4 outNormalWS : SV_Target0 +#ifdef _DECAL_LAYERS + , out float4 outDecalLayer : SV_Target1 +#endif +) { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); @@ -64,7 +70,7 @@ float4 DepthNormalsFragment(Varyings input) : SV_TARGET float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] - return half4(packedNormalWS, 0.0); + outNormalWS = half4(packedNormalWS, 0.0); #else #if defined(_NORMALMAP) half3 normalTS = SampleNormal(input.uv, TEXTURE2D_ARGS(_BumpMap, sampler_BumpMap)).xyz; @@ -75,9 +81,13 @@ float4 DepthNormalsFragment(Varyings input) : SV_TARGET half3 normalWS = input.normalWS; #endif - return half4(NormalizeNormalPerPixel(normalWS), 0.0); + outNormalWS = half4(NormalizeNormalPerPixel(normalWS), 0.0); #endif + #ifdef _DECAL_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + #endif } #endif diff --git a/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader b/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader index 50e84067f04..b6fbe656fd1 100644 --- a/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader @@ -246,6 +246,7 @@ Shader "Universal Render Pipeline/Complex Lit" // ------------------------------------- // Unity defined keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant + #pragma multi_compile _ _DECAL_LAYERS //-------------------------------------- // GPU Instancing diff --git a/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl index bde5560b75f..97389075d96 100644 --- a/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl @@ -2,6 +2,7 @@ #define UNIVERSAL_DEPTH_NORMALS_PASS_INCLUDED #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" +#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl" struct Attributes { @@ -37,7 +38,13 @@ Varyings DepthNormalsVertex(Attributes input) return output; } -half4 DepthNormalsFragment(Varyings input) : SV_TARGET +void DepthNormalsFragment( + Varyings input + , out half4 outNormalWS : SV_Target0 +#ifdef _DECAL_LAYERS + , out float4 outDecalLayer : SV_Target1 +#endif +) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); @@ -48,10 +55,15 @@ half4 DepthNormalsFragment(Varyings input) : SV_TARGET float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms. float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] - return half4(packedNormalWS, 0.0); + outNormalWS = half4(packedNormalWS, 0.0); #else float3 normalWS = NormalizeNormalPerPixel(input.normalWS); - return half4(normalWS, 0.0); + outNormalWS = half4(normalWS, 0.0); + #endif + + #ifdef _DECAL_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } #endif diff --git a/com.unity.render-pipelines.universal/Shaders/Lit.shader b/com.unity.render-pipelines.universal/Shaders/Lit.shader index 36e79151a85..1e0fe5b49f4 100644 --- a/com.unity.render-pipelines.universal/Shaders/Lit.shader +++ b/com.unity.render-pipelines.universal/Shaders/Lit.shader @@ -128,6 +128,8 @@ Shader "Universal Render Pipeline/Lit" #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile _ _CLUSTERED_RENDERING + #pragma multi_compile _ _DECAL_LAYERS + // ------------------------------------- // Unity defined keywords #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING @@ -234,6 +236,8 @@ Shader "Universal Render Pipeline/Lit" #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED + #pragma multi_compile _ _DECAL_LAYERS + // ------------------------------------- // Unity defined keywords #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING @@ -300,6 +304,7 @@ Shader "Universal Render Pipeline/Lit" HLSLPROGRAM #pragma exclude_renderers gles gles3 glcore #pragma target 4.5 +#pragma enable_d3d11_debug_symbols #pragma vertex DepthNormalsVertex #pragma fragment DepthNormalsFragment @@ -312,6 +317,10 @@ Shader "Universal Render Pipeline/Lit" #pragma shader_feature_local_fragment _ALPHATEST_ON #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ _DECAL_LAYERS + //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing diff --git a/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl index 1ed6aff8285..ed2236a4fbf 100644 --- a/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl @@ -77,8 +77,13 @@ Varyings DepthNormalsVertex(Attributes input) return output; } - -half4 DepthNormalsFragment(Varyings input) : SV_TARGET +void DepthNormalsFragment( + Varyings input + , out half4 outNormalWS : SV_Target0 +#ifdef _DECAL_LAYERS + , out float4 outDecalLayer : SV_Target1 +#endif +) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); @@ -89,7 +94,7 @@ half4 DepthNormalsFragment(Varyings input) : SV_TARGET float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] - return half4(packedNormalWS, 0.0); + outNormalWS = half4(packedNormalWS, 0.0); #else float2 uv = input.uv; #if defined(_PARALLAXMAP) @@ -117,7 +122,12 @@ half4 DepthNormalsFragment(Varyings input) : SV_TARGET float3 normalWS = input.normalWS; #endif - return half4(NormalizeNormalPerPixel(normalWS), 0.0); + outNormalWS = half4(NormalizeNormalPerPixel(normalWS), 0.0); + #endif + + #ifdef _DECAL_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } diff --git a/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl b/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl index b018d7a0a4c..e8eda5410a1 100644 --- a/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl @@ -193,7 +193,13 @@ Varyings LitPassVertex(Attributes input) } // Used in Standard (Physically Based) shader -half4 LitPassFragment(Varyings input) : SV_Target +void LitPassFragment( + Varyings input + , out half4 outColor : SV_Target0 +#ifdef _DECAL_LAYERS + , out float4 outDecalLayer : SV_Target1 +#endif +) { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); @@ -223,7 +229,12 @@ half4 LitPassFragment(Varyings input) : SV_Target color.rgb = MixFog(color.rgb, inputData.fogCoord); color.a = OutputAlpha(color.a, _Surface); - return color; + outColor = color; + +#ifdef _DECAL_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif } #endif diff --git a/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader b/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader index 3664f1ee857..79ad182153b 100644 --- a/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader @@ -264,6 +264,10 @@ Shader "Universal Render Pipeline/Simple Lit" #pragma shader_feature_local_fragment _ALPHATEST_ON #pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ _DECAL_LAYERS + //-------------------------------------- // GPU Instancing #pragma multi_compile_instancing diff --git a/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl index 222217bd383..adfbe78cf16 100644 --- a/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl @@ -55,7 +55,13 @@ Varyings DepthNormalsVertex(Attributes input) return output; } -half4 DepthNormalsFragment(Varyings input) : SV_TARGET +void DepthNormalsFragment( + Varyings input + , out half4 outNormalWS : SV_Target0 +#ifdef _DECAL_LAYERS + , out float4 outDecalLayer : SV_Target1 +#endif +) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); @@ -66,7 +72,7 @@ half4 DepthNormalsFragment(Varyings input) : SV_TARGET float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] - return half4(packedNormalWS, 0.0); + outNormalWS = half4(packedNormalWS, 0.0); #else float2 uv = input.uv; @@ -78,7 +84,12 @@ half4 DepthNormalsFragment(Varyings input) : SV_TARGET #endif normalWS = NormalizeNormalPerPixel(normalWS); - return half4(normalWS, 0.0); + outNormalWS = half4(normalWS, 0.0); + #endif + + #ifdef _DECAL_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } diff --git a/com.unity.render-pipelines.universal/Shaders/Unlit.shader b/com.unity.render-pipelines.universal/Shaders/Unlit.shader index 20f851cb375..69008cfb222 100644 --- a/com.unity.render-pipelines.universal/Shaders/Unlit.shader +++ b/com.unity.render-pipelines.universal/Shaders/Unlit.shader @@ -115,6 +115,7 @@ Shader "Universal Render Pipeline/Unlit" // ------------------------------------- // Unity defined keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant + #pragma multi_compile _ _DECAL_LAYERS //-------------------------------------- // GPU Instancing diff --git a/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl index 0292b42b7b0..e4978776c8d 100644 --- a/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl @@ -34,7 +34,13 @@ Varyings DepthNormalsVertex(Attributes input) return output; } -float4 DepthNormalsFragment(Varyings input) : SV_TARGET +void DepthNormalsFragment( + Varyings input + , out half4 outNormalWS : SV_Target0 +#ifdef _DECAL_LAYERS + , out float4 outDecalLayer : SV_Target1 +#endif +) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); @@ -44,9 +50,14 @@ float4 DepthNormalsFragment(Varyings input) : SV_TARGET float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] half3 packedNormalWS = half3(PackFloat2To888(remappedOctNormalWS)); // values between [ 0, 1] - return half4(packedNormalWS, 0.0); + outNormalWS = half4(packedNormalWS, 0.0); #else - return half4(NormalizeNormalPerPixel(input.normalWS), 0.0); + outNormalWS = half4(NormalizeNormalPerPixel(input.normalWS), 0.0); + #endif + + #ifdef _DECAL_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } diff --git a/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader b/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader index 4f5cd5d4a2a..2aa9dc0864f 100644 --- a/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader +++ b/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader @@ -262,7 +262,9 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" #ifdef _LIGHT_LAYERS float4 renderingLayers = SAMPLE_TEXTURE2D_X_LOD(MERGE_NAME(_, GBUFFER_LIGHT_LAYERS), my_point_clamp_sampler, screen_uv, 0); - uint meshRenderingLayers = uint(renderingLayers.r * 255.5); + //uint meshRenderingLayers = uint(renderingLayers.r * 65535.2) & 0x000000FF; + uint meshRenderingLayers = UnpackInt(renderingLayers.r, 16); + #else uint meshRenderingLayers = DEFAULT_LIGHT_LAYERS; #endif @@ -515,6 +517,7 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" HLSLPROGRAM #pragma exclude_renderers gles gles3 glcore #pragma target 4.5 +#pragma enable_d3d11_debug_symbols #pragma multi_compile_fragment _DEFERRED_STENCIL #pragma multi_compile _DIRECTIONAL From 41904467683f9951381ed998e8442fd4d49ec447 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Fri, 3 Dec 2021 12:10:17 +0200 Subject: [PATCH 02/38] Adding test 250 for rendering layers --- .../CommonAssets/UniversalRPAsset.asset | 5 +- .../Assets/Scenes/250_RenderingLayer.meta | 8 + .../Assets/Scenes/250_RenderingLayer.unity | 4136 +++++++++++++++++ .../Scenes/250_RenderingLayer.unity.meta | 7 + .../DrawRenderingLayer.shader | 41 + .../DrawRenderingLayer.shader.meta | 10 + .../DrawRenderingLayerGBuffer.asset | 75 + .../DrawRenderingLayerGBuffer.asset.meta | 8 + .../DrawRenderingLayerOpaque.asset | 75 + .../DrawRenderingLayerOpaque.asset.meta | 8 + .../DrawRenderingLayerPrePass.asset | 75 + .../DrawRenderingLayerPrePass.asset.meta | 8 + .../RenderingLayerTestFeature.cs | 169 + .../RenderingLayerTestFeature.cs.meta | 11 + 14 files changed, 4635 insertions(+), 1 deletion(-) create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/UniversalRPAsset.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/UniversalRPAsset.asset index 7f9751cf4dd..65e8c7db18e 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/UniversalRPAsset.asset +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/UniversalRPAsset.asset @@ -39,12 +39,14 @@ MonoBehaviour: - {fileID: 11400000, guid: 2db0ce930f34f41c3b2aad53e6336a24, type: 2} - {fileID: 11400000, guid: da4df2f1951704ee7aa560ed78d91c24, type: 2} - {fileID: 11400000, guid: efad480a4aa014a0fa578c4c317c3690, type: 2} + - {fileID: 11400000, guid: 784ccd3af7210ab46a0f242f55a1b82a, type: 2} + - {fileID: 11400000, guid: 9ee930dd2506bc346b8db93eb3e10f5f, type: 2} + - {fileID: 11400000, guid: f16bd0dae84882645aaa66c68f2d706f, type: 2} m_DefaultRendererIndex: 0 m_RequireDepthTexture: 1 m_RequireOpaqueTexture: 1 m_OpaqueDownsampling: 1 m_SupportsTerrainHoles: 1 - m_StoreActionsOptimization: 0 m_SupportsHDR: 1 m_MSAA: 4 m_RenderScale: 1 @@ -78,6 +80,7 @@ MonoBehaviour: m_MixedLightingSupported: 0 m_SupportsLightLayers: 0 m_DebugLevel: 0 + m_StoreActionsOptimization: 0 m_UseAdaptivePerformance: 1 m_ColorGradingMode: 0 m_ColorGradingLutSize: 32 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.meta new file mode 100644 index 00000000000..9eeaeb98d5f --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a582a7f211b6e2d4f8d2622cc651a395 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity new file mode 100644 index 00000000000..f980f7c99bc --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity @@ -0,0 +1,4136 @@ +%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: 1 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.07 + 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: 10304, guid: 0000000000000000f000000000000000, type: 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.18028352, g: 0.22571376, b: 0.30692244, 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_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + 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: 112000000, guid: 6e25792a9add91445a531df6ceee4f56, + type: 2} + m_LightingSettings: {fileID: 4890085278179872738, guid: a32da8c6d6cb0be46b491a61649ac0fb, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + 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 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &28056758 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 28056759} + - component: {fileID: 28056762} + - component: {fileID: 28056761} + - component: {fileID: 28056760} + m_Layer: 0 + m_Name: RenderingLayer (0) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &28056759 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28056758} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 821834666} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &28056760 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28056758} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &28056761 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28056758} + 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: 31321ba15b8f8eb4c954353edc038b1d, 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 &28056762 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 28056758} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &39935310 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 39935311} + - component: {fileID: 39935314} + - component: {fileID: 39935313} + - component: {fileID: 39935312} + m_Layer: 0 + m_Name: RenderingLayer (0) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &39935311 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39935310} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 955492763} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &39935312 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39935310} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &39935313 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39935310} + 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: 65536 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &39935314 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 39935310} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &96109485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 96109486} + m_Layer: 0 + m_Name: Objects + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &96109486 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 96109485} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 821834666} + - {fileID: 972091999} + - {fileID: 955492763} + - {fileID: 614875259} + m_Father: {fileID: 2197207069389693912} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &107740111 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 107740112} + - component: {fileID: 107740115} + - component: {fileID: 107740114} + - component: {fileID: 107740113} + m_Layer: 0 + m_Name: RenderingLayer (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &107740112 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 107740111} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 955492763} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &107740113 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 107740111} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &107740114 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 107740111} + 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: 1048576 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &107740115 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 107740111} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &186724320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 186724321} + - component: {fileID: 186724324} + - component: {fileID: 186724323} + - component: {fileID: 186724322} + m_Layer: 0 + m_Name: RenderingLayer (0) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &186724321 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186724320} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 972091999} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &186724322 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186724320} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &186724323 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186724320} + 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: 256 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &186724324 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 186724320} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &187805492 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 187805493} + - component: {fileID: 187805496} + - component: {fileID: 187805494} + - component: {fileID: 8387439273542567503} + m_Layer: 0 + m_Name: PrePass + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &187805493 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 187805492} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 963194228} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &187805494 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 187805492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 0 + m_RequiresOpaqueTextureOption: 0 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: 22 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 1 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 +--- !u!20 &187805496 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 187805492} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0.5 + height: 0.5 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 3.19 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 3875 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &232977485 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 232977486} + - component: {fileID: 232977489} + - component: {fileID: 232977488} + - component: {fileID: 232977487} + m_Layer: 0 + m_Name: RenderingLayer (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &232977486 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 232977485} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 955492763} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &232977487 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 232977485} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &232977488 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 232977485} + 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: 262144 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &232977489 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 232977485} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &274254894 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 274254895} + - component: {fileID: 274254898} + - component: {fileID: 274254897} + - component: {fileID: 274254896} + m_Layer: 0 + m_Name: RenderingLayer (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &274254895 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274254894} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 955492763} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &274254896 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274254894} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &274254897 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274254894} + 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: 2097152 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &274254898 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 274254894} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &311922699 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 311922700} + - component: {fileID: 311922703} + - component: {fileID: 311922702} + - component: {fileID: 311922701} + m_Layer: 0 + m_Name: RenderingLayer (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &311922700 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 311922699} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 972091999} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &311922701 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 311922699} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &311922702 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 311922699} + 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: 16384 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &311922703 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 311922699} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &437531706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 437531707} + - component: {fileID: 437531710} + - component: {fileID: 437531709} + - component: {fileID: 437531708} + m_Layer: 0 + m_Name: RenderingLayer (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &437531707 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437531706} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 972091999} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &437531708 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437531706} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &437531709 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437531706} + 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: 8192 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &437531710 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 437531706} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &505465362 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 505465363} + - component: {fileID: 505465366} + - component: {fileID: 505465365} + - component: {fileID: 505465364} + m_Layer: 0 + m_Name: RenderingLayer (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &505465363 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505465362} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 614875259} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &505465364 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505465362} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &505465365 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505465362} + 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: 536870912 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &505465366 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 505465362} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &571633252 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 571633253} + - component: {fileID: 571633256} + - component: {fileID: 571633255} + - component: {fileID: 571633254} + m_Layer: 0 + m_Name: RenderingLayer (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &571633253 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571633252} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 821834666} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &571633254 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571633252} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &571633255 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571633252} + 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: 8 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &571633256 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 571633252} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &581526101 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 581526102} + - component: {fileID: 581526105} + - component: {fileID: 581526104} + - component: {fileID: 581526103} + m_Layer: 0 + m_Name: RenderingLayer (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &581526102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581526101} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 972091999} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &581526103 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581526101} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &581526104 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581526101} + 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: 32768 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &581526105 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 581526101} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &614875258 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 614875259} + m_Layer: 0 + m_Name: Row (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &614875259 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 614875258} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 3} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1335117920} + - {fileID: 1046677523} + - {fileID: 638269084} + - {fileID: 651796496} + - {fileID: 931713489} + - {fileID: 505465363} + - {fileID: 899070096} + - {fileID: 1992093578} + m_Father: {fileID: 96109486} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &638269083 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 638269084} + - component: {fileID: 638269087} + - component: {fileID: 638269086} + - component: {fileID: 638269085} + m_Layer: 0 + m_Name: RenderingLayer (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &638269084 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638269083} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 614875259} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &638269085 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638269083} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &638269086 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638269083} + 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: 67108864 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &638269087 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638269083} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &651796495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 651796496} + - component: {fileID: 651796499} + - component: {fileID: 651796498} + - component: {fileID: 651796497} + m_Layer: 0 + m_Name: RenderingLayer (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &651796496 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651796495} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 614875259} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &651796497 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651796495} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &651796498 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651796495} + 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: 134217728 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &651796499 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 651796495} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &821834665 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 821834666} + m_Layer: 0 + m_Name: Row + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &821834666 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 821834665} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 28056759} + - {fileID: 1129415854} + - {fileID: 1558001119} + - {fileID: 571633253} + - {fileID: 1279381455} + - {fileID: 1914548690} + - {fileID: 1891749383} + - {fileID: 1808842152} + m_Father: {fileID: 96109486} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &899070095 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 899070096} + - component: {fileID: 899070099} + - component: {fileID: 899070098} + - component: {fileID: 899070097} + m_Layer: 0 + m_Name: RenderingLayer (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &899070096 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899070095} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 614875259} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &899070097 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899070095} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &899070098 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899070095} + 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: 1073741824 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &899070099 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 899070095} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &931713488 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 931713489} + - component: {fileID: 931713492} + - component: {fileID: 931713491} + - component: {fileID: 931713490} + m_Layer: 0 + m_Name: RenderingLayer (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &931713489 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931713488} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 614875259} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &931713490 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931713488} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &931713491 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931713488} + 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: 268435456 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &931713492 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 931713488} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &955492762 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 955492763} + m_Layer: 0 + m_Name: Row (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &955492763 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 955492762} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 2} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 39935311} + - {fileID: 1527607396} + - {fileID: 232977486} + - {fileID: 1842019397} + - {fileID: 107740112} + - {fileID: 274254895} + - {fileID: 2103686510} + - {fileID: 1541801372} + m_Father: {fileID: 96109486} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + m_Layer: 0 + m_Name: Cameras + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 3.5, y: 9, z: 1.5} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 187805493} + - {fileID: 1553590468} + - {fileID: 2106886058} + m_Father: {fileID: 2197207069389693912} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &972091998 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 972091999} + m_Layer: 0 + m_Name: Row (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &972091999 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 972091998} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 186724321} + - {fileID: 1131093056} + - {fileID: 2019902190} + - {fileID: 1457293302} + - {fileID: 1066332572} + - {fileID: 437531707} + - {fileID: 311922700} + - {fileID: 581526102} + m_Father: {fileID: 96109486} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1046677522 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1046677523} + - component: {fileID: 1046677526} + - component: {fileID: 1046677525} + - component: {fileID: 1046677524} + m_Layer: 0 + m_Name: RenderingLayer (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1046677523 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1046677522} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 614875259} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1046677524 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1046677522} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1046677525 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1046677522} + 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: 33554432 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1046677526 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1046677522} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1066332571 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1066332572} + - component: {fileID: 1066332575} + - component: {fileID: 1066332574} + - component: {fileID: 1066332573} + m_Layer: 0 + m_Name: RenderingLayer (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1066332572 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066332571} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 972091999} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1066332573 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066332571} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1066332574 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066332571} + 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: 4096 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1066332575 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1066332571} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1094763722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1094763725} + - component: {fileID: 1094763724} + - component: {fileID: 1094763723} + m_Layer: 2 + m_Name: AfterOpques + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!102 &1094763723 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094763722} + m_Text: Rendering Layer after Opaques + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 0 + m_FontSize: 20 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1094763724 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094763722} + 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: 10100, guid: 0000000000000000e000000000000000, type: 0} + 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!4 &1094763725 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1094763722} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.58} + m_LocalScale: {x: 0.25, y: 0.25, z: 0.25} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &1129415853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1129415854} + - component: {fileID: 1129415857} + - component: {fileID: 1129415856} + - component: {fileID: 1129415855} + m_Layer: 0 + m_Name: RenderingLayer (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1129415854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1129415853} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 821834666} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1129415855 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1129415853} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1129415856 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1129415853} + 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: 2 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1129415857 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1129415853} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1131093055 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1131093056} + - component: {fileID: 1131093059} + - component: {fileID: 1131093058} + - component: {fileID: 1131093057} + m_Layer: 0 + m_Name: RenderingLayer (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1131093056 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131093055} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 972091999} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1131093057 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131093055} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1131093058 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131093055} + 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: 512 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1131093059 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131093055} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1279381454 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1279381455} + - component: {fileID: 1279381458} + - component: {fileID: 1279381457} + - component: {fileID: 1279381456} + m_Layer: 0 + m_Name: RenderingLayer (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1279381455 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1279381454} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 4, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 821834666} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1279381456 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1279381454} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1279381457 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1279381454} + 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: 16 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1279381458 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1279381454} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1335117919 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1335117920} + - component: {fileID: 1335117923} + - component: {fileID: 1335117922} + - component: {fileID: 1335117921} + m_Layer: 0 + m_Name: RenderingLayer (0) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1335117920 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335117919} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 614875259} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1335117921 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335117919} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1335117922 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335117919} + 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: 16777216 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1335117923 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335117919} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1457293301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1457293302} + - component: {fileID: 1457293305} + - component: {fileID: 1457293304} + - component: {fileID: 1457293303} + m_Layer: 0 + m_Name: RenderingLayer (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1457293302 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457293301} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 972091999} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1457293303 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457293301} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1457293304 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457293301} + 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: 2048 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1457293305 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1457293301} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1480004319 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1480004322} + - component: {fileID: 1480004321} + - component: {fileID: 1480004320} + m_Layer: 1 + m_Name: AfterPrePasses + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!102 &1480004320 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480004319} + m_Text: Rendering Layer after Pre Passes + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 0 + m_FontSize: 20 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1480004321 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480004319} + 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: 10100, guid: 0000000000000000e000000000000000, type: 0} + 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!4 &1480004322 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480004319} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.58} + m_LocalScale: {x: 0.25, y: 0.25, z: 0.25} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &1527607395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1527607396} + - component: {fileID: 1527607399} + - component: {fileID: 1527607398} + - component: {fileID: 1527607397} + m_Layer: 0 + m_Name: RenderingLayer (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1527607396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1527607395} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 955492763} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1527607397 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1527607395} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1527607398 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1527607395} + 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: 131072 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1527607399 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1527607395} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1541801371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1541801372} + - component: {fileID: 1541801375} + - component: {fileID: 1541801374} + - component: {fileID: 1541801373} + m_Layer: 0 + m_Name: RenderingLayer (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1541801372 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1541801371} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 955492763} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1541801373 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1541801371} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1541801374 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1541801371} + 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: 8388608 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1541801375 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1541801371} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1553590467 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1553590468} + - component: {fileID: 1553590471} + - component: {fileID: 1553590469} + m_Layer: 0 + m_Name: Opaque + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1553590468 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553590467} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 963194228} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1553590469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553590467} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: 23 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 1 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 +--- !u!20 &1553590471 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1553590467} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0.5 + y: 0 + width: 0.5 + height: 0.5 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 3.19 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 3877 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!1 &1558001118 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1558001119} + - component: {fileID: 1558001122} + - component: {fileID: 1558001121} + - component: {fileID: 1558001120} + m_Layer: 0 + m_Name: RenderingLayer (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1558001119 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558001118} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 821834666} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1558001120 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558001118} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1558001121 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558001118} + 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: 4 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1558001122 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1558001118} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1592210521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1592210524} + - component: {fileID: 1592210523} + - component: {fileID: 1592210522} + m_Layer: 4 + m_Name: AfterGBuffer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!102 &1592210522 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592210521} + m_Text: Rendering Layer after GBuffer + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 0 + m_FontSize: 20 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1592210523 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592210521} + 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: 10100, guid: 0000000000000000e000000000000000, type: 0} + 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!4 &1592210524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1592210521} + m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.58} + m_LocalScale: {x: 0.25, y: 0.25, z: 0.25} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!1 &1808842151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1808842152} + - component: {fileID: 1808842155} + - component: {fileID: 1808842154} + - component: {fileID: 1808842153} + m_Layer: 0 + m_Name: RenderingLayer (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1808842152 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808842151} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 821834666} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1808842153 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808842151} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1808842154 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808842151} + 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: 128 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1808842155 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1808842151} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1842019396 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1842019397} + - component: {fileID: 1842019400} + - component: {fileID: 1842019399} + - component: {fileID: 1842019398} + m_Layer: 0 + m_Name: RenderingLayer (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1842019397 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1842019396} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 3, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 955492763} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1842019398 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1842019396} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1842019399 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1842019396} + 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: 524288 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1842019400 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1842019396} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1891749382 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1891749383} + - component: {fileID: 1891749386} + - component: {fileID: 1891749385} + - component: {fileID: 1891749384} + m_Layer: 0 + m_Name: RenderingLayer (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1891749383 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1891749382} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 821834666} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1891749384 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1891749382} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1891749385 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1891749382} + 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: 64 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1891749386 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1891749382} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1914548689 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1914548690} + - component: {fileID: 1914548693} + - component: {fileID: 1914548692} + - component: {fileID: 1914548691} + m_Layer: 0 + m_Name: RenderingLayer (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1914548690 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914548689} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 821834666} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1914548691 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914548689} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1914548692 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914548689} + 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: 32 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1914548693 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1914548689} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1992093577 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1992093578} + - component: {fileID: 1992093581} + - component: {fileID: 1992093580} + - component: {fileID: 1992093579} + m_Layer: 0 + m_Name: RenderingLayer (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1992093578 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1992093577} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 7, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 614875259} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1992093579 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1992093577} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1992093580 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1992093577} + 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: 2147483648 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &1992093581 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1992093577} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2019902189 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2019902190} + - component: {fileID: 2019902193} + - component: {fileID: 2019902192} + - component: {fileID: 2019902191} + m_Layer: 0 + m_Name: RenderingLayer (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2019902190 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019902189} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 2, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 972091999} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2019902191 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019902189} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2019902192 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019902189} + 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: 1024 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &2019902193 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019902189} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2103686509 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2103686510} + - component: {fileID: 2103686513} + - component: {fileID: 2103686512} + - component: {fileID: 2103686511} + m_Layer: 0 + m_Name: RenderingLayer (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2103686510 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2103686509} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 6, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 955492763} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2103686511 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2103686509} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2103686512 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2103686509} + 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: 4194304 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, 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 &2103686513 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2103686509} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2106886057 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2106886058} + - component: {fileID: 2106886061} + - component: {fileID: 2106886059} + m_Layer: 0 + m_Name: GBuffer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2106886058 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2106886057} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 963194228} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2106886059 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2106886057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 0 + m_RequiresOpaqueTextureOption: 0 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: 24 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 1 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 +--- !u!20 &2106886061 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2106886057} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0.5 + width: 0.5 + height: 0.5 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 3.19 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 3889 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2197207069389693912 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4334929291850010344} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 963194228} + - {fileID: 96109486} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &4334929291850010344 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2197207069389693912} + m_Layer: 0 + m_Name: Scene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &8387439273542567503 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 187805492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73231aa468d81ea49bc3d914080de185, type: 3} + m_Name: + m_EditorClassIdentifier: + ImageComparisonSettings: + TargetWidth: 1920 + TargetHeight: 1080 + PerPixelCorrectnessThreshold: 0.001 + PerPixelGammaThreshold: 0.003921569 + PerPixelAlphaThreshold: 0.003921569 + AverageCorrectnessThreshold: 0.005 + IncorrectPixelsThreshold: 0.0000038146973 + UseHDR: 0 + UseBackBuffer: 1 + ImageResolution: 0 + ActiveImageTests: 1 + ActivePixelTests: 7 + WaitFrames: 0 + XRCompatible: 1 + CheckMemoryAllocation: 1 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity.meta new file mode 100644 index 00000000000..8c7681c7905 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 87ee64df2c957224ab067a27a80ea7af +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader new file mode 100644 index 00000000000..90f8285581d --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader @@ -0,0 +1,41 @@ +Shader "Hidden/Universal Render Pipeline/DrawRenderingLayer" +{ + SubShader + { + Tags { "RenderType" = "Opaque" "RenderPipeline" = "UniversalPipeline"} + LOD 100 + + Pass + { + Name "DrawRenderingLayer" + ZTest Always + ZWrite Off + Cull Off + + HLSLPROGRAM + #pragma vertex FullscreenVert + #pragma fragment Fragment + #pragma multi_compile _ _USE_DRAW_PROCEDURAL +#pragma enable_d3d11_debug_symbols + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Fullscreen.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + + float4 _RenderingLayerColors[32]; + + half4 Fragment(Varyings input) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + uint2 positionSS = uint2(input.positionCS.xy); + uint sceneRenderingLayer = LoadSceneRenderingLayer(positionSS); + uint renderingLayerColorIndex = clamp(log2(sceneRenderingLayer + 1), 0, 31); + + //return sceneRenderingLayer == 1 ? 1 : 0; + return _RenderingLayerColors[renderingLayerColorIndex]; + } + ENDHLSL + } + } +} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader.meta new file mode 100644 index 00000000000..966b7edc9c9 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1c19806167865d546982c2df72fe1cc6 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + preprocessorOverride: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset new file mode 100644 index 00000000000..dbe98c03a50 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset @@ -0,0 +1,75 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-697913549402877259 +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: 0ed5622e99d2626449fa13eba31fe54a, type: 3} + m_Name: RenderingLayerTestFeature + m_EditorClassIdentifier: + m_Active: 1 + m_Shader: {fileID: 4800000, guid: 1c19806167865d546982c2df72fe1cc6, type: 3} + m_Event: 240 +--- !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: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: DrawRenderingLayerGBuffer + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + m_RendererFeatures: + - {fileID: -697913549402877259} + m_RendererFeatureMap: b5d2e813538350f6 + m_UseNativeRenderPass: 0 + postProcessData: {fileID: 0} + xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} + shaders: + blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} + copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + screenSpaceShadowPS: {fileID: 0} + samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + stencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + materialErrorPS: {fileID: 4800000, guid: 5fd9a8feb75a4b5894c241777f519d4e, type: 3} + coreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + coreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, + type: 3} + cameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, + type: 3} + objectMotionVector: {fileID: 4800000, guid: 7b3ede40266cd49a395def176e1bc486, + type: 3} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 1 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 1 + m_AccurateGbufferNormals: 0 + m_ClusteredRendering: 0 + m_TileSize: 32 + m_IntermediateTextureMode: 1 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset.meta new file mode 100644 index 00000000000..8acd64cbf9c --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f16bd0dae84882645aaa66c68f2d706f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset new file mode 100644 index 00000000000..0289fdaaea1 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset @@ -0,0 +1,75 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-697913549402877259 +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: 0ed5622e99d2626449fa13eba31fe54a, type: 3} + m_Name: RenderingLayerTestFeature + m_EditorClassIdentifier: + m_Active: 1 + m_Shader: {fileID: 4800000, guid: 1c19806167865d546982c2df72fe1cc6, type: 3} + m_Event: 300 +--- !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: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: DrawRenderingLayerOpaque + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + m_RendererFeatures: + - {fileID: -697913549402877259} + m_RendererFeatureMap: b5d2e813538350f6 + m_UseNativeRenderPass: 0 + postProcessData: {fileID: 0} + xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} + shaders: + blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} + copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + screenSpaceShadowPS: {fileID: 0} + samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + stencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + materialErrorPS: {fileID: 4800000, guid: 5fd9a8feb75a4b5894c241777f519d4e, type: 3} + coreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + coreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, + type: 3} + cameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, + type: 3} + objectMotionVector: {fileID: 4800000, guid: 7b3ede40266cd49a395def176e1bc486, + type: 3} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 1 + m_AccurateGbufferNormals: 0 + m_ClusteredRendering: 0 + m_TileSize: 32 + m_IntermediateTextureMode: 1 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset.meta new file mode 100644 index 00000000000..4a2bb1d3c13 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ee930dd2506bc346b8db93eb3e10f5f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset new file mode 100644 index 00000000000..b38e1182462 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset @@ -0,0 +1,75 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-697913549402877259 +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: 0ed5622e99d2626449fa13eba31fe54a, type: 3} + m_Name: RenderingLayerTestFeature + m_EditorClassIdentifier: + m_Active: 1 + m_Shader: {fileID: 4800000, guid: 1c19806167865d546982c2df72fe1cc6, type: 3} + m_Event: 200 +--- !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: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: DrawRenderingLayerPrePass + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + m_RendererFeatures: + - {fileID: -697913549402877259} + m_RendererFeatureMap: b5d2e813538350f6 + m_UseNativeRenderPass: 0 + postProcessData: {fileID: 0} + xrSystemData: {fileID: 11400000, guid: 60e1133243b97e347b653163a8c01b64, type: 2} + shaders: + blitPS: {fileID: 4800000, guid: c17132b1f77d20942aa75f8429c0f8bc, type: 3} + copyDepthPS: {fileID: 4800000, guid: d6dae50ee9e1bfa4db75f19f99355220, type: 3} + screenSpaceShadowPS: {fileID: 0} + samplingPS: {fileID: 4800000, guid: 04c410c9937594faa893a11dceb85f7e, type: 3} + stencilDeferredPS: {fileID: 4800000, guid: e9155b26e1bc55942a41e518703fe304, type: 3} + fallbackErrorPS: {fileID: 4800000, guid: e6e9a19c3678ded42a3bc431ebef7dbd, type: 3} + materialErrorPS: {fileID: 4800000, guid: 5fd9a8feb75a4b5894c241777f519d4e, type: 3} + coreBlitPS: {fileID: 4800000, guid: 93446b5c5339d4f00b85c159e1159b7c, type: 3} + coreBlitColorAndDepthPS: {fileID: 4800000, guid: d104b2fc1ca6445babb8e90b0758136b, + type: 3} + cameraMotionVector: {fileID: 4800000, guid: c56b7e0d4c7cb484e959caeeedae9bbf, + type: 3} + objectMotionVector: {fileID: 4800000, guid: 7b3ede40266cd49a395def176e1bc486, + type: 3} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 1 + m_AccurateGbufferNormals: 0 + m_ClusteredRendering: 0 + m_TileSize: 32 + m_IntermediateTextureMode: 1 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset.meta new file mode 100644 index 00000000000..49113360f4f --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 784ccd3af7210ab46a0f242f55a1b82a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs new file mode 100644 index 00000000000..1153752aba3 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs @@ -0,0 +1,169 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using UnityEngine.Rendering.Universal.Internal; + +public class RenderingLayerTestFeature : ScriptableRendererFeature +{ + private class RequestRenderingLayerPass : ScriptableRenderPass + { + private ProfilingSampler m_ProfilingSampler; + private RenderTargetHandle m_Target; + + public RequestRenderingLayerPass(RenderPassEvent renderPassEvent) + { + m_ProfilingSampler = new ProfilingSampler("Draw Rendering Layer"); + this.renderPassEvent = RenderPassEvent.AfterRenderingSkybox; + m_Target.Init("_RenderingLayerTestTexture"); + } + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + CommandBuffer cmd = CommandBufferPool.Get(); + using (new ProfilingScope(cmd, m_ProfilingSampler)) + { + Blit(cmd, ref renderingData, m_Target.Identifier(), null); + } + + context.ExecuteCommandBuffer(cmd); + cmd.Clear(); + + CommandBufferPool.Release(cmd); + + } + } + + private class DrawRenderingLayerPass : ScriptableRenderPass + { + private static class ShaderPropertyId + { + public static readonly int scaleBias = Shader.PropertyToID("_ScaleBias"); + } + + private Material m_Material; + private ProfilingSampler m_ProfilingSampler; + private RenderTargetHandle m_Target; + private Vector4[] m_RenderingLayerColors = new Vector4[32]; + + public DrawRenderingLayerPass(RenderPassEvent renderPassEvent) + { + ConfigureInput(ScriptableRenderPassInput.RenderingLayer); + m_ProfilingSampler = new ProfilingSampler("Draw Rendering Layer"); + this.renderPassEvent = renderPassEvent; + m_Target.Init("_RenderingLayerTestTexture"); + } + + public void Setup(Material material) + { + m_Material = material; + + for (int i = 0; i < 32; i++) + m_RenderingLayerColors[i] = Color.HSVToRGB(i / 32f, 1, 1); + + } + + public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + { + var desc = renderingData.cameraData.cameraTargetDescriptor; + desc.msaaSamples = 1; + cmd.GetTemporaryRT(m_Target.id, desc); + ConfigureTarget(m_Target.Identifier()); + } + + public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) + { + CommandBuffer cmd = CommandBufferPool.Get(); + using (new ProfilingScope(cmd, m_ProfilingSampler)) + { + //Blit(cmd, ref renderingData, 0, m_Material); + + Render(cmd, renderingData.cameraData); + } + + context.ExecuteCommandBuffer(cmd); + cmd.Clear(); + + CommandBufferPool.Release(cmd); + } + + public override void OnCameraCleanup(CommandBuffer cmd) + { + cmd.ReleaseTemporaryRT(m_Target.id); + } + + private void Render(CommandBuffer cmd, in CameraData cameraData) + { + cmd.SetGlobalVectorArray("_RenderingLayerColors", m_RenderingLayerColors); + + cmd.SetGlobalVector(ShaderPropertyId.scaleBias, new Vector4(1, 1, 0, 0)); +#if ENABLE_VR && ENABLE_XR_MODULE + bool useDrawProcedural = cameraData.xrRendering; +#else + bool useDrawProcedural = false; +#endif + + cmd.SetViewProjectionMatrices(Matrix4x4.identity, Matrix4x4.identity); // Prepare for manual blit + if (useDrawProcedural) + { + cmd.DrawProcedural(Matrix4x4.identity, m_Material, 0, MeshTopology.Quads, 4, 1, null); + } + else + { + cmd.DrawMesh(RenderingUtils.fullscreenMesh, Matrix4x4.identity, m_Material, 0, 0); + } + cmd.SetViewProjectionMatrices(cameraData.camera.worldToCameraMatrix, cameraData.camera.projectionMatrix); + } + } + + private const string k_ShaderName = "Hidden/Universal Render Pipeline/DrawRenderingLayer"; + + [SerializeField] + private Shader m_Shader; + + [SerializeField] + private RenderPassEvent m_Event = RenderPassEvent.AfterRenderingPrePasses; + + private Material m_Material; + private DrawRenderingLayerPass m_DrawRenderingLayerPass; + private RequestRenderingLayerPass m_RequestRenderingLayerPass; + + /// + public override void Create() + { + m_DrawRenderingLayerPass = new DrawRenderingLayerPass(m_Event); + m_RequestRenderingLayerPass = new RequestRenderingLayerPass(m_Event); + + GetMaterial(); + } + + private bool GetMaterial() + { + if (m_Material != null) + { + return true; + } + + if (m_Shader == null) + { + m_Shader = Shader.Find(k_ShaderName); + if (m_Shader == null) + { + return false; + } + } + + m_Material = CoreUtils.CreateEngineMaterial(m_Shader); + + return m_Material != null; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + Assert.IsNotNull(m_Material); + m_DrawRenderingLayerPass.Setup(m_Material); + renderer.EnqueuePass(m_DrawRenderingLayerPass); + renderer.EnqueuePass(m_RequestRenderingLayerPass); + } +} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs.meta new file mode 100644 index 00000000000..ce92b08693a --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0ed5622e99d2626449fa13eba31fe54a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From e4bf40d5860bf6ee3fa36df3722127baa2c1cfd6 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Fri, 3 Dec 2021 12:53:33 +0200 Subject: [PATCH 03/38] Updating test scene 250 with rt handles and naming --- ...ingLayer.meta => 250_RenderingLayers.meta} | 0 ...gLayer.unity => 250_RenderingLayers.unity} | 0 ...ty.meta => 250_RenderingLayers.unity.meta} | 0 .../DrawRenderingLayers.shader} | 9 +-- .../DrawRenderingLayers.shader.meta} | 0 .../DrawRenderingLayersFeature.cs} | 75 ++++++++++--------- .../DrawRenderingLayersFeature.cs.meta} | 0 .../DrawRenderingLayersGBuffer.asset} | 2 +- .../DrawRenderingLayersGBuffer.asset.meta} | 0 .../DrawRenderingLayersOpaque.asset} | 2 +- .../DrawRenderingLayersOpaque.asset.meta} | 0 .../DrawRenderingLayersPrePass.asset} | 2 +- .../DrawRenderingLayersPrePass.asset.meta} | 0 13 files changed, 47 insertions(+), 43 deletions(-) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer.meta => 250_RenderingLayers.meta} (100%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer.unity => 250_RenderingLayers.unity} (100%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer.unity.meta => 250_RenderingLayers.unity.meta} (100%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/DrawRenderingLayer.shader => 250_RenderingLayers/DrawRenderingLayers.shader} (82%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/DrawRenderingLayer.shader.meta => 250_RenderingLayers/DrawRenderingLayers.shader.meta} (100%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/RenderingLayerTestFeature.cs => 250_RenderingLayers/DrawRenderingLayersFeature.cs} (64%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/RenderingLayerTestFeature.cs.meta => 250_RenderingLayers/DrawRenderingLayersFeature.cs.meta} (100%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/DrawRenderingLayerGBuffer.asset => 250_RenderingLayers/DrawRenderingLayersGBuffer.asset} (98%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/DrawRenderingLayerGBuffer.asset.meta => 250_RenderingLayers/DrawRenderingLayersGBuffer.asset.meta} (100%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/DrawRenderingLayerOpaque.asset => 250_RenderingLayers/DrawRenderingLayersOpaque.asset} (98%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/DrawRenderingLayerOpaque.asset.meta => 250_RenderingLayers/DrawRenderingLayersOpaque.asset.meta} (100%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/DrawRenderingLayerPrePass.asset => 250_RenderingLayers/DrawRenderingLayersPrePass.asset} (98%) rename TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/{250_RenderingLayer/DrawRenderingLayerPrePass.asset.meta => 250_RenderingLayers/DrawRenderingLayersPrePass.asset.meta} (100%) diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.meta rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.unity similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.unity diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.unity.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer.unity.meta rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.unity.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader similarity index 82% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader index 90f8285581d..08e8ea20019 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader @@ -7,7 +7,7 @@ Shader "Hidden/Universal Render Pipeline/DrawRenderingLayer" Pass { - Name "DrawRenderingLayer" + Name "DrawRenderingLayers" ZTest Always ZWrite Off Cull Off @@ -16,13 +16,13 @@ Shader "Hidden/Universal Render Pipeline/DrawRenderingLayer" #pragma vertex FullscreenVert #pragma fragment Fragment #pragma multi_compile _ _USE_DRAW_PROCEDURAL -#pragma enable_d3d11_debug_symbols + #pragma enable_d3d11_debug_symbols #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl" #include "Packages/com.unity.render-pipelines.universal/Shaders/Utils/Fullscreen.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" - float4 _RenderingLayerColors[32]; + float4 _RenderingLayersColors[32]; half4 Fragment(Varyings input) : SV_Target { @@ -32,8 +32,7 @@ Shader "Hidden/Universal Render Pipeline/DrawRenderingLayer" uint sceneRenderingLayer = LoadSceneRenderingLayer(positionSS); uint renderingLayerColorIndex = clamp(log2(sceneRenderingLayer + 1), 0, 31); - //return sceneRenderingLayer == 1 ? 1 : 0; - return _RenderingLayerColors[renderingLayerColorIndex]; + return _RenderingLayersColors[renderingLayerColorIndex]; } ENDHLSL } diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayer.shader.meta rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs similarity index 64% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs index 1153752aba3..90cfd096e98 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs @@ -1,22 +1,24 @@ -using System.Collections.Generic; using UnityEngine; using UnityEngine.Assertions; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; -using UnityEngine.Rendering.Universal.Internal; -public class RenderingLayerTestFeature : ScriptableRendererFeature +public class DrawRenderingLayersFeature : ScriptableRendererFeature { - private class RequestRenderingLayerPass : ScriptableRenderPass + private class DrawRenderingLayersPass : ScriptableRenderPass { private ProfilingSampler m_ProfilingSampler; - private RenderTargetHandle m_Target; + private RTHandle m_TestRenderingLayersTextureHandle; - public RequestRenderingLayerPass(RenderPassEvent renderPassEvent) + public DrawRenderingLayersPass() { - m_ProfilingSampler = new ProfilingSampler("Draw Rendering Layer"); + m_ProfilingSampler = new ProfilingSampler("Draw Rendering Layers"); this.renderPassEvent = RenderPassEvent.AfterRenderingSkybox; - m_Target.Init("_RenderingLayerTestTexture"); + } + + public void Setup(RTHandle renderingLayerTestTextureHandle) + { + m_TestRenderingLayersTextureHandle = renderingLayerTestTextureHandle; } public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) @@ -24,18 +26,17 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData CommandBuffer cmd = CommandBufferPool.Get(); using (new ProfilingScope(cmd, m_ProfilingSampler)) { - Blit(cmd, ref renderingData, m_Target.Identifier(), null); + Blit(cmd, ref renderingData, m_TestRenderingLayersTextureHandle, null); } context.ExecuteCommandBuffer(cmd); cmd.Clear(); CommandBufferPool.Release(cmd); - } } - private class DrawRenderingLayerPass : ScriptableRenderPass + private class DrawRenderingLayersPrePass : ScriptableRenderPass { private static class ShaderPropertyId { @@ -44,32 +45,29 @@ private static class ShaderPropertyId private Material m_Material; private ProfilingSampler m_ProfilingSampler; - private RenderTargetHandle m_Target; + private RTHandle m_ColoredRenderingLayersTextureHandle; private Vector4[] m_RenderingLayerColors = new Vector4[32]; - public DrawRenderingLayerPass(RenderPassEvent renderPassEvent) + public DrawRenderingLayersPrePass(RenderPassEvent renderPassEvent) { ConfigureInput(ScriptableRenderPassInput.RenderingLayer); - m_ProfilingSampler = new ProfilingSampler("Draw Rendering Layer"); + m_ProfilingSampler = new ProfilingSampler("Rendering Layers PrePass"); this.renderPassEvent = renderPassEvent; - m_Target.Init("_RenderingLayerTestTexture"); } - public void Setup(Material material) + public void Setup(RTHandle renderingLayerTestTextureHandle, Material material) { + m_ColoredRenderingLayersTextureHandle = renderingLayerTestTextureHandle; + m_Material = material; for (int i = 0; i < 32; i++) m_RenderingLayerColors[i] = Color.HSVToRGB(i / 32f, 1, 1); - } public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) { - var desc = renderingData.cameraData.cameraTargetDescriptor; - desc.msaaSamples = 1; - cmd.GetTemporaryRT(m_Target.id, desc); - ConfigureTarget(m_Target.Identifier()); + ConfigureTarget(m_ColoredRenderingLayersTextureHandle); } public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) @@ -77,8 +75,6 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData CommandBuffer cmd = CommandBufferPool.Get(); using (new ProfilingScope(cmd, m_ProfilingSampler)) { - //Blit(cmd, ref renderingData, 0, m_Material); - Render(cmd, renderingData.cameraData); } @@ -88,14 +84,9 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData CommandBufferPool.Release(cmd); } - public override void OnCameraCleanup(CommandBuffer cmd) - { - cmd.ReleaseTemporaryRT(m_Target.id); - } - private void Render(CommandBuffer cmd, in CameraData cameraData) { - cmd.SetGlobalVectorArray("_RenderingLayerColors", m_RenderingLayerColors); + cmd.SetGlobalVectorArray("_RenderingLayersColors", m_RenderingLayerColors); cmd.SetGlobalVector(ShaderPropertyId.scaleBias, new Vector4(1, 1, 0, 0)); #if ENABLE_VR && ENABLE_XR_MODULE @@ -117,7 +108,7 @@ private void Render(CommandBuffer cmd, in CameraData cameraData) } } - private const string k_ShaderName = "Hidden/Universal Render Pipeline/DrawRenderingLayer"; + private const string k_ShaderName = "Hidden/Universal Render Pipeline/DrawRenderingLayers"; [SerializeField] private Shader m_Shader; @@ -126,18 +117,25 @@ private void Render(CommandBuffer cmd, in CameraData cameraData) private RenderPassEvent m_Event = RenderPassEvent.AfterRenderingPrePasses; private Material m_Material; - private DrawRenderingLayerPass m_DrawRenderingLayerPass; - private RequestRenderingLayerPass m_RequestRenderingLayerPass; + private DrawRenderingLayersPrePass m_DrawRenderingLayerPass; + private DrawRenderingLayersPass m_RequestRenderingLayerPass; + + private RTHandle m_ColoredRenderingLayersTextureHandle; /// public override void Create() { - m_DrawRenderingLayerPass = new DrawRenderingLayerPass(m_Event); - m_RequestRenderingLayerPass = new RequestRenderingLayerPass(m_Event); + m_DrawRenderingLayerPass = new DrawRenderingLayersPrePass(m_Event); + m_RequestRenderingLayerPass = new DrawRenderingLayersPass(); GetMaterial(); } + protected override void Dispose(bool disposing) + { + m_ColoredRenderingLayersTextureHandle?.Release(); + } + private bool GetMaterial() { if (m_Material != null) @@ -161,9 +159,16 @@ private bool GetMaterial() public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { + var desc = renderingData.cameraData.cameraTargetDescriptor; + desc.msaaSamples = 1; + desc.graphicsFormat = UnityEngine.Experimental.Rendering.GraphicsFormat.R8G8B8A8_SRGB; + desc.depthBufferBits = 0; + RenderingUtils.ReAllocateIfNeeded(ref m_ColoredRenderingLayersTextureHandle, desc, name: "_ColoredRenderingLayersTexture"); + Assert.IsNotNull(m_Material); - m_DrawRenderingLayerPass.Setup(m_Material); + m_DrawRenderingLayerPass.Setup(m_ColoredRenderingLayersTextureHandle, m_Material); renderer.EnqueuePass(m_DrawRenderingLayerPass); + m_RequestRenderingLayerPass.Setup(m_ColoredRenderingLayersTextureHandle); renderer.EnqueuePass(m_RequestRenderingLayerPass); } } diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/RenderingLayerTestFeature.cs.meta rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset similarity index 98% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset index dbe98c03a50..5bd9c79f709 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset @@ -25,7 +25,7 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} - m_Name: DrawRenderingLayerGBuffer + m_Name: DrawRenderingLayersGBuffer m_EditorClassIdentifier: debugShaders: debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerGBuffer.asset.meta rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset similarity index 98% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset index 0289fdaaea1..db11a09b3ff 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset @@ -25,7 +25,7 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} - m_Name: DrawRenderingLayerOpaque + m_Name: DrawRenderingLayersOpaque m_EditorClassIdentifier: debugShaders: debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerOpaque.asset.meta rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset similarity index 98% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset index b38e1182462..b34052b2ab3 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset @@ -25,7 +25,7 @@ MonoBehaviour: m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} - m_Name: DrawRenderingLayerPrePass + m_Name: DrawRenderingLayersPrePass m_EditorClassIdentifier: debugShaders: debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayer/DrawRenderingLayerPrePass.asset.meta rename to TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset.meta From e0006180c0f457fff216c350aa68e0a33e5a8200 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Fri, 3 Dec 2021 13:00:44 +0200 Subject: [PATCH 04/38] Updating new blit overload to use rt handles --- .../Runtime/Passes/ScriptableRenderPass.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs index dafc4a127b9..5f682bd4b61 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs @@ -738,12 +738,10 @@ public void Blit(CommandBuffer cmd, ref RenderingData data, Material material, i /// Source texture or target identifier to blit from. /// Material to use. /// Shader pass to use. Default is 0. - public void Blit(CommandBuffer cmd, ref RenderingData data, RenderTargetIdentifier source, Material material, int passIndex = 0) + public void Blit(CommandBuffer cmd, ref RenderingData data, RTHandle source, Material material, int passIndex = 0) { var renderer = data.cameraData.renderer; - - Blit(cmd, source, renderer.GetCameraColorFrontBuffer(cmd), material, passIndex); - renderer.SwapColorBuffer(cmd); + Blit(cmd, source, renderer.cameraColorTargetHandle, material, passIndex); } /// From cef454ad588406a4027a95b31e2c5841060eae22 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Fri, 3 Dec 2021 13:34:56 +0200 Subject: [PATCH 05/38] Cleaning up dbufer --- .../Decal/DBuffer/DBufferRenderPass.cs | 79 +++++++------------ .../RendererFeatures/DecalRendererFeature.cs | 11 +-- .../Runtime/UniversalRenderer.cs | 2 + 3 files changed, 35 insertions(+), 57 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs index 1ff227c26c8..1ca92ac1d47 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs @@ -27,16 +27,10 @@ internal class DBufferRenderPass : ScriptableRenderPass private bool m_DecalLayers; private RTHandle m_DBufferDepth; - private RTHandle m_CameraDepthTexture; - private RTHandle m_CameraDepthAttachment; - internal DeferredLights deferredLights { get; set; } - private bool isDeferred => deferredLights != null; internal RTHandle[] dBufferColorHandles { get; private set; } - - internal RTHandle dBufferDepth => m_DBufferDepth; - internal RTHandle cameraDepthTexture => m_CameraDepthTexture; - internal RTHandle cameraDepthAttachment => m_CameraDepthAttachment; + internal RTHandle depthHandle { get; private set; } + internal RTHandle dBufferDepth { get => m_DBufferDepth; } public DBufferRenderPass(Material dBufferClear, DBufferSettings settings, DecalDrawDBufferSystem drawSystem, bool decalLayers) { @@ -59,78 +53,66 @@ public DBufferRenderPass(Material dBufferClear, DBufferSettings settings, DecalD int dBufferCount = (int)settings.surfaceData + 1; dBufferColorHandles = new RTHandle[dBufferCount]; - for (int dbufferIndex = 0; dbufferIndex < dBufferCount; ++dbufferIndex) - dBufferColorHandles[dbufferIndex] = RTHandles.Alloc(s_DBufferNames[dbufferIndex], name: s_DBufferNames[dbufferIndex]); m_DBufferCount = dBufferCount; - - m_DBufferDepth = RTHandles.Alloc(s_DBufferDepthName, name: s_DBufferDepthName); - m_CameraDepthTexture = RTHandles.Alloc("_CameraDepthTexture", name: "_CameraDepthTexture"); - //m_CameraDepthAttachment = RTHandles.Alloc("_CameraDepthAttachment", name: "_CameraDepthAttachment"); } public void Dispose() { - m_DBufferDepth.Release(); - m_CameraDepthTexture.Release(); - m_CameraDepthAttachment.Release(); + m_DBufferDepth?.Release(); foreach (var handle in dBufferColorHandles) - handle.Release(); + handle?.Release(); } - public void Setup(RTHandle depthTextureHandle) + public void Setup(in CameraData cameraData) { - m_CameraDepthAttachment = depthTextureHandle; + var depthDesc = cameraData.cameraTargetDescriptor; + depthDesc.graphicsFormat = GraphicsFormat.None; //Depth only rendering + depthDesc.depthStencilFormat = cameraData.cameraTargetDescriptor.depthStencilFormat; + depthDesc.msaaSamples = 1; + + RenderingUtils.ReAllocateIfNeeded(ref m_DBufferDepth, depthDesc, name: s_DBufferDepthName); + + Setup(cameraData, m_DBufferDepth); } - public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + public void Setup(in CameraData cameraData, RTHandle depthTextureHandle) { // base { - var desc = renderingData.cameraData.cameraTargetDescriptor; + var desc = cameraData.cameraTargetDescriptor; desc.graphicsFormat = QualitySettings.activeColorSpace == ColorSpace.Linear ? GraphicsFormat.R8G8B8A8_SRGB : GraphicsFormat.R8G8B8A8_UNorm; desc.depthBufferBits = 0; desc.msaaSamples = 1; - cmd.GetTemporaryRT(Shader.PropertyToID(s_DBufferNames[0]), desc); + RenderingUtils.ReAllocateIfNeeded(ref dBufferColorHandles[0], desc, name: s_DBufferNames[0]); } if (m_Settings.surfaceData == DecalSurfaceData.AlbedoNormal || m_Settings.surfaceData == DecalSurfaceData.AlbedoNormalMAOS) { - var desc = renderingData.cameraData.cameraTargetDescriptor; + var desc = cameraData.cameraTargetDescriptor; desc.graphicsFormat = GraphicsFormat.R8G8B8A8_UNorm; desc.depthBufferBits = 0; desc.msaaSamples = 1; - cmd.GetTemporaryRT(Shader.PropertyToID(s_DBufferNames[1]), desc); + RenderingUtils.ReAllocateIfNeeded(ref dBufferColorHandles[1], desc, name: s_DBufferNames[1]); } if (m_Settings.surfaceData == DecalSurfaceData.AlbedoNormalMAOS) { - var desc = renderingData.cameraData.cameraTargetDescriptor; + var desc = cameraData.cameraTargetDescriptor; desc.graphicsFormat = GraphicsFormat.R8G8B8A8_UNorm; desc.depthBufferBits = 0; desc.msaaSamples = 1; - cmd.GetTemporaryRT(Shader.PropertyToID(s_DBufferNames[2]), desc); + RenderingUtils.ReAllocateIfNeeded(ref dBufferColorHandles[2], desc, name: s_DBufferNames[2]); } // depth - RTHandle depthHandle; - if (!isDeferred) - { - var depthDesc = renderingData.cameraData.cameraTargetDescriptor; - depthDesc.graphicsFormat = GraphicsFormat.None; //Depth only rendering - depthDesc.depthStencilFormat = renderingData.cameraData.cameraTargetDescriptor.depthStencilFormat; - depthDesc.msaaSamples = 1; - - cmd.GetTemporaryRT(Shader.PropertyToID(m_DBufferDepth.name), depthDesc); - depthHandle = m_DBufferDepth; - } - else - { - depthHandle = m_CameraDepthAttachment; - } + depthHandle = depthTextureHandle; + } + public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) + { ConfigureTarget(dBufferColorHandles, depthHandle); } @@ -145,14 +127,11 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData context.ExecuteCommandBuffer(cmd); cmd.Clear(); - // todo this should be set by depth normal prepass - if (isDeferred) - { - cmd.SetGlobalTexture("_CameraNormalsTexture", deferredLights.GbufferAttachmentIdentifiers[deferredLights.GBufferNormalSmoothnessIndex]); - - //if (m_DecalLayers) - // cmd.SetGlobalTexture("_CameraDecalLayersTexture", deferredLights.GbufferAttachmentIdentifiers[deferredLights.GBufferRenderingLayers]); - } + cmd.SetGlobalTexture(dBufferColorHandles[0].name, dBufferColorHandles[0].nameID); + if (m_Settings.surfaceData == DecalSurfaceData.AlbedoNormal || m_Settings.surfaceData == DecalSurfaceData.AlbedoNormalMAOS) + cmd.SetGlobalTexture(dBufferColorHandles[1].name, dBufferColorHandles[1].nameID); + if (m_Settings.surfaceData == DecalSurfaceData.AlbedoNormalMAOS) + cmd.SetGlobalTexture(dBufferColorHandles[2].name, dBufferColorHandles[2].nameID); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DBufferMRT1, m_Settings.surfaceData == DecalSurfaceData.Albedo); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DBufferMRT2, m_Settings.surfaceData == DecalSurfaceData.AlbedoNormal); diff --git a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index 7bca40f0017..e4582f38ddd 100644 --- a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -393,12 +393,6 @@ private void RecreateSystemsIfNeeded(ScriptableRenderer renderer, in CameraData m_DecalDrawForwardEmissiveSystem = new DecalDrawFowardEmissiveSystem(m_DecalEntityManager); m_ForwardEmissivePass = new DecalForwardEmissivePass(m_DecalDrawForwardEmissiveSystem); - - if (universalRenderer.actualRenderingMode == RenderingMode.Deferred) - { - m_DBufferRenderPass.deferredLights = universalRenderer.deferredLights; - //m_DBufferRenderPass.deferredLights.DisableFramebufferFetchInput(); - } break; } @@ -489,14 +483,17 @@ public override void SetupRenderPasses(ScriptableRenderer renderer, in Rendering var universalRenderer = renderer as UniversalRenderer; if (universalRenderer.actualRenderingMode == RenderingMode.Deferred) { + m_DBufferRenderPass.Setup(renderingData.cameraData, renderer.cameraDepthTargetHandle); + m_CopyDepthPass.Setup( renderer.cameraDepthTargetHandle, universalRenderer.m_DepthTexture ); - m_DBufferRenderPass.Setup(renderer.cameraDepthTargetHandle); } else { + m_DBufferRenderPass.Setup(renderingData.cameraData); + m_CopyDepthPass.Setup( universalRenderer.m_DepthTexture, m_DBufferRenderPass.dBufferDepth diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 6415029ad5d..a2d49c31421 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -704,6 +704,8 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re CommandBuffer cmd = CommandBufferPool.Get(); cmd.SetGlobalTexture(normalsTexture.name, normalsTexture.nameID); + if (this.actualRenderingMode == RenderingMode.Deferred) // TODO: Clean this up + cmd.SetGlobalTexture("_CameraNormalsTexture", normalsTexture.nameID); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); } From d1bf08c50e22b03c9a359dcf56253af38a5a6d1a Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Fri, 3 Dec 2021 14:18:21 +0200 Subject: [PATCH 06/38] Cleanup --- .../Editor/Decal/DecalProjectorEditor.cs | 2 +- .../ShaderGraph/Includes/ShaderPassDecal.hlsl | 4 +--- .../ScreenSpace/DecalGBufferRenderPass.cs | 19 ++++--------------- .../Runtime/ScriptableRenderer.cs | 5 ++--- .../Runtime/UniversalRenderer.cs | 18 +----------------- .../DeclareRenderingLayerTexture.hlsl | 11 +++-------- 6 files changed, 12 insertions(+), 47 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs b/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs index efe08dd52b7..a0ca3aeff74 100644 --- a/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs +++ b/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs @@ -608,7 +608,7 @@ public override void OnInspectorGUI() materialChanged = EditorGUI.EndChangeCheck(); bool decalLayerEnabled = false; - //if (hdrp != null) + // TODO: Add check if decal layers enabled in any renderer for current urp { decalLayerEnabled = true; using (new EditorGUI.DisabledScope(!decalLayerEnabled)) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl index ae25d5eb465..affb1d8b0bb 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl @@ -184,10 +184,8 @@ void Frag(PackedVaryings packedInput, half angleFadeFactor = 1.0; #ifdef _DECAL_LAYERS - //float4 renderingLayers = LoadSceneRenderingLayer(input.positionCS.xy); - //uint meshRenderingLayers = uint(renderingLayers.r * 255.0); #ifdef _RENDER_PASS_ENABLED - uint meshRenderingLayers = UnpackInt(LOAD_FRAMEBUFFER_INPUT(GBUFFER4, input.positionCS.xy), 16); + uint meshRenderingLayers = UnpackInt(LOAD_FRAMEBUFFER_INPUT(GBUFFER4, input.positionCS.xy), 16); // TODO: Add decode rendering layer function #else uint meshRenderingLayers = LoadSceneRenderingLayer(input.positionCS.xy); #endif diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs index d06bc0a05ba..cd9152d25ac 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs @@ -44,32 +44,27 @@ internal void Setup(DeferredLights deferredLights) m_DeferredLights = deferredLights; } - //public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderingData) - public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) // todo find out why on camera setup fails here + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) { if (m_DeferredLights.UseRenderPass) { - //if (m_GbufferAttachments == null) m_GbufferAttachments = new RTHandle[] { - m_DeferredLights.GbufferAttachments[0], m_DeferredLights.GbufferAttachments[1], - m_DeferredLights.GbufferAttachments[2], m_DeferredLights.GbufferAttachments[3] + m_DeferredLights.GbufferAttachments[0], m_DeferredLights.GbufferAttachments[1], + m_DeferredLights.GbufferAttachments[2], m_DeferredLights.GbufferAttachments[3] }; - //m_GbufferAttachments = m_DeferredLights.GbufferAttachmentIdentifiers; - if (m_DecalLayers) { var deferredInputAttachments = new RTHandle[] { - //m_DeferredLights.DepthCopyTexture, m_DeferredLights.GbufferAttachments[m_DeferredLights.GbufferDepthIndex], m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers], }; var deferredInputIsTransient = new bool[] { - true, false, // todo + true, false, // TODO: Make rendering layers transient }; ConfigureInputAttachments(deferredInputAttachments, deferredInputIsTransient); @@ -78,7 +73,6 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera { var deferredInputAttachments = new RTHandle[] { - //m_DeferredLights.DepthCopyTexture, m_DeferredLights.GbufferAttachments[m_DeferredLights.GbufferDepthIndex], }; @@ -92,16 +86,11 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera } else { - //m_GbufferAttachments = m_DeferredLights.GbufferAttachmentIdentifiers; - - //if (m_GbufferAttachments == null) m_GbufferAttachments = new RTHandle[] { m_DeferredLights.GbufferAttachments[0], m_DeferredLights.GbufferAttachments[1], m_DeferredLights.GbufferAttachments[2], m_DeferredLights.GbufferAttachments[3] }; - if (m_DeferredLights.GbufferAttachments[0].rt == null) - Debug.Assert(m_DeferredLights.GbufferAttachments[0].rt != null); } ConfigureTarget(m_GbufferAttachments, m_DeferredLights.DepthAttachmentHandle); diff --git a/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs b/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs index d27f2a3125a..a65ff1b7397 100644 --- a/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/ScriptableRenderer.cs @@ -1323,7 +1323,8 @@ void SetRenderPassAttachments(CommandBuffer cmd, ScriptableRenderPass renderPass } else { - // Todo: investigate performance cost of this + // TODO: investigate performance cost of this + // As alternative we would need a way to check if rts are not going to be used as shader resource bool colorAttachmentCheck = false; for (int i = 0; i < m_ActiveColorAttachments.Length; i++) { @@ -1334,8 +1335,6 @@ void SetRenderPassAttachments(CommandBuffer cmd, ScriptableRenderPass renderPass } } - //colorAttachmentCheck = false; - // Only setup render target if current render pass attachments are different from the active ones if (colorAttachmentCheck || passColorAttachment.nameID != m_ActiveColorAttachments[0] || passDepthAttachment.nameID != m_ActiveDepthAttachment || finalClearFlag != ClearFlag.None || renderPass.colorStoreActions[0] != m_ActiveColorStoreActions[0] || renderPass.depthStoreAction != m_ActiveDepthStoreAction) diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index a2d49c31421..0464bda932b 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -410,7 +410,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re bool renderingLayerProvidesRenderObjectPass = renderPassInputs.requiresRenderingLayer && !renderPassInputs.requiresNormalsTexture && m_RenderingMode == RenderingMode.Forward; - // todo: investigate the order of call, had to change because of requiresRenderingLayer + // TODO: investigate the order of call, had to change because of requiresRenderingLayer if (m_DeferredLights != null) { m_DeferredLights.UseDecalLayers = renderPassInputs.requiresRenderingLayer; @@ -1214,22 +1214,6 @@ void CreateCameraRenderTarget(ScriptableRenderContext context, ref RenderTexture CommandBufferPool.Release(cmd); } - void CreateDecalLayerRenderTarget(ScriptableRenderContext context, ref RenderTextureDescriptor descriptor, bool primedDepth) - { - CommandBuffer cmd = CommandBufferPool.Get(); - using (new ProfilingScope(null, Profiling.createCameraRenderTarget)) - { - var desc = descriptor; - desc.graphicsFormat = GraphicsFormat.R16_UNorm; - desc.depthBufferBits = 0; - //desc.msaaSamples = primedDepth ? m_RendererMSAASamples : 1; - RenderingUtils.ReAllocateIfNeeded(ref m_DecalLayersTexture, desc, FilterMode.Point); - } - - context.ExecuteCommandBuffer(cmd); - CommandBufferPool.Release(cmd); - } - bool PlatformRequiresExplicitMsaaResolve() { #if UNITY_EDITOR diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl index ad601bc2e50..bf84a38ce9f 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl @@ -14,15 +14,10 @@ float SampleSceneRenderingLayer(float2 uv) uint LoadSceneRenderingLayer(uint2 uv) { + // TODO: Investigate faster solution instead of packing //uv.y = _ScreenSize.y - uv.y; float encodedValue = LOAD_TEXTURE2D_X(_CameraDecalLayersTexture, uv).r; - return UnpackInt(encodedValue, 16);// uint(encodedValue * 65025.5); + //return uint(encodedValue * 65025.5); + return UnpackInt(encodedValue, 16);// TODO: Expose as property the bits value } - -/*uint LoadSceneDecalLayer(uint2 uv) -{ - //uv.y = _ScreenSize.y - uv.y; - float encodedValue = LOAD_TEXTURE2D_X(_CameraDecalLayersTexture, uv).r; - return uint(encodedValue * 65025.5); -}*/ #endif From 51d7c31576a7dd2e803e683be0047fe1d307bdd3 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 8 Dec 2021 14:30:18 +0200 Subject: [PATCH 07/38] Changing test 250 background to black --- .../Scenes/250_RenderingLayers/DrawRenderingLayers.shader | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader index 08e8ea20019..bb1919ef36c 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader @@ -30,9 +30,9 @@ Shader "Hidden/Universal Render Pipeline/DrawRenderingLayer" uint2 positionSS = uint2(input.positionCS.xy); uint sceneRenderingLayer = LoadSceneRenderingLayer(positionSS); - uint renderingLayerColorIndex = clamp(log2(sceneRenderingLayer + 1), 0, 31); + uint renderingLayerColorIndex = clamp(log2(sceneRenderingLayer), 0, 31); - return _RenderingLayersColors[renderingLayerColorIndex]; + return sceneRenderingLayer == 0 ? 0 : _RenderingLayersColors[renderingLayerColorIndex]; } ENDHLSL } From 1a88b7babbacab83df3c8bd07d4ec11e0af90ba9 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 4 Jan 2022 15:56:21 +0200 Subject: [PATCH 08/38] Fixing light layers to work correctly then they are disabled with rendering layers --- .../Runtime/DeferredLights.cs | 4 +++- .../Runtime/UniversalRenderer.cs | 15 +++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs index 59ad1ad8ad3..7c2f3da4f1a 100644 --- a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs +++ b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs @@ -161,10 +161,12 @@ internal GraphicsFormat GetGBufferFormat(int index) // This may return different values depending on what lights are rendered for a given frame. internal bool UseShadowMask { get { return this.MixedLightingSetup != MixedLightingSetup.None; } } // - internal bool UseRenderingLayers { get { return UniversalRenderPipeline.asset.supportsLightLayers || UseDecalLayers; } } + internal bool UseRenderingLayers { get { return UseLightLayers || (UseDecalLayers && !HasNormalPrepass); } } // internal bool UseDecalLayers { get; set; } // + internal bool UseLightLayers { get { return UniversalRenderPipeline.asset.supportsLightLayers; } } + // internal bool UseRenderPass { get; set; } // internal bool HasDepthPrepass { get; set; } diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 0464bda932b..958f5038411 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -410,11 +410,17 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re bool renderingLayerProvidesRenderObjectPass = renderPassInputs.requiresRenderingLayer && !renderPassInputs.requiresNormalsTexture && m_RenderingMode == RenderingMode.Forward; + bool renderingLayerProvidesGBufferPass = renderPassInputs.requiresRenderingLayer && + !renderPassInputs.requiresNormalsTexture && m_RenderingMode == RenderingMode.Deferred; + // TODO: investigate the order of call, had to change because of requiresRenderingLayer if (m_DeferredLights != null) { m_DeferredLights.UseDecalLayers = renderPassInputs.requiresRenderingLayer; + // TODO: This needs to be setup early, otherwise gbuffer attachments will be allocated with wrong size + m_DeferredLights.HasNormalPrepass = renderPassInputs.requiresNormalsTexture; + m_DeferredLights.ResolveMixedLightingMode(ref renderingData); m_DeferredLights.IsOverlay = cameraData.renderType == CameraRenderType.Overlay; } @@ -648,8 +654,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re ref var renderingLayersTexture = ref m_DecalLayersTexture; string renderingLayersTextureName = "_CameraDecalLayersTexture"; - - if (this.actualRenderingMode == RenderingMode.Deferred) + if (this.actualRenderingMode == RenderingMode.Deferred && m_DeferredLights.UseRenderingLayers) { renderingLayersTexture = ref m_DeferredLights.GbufferAttachments[(int)m_DeferredLights.GBufferRenderingLayers]; renderingLayersTextureName = renderingLayersTexture.name; @@ -663,7 +668,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // Find compatible render-target format for storing normals. // Shader code outputs normals in signed format to be compatible with deferred gbuffer layout. // Deferred gbuffer format is signed so that normals can be blended for terrain geometry. - if (this.actualRenderingMode == RenderingMode.Deferred) + if (this.actualRenderingMode == RenderingMode.Deferred && m_DeferredLights.UseRenderingLayers) renderingLayersDescriptor.graphicsFormat = m_DeferredLights.GetGBufferFormat(m_DeferredLights.GBufferRenderingLayers); // the one used by the gbuffer. else renderingLayersDescriptor.graphicsFormat = GraphicsFormat.R16_UNorm; @@ -721,8 +726,10 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // to get them before the SSAO pass. int gbufferNormalIndex = m_DeferredLights.GBufferNormalSmoothnessIndex; - if (renderingLayerProvidesByDepthNormalPass) + if (m_DeferredLights.UseRenderingLayers) m_DepthNormalPrepass.Setup(m_ActiveCameraDepthAttachment, m_DeferredLights.GbufferAttachments[gbufferNormalIndex], m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers]); + else if (renderingLayerProvidesByDepthNormalPass) + m_DepthNormalPrepass.Setup(m_ActiveCameraDepthAttachment, m_DeferredLights.GbufferAttachments[gbufferNormalIndex], m_DecalLayersTexture); else m_DepthNormalPrepass.Setup(m_ActiveCameraDepthAttachment, m_DeferredLights.GbufferAttachments[gbufferNormalIndex]); From e4caba56bdb37d2262fc38ebf6e2989064d401c8 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 7 Feb 2022 14:52:34 +0200 Subject: [PATCH 09/38] Adding decal layers UI into urp global settings --- ...lRenderPipelineGlobalSettingsUI.Drawers.cs | 49 ++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/com.unity.render-pipelines.universal/Editor/GlobalSettings/UniversalRenderPipelineGlobalSettingsUI.Drawers.cs b/com.unity.render-pipelines.universal/Editor/GlobalSettings/UniversalRenderPipelineGlobalSettingsUI.Drawers.cs index b608f7c84d3..2feec241b56 100644 --- a/com.unity.render-pipelines.universal/Editor/GlobalSettings/UniversalRenderPipelineGlobalSettingsUI.Drawers.cs +++ b/com.unity.render-pipelines.universal/Editor/GlobalSettings/UniversalRenderPipelineGlobalSettingsUI.Drawers.cs @@ -12,7 +12,7 @@ public class DocumentationUrls public static readonly string k_LightLayers = "Light-Layers"; } - #region Rendering Layer Names + #region Light Layer Names static readonly CED.IDrawer LightLayerNamesSection = CED.Group( CED.Group((serialized, owner) => CoreEditorUtils.DrawSectionHeader(Styles.lightLayersLabel, contextAction: pos => OnContextClickLightLayerNames(pos, serialized))), @@ -58,6 +58,52 @@ static void OnContextClickLightLayerNames(Vector2 position, SerializedUniversalR #endregion + #region Decal Layer Names + + static readonly CED.IDrawer DecalLayerNamesSection = CED.Group( + CED.Group((serialized, owner) => CoreEditorUtils.DrawSectionHeader(Styles.decalLayersLabel, contextAction: pos => OnContextClickDecalLayerNames(pos, serialized))), + CED.Group((serialized, owner) => EditorGUILayout.Space()), + CED.Group(DrawDecalLayerNames), + CED.Group((serialized, owner) => EditorGUILayout.Space()) + ); + + static void DrawDecalLayerNames(SerializedUniversalRenderPipelineGlobalSettings serialized, Editor owner) + { + using (new EditorGUI.IndentLevelScope()) + { + using (var changed = new EditorGUI.ChangeCheckScope()) + { + EditorGUILayout.DelayedTextField(serialized.decalLayerName0, Styles.decalLayerName0); + EditorGUILayout.DelayedTextField(serialized.decalLayerName1, Styles.decalLayerName1); + EditorGUILayout.DelayedTextField(serialized.decalLayerName2, Styles.decalLayerName2); + EditorGUILayout.DelayedTextField(serialized.decalLayerName3, Styles.decalLayerName3); + EditorGUILayout.DelayedTextField(serialized.decalLayerName4, Styles.decalLayerName4); + EditorGUILayout.DelayedTextField(serialized.decalLayerName5, Styles.decalLayerName5); + EditorGUILayout.DelayedTextField(serialized.decalLayerName6, Styles.decalLayerName6); + EditorGUILayout.DelayedTextField(serialized.decalLayerName7, Styles.decalLayerName7); + if (changed.changed) + { + serialized.serializedObject?.ApplyModifiedProperties(); + if (serialized.serializedObject?.targetObject is UniversalRenderPipelineGlobalSettings urpGlobalSettings) + urpGlobalSettings.UpdateRenderingLayerNames(); + } + } + } + } + + static void OnContextClickDecalLayerNames(Vector2 position, SerializedUniversalRenderPipelineGlobalSettings serialized) + { + var menu = new GenericMenu(); + menu.AddItem(CoreEditorStyles.resetButtonLabel, false, () => + { + var globalSettings = (serialized.serializedObject.targetObject as UniversalRenderPipelineGlobalSettings); + globalSettings.ResetRenderingLayerNames(); + }); + menu.DropDown(new Rect(position, Vector2.zero)); + } + + #endregion + #region Misc Settings static readonly CED.IDrawer MiscSection = CED.Group( @@ -81,6 +127,7 @@ static void DrawMiscSettings(SerializedUniversalRenderPipelineGlobalSettings ser public static readonly CED.IDrawer Inspector = CED.Group( LightLayerNamesSection, + DecalLayerNamesSection, MiscSection ); } From 3584d7b9c485e35b153aa02b18e9909e9cae82a8 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 7 Feb 2022 14:54:53 +0200 Subject: [PATCH 10/38] Refactoring naming from decal layers to write rendering layers for consistency --- .../Runtime/DeferredLights.cs | 2 +- .../Runtime/Passes/DepthNormalOnlyPass.cs | 2 +- .../Runtime/Passes/DrawObjectsPass.cs | 3 +- .../Runtime/Passes/GBufferPass.cs | 3 + .../RendererFeatures/DecalRendererFeature.cs | 1 + .../Runtime/UniversalRenderPipelineCore.cs | 2 + .../Runtime/UniversalRenderer.cs | 92 +++++++++++++++++++ .../ShaderLibrary/UnityGBuffer.hlsl | 18 ++-- .../Shaders/BakedLit.shader | 8 +- .../Shaders/BakedLitDepthNormalsPass.hlsl | 8 +- .../Shaders/ComplexLit.shader | 4 +- .../Shaders/DepthNormalsPass.hlsl | 8 +- .../Shaders/Lit.shader | 11 +-- .../Shaders/LitDepthNormalsPass.hlsl | 8 +- .../Shaders/LitForwardPass.hlsl | 8 +- .../Shaders/Nature/SpeedTree7.shader | 2 +- .../Shaders/Nature/SpeedTree8.shader | 2 +- .../Shaders/SimpleLit.shader | 8 +- .../Shaders/SimpleLitDepthNormalsPass.hlsl | 8 +- .../Shaders/Terrain/TerrainLit.shader | 2 +- .../Shaders/Terrain/TerrainLitAdd.shader | 2 +- .../Shaders/Terrain/TerrainLitBase.shader | 2 +- .../Shaders/Unlit.shader | 4 +- .../Shaders/UnlitDepthNormalsPass.hlsl | 8 +- 24 files changed, 155 insertions(+), 61 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs index 7c2f3da4f1a..53ee4152afd 100644 --- a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs +++ b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs @@ -308,7 +308,7 @@ internal void SetupLights(ScriptableRenderContext context, ref RenderingData ren CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.MixedLightingSubtractive, isSubtractive); // Backward compatibility // This should be moved to a more global scope when framebuffer fetch is introduced to more passes CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.RenderPassEnabled, this.UseRenderPass && renderingData.cameraData.cameraType == CameraType.Game); - CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.LightLayers, UseRenderingLayers); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.LightLayers, UseLightLayers); } context.ExecuteCommandBuffer(cmd); diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs index ad7f0636ccf..6e94f812b22 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs @@ -99,7 +99,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData context.ExecuteCommandBuffer(cmd); cmd.Clear(); - CoreUtils.SetKeyword(cmd, "_DECAL_LAYERS", this.enableRenderingLayers); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.WriteRenderingLayers, this.enableRenderingLayers); context.ExecuteCommandBuffer(cmd); cmd.Clear(); diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs index c5bda7cdbc5..7e3e99c2f47 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs @@ -122,7 +122,8 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData : new Vector4(flipSign, 0.0f, 1.0f, 1.0f); cmd.SetGlobalVector(ShaderPropertyId.scaleBiasRt, scaleBias); - CoreUtils.SetKeyword(cmd, "_DECAL_LAYERS", this.m_ColorTargetIndentifiers != null); + // TODO: Move from this pass + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.WriteRenderingLayers, this.m_ColorTargetIndentifiers != null); context.ExecuteCommandBuffer(cmd); cmd.Clear(); diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs index ad9855f5383..f26cc1fa5b1 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs @@ -120,6 +120,9 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData CommandBuffer gbufferCommands = CommandBufferPool.Get(); using (new ProfilingScope(gbufferCommands, m_ProfilingSampler)) { + // TODO: Move from this pass + CoreUtils.SetKeyword(gbufferCommands, ShaderKeywordStrings.WriteRenderingLayers, m_DeferredLights.UseRenderingLayers); + context.ExecuteCommandBuffer(gbufferCommands); gbufferCommands.Clear(); diff --git a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index e4582f38ddd..a67a0981813 100644 --- a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -203,6 +203,7 @@ internal class DecalRendererFeature : ScriptableRendererFeature private DeferredLights m_DeferredLights; internal bool intermediateRendering => m_Technique == DecalTechnique.DBuffer; + internal bool requiresDecalLayers => m_Settings.decalLayers; public override void Create() { diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs index c7568d3596d..560af1f49c8 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs @@ -387,6 +387,8 @@ public static class ShaderKeywordStrings public static readonly string DecalNormalBlendHigh = "_DECAL_NORMAL_BLEND_HIGH"; public static readonly string DecalLayers = "_DECAL_LAYERS"; + public static readonly string WriteRenderingLayers = "_WRITE_RENDERING_LAYERS"; + public static readonly string SmaaLow = "_SMAA_PRESET_LOW"; public static readonly string SmaaMedium = "_SMAA_PRESET_MEDIUM"; public static readonly string SmaaHigh = "_SMAA_PRESET_HIGH"; diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 958f5038411..b665c49fbda 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -4,6 +4,90 @@ namespace UnityEngine.Rendering.Universal { + internal static class RenderingLayers + { + public enum Event + { + DepthNormalPrePass, + ForwardOpaque, + GBuffer, + None, + } + + public static Event GetEvent(UniversalRendererData universalRendererData) + { + var e = Event.None; + var requiresRenderingLayers = false; + + bool isDeferred = universalRendererData.renderingMode == RenderingMode.Deferred; + + foreach (var rendererFeature in universalRendererData.rendererFeatures) + { + var decalRendereFeature = rendererFeature as DecalRendererFeature; + if (decalRendereFeature != null && decalRendereFeature.isActive) + { + var technique = decalRendereFeature.GetTechnique(universalRendererData); + if (technique == DecalTechnique.DBuffer) + e = CombineEvents(e, Event.DepthNormalPrePass); + else + e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); + + requiresRenderingLayers |= decalRendereFeature.requiresDecalLayers; + } + + var ssaoRendererFeature = rendererFeature as ScreenSpaceAmbientOcclusion; + if (ssaoRendererFeature != null && ssaoRendererFeature.isActive) + { + if (!!isDeferred && !ssaoRendererFeature.afterOpaque) + e = CombineEvents(e, Event.DepthNormalPrePass); + else + e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); + } + } + + return requiresRenderingLayers ? e : Event.None; + } + + public static Event GetEvent(UniversalRenderer universalRenderer, List rendererFeatures) + { + var e = Event.None; + var requiresRenderingLayers = false; + + bool isDeferred = universalRenderer.renderingMode == RenderingMode.Deferred; + + foreach (var rendererFeature in rendererFeatures) + { + var decalRendereFeature = rendererFeature as DecalRendererFeature; + if (decalRendereFeature != null && decalRendereFeature.isActive) + { + var technique = decalRendereFeature.GetTechnique(universalRenderer); + if (technique == DecalTechnique.DBuffer) + e = CombineEvents(e, Event.DepthNormalPrePass); + else + e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); + + requiresRenderingLayers |= decalRendereFeature.requiresDecalLayers; + } + + /*var ssaoRendererFeature = rendererFeature as ScreenSpaceAmbientOcclusion; + if (ssaoRendererFeature != null && ssaoRendererFeature.isActive) + { + if (!isDeferred && !ssaoRendererFeature.afterOpaque) + e = CombineEvents(e, Event.DepthNormalPrePass); + else + e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); + }*/ + } + + return requiresRenderingLayers ? e : Event.None; + } + + static Event CombineEvents(Event a, Event b) + { + return (Event)Mathf.Min((int)a, (int)b); + } + } + /// /// Rendering modes for Universal renderer. /// @@ -127,6 +211,8 @@ private static class Profiling internal RTHandle colorGradingLut { get => m_PostProcessPasses.colorGradingLut; } internal DeferredLights deferredLights { get => m_DeferredLights; } + RenderingLayers.Event m_RenderingLayersEvent; + public UniversalRenderer(UniversalRendererData data) : base(data) { #if ENABLE_VR && ENABLE_XR_MODULE @@ -413,6 +499,12 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re bool renderingLayerProvidesGBufferPass = renderPassInputs.requiresRenderingLayer && !renderPassInputs.requiresNormalsTexture && m_RenderingMode == RenderingMode.Deferred; + m_RenderingLayersEvent = RenderingLayers.GetEvent(this, rendererFeatures); + + renderingLayerProvidesByDepthNormalPass = m_RenderingLayersEvent == RenderingLayers.Event.DepthNormalPrePass; + renderingLayerProvidesRenderObjectPass = m_RenderingLayersEvent == RenderingLayers.Event.ForwardOpaque; + renderingLayerProvidesGBufferPass = m_RenderingLayersEvent == RenderingLayers.Event.GBuffer; + // TODO: investigate the order of call, had to change because of requiresRenderingLayer if (m_DeferredLights != null) { diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl index ebb55237348..b742e900b8f 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl @@ -19,7 +19,7 @@ #if _RENDER_PASS_ENABLED #define GBUFFER_OPTIONAL_SLOT_1 GBuffer4 #define GBUFFER_OPTIONAL_SLOT_1_TYPE float -#if OUTPUT_SHADOWMASK && defined(_LIGHT_LAYERS) +#if OUTPUT_SHADOWMASK && (defined(_WRITE_RENDERING_LAYERS) || defined(_LIGHT_LAYERS)) #define GBUFFER_OPTIONAL_SLOT_2 GBuffer5 #define GBUFFER_OPTIONAL_SLOT_3 GBuffer6 #define GBUFFER_LIGHT_LAYERS GBuffer5 @@ -27,13 +27,13 @@ #elif OUTPUT_SHADOWMASK #define GBUFFER_OPTIONAL_SLOT_2 GBuffer5 #define GBUFFER_SHADOWMASK GBuffer5 -#elif defined(_LIGHT_LAYERS) +#elif (defined(_WRITE_RENDERING_LAYERS) || defined(_LIGHT_LAYERS)) #define GBUFFER_OPTIONAL_SLOT_2 GBuffer5 #define GBUFFER_LIGHT_LAYERS GBuffer5 -#endif //#if OUTPUT_SHADOWMASK && defined(_LIGHT_LAYERS) +#endif //#if OUTPUT_SHADOWMASK && defined(_WRITE_RENDERING_LAYERS) #else #define GBUFFER_OPTIONAL_SLOT_1_TYPE half4 -#if OUTPUT_SHADOWMASK && defined(_LIGHT_LAYERS) +#if OUTPUT_SHADOWMASK && (defined(_WRITE_RENDERING_LAYERS) || defined(_LIGHT_LAYERS)) #define GBUFFER_OPTIONAL_SLOT_1 GBuffer4 #define GBUFFER_OPTIONAL_SLOT_2 GBuffer5 #define GBUFFER_LIGHT_LAYERS GBuffer4 @@ -41,10 +41,10 @@ #elif OUTPUT_SHADOWMASK #define GBUFFER_OPTIONAL_SLOT_1 GBuffer4 #define GBUFFER_SHADOWMASK GBuffer4 -#elif defined(_LIGHT_LAYERS) +#elif (defined(_WRITE_RENDERING_LAYERS) || defined(_LIGHT_LAYERS)) #define GBUFFER_OPTIONAL_SLOT_1 GBuffer4 #define GBUFFER_LIGHT_LAYERS GBuffer4 -#endif //#if OUTPUT_SHADOWMASK && defined(_LIGHT_LAYERS) +#endif //#if OUTPUT_SHADOWMASK && defined(_WRITE_RENDERING_LAYERS) #endif //#if _RENDER_PASS_ENABLED #define kLightingInvalid -1 // No dynamic lighting: can aliase any other material type as they are skipped using stencil #define kLightingLit 1 // lit shader @@ -141,9 +141,8 @@ FragmentOutput SurfaceDataToGbuffer(SurfaceData surfaceData, InputData inputData #if OUTPUT_SHADOWMASK output.GBUFFER_SHADOWMASK = inputData.shadowMask; // will have unity_ProbesOcclusion value if subtractive lighting is used (baked) #endif - #ifdef _LIGHT_LAYERS + #ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); - // Note: we need to mask out only 8bits of the layer mask before encoding it as otherwise any value > 255 will map to all layers active output.GBUFFER_LIGHT_LAYERS = float4(EncodeMeshRenderingLayer(renderingLayers), 0.0, 0.0, 0.0); #endif @@ -215,9 +214,8 @@ FragmentOutput BRDFDataToGbuffer(BRDFData brdfData, InputData inputData, half sm #if OUTPUT_SHADOWMASK output.GBUFFER_SHADOWMASK = inputData.shadowMask; // will have unity_ProbesOcclusion value if subtractive lighting is used (baked) #endif - #ifdef _LIGHT_LAYERS + #ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); - // Note: we need to mask out only 8bits of the layer mask before encoding it as otherwise any value > 255 will map to all layers active output.GBUFFER_LIGHT_LAYERS = float4(EncodeMeshRenderingLayer(renderingLayers), 0.0, 0.0, 0.0); #endif diff --git a/com.unity.render-pipelines.universal/Shaders/BakedLit.shader b/com.unity.render-pipelines.universal/Shaders/BakedLit.shader index 8ecedbf07ee..420908010e2 100644 --- a/com.unity.render-pipelines.universal/Shaders/BakedLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/BakedLit.shader @@ -129,9 +129,9 @@ Shader "Universal Render Pipeline/Baked Lit" #pragma shader_feature_local_fragment _ALPHATEST_ON // ------------------------------------- - // Unity defined keywords + // Universal Pipeline keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant - #pragma multi_compile _ _DECAL_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS //-------------------------------------- // GPU Instancing @@ -165,9 +165,9 @@ Shader "Universal Render Pipeline/Baked Lit" #pragma shader_feature_local_fragment _ALPHATEST_ON // ------------------------------------- - // Unity defined keywords + // Universal Pipeline keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant - #pragma multi_compile _ _DECAL_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS //-------------------------------------- // Defines diff --git a/com.unity.render-pipelines.universal/Shaders/BakedLitDepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/BakedLitDepthNormalsPass.hlsl index 7e00dbd5250..e36a68f678f 100644 --- a/com.unity.render-pipelines.universal/Shaders/BakedLitDepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/BakedLitDepthNormalsPass.hlsl @@ -53,8 +53,8 @@ Varyings DepthNormalsVertex(Attributes input) void DepthNormalsFragment( Varyings input , out half4 outNormalWS : SV_Target0 -#ifdef _DECAL_LAYERS - , out float4 outDecalLayer : SV_Target1 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 #endif ) { @@ -84,9 +84,9 @@ void DepthNormalsFragment( outNormalWS = half4(NormalizeNormalPerPixel(normalWS), 0.0); #endif - #ifdef _DECAL_LAYERS + #ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); - outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } diff --git a/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader b/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader index b6fbe656fd1..527969b8080 100644 --- a/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/ComplexLit.shader @@ -244,9 +244,9 @@ Shader "Universal Render Pipeline/Complex Lit" #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A // ------------------------------------- - // Unity defined keywords + // Universal Pipeline keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant - #pragma multi_compile _ _DECAL_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS //-------------------------------------- // GPU Instancing diff --git a/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl index 97389075d96..ac3fe684561 100644 --- a/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/DepthNormalsPass.hlsl @@ -41,8 +41,8 @@ Varyings DepthNormalsVertex(Attributes input) void DepthNormalsFragment( Varyings input , out half4 outNormalWS : SV_Target0 -#ifdef _DECAL_LAYERS - , out float4 outDecalLayer : SV_Target1 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 #endif ) { @@ -61,9 +61,9 @@ void DepthNormalsFragment( outNormalWS = half4(normalWS, 0.0); #endif - #ifdef _DECAL_LAYERS + #ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); - outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } #endif diff --git a/com.unity.render-pipelines.universal/Shaders/Lit.shader b/com.unity.render-pipelines.universal/Shaders/Lit.shader index 1e0fe5b49f4..00cacd15e87 100644 --- a/com.unity.render-pipelines.universal/Shaders/Lit.shader +++ b/com.unity.render-pipelines.universal/Shaders/Lit.shader @@ -127,8 +127,7 @@ Shader "Universal Render Pipeline/Lit" #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile _ _CLUSTERED_RENDERING - - #pragma multi_compile _ _DECAL_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS // ------------------------------------- // Unity defined keywords @@ -233,11 +232,9 @@ Shader "Universal Render Pipeline/Lit" #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 - #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED - #pragma multi_compile _ _DECAL_LAYERS - // ------------------------------------- // Unity defined keywords #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING @@ -318,8 +315,8 @@ Shader "Universal Render Pipeline/Lit" #pragma shader_feature_local_fragment _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A // ------------------------------------- - // Unity defined keywords - #pragma multi_compile _ _DECAL_LAYERS + // Universal Pipeline keywords + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS //-------------------------------------- // GPU Instancing diff --git a/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl index ed2236a4fbf..30dd4650485 100644 --- a/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/LitDepthNormalsPass.hlsl @@ -80,8 +80,8 @@ Varyings DepthNormalsVertex(Attributes input) void DepthNormalsFragment( Varyings input , out half4 outNormalWS : SV_Target0 -#ifdef _DECAL_LAYERS - , out float4 outDecalLayer : SV_Target1 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 #endif ) { @@ -125,9 +125,9 @@ void DepthNormalsFragment( outNormalWS = half4(NormalizeNormalPerPixel(normalWS), 0.0); #endif - #ifdef _DECAL_LAYERS + #ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); - outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } diff --git a/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl b/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl index e8eda5410a1..ce64a933f56 100644 --- a/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/LitForwardPass.hlsl @@ -196,8 +196,8 @@ Varyings LitPassVertex(Attributes input) void LitPassFragment( Varyings input , out half4 outColor : SV_Target0 -#ifdef _DECAL_LAYERS - , out float4 outDecalLayer : SV_Target1 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 #endif ) { @@ -231,9 +231,9 @@ void LitPassFragment( outColor = color; -#ifdef _DECAL_LAYERS +#ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); - outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } diff --git a/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree7.shader b/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree7.shader index a3a9e0164fc..08f47dcae0b 100644 --- a/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree7.shader +++ b/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree7.shader @@ -143,7 +143,7 @@ Shader "Universal Render Pipeline/Nature/SpeedTree7" #pragma multi_compile _ LOD_FADE_CROSSFADE #pragma multi_compile_vertex LOD_FADE_PERCENTAGE #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT - #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED #pragma multi_compile_instancing diff --git a/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader b/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader index 3e768e0b56b..42b5984073e 100644 --- a/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader +++ b/com.unity.render-pipelines.universal/Shaders/Nature/SpeedTree8.shader @@ -133,7 +133,7 @@ Shader "Universal Render Pipeline/Nature/SpeedTree8" #pragma multi_compile _ LOD_FADE_CROSSFADE #pragma multi_compile_vertex LOD_FADE_PERCENTAGE #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT - #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED #pragma multi_compile_instancing diff --git a/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader b/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader index 79ad182153b..fa45bb50222 100644 --- a/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader @@ -184,7 +184,7 @@ Shader "Universal Render Pipeline/Simple Lit" //#pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 - #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS // ------------------------------------- // Unity defined keywords @@ -265,8 +265,8 @@ Shader "Universal Render Pipeline/Simple Lit" #pragma shader_feature_local_fragment _GLOSSINESS_FROM_BASE_ALPHA // ------------------------------------- - // Unity defined keywords - #pragma multi_compile _ _DECAL_LAYERS + // Universal Pipeline keywords + #pragma multi_compile_fargment _ _WRITE_RENDERING_LAYERS //-------------------------------------- // GPU Instancing @@ -363,7 +363,7 @@ Shader "Universal Render Pipeline/Simple Lit" #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION - #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile _ _CLUSTERED_RENDERING diff --git a/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl index adfbe78cf16..bc0ceb542d7 100644 --- a/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/SimpleLitDepthNormalsPass.hlsl @@ -58,8 +58,8 @@ Varyings DepthNormalsVertex(Attributes input) void DepthNormalsFragment( Varyings input , out half4 outNormalWS : SV_Target0 -#ifdef _DECAL_LAYERS - , out float4 outDecalLayer : SV_Target1 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 #endif ) { @@ -87,9 +87,9 @@ void DepthNormalsFragment( outNormalWS = half4(normalWS, 0.0); #endif - #ifdef _DECAL_LAYERS + #ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); - outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } diff --git a/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLit.shader b/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLit.shader index 13186d2dac3..07d3215eb7d 100644 --- a/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLit.shader @@ -150,7 +150,7 @@ Shader "Universal Render Pipeline/Terrain/Lit" #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 - #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS // ------------------------------------- // Unity defined keywords diff --git a/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitAdd.shader b/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitAdd.shader index c37b0a4fee4..7944f1afc19 100644 --- a/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitAdd.shader +++ b/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitAdd.shader @@ -113,7 +113,7 @@ Shader "Hidden/Universal Render Pipeline/Terrain/Lit (Add Pass)" #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE - #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS // ------------------------------------- // Unity defined keywords diff --git a/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitBase.shader b/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitBase.shader index 36a42ebc5df..bd7f18a1f11 100644 --- a/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitBase.shader +++ b/com.unity.render-pipelines.universal/Shaders/Terrain/TerrainLitBase.shader @@ -119,7 +119,7 @@ Shader "Hidden/Universal Render Pipeline/Terrain/Lit (Base Pass)" #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING #pragma multi_compile_fragment _ _SHADOWS_SOFT #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE - #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS // ------------------------------------- // Unity defined keywords diff --git a/com.unity.render-pipelines.universal/Shaders/Unlit.shader b/com.unity.render-pipelines.universal/Shaders/Unlit.shader index 69008cfb222..de53ca75398 100644 --- a/com.unity.render-pipelines.universal/Shaders/Unlit.shader +++ b/com.unity.render-pipelines.universal/Shaders/Unlit.shader @@ -113,9 +113,9 @@ Shader "Universal Render Pipeline/Unlit" #pragma shader_feature_local_fragment _ALPHATEST_ON // ------------------------------------- - // Unity defined keywords + // Universal Pipeline keywords #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant - #pragma multi_compile _ _DECAL_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS //-------------------------------------- // GPU Instancing diff --git a/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl b/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl index e4978776c8d..e5d48244f21 100644 --- a/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl @@ -37,8 +37,8 @@ Varyings DepthNormalsVertex(Attributes input) void DepthNormalsFragment( Varyings input , out half4 outNormalWS : SV_Target0 -#ifdef _DECAL_LAYERS - , out float4 outDecalLayer : SV_Target1 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 #endif ) { @@ -55,9 +55,9 @@ void DepthNormalsFragment( outNormalWS = half4(NormalizeNormalPerPixel(input.normalWS), 0.0); #endif - #ifdef _DECAL_LAYERS + #ifdef _WRITE_RENDERING_LAYERS uint renderingLayers = GetMeshRenderingLayer(); - outDecalLayer = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } From 7dba03418f5a5ff2d9fb7480bd16d88736726ed7 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 7 Feb 2022 15:05:15 +0200 Subject: [PATCH 11/38] Renaming _CameraDecalLayersTexture to _CameraRenderingLayersTexture --- .../Runtime/Passes/DepthNormalOnlyPass.cs | 2 +- .../Runtime/Passes/GBufferPass.cs | 2 +- .../Runtime/UniversalRenderer.cs | 2 +- .../ShaderLibrary/DeclareRenderingLayerTexture.hlsl | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs index 6e94f812b22..565bef3ce9b 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs @@ -115,7 +115,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData // todo check if add normal here too if (this.enableRenderingLayers) - cmd.SetGlobalTexture("_CameraDecalLayersTexture", renderingLayersHandle); + cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersHandle); } context.ExecuteCommandBuffer(cmd); diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs index f26cc1fa5b1..b1a00fdfab3 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs @@ -158,7 +158,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData if (!m_DeferredLights.UseRenderPass) gbufferCommands.SetGlobalTexture(s_CameraNormalsTextureID, m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferNormalSmoothnessIndex]); if (!m_DeferredLights.UseRenderPass && m_DeferredLights.UseRenderingLayers) - gbufferCommands.SetGlobalTexture("_CameraDecalLayersTexture", m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers]); + gbufferCommands.SetGlobalTexture("_CameraRenderingLayersTexture", m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers]); } context.ExecuteCommandBuffer(gbufferCommands); diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index b665c49fbda..73593aa5ade 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -744,7 +744,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re if (renderPassInputs.requiresRenderingLayer) { ref var renderingLayersTexture = ref m_DecalLayersTexture; - string renderingLayersTextureName = "_CameraDecalLayersTexture"; + string renderingLayersTextureName = "_CameraRenderingLayersTexture"; if (this.actualRenderingMode == RenderingMode.Deferred && m_DeferredLights.UseRenderingLayers) { diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl index bf84a38ce9f..325a2b404a9 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/DeclareRenderingLayerTexture.hlsl @@ -2,21 +2,21 @@ #define UNITY_DECLARE_RENDERING_LAYER_TEXTURE_INCLUDED #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" -TEXTURE2D_X_FLOAT(_CameraDecalLayersTexture); -SAMPLER(sampler_CameraDecalLayersTexture); +TEXTURE2D_X_FLOAT(_CameraRenderingLayersTexture); +SAMPLER(sampler_CameraRenderingLayersTexture); SamplerState my_point_clamp_sampler; float SampleSceneRenderingLayer(float2 uv) { - return SAMPLE_TEXTURE2D_X(_CameraDecalLayersTexture, sampler_CameraDecalLayersTexture, UnityStereoTransformScreenSpaceTex(uv)).r; + return SAMPLE_TEXTURE2D_X(_CameraRenderingLayersTexture, sampler_CameraRenderingLayersTexture, UnityStereoTransformScreenSpaceTex(uv)).r; } uint LoadSceneRenderingLayer(uint2 uv) { // TODO: Investigate faster solution instead of packing //uv.y = _ScreenSize.y - uv.y; - float encodedValue = LOAD_TEXTURE2D_X(_CameraDecalLayersTexture, uv).r; + float encodedValue = LOAD_TEXTURE2D_X(_CameraRenderingLayersTexture, uv).r; //return uint(encodedValue * 65025.5); return UnpackInt(encodedValue, 16);// TODO: Expose as property the bits value } From cd713d395da34fa45ff0dda8361682205cda9e55 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 7 Feb 2022 15:23:34 +0200 Subject: [PATCH 12/38] Moving rendering layer texture setting to universal renderer instead of passes --- .../Runtime/DeferredLights.cs | 2 +- .../Runtime/Passes/DepthNormalOnlyPass.cs | 4 ++-- .../Runtime/Passes/GBufferPass.cs | 8 ++++---- .../Runtime/UniversalRenderer.cs | 2 ++ 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs index 53ee4152afd..c7c140f3ebf 100644 --- a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs +++ b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs @@ -161,7 +161,7 @@ internal GraphicsFormat GetGBufferFormat(int index) // This may return different values depending on what lights are rendered for a given frame. internal bool UseShadowMask { get { return this.MixedLightingSetup != MixedLightingSetup.None; } } // - internal bool UseRenderingLayers { get { return UseLightLayers || (UseDecalLayers && !HasNormalPrepass); } } + internal bool UseRenderingLayers { get { return UseLightLayers || UseDecalLayers; } } // internal bool UseDecalLayers { get; set; } // diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs index 565bef3ce9b..9fbd16c12b5 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs @@ -114,8 +114,8 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref m_FilteringSettings); // todo check if add normal here too - if (this.enableRenderingLayers) - cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersHandle); + //if (this.enableRenderingLayers) + // cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersHandle); } context.ExecuteCommandBuffer(cmd); diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs index b1a00fdfab3..5b7784821d5 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs @@ -155,10 +155,10 @@ 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) - gbufferCommands.SetGlobalTexture(s_CameraNormalsTextureID, m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferNormalSmoothnessIndex]); - if (!m_DeferredLights.UseRenderPass && m_DeferredLights.UseRenderingLayers) - gbufferCommands.SetGlobalTexture("_CameraRenderingLayersTexture", m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers]); + //if (!m_DeferredLights.UseRenderPass) + // gbufferCommands.SetGlobalTexture(s_CameraNormalsTextureID, m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferNormalSmoothnessIndex]); + //if (!m_DeferredLights.UseRenderPass && m_DeferredLights.UseRenderingLayers) + // gbufferCommands.SetGlobalTexture("_CameraRenderingLayersTexture", m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers]); } context.ExecuteCommandBuffer(gbufferCommands); diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 73593aa5ade..5a288fbb5d9 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -769,6 +769,8 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re CommandBuffer cmd = CommandBufferPool.Get(); cmd.SetGlobalTexture(renderingLayersTexture.name, renderingLayersTexture.nameID); + if (this.actualRenderingMode == RenderingMode.Deferred) // TODO: Clean this up + cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersTexture.nameID); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); } From 6aac67da52540bbc78f4130098ffe1b94a053e67 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 7 Feb 2022 17:05:02 +0200 Subject: [PATCH 13/38] Adding decode mesh rendering layer --- .../Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl | 2 +- .../ShaderLibrary/RealtimeLights.hlsl | 6 ++++++ .../Shaders/Utils/StencilDeferred.shader | 4 +--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl index affb1d8b0bb..869d9285c21 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl @@ -185,7 +185,7 @@ void Frag(PackedVaryings packedInput, #ifdef _DECAL_LAYERS #ifdef _RENDER_PASS_ENABLED - uint meshRenderingLayers = UnpackInt(LOAD_FRAMEBUFFER_INPUT(GBUFFER4, input.positionCS.xy), 16); // TODO: Add decode rendering layer function + uint meshRenderingLayers = DecodeMeshRenderingLayer(LOAD_FRAMEBUFFER_INPUT(GBUFFER4, input.positionCS.xy).r); #else uint meshRenderingLayers = LoadSceneRenderingLayer(input.positionCS.xy); #endif diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl index 32859d5cc38..7c0567db4e8 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl @@ -37,6 +37,12 @@ float EncodeMeshRenderingLayer(uint renderingLayer) return PackInt(renderingLayer, 16); } +uint DecodeMeshRenderingLayer(float renderingLayer) +{ + //return (renderingLayer & 0x0000FFFF) / (255.0 * 255.0); // todo expose as property + return UnpackInt(renderingLayer, 16); +} + // Abstraction over Light shading data. struct Light { diff --git a/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader b/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader index 2aa9dc0864f..f0354fea5d1 100644 --- a/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader +++ b/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader @@ -262,9 +262,7 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" #ifdef _LIGHT_LAYERS float4 renderingLayers = SAMPLE_TEXTURE2D_X_LOD(MERGE_NAME(_, GBUFFER_LIGHT_LAYERS), my_point_clamp_sampler, screen_uv, 0); - //uint meshRenderingLayers = uint(renderingLayers.r * 65535.2) & 0x000000FF; - uint meshRenderingLayers = UnpackInt(renderingLayers.r, 16); - + uint meshRenderingLayers = DecodeMeshRenderingLayer(renderingLayers.r); #else uint meshRenderingLayers = DEFAULT_LIGHT_LAYERS; #endif From dc5f8ac6705fc29b338b3cff9e6faa5822ce49db Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 7 Feb 2022 17:10:35 +0200 Subject: [PATCH 14/38] Adding ResetTarget to ScriptableRenderPass it is needed for decal layers changes --- .../Runtime/Passes/DrawObjectsPass.cs | 11 +++------ .../Runtime/Passes/ScriptableRenderPass.cs | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs index 7e3e99c2f47..8319ecc29c5 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs @@ -62,14 +62,9 @@ public void Setup(RTHandle[] colorAttachments, RTHandle depthAttachment) public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) { if (m_ColorTargetIndentifiers == null) - { - // Todo configure reset function here - ConfigureTarget(-1, -1); - overrideCameraTarget = false; - return; - } - ConfigureTarget(m_ColorTargetIndentifiers, m_DepthTargetIndentifiers); - //ConfigureClear(ClearFlag.None, Color.black); // todo? + ResetTarget(); + else + ConfigureTarget(m_ColorTargetIndentifiers, m_DepthTargetIndentifiers); } public DrawObjectsPass(string profilerTag, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference) diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs index 5f682bd4b61..1ad20bbd895 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs @@ -412,6 +412,30 @@ internal void ConfigureInputAttachments(RenderTargetIdentifier[] inputs) } } + /// + /// Resets render targets to default. + /// This method effectively reset changes done by ConfigureTarget. + /// + /// + public void ResetTarget() + { + overrideCameraTarget = false; + m_UsesRTHandles = true; + + // Reset depth + m_DepthAttachmentId = -1; + m_DepthAttachment = null; + + // Reset colors + m_ColorAttachments[0] = null; + m_ColorAttachmentIds[0] = -1; + for (int i = 1; i < m_ColorAttachments.Length; ++i) + { + m_ColorAttachments[i] = null; + m_ColorAttachmentIds[i] = 0; + } + } + /// /// Configures render targets for this render pass. Call this instead of CommandBuffer.SetRenderTarget. /// This method should be called inside Configure. From 8c52bc829f182e00bfaeb63fe57abc56cc5141cf Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 7 Feb 2022 17:11:21 +0200 Subject: [PATCH 15/38] Cleanup --- .../VFXGraph/Shaders/VFXPasses.template | 2 +- .../ScreenSpace/DecalScreenSpaceRenderPass.cs | 14 -- .../Runtime/Passes/DepthNormalOnlyPass.cs | 5 - .../Runtime/Passes/GBufferPass.cs | 5 - .../RendererFeatures/DecalRendererFeature.cs | 1 - .../Runtime/RenderingLayerUtils.cs | 72 +++++++++ .../Runtime/RenderingLayerUtils.cs.meta | 11 ++ .../Runtime/UniversalRenderer.cs | 145 +----------------- 8 files changed, 91 insertions(+), 164 deletions(-) create mode 100644 com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs create mode 100644 com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs.meta diff --git a/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template b/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template index ab6d76d401a..68f819bae48 100644 --- a/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template +++ b/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template @@ -44,7 +44,7 @@ ${VFXBegin:VFXPassGBufferAdditionalPragma} //#pragma multi_compile _ _ADDITIONAL_LIGHTS //#pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_fragment _ _SHADOWS_SOFT -#pragma multi_compile_fragment _ _LIGHT_LAYERS +#pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS ${VFXEnd} ${VFXBegin:VFXShaderGraphFunctionsInclude} diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs index 3672936e59c..211d22d13e6 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs @@ -17,7 +17,6 @@ internal class DecalScreenSpaceRenderPass : ScriptableRenderPass private DecalDrawScreenSpaceSystem m_DrawSystem; private DecalScreenSpaceSettings m_Settings; private bool m_DecalLayers; - //RenderTargetIdentifier m_ColorTargetIndentifiers; public DecalScreenSpaceRenderPass(DecalScreenSpaceSettings settings, DecalDrawScreenSpaceSystem drawSystem, bool decalLayers) { @@ -42,19 +41,6 @@ public DecalScreenSpaceRenderPass(DecalScreenSpaceSettings settings, DecalDrawSc m_ShaderTagIdList.Add(new ShaderTagId(DecalShaderPassNames.DecalScreenSpaceMesh)); } - /*public void Setup(RenderTargetIdentifier colorAttachments) - { - m_ColorTargetIndentifiers = colorAttachments; - } - - public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) - { - // todo - // here to break pass in case of decal layers - ConfigureTarget(m_ColorTargetIndentifiers); - ConfigureClear(ClearFlag.None, Color.black); - }*/ - public override void Execute(ScriptableRenderContext context, ref RenderingData renderingData) { SortingCriteria sortingCriteria = SortingCriteria.CommonTransparent; diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs index 9fbd16c12b5..1c270755c2d 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs @@ -112,11 +112,6 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData Camera camera = cameraData.camera; context.DrawRenderers(renderingData.cullResults, ref drawSettings, ref m_FilteringSettings); - - // todo check if add normal here too - //if (this.enableRenderingLayers) - // cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersHandle); - } context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs index 5b7784821d5..6f4c40153fb 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs @@ -88,10 +88,6 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera if (i == m_DeferredLights.GbufferDepthIndex && !allocateGbufferDepth) continue; - // todo - if (i == m_DeferredLights.GBufferRenderingLayers && m_DeferredLights.HasRenderingLayerPrepass) - continue; - // No need to setup temporaryRTs if we are using input attachments as they will be Memoryless if (m_DeferredLights.UseRenderPass && i != m_DeferredLights.GBufferShadowMask && i != m_DeferredLights.GBufferRenderingLayers && (i != m_DeferredLights.GbufferDepthIndex && !m_DeferredLights.HasDepthPrepass)) continue; @@ -120,7 +116,6 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData CommandBuffer gbufferCommands = CommandBufferPool.Get(); using (new ProfilingScope(gbufferCommands, m_ProfilingSampler)) { - // TODO: Move from this pass CoreUtils.SetKeyword(gbufferCommands, ShaderKeywordStrings.WriteRenderingLayers, m_DeferredLights.UseRenderingLayers); context.ExecuteCommandBuffer(gbufferCommands); diff --git a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index a67a0981813..7d9372572f2 100644 --- a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -457,7 +457,6 @@ public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingD switch (m_Technique) { case DecalTechnique.ScreenSpace: - //m_ScreenSpaceDecalRenderPass.Setup(renderer.cameraColorTarget); // todo throws warnining for depth renderer.EnqueuePass(m_ScreenSpaceDecalRenderPass); break; case DecalTechnique.GBuffer: diff --git a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs new file mode 100644 index 00000000000..b2881697461 --- /dev/null +++ b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs @@ -0,0 +1,72 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEngine.Rendering.Universal +{ + internal static class RenderingLayerUtils + { + public enum Event + { + DepthNormalPrePass, + ForwardOpaque, + GBuffer, + None, + } + + public static Event GetEvent(UniversalRendererData universalRendererData) + { + var e = Event.None; + var requiresRenderingLayers = false; + + bool isDeferred = universalRendererData.renderingMode == RenderingMode.Deferred; + + foreach (var rendererFeature in universalRendererData.rendererFeatures) + { + var decalRendereFeature = rendererFeature as DecalRendererFeature; + if (decalRendereFeature != null && decalRendereFeature.isActive) + { + var technique = decalRendereFeature.GetTechnique(universalRendererData); + if (technique == DecalTechnique.DBuffer) + e = CombineEvents(e, Event.DepthNormalPrePass); + else + e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); + + requiresRenderingLayers |= decalRendereFeature.requiresDecalLayers; + } + } + + return requiresRenderingLayers ? e : Event.None; + } + + public static Event GetEvent(UniversalRenderer universalRenderer, List rendererFeatures) + { + var e = Event.None; + var requiresRenderingLayers = false; + + bool isDeferred = universalRenderer.renderingMode == RenderingMode.Deferred; + + foreach (var rendererFeature in rendererFeatures) + { + var decalRendereFeature = rendererFeature as DecalRendererFeature; + if (decalRendereFeature != null && decalRendereFeature.isActive) + { + var technique = decalRendereFeature.GetTechnique(universalRenderer); + if (technique == DecalTechnique.DBuffer) + e = CombineEvents(e, Event.DepthNormalPrePass); + else + e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); + + requiresRenderingLayers |= decalRendereFeature.requiresDecalLayers; + } + } + + return requiresRenderingLayers ? e : Event.None; + } + + static Event CombineEvents(Event a, Event b) + { + return (Event)Mathf.Min((int)a, (int)b); + } + } +} diff --git a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs.meta b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs.meta new file mode 100644 index 00000000000..40fa02c1a47 --- /dev/null +++ b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9970fa110f6e0904eabc7780d79a96ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 5a288fbb5d9..767336cafe1 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -4,90 +4,6 @@ namespace UnityEngine.Rendering.Universal { - internal static class RenderingLayers - { - public enum Event - { - DepthNormalPrePass, - ForwardOpaque, - GBuffer, - None, - } - - public static Event GetEvent(UniversalRendererData universalRendererData) - { - var e = Event.None; - var requiresRenderingLayers = false; - - bool isDeferred = universalRendererData.renderingMode == RenderingMode.Deferred; - - foreach (var rendererFeature in universalRendererData.rendererFeatures) - { - var decalRendereFeature = rendererFeature as DecalRendererFeature; - if (decalRendereFeature != null && decalRendereFeature.isActive) - { - var technique = decalRendereFeature.GetTechnique(universalRendererData); - if (technique == DecalTechnique.DBuffer) - e = CombineEvents(e, Event.DepthNormalPrePass); - else - e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); - - requiresRenderingLayers |= decalRendereFeature.requiresDecalLayers; - } - - var ssaoRendererFeature = rendererFeature as ScreenSpaceAmbientOcclusion; - if (ssaoRendererFeature != null && ssaoRendererFeature.isActive) - { - if (!!isDeferred && !ssaoRendererFeature.afterOpaque) - e = CombineEvents(e, Event.DepthNormalPrePass); - else - e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); - } - } - - return requiresRenderingLayers ? e : Event.None; - } - - public static Event GetEvent(UniversalRenderer universalRenderer, List rendererFeatures) - { - var e = Event.None; - var requiresRenderingLayers = false; - - bool isDeferred = universalRenderer.renderingMode == RenderingMode.Deferred; - - foreach (var rendererFeature in rendererFeatures) - { - var decalRendereFeature = rendererFeature as DecalRendererFeature; - if (decalRendereFeature != null && decalRendereFeature.isActive) - { - var technique = decalRendereFeature.GetTechnique(universalRenderer); - if (technique == DecalTechnique.DBuffer) - e = CombineEvents(e, Event.DepthNormalPrePass); - else - e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); - - requiresRenderingLayers |= decalRendereFeature.requiresDecalLayers; - } - - /*var ssaoRendererFeature = rendererFeature as ScreenSpaceAmbientOcclusion; - if (ssaoRendererFeature != null && ssaoRendererFeature.isActive) - { - if (!isDeferred && !ssaoRendererFeature.afterOpaque) - e = CombineEvents(e, Event.DepthNormalPrePass); - else - e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); - }*/ - } - - return requiresRenderingLayers ? e : Event.None; - } - - static Event CombineEvents(Event a, Event b) - { - return (Event)Mathf.Min((int)a, (int)b); - } - } - /// /// Rendering modes for Universal renderer. /// @@ -211,8 +127,6 @@ private static class Profiling internal RTHandle colorGradingLut { get => m_PostProcessPasses.colorGradingLut; } internal DeferredLights deferredLights { get => m_DeferredLights; } - RenderingLayers.Event m_RenderingLayersEvent; - public UniversalRenderer(UniversalRendererData data) : base(data) { #if ENABLE_VR && ENABLE_XR_MODULE @@ -490,25 +404,17 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // Gather render passe input requirements RenderPassInputSummary renderPassInputs = GetRenderPassInputs(ref renderingData); - bool renderingLayerProvidesByDepthNormalPass = renderPassInputs.requiresRenderingLayer && - renderPassInputs.requiresNormalsTexture; + var renderingLayersEvent = RenderingLayerUtils.GetEvent(this, rendererFeatures); - bool renderingLayerProvidesRenderObjectPass = renderPassInputs.requiresRenderingLayer && - !renderPassInputs.requiresNormalsTexture && m_RenderingMode == RenderingMode.Forward; - - bool renderingLayerProvidesGBufferPass = renderPassInputs.requiresRenderingLayer && - !renderPassInputs.requiresNormalsTexture && m_RenderingMode == RenderingMode.Deferred; - - m_RenderingLayersEvent = RenderingLayers.GetEvent(this, rendererFeatures); - - renderingLayerProvidesByDepthNormalPass = m_RenderingLayersEvent == RenderingLayers.Event.DepthNormalPrePass; - renderingLayerProvidesRenderObjectPass = m_RenderingLayersEvent == RenderingLayers.Event.ForwardOpaque; - renderingLayerProvidesGBufferPass = m_RenderingLayersEvent == RenderingLayers.Event.GBuffer; + bool requiresRenderingLayer = renderingLayersEvent != RenderingLayerUtils.Event.None; + bool renderingLayerProvidesByDepthNormalPass = renderingLayersEvent == RenderingLayerUtils.Event.DepthNormalPrePass; + bool renderingLayerProvidesRenderObjectPass = renderingLayersEvent == RenderingLayerUtils.Event.ForwardOpaque; + bool renderingLayerProvidesGBufferPass = renderingLayersEvent == RenderingLayerUtils.Event.GBuffer; // TODO: investigate the order of call, had to change because of requiresRenderingLayer if (m_DeferredLights != null) { - m_DeferredLights.UseDecalLayers = renderPassInputs.requiresRenderingLayer; + m_DeferredLights.UseDecalLayers = requiresRenderingLayer; // TODO: This needs to be setup early, otherwise gbuffer attachments will be allocated with wrong size m_DeferredLights.HasNormalPrepass = renderPassInputs.requiresNormalsTexture; @@ -741,7 +647,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re CommandBufferPool.Release(cmd); } - if (renderPassInputs.requiresRenderingLayer) + if (requiresRenderingLayer) { ref var renderingLayersTexture = ref m_DecalLayersTexture; string renderingLayersTextureName = "_CameraRenderingLayersTexture"; @@ -879,29 +785,6 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re m_DeferredLights.DisableFramebufferFetchInput(); EnqueueDeferred(ref renderingData, requiresDepthPrepass, renderPassInputs.requiresNormalsTexture, renderingLayerProvidesByDepthNormalPass, mainLightShadows, additionalLightShadows); - - /*if (!useRenderPassEnabled) - { - for (int i = 0; i < activeRenderPassQueue.Count; ++i) - { - ScriptableRenderPass pass = activeRenderPassQueue[i]; - - if ((pass.input & ScriptableRenderPassInput.RenderingLayer) != 0 && !pass.overrideCameraTarget && - RenderPassEvent.AfterRenderingGbuffer <= pass.renderPassEvent && - pass.renderPassEvent <= RenderPassEvent.BeforeRenderingDeferredLights) - { - if (m_DeferredLights != null && m_DeferredLights.UseRenderingLayers) - { - var rts = (RenderTargetIdentifier[])m_DeferredLights.GbufferAttachmentIdentifiers.Clone(); - if (rts.Length > m_DeferredLights.GBufferRenderingLayers) // todo - rts[m_DeferredLights.GBufferRenderingLayers] = 0; - - pass.ConfigureTarget(rts, m_DeferredLights.DepthAttachmentIdentifier); - pass.ConfigureClear(ClearFlag.None, Color.black); - } - } - } - }*/ } else { @@ -1227,10 +1110,8 @@ private struct RenderPassInputSummary internal bool requiresNormalsTexture; internal bool requiresColorTexture; internal bool requiresMotionVectors; - internal bool requiresRenderingLayer; internal RenderPassEvent requiresDepthNormalAtEvent; internal RenderPassEvent requiresDepthTextureEarliestEvent; - internal RenderPassEvent requiresRenderingLayerAtEvent; } private RenderPassInputSummary GetRenderPassInputs(ref RenderingData renderingData) @@ -1240,7 +1121,6 @@ private RenderPassInputSummary GetRenderPassInputs(ref RenderingData renderingDa RenderPassInputSummary inputSummary = new RenderPassInputSummary(); inputSummary.requiresDepthNormalAtEvent = RenderPassEvent.BeforeRenderingOpaques; inputSummary.requiresDepthTextureEarliestEvent = RenderPassEvent.BeforeRenderingPostProcessing; - inputSummary.requiresRenderingLayerAtEvent = RenderPassEvent.AfterRenderingSkybox; for (int i = 0; i < activeRenderPassQueue.Count; ++i) { ScriptableRenderPass pass = activeRenderPassQueue[i]; @@ -1248,7 +1128,6 @@ private RenderPassInputSummary GetRenderPassInputs(ref RenderingData renderingDa bool needsNormals = (pass.input & ScriptableRenderPassInput.Normal) != ScriptableRenderPassInput.None; bool needsColor = (pass.input & ScriptableRenderPassInput.Color) != ScriptableRenderPassInput.None; bool needsMotion = (pass.input & ScriptableRenderPassInput.Motion) != ScriptableRenderPassInput.None; - bool needsRenderingLayer = (pass.input & ScriptableRenderPassInput.RenderingLayer) != ScriptableRenderPassInput.None; bool eventBeforeMainRendering = pass.renderPassEvent <= beforeMainRenderingEvent; inputSummary.requiresDepthTexture |= needsDepth; @@ -1256,20 +1135,10 @@ private RenderPassInputSummary GetRenderPassInputs(ref RenderingData renderingDa inputSummary.requiresNormalsTexture |= needsNormals; inputSummary.requiresColorTexture |= needsColor; inputSummary.requiresMotionVectors |= needsMotion; - inputSummary.requiresRenderingLayer |= needsRenderingLayer; if (needsDepth) inputSummary.requiresDepthTextureEarliestEvent = (RenderPassEvent)Mathf.Min((int)pass.renderPassEvent, (int)inputSummary.requiresDepthTextureEarliestEvent); if (needsNormals || needsDepth) inputSummary.requiresDepthNormalAtEvent = (RenderPassEvent)Mathf.Min((int)pass.renderPassEvent, (int)inputSummary.requiresDepthNormalAtEvent); - if (needsRenderingLayer) - inputSummary.requiresRenderingLayerAtEvent = (RenderPassEvent)Mathf.Min((int)pass.renderPassEvent, (int)inputSummary.requiresRenderingLayerAtEvent); - } - - // Only normal prepass can supply rendering layer at pre pass event - if (inputSummary.requiresRenderingLayerAtEvent <= beforeMainRenderingEvent) - { - inputSummary.requiresDepthNormalAtEvent = inputSummary.requiresRenderingLayerAtEvent; - inputSummary.requiresNormalsTexture = true; } return inputSummary; From 5a9c01fe8858524edc3aea68332f536956630c91 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 8 Feb 2022 12:14:21 +0200 Subject: [PATCH 16/38] Removing Rendering Layers request from render pass input and adding Rendering Layers Utils for that --- .../Editor/Decal/DecalProjectorEditor.cs | 10 +---- .../Decal/DBuffer/DBufferRenderPass.cs | 2 - .../ScreenSpace/DecalGBufferRenderPass.cs | 2 - .../ScreenSpace/DecalScreenSpaceRenderPass.cs | 2 - .../Runtime/Passes/ScriptableRenderPass.cs | 3 -- .../RendererFeatures/DecalRendererFeature.cs | 9 +++++ .../Runtime/RenderingLayerUtils.cs | 39 +++++-------------- .../Runtime/ScriptableRendererFeature.cs | 10 +++++ .../Runtime/UniversalRenderer.cs | 3 ++ 9 files changed, 32 insertions(+), 48 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs b/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs index a0ca3aeff74..5e74e1db2c9 100644 --- a/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs +++ b/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs @@ -607,15 +607,7 @@ public override void OnInspectorGUI() EditorGUILayout.PropertyField(m_MaterialProperty, k_MaterialContent); materialChanged = EditorGUI.EndChangeCheck(); - bool decalLayerEnabled = false; - // TODO: Add check if decal layers enabled in any renderer for current urp - { - decalLayerEnabled = true; - using (new EditorGUI.DisabledScope(!decalLayerEnabled)) - { - EditorGUILayout.PropertyField(m_DecalLayerMask, k_DecalLayerMaskContent); - } - } + EditorGUILayout.PropertyField(m_DecalLayerMask, k_DecalLayerMaskContent); foreach (var target in targets) { diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs index 1ca92ac1d47..4e03fb95cd9 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs @@ -37,8 +37,6 @@ public DBufferRenderPass(Material dBufferClear, DBufferSettings settings, DecalD renderPassEvent = RenderPassEvent.AfterRenderingPrePasses + 1; var scriptableRenderPassInput = ScriptableRenderPassInput.Normal; - if (decalLayers) - scriptableRenderPassInput |= ScriptableRenderPassInput.RenderingLayer; ConfigureInput(scriptableRenderPassInput); m_DrawSystem = drawSystem; diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs index cd9152d25ac..757e73a1337 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalGBufferRenderPass.cs @@ -23,8 +23,6 @@ internal class DecalGBufferRenderPass : ScriptableRenderPass public DecalGBufferRenderPass(DecalScreenSpaceSettings settings, DecalDrawGBufferSystem drawSystem, bool decalLayers) { renderPassEvent = RenderPassEvent.AfterRenderingGbuffer; - if (decalLayers) - ConfigureInput(ScriptableRenderPassInput.RenderingLayer); m_DrawSystem = drawSystem; m_Settings = settings; diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs index 211d22d13e6..66d649a7f88 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/ScreenSpace/DecalScreenSpaceRenderPass.cs @@ -23,8 +23,6 @@ public DecalScreenSpaceRenderPass(DecalScreenSpaceSettings settings, DecalDrawSc renderPassEvent = RenderPassEvent.AfterRenderingSkybox; var scriptableRenderPassInput = ScriptableRenderPassInput.Depth; // Require depth - if (decalLayers) - scriptableRenderPassInput |= ScriptableRenderPassInput.RenderingLayer; ConfigureInput(scriptableRenderPassInput); m_DrawSystem = drawSystem; diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs index 1ad20bbd895..b557eef6efb 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/ScriptableRenderPass.cs @@ -20,9 +20,6 @@ public enum ScriptableRenderPassInput Normal = 1 << 1, Color = 1 << 2, Motion = 1 << 3, - RenderingLayer = 1 << 4, - DecalLayers = 1 << 5, - LightLayers = 1 << 6, } // Note: Spaced built-in events so we can add events in between them diff --git a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index 7d9372572f2..7c5b4b16cc6 100644 --- a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -214,6 +214,15 @@ public override void Create() m_RecreateSystems = true; } + internal override RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferred) + { + var technique = GetTechnique(isDeferred); + if (technique == DecalTechnique.DBuffer) + return RenderingLayerUtils.Event.DepthNormalPrePass; + else + return isDeferred ? RenderingLayerUtils.Event.GBuffer : RenderingLayerUtils.Event.ForwardOpaque; + } + internal DBufferSettings GetDBufferSettings() { if (m_Settings.technique == DecalTechniqueOption.Automatic) diff --git a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs index b2881697461..18ed8c2acf6 100644 --- a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs +++ b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs @@ -1,9 +1,10 @@ -using System.Collections; using System.Collections.Generic; -using UnityEngine; namespace UnityEngine.Rendering.Universal { + /// + /// Helper class for finding out if Rendering Layers Texture is required by Scriptable Renderer Features. + /// internal static class RenderingLayerUtils { public enum Event @@ -17,51 +18,29 @@ public enum Event public static Event GetEvent(UniversalRendererData universalRendererData) { var e = Event.None; - var requiresRenderingLayers = false; - bool isDeferred = universalRendererData.renderingMode == RenderingMode.Deferred; foreach (var rendererFeature in universalRendererData.rendererFeatures) { - var decalRendereFeature = rendererFeature as DecalRendererFeature; - if (decalRendereFeature != null && decalRendereFeature.isActive) - { - var technique = decalRendereFeature.GetTechnique(universalRendererData); - if (technique == DecalTechnique.DBuffer) - e = CombineEvents(e, Event.DepthNormalPrePass); - else - e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); - - requiresRenderingLayers |= decalRendereFeature.requiresDecalLayers; - } + if (rendererFeature.isActive) + e = CombineEvents(e, rendererFeature.RequireRenderingLayers(isDeferred)); } - return requiresRenderingLayers ? e : Event.None; + return e; } public static Event GetEvent(UniversalRenderer universalRenderer, List rendererFeatures) { var e = Event.None; - var requiresRenderingLayers = false; - bool isDeferred = universalRenderer.renderingMode == RenderingMode.Deferred; foreach (var rendererFeature in rendererFeatures) { - var decalRendereFeature = rendererFeature as DecalRendererFeature; - if (decalRendereFeature != null && decalRendereFeature.isActive) - { - var technique = decalRendereFeature.GetTechnique(universalRenderer); - if (technique == DecalTechnique.DBuffer) - e = CombineEvents(e, Event.DepthNormalPrePass); - else - e = CombineEvents(e, isDeferred ? Event.GBuffer : Event.ForwardOpaque); - - requiresRenderingLayers |= decalRendereFeature.requiresDecalLayers; - } + if (rendererFeature.isActive) + e = CombineEvents(e, rendererFeature.RequireRenderingLayers(isDeferred)); } - return requiresRenderingLayers ? e : Event.None; + return e; } static Event CombineEvents(Event a, Event b) diff --git a/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs index fc1f21eccf9..ac791d97e02 100644 --- a/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs @@ -61,6 +61,16 @@ internal virtual bool SupportsNativeRenderPass() return false; } + /// + /// Override this method and return event in order URP to produce rendering layers texture at specified event. + /// + /// The true value if Renderer is using deffered rendering path. + /// + internal virtual RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferred) + { + return RenderingLayerUtils.Event.None; + } + /// /// Sets the state of ScriptableRenderFeature (true: the feature is active, false: the feature is inactive). /// If the feature is active, it is added to the renderer it is attached to, otherwise the feature is skipped while rendering. diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 767336cafe1..0d74f991398 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -411,6 +411,9 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re bool renderingLayerProvidesRenderObjectPass = renderingLayersEvent == RenderingLayerUtils.Event.ForwardOpaque; bool renderingLayerProvidesGBufferPass = renderingLayersEvent == RenderingLayerUtils.Event.GBuffer; + if (renderingLayerProvidesByDepthNormalPass) + renderPassInputs.requiresNormalsTexture = true; + // TODO: investigate the order of call, had to change because of requiresRenderingLayer if (m_DeferredLights != null) { From 2264c74300589375d8dee983a58a3e17b7368937 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 8 Feb 2022 12:15:25 +0200 Subject: [PATCH 17/38] Moving DrawRenderingLayersFeature into urp test library as it uses internal API --- .../Scripts/Runtime}/DrawRenderingLayers.shader | 0 .../Scripts/Runtime}/DrawRenderingLayers.shader.meta | 0 .../Scripts/Runtime}/DrawRenderingLayersFeature.cs | 11 ++++++++++- .../Runtime}/DrawRenderingLayersFeature.cs.meta | 0 4 files changed, 10 insertions(+), 1 deletion(-) rename {TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers => com.unity.testing.urp/Scripts/Runtime}/DrawRenderingLayers.shader (100%) rename {TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers => com.unity.testing.urp/Scripts/Runtime}/DrawRenderingLayers.shader.meta (100%) rename {TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers => com.unity.testing.urp/Scripts/Runtime}/DrawRenderingLayersFeature.cs (93%) rename {TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers => com.unity.testing.urp/Scripts/Runtime}/DrawRenderingLayersFeature.cs.meta (100%) diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayers.shader similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader rename to com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayers.shader diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader.meta b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayers.shader.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayers.shader.meta rename to com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayers.shader.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs similarity index 93% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs rename to com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs index 90cfd096e98..33745ac5fee 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs +++ b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs @@ -50,7 +50,6 @@ private static class ShaderPropertyId public DrawRenderingLayersPrePass(RenderPassEvent renderPassEvent) { - ConfigureInput(ScriptableRenderPassInput.RenderingLayer); m_ProfilingSampler = new ProfilingSampler("Rendering Layers PrePass"); this.renderPassEvent = renderPassEvent; } @@ -122,6 +121,16 @@ private void Render(CommandBuffer cmd, in CameraData cameraData) private RTHandle m_ColoredRenderingLayersTextureHandle; + internal override RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferred) + { + if (m_Event < RenderPassEvent.AfterRenderingGbuffer) + return RenderingLayerUtils.Event.DepthNormalPrePass; + else if (m_Event < RenderPassEvent.AfterRenderingOpaques) + return RenderingLayerUtils.Event.GBuffer; + else + return RenderingLayerUtils.Event.ForwardOpaque; + } + /// public override void Create() { diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs.meta b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs.meta similarity index 100% rename from TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersFeature.cs.meta rename to com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs.meta From 0bf1c22739d1f35ce0cd0e8b05902e5d11050bdb Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 8 Feb 2022 12:15:44 +0200 Subject: [PATCH 18/38] Updating Scene --- .../Assets/Scenes/250_RenderingLayers.unity | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.unity b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.unity index f980f7c99bc..19b2fc000a1 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.unity +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers.unity @@ -4124,7 +4124,7 @@ MonoBehaviour: PerPixelCorrectnessThreshold: 0.001 PerPixelGammaThreshold: 0.003921569 PerPixelAlphaThreshold: 0.003921569 - AverageCorrectnessThreshold: 0.005 + AverageCorrectnessThreshold: 0.0025 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 1 From 27c6eb3a03e4bab753074f97ca7894397bb066fd Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 8 Feb 2022 12:18:54 +0200 Subject: [PATCH 19/38] Adding reference images for test 250 --- .../OpenGLES3/None/250_RenderingLayers.png | 3 + .../None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../OpenGLCore/None/250_RenderingLayers.png | 3 + .../None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Vulkan/None/250_RenderingLayers.png | 3 + .../Vulkan/None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Vulkan/None/250_RenderingLayers.png | 3 + .../Vulkan/None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Metal/None/250_RenderingLayers.png | 3 + .../Metal/None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../OpenGLCore/None/250_RenderingLayers.png | 3 + .../None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Metal/None/250_RenderingLayers.png | 3 + .../Metal/None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../OpenGLCore/None/250_RenderingLayers.png | 3 + .../None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Direct3D11/None/250_RenderingLayers.png | 3 + .../None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Direct3D12/None/250_RenderingLayers.png | 3 + .../None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Vulkan/None/250_RenderingLayers.png | 3 + .../Vulkan/None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Direct3D11/None/250_RenderingLayers.png | 3 + .../None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Direct3D12/None/250_RenderingLayers.png | 3 + .../None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Vulkan/None/250_RenderingLayers.png | 3 + .../Vulkan/None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ .../Metal/None/250_RenderingLayers.png | 3 + .../Metal/None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ 30 files changed, 1530 insertions(+) create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..f2d7908aead --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 29dc4aa0b4a8048468b70e1063b97e79 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..262e5d9fae1 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: aa9e2052f09eab846aa1886672c052ea +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..01a9eebc3a1 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 59d5e3adc24989c45b48be42ad926338 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..3c5182c7834 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 98115400383608841af0ef9d6faee17d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..74c2e90ab3b --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: bfc43fd695ed84c45a4c79db2787d853 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..363a60c7b72 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: abb46bccc9c0b994eb8571c88112170f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..62c7af9cba0 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 2f087da5d23149147b2bcf5fa0783f46 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..f8e1db0109e --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 3c5f8d95e5d12d1428748fcade63f167 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..27c6c2dc824 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 23084697860678845bf0a60d0555469d +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..3a48a3fa7fe --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 662f10d04b9afa64c8b1e63d5571f327 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..03abdb08d31 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 9a41ab33c5c974a459878d3145816190 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..8562c766643 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 50560bb98b3d2b048a76331e10697110 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..025bfc9d5e9 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: d9a863870ca67304891f6d9b537da905 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..4074bf63a60 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 686c874fd60799c47b3a1aca25384ad5 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..24457646e14 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: cac6f4b57fb639f4e8d5fd3f659535de +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: From 18fedc9ee184874e3a57ad960570474a7480f68f Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 8 Feb 2022 15:20:34 +0200 Subject: [PATCH 20/38] Removing light layers and decal layers from shader side and keeping logic only in C# side --- .../ShaderGraph/Includes/ShaderPassDecal.hlsl | 8 +-- .../Entities/DecalCreateDrawCallSystem.cs | 2 +- .../Runtime/ForwardLights.cs | 2 +- .../Runtime/Passes/DepthNormalOnlyPass.cs | 1 - .../Runtime/Passes/GBufferPass.cs | 7 --- .../Runtime/RenderingLayerUtils.cs | 10 ++++ .../DeclareRenderingLayerTexture.hlsl | 8 +-- .../ShaderLibrary/Input.hlsl | 7 --- .../ShaderLibrary/Lighting.hlsl | 17 +++++-- .../ShaderLibrary/RealtimeLights.hlsl | 49 ------------------- .../ShaderVariablesFunctions.hlsl | 12 +++++ .../Shaders/Utils/StencilDeferred.shader | 15 ++---- 12 files changed, 47 insertions(+), 91 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl index 869d9285c21..46f94f6b8a5 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl @@ -185,12 +185,12 @@ void Frag(PackedVaryings packedInput, #ifdef _DECAL_LAYERS #ifdef _RENDER_PASS_ENABLED - uint meshRenderingLayers = DecodeMeshRenderingLayer(LOAD_FRAMEBUFFER_INPUT(GBUFFER4, input.positionCS.xy).r); + uint surfaceRenderingLayer = DecodeMeshRenderingLayer(LOAD_FRAMEBUFFER_INPUT(GBUFFER4, input.positionCS.xy).r); #else - uint meshRenderingLayers = LoadSceneRenderingLayer(input.positionCS.xy); + uint surfaceRenderingLayer = LoadSceneRenderingLayer(input.positionCS.xy); #endif - uint decalRenderingLayer = uint(UNITY_ACCESS_INSTANCED_PROP(Decal, _DecalLayerMaskFromDecal)) << 8; - clip((meshRenderingLayers & decalRenderingLayer) != 0 ? 1 : -1); + uint projectorRenderingLayer = uint(UNITY_ACCESS_INSTANCED_PROP(Decal, _DecalLayerMaskFromDecal)); + clip((surfaceRenderingLayer & projectorRenderingLayer) != 0 ? 1 : -1); #endif #if defined(DECAL_PROJECTOR) diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalCreateDrawCallSystem.cs b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalCreateDrawCallSystem.cs index 289b27a81b4..4b7ab9b7406 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalCreateDrawCallSystem.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/Entities/DecalCreateDrawCallSystem.cs @@ -202,7 +202,7 @@ public void Execute() normalToDecals.c3 = new float4(fadeFactor * 1.0f, angleFade.x, angleFade.y, uvScaleBias.w); normalToDecalsDraw[instanceIndex] = normalToDecals; - decalLayerMasksDraw[instanceIndex] = (float)decalLayerMasks[decalIndex]; + decalLayerMasksDraw[instanceIndex] = RenderingLayerUtils.ToRenderingLayers(decalLayerMasks[decalIndex]); instanceIndex++; diff --git a/com.unity.render-pipelines.universal/Runtime/ForwardLights.cs b/com.unity.render-pipelines.universal/Runtime/ForwardLights.cs index 7a4f6ecb50c..d865b5c706c 100644 --- a/com.unity.render-pipelines.universal/Runtime/ForwardLights.cs +++ b/com.unity.render-pipelines.universal/Runtime/ForwardLights.cs @@ -421,7 +421,7 @@ void InitializeLightConstants(NativeArray lights, int lightIndex, } var additionalLightData = light.GetUniversalAdditionalLightData(); - lightLayerMask = (uint)additionalLightData.lightLayerMask; + lightLayerMask = RenderingLayerUtils.ToRenderingLayers(additionalLightData.lightLayerMask); } void SetupShaderLightConstants(CommandBuffer cmd, ref RenderingData renderingData) diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs index 1c270755c2d..ae795ce9369 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DepthNormalOnlyPass.cs @@ -79,7 +79,6 @@ public override void OnCameraSetup(CommandBuffer cmd, ref RenderingData renderin colorHandles = k_ColorAttachment1; } - if (renderingData.cameraData.renderer.useDepthPriming && (renderingData.cameraData.renderType == CameraRenderType.Base || renderingData.cameraData.clearDepth)) ConfigureTarget(colorHandles, renderingData.cameraData.renderer.cameraDepthTargetHandle); else diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs index 6f4c40153fb..c6245e7edba 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/GBufferPass.cs @@ -147,13 +147,6 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData // Render objects that did not match any shader pass with error shader RenderingUtils.RenderObjectsWithError(context, ref renderingData.cullResults, camera, m_FilteringSettings, SortingCriteria.None); - - // 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) - // gbufferCommands.SetGlobalTexture(s_CameraNormalsTextureID, m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferNormalSmoothnessIndex]); - //if (!m_DeferredLights.UseRenderPass && m_DeferredLights.UseRenderingLayers) - // gbufferCommands.SetGlobalTexture("_CameraRenderingLayersTexture", m_DeferredLights.GbufferAttachments[m_DeferredLights.GBufferRenderingLayers]); } context.ExecuteCommandBuffer(gbufferCommands); diff --git a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs index 18ed8c2acf6..6f77126460c 100644 --- a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs +++ b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs @@ -43,6 +43,16 @@ public static Event GetEvent(UniversalRenderer universalRenderer, List> RENDERING_LIGHT_LAYERS_MASK_SHIFT) -#define RENDERING_DECAL_LAYERS_MASK (65280) -#define RENDERING_DECAL_LAYERS_MASK_SHIFT (8) -#define DEFAULT_DECAL_LAYERS (RENDERING_DECAL_LAYERS_MASK >> RENDERING_DECAL_LAYERS_MASK_SHIFT) - #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderTypes.cs.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Deprecated.hlsl" diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl index 2ada5635d89..b74fc381e30 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl @@ -269,7 +269,7 @@ half4 UniversalFragmentPBR(InputData inputData, SurfaceData surfaceData) BRDFData brdfDataClearCoat = CreateClearCoatBRDFData(surfaceData, brdfData); half4 shadowMask = CalculateShadowMask(inputData); AmbientOcclusionFactor aoFactor = CreateAmbientOcclusionFactor(inputData, surfaceData); - uint meshRenderingLayers = GetMeshRenderingLightLayer(); + uint meshRenderingLayers = GetMeshRenderingLayer(); Light mainLight = GetMainLight(inputData, shadowMask, aoFactor); // NOTE: We don't apply AO to the GI here because it's done in the lighting calculation below... @@ -280,8 +280,9 @@ half4 UniversalFragmentPBR(InputData inputData, SurfaceData surfaceData) lightingData.giColor = GlobalIllumination(brdfData, brdfDataClearCoat, surfaceData.clearCoatMask, inputData.bakedGI, aoFactor.indirectAmbientOcclusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS); - +#ifdef _LIGHT_LAYERS if (IsMatchingLightLayer(mainLight.layerMask, meshRenderingLayers)) +#endif { lightingData.mainLightColor = LightingPhysicallyBased(brdfData, brdfDataClearCoat, mainLight, @@ -297,7 +298,9 @@ half4 UniversalFragmentPBR(InputData inputData, SurfaceData surfaceData) { Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor); +#ifdef _LIGHT_LAYERS if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) +#endif { lightingData.additionalLightsColor += LightingPhysicallyBased(brdfData, brdfDataClearCoat, light, inputData.normalWS, inputData.viewDirectionWS, @@ -309,7 +312,9 @@ half4 UniversalFragmentPBR(InputData inputData, SurfaceData surfaceData) LIGHT_LOOP_BEGIN(pixelLightCount) Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor); +#ifdef _LIGHT_LAYERS if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) +#endif { lightingData.additionalLightsColor += LightingPhysicallyBased(brdfData, brdfDataClearCoat, light, inputData.normalWS, inputData.viewDirectionWS, @@ -359,7 +364,7 @@ half4 UniversalFragmentBlinnPhong(InputData inputData, SurfaceData surfaceData) } #endif - uint meshRenderingLayers = GetMeshRenderingLightLayer(); + uint meshRenderingLayers = GetMeshRenderingLayer(); half4 shadowMask = CalculateShadowMask(inputData); AmbientOcclusionFactor aoFactor = CreateAmbientOcclusionFactor(inputData, surfaceData); Light mainLight = GetMainLight(inputData, shadowMask, aoFactor); @@ -369,7 +374,9 @@ half4 UniversalFragmentBlinnPhong(InputData inputData, SurfaceData surfaceData) inputData.bakedGI *= surfaceData.albedo; LightingData lightingData = CreateLightingData(inputData, surfaceData); +#ifdef _LIGHT_LAYERS if (IsMatchingLightLayer(mainLight.layerMask, meshRenderingLayers)) +#endif { lightingData.mainLightColor += CalculateBlinnPhong(mainLight, inputData, surfaceData); } @@ -381,7 +388,9 @@ half4 UniversalFragmentBlinnPhong(InputData inputData, SurfaceData surfaceData) for (uint lightIndex = 0; lightIndex < min(_AdditionalLightsDirectionalCount, MAX_VISIBLE_LIGHTS); lightIndex++) { Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor); +#ifdef _LIGHT_LAYERS if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) +#endif { lightingData.additionalLightsColor += CalculateBlinnPhong(light, inputData, surfaceData); } @@ -390,7 +399,9 @@ half4 UniversalFragmentBlinnPhong(InputData inputData, SurfaceData surfaceData) LIGHT_LOOP_BEGIN(pixelLightCount) Light light = GetAdditionalLight(lightIndex, inputData, shadowMask, aoFactor); +#ifdef _LIGHT_LAYERS if (IsMatchingLightLayer(light.layerMask, meshRenderingLayers)) +#endif { lightingData.additionalLightsColor += CalculateBlinnPhong(light, inputData, surfaceData); } diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl index 7c0567db4e8..a18b3016ab5 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/RealtimeLights.hlsl @@ -8,41 +8,6 @@ #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LightCookie/LightCookie.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Clustering.hlsl" -/////////////////////////////////////////////////////////////////////////////// -// Light Layers / -/////////////////////////////////////////////////////////////////////////////// - -// Note: we need to mask out only 8bits of the layer mask before encoding it as otherwise any value > 255 will map to all layers active if save in a buffer -uint GetMeshRenderingLightLayer() -{ - #ifdef _LIGHT_LAYERS - return (asuint(unity_RenderingLayer.x) & RENDERING_LIGHT_LAYERS_MASK) >> RENDERING_LIGHT_LAYERS_MASK_SHIFT; - #else - return DEFAULT_LIGHT_LAYERS; - #endif -} - -uint GetMeshRenderingDecalLayer() -{ -#ifdef _DECAL_LAYERS - return (asuint(unity_RenderingLayer.x) & RENDERING_DECAL_LAYERS_MASK) >> RENDERING_DECAL_LAYERS_MASK_SHIFT; -#else - return DEFAULT_DECAL_LAYERS; -#endif -} - -float EncodeMeshRenderingLayer(uint renderingLayer) -{ - //return (renderingLayer & 0x0000FFFF) / (255.0 * 255.0); // todo expose as property - return PackInt(renderingLayer, 16); -} - -uint DecodeMeshRenderingLayer(float renderingLayer) -{ - //return (renderingLayer & 0x0000FFFF) / (255.0 * 255.0); // todo expose as property - return UnpackInt(renderingLayer, 16); -} - // Abstraction over Light shading data. struct Light { @@ -144,11 +109,7 @@ Light GetMainLight() light.shadowAttenuation = 1.0; light.color = _MainLightColor.rgb; -#ifdef _LIGHT_LAYERS light.layerMask = _MainLightLayerMask; -#else - light.layerMask = DEFAULT_LIGHT_LAYERS; -#endif return light; } @@ -196,23 +157,13 @@ Light GetAdditionalPerObjectLight(int perObjectLightIndex, float3 positionWS) half3 color = _AdditionalLightsBuffer[perObjectLightIndex].color.rgb; half4 distanceAndSpotAttenuation = _AdditionalLightsBuffer[perObjectLightIndex].attenuation; half4 spotDirection = _AdditionalLightsBuffer[perObjectLightIndex].spotDirection; -#ifdef _LIGHT_LAYERS uint lightLayerMask = _AdditionalLightsBuffer[perObjectLightIndex].layerMask; -#else - uint lightLayerMask = DEFAULT_LIGHT_LAYERS; -#endif - #else float4 lightPositionWS = _AdditionalLightsPosition[perObjectLightIndex]; half3 color = _AdditionalLightsColor[perObjectLightIndex].rgb; half4 distanceAndSpotAttenuation = _AdditionalLightsAttenuation[perObjectLightIndex]; half4 spotDirection = _AdditionalLightsSpotDir[perObjectLightIndex]; -#ifdef _LIGHT_LAYERS uint lightLayerMask = asuint(_AdditionalLightsLayerMasks[perObjectLightIndex]); -#else - uint lightLayerMask = DEFAULT_LIGHT_LAYERS; -#endif - #endif // Directional lights store direction in lightPosition.xyz and have .w set to 0.0. diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl index fc8e69317ff..989e6dd0131 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl @@ -422,4 +422,16 @@ uint GetMeshRenderingLayer() return asuint(unity_RenderingLayer.x); } +float EncodeMeshRenderingLayer(uint renderingLayer) +{ + //return (renderingLayer & 0x0000FFFF) / (255.0 * 255.0); // todo expose as property + return PackInt(renderingLayer, 16); +} + +uint DecodeMeshRenderingLayer(float renderingLayer) +{ + //return (renderingLayer & 0x0000FFFF) / (255.0 * 255.0); // todo expose as property + return UnpackInt(renderingLayer, 16); +} + #endif // UNITY_SHADER_VARIABLES_FUNCTIONS_INCLUDED diff --git a/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader b/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader index f0354fea5d1..a9fd0bbafa6 100644 --- a/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader +++ b/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader @@ -157,11 +157,7 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" bool materialReceiveShadowsOff = (materialFlags & kMaterialFlagReceiveShadowsOff) != 0; - #ifdef _LIGHT_LAYERS uint lightLayerMask =_LightLayerMask; - #else - uint lightLayerMask = DEFAULT_LIGHT_LAYERS; - #endif #if defined(_DIRECTIONAL) #if defined(_DEFERRED_MAIN_LIGHT) @@ -260,13 +256,6 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" half4 shadowMask = 1.0; #endif - #ifdef _LIGHT_LAYERS - float4 renderingLayers = SAMPLE_TEXTURE2D_X_LOD(MERGE_NAME(_, GBUFFER_LIGHT_LAYERS), my_point_clamp_sampler, screen_uv, 0); - uint meshRenderingLayers = DecodeMeshRenderingLayer(renderingLayers.r); - #else - uint meshRenderingLayers = DEFAULT_LIGHT_LAYERS; - #endif - half surfaceDataOcclusion = gbuffer1.a; uint materialFlags = UnpackMaterialFlags(gbuffer0.a); @@ -289,8 +278,12 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" Light unityLight = GetStencilLight(posWS.xyz, screen_uv, shadowMask, materialFlags); + #ifdef _LIGHT_LAYERS + float4 renderingLayers = SAMPLE_TEXTURE2D_X_LOD(MERGE_NAME(_, GBUFFER_LIGHT_LAYERS), my_point_clamp_sampler, screen_uv, 0); + uint meshRenderingLayers = DecodeMeshRenderingLayer(renderingLayers.r); [branch] if (!IsMatchingLightLayer(unityLight.layerMask, meshRenderingLayers)) return half4(color, alpha); // Cannot discard because stencil must be updated. + #endif #if defined(_SCREEN_SPACE_OCCLUSION) && !defined(_SURFACE_TYPE_TRANSPARENT) AmbientOcclusionFactor aoFactor = GetScreenSpaceAmbientOcclusion(screen_uv); From 13f668e0428a317407581e5f1814fb13c3c54468 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 8 Feb 2022 15:30:31 +0200 Subject: [PATCH 21/38] Updating for deferred light layer mask --- .../Runtime/DeferredLights.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs index c7c140f3ebf..e9f0fdddb49 100644 --- a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs +++ b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs @@ -587,7 +587,7 @@ void SetupMainLightConstants(CommandBuffer cmd, ref LightData lightData) UniversalRenderPipeline.InitializeLightConstants_Common(lightData.visibleLights, lightData.mainLightIndex, out lightPos, out lightColor, out lightAttenuation, out lightSpotDir, out lightOcclusionChannel); var additionalLightData = lightData.visibleLights[lightData.mainLightIndex].light.GetUniversalAdditionalLightData(); - uint lightLayerMask = (uint)additionalLightData.lightLayerMask; + uint lightLayerMask = RenderingLayerUtils.ToRenderingLayers(additionalLightData.lightLayerMask); cmd.SetGlobalVector(ShaderConstants._MainLightPosition, lightPos); cmd.SetGlobalVector(ShaderConstants._MainLightColor, lightColor); @@ -751,7 +751,7 @@ void RenderStencilDirectionalLights(CommandBuffer cmd, ref RenderingData renderi lightFlags |= (int)LightFlag.SubtractiveMixedLighting; var additionalLightData = vl.light.GetUniversalAdditionalLightData(); - uint lightLayerMask = (uint)additionalLightData.lightLayerMask; + uint lightLayerMask = RenderingLayerUtils.ToRenderingLayers(additionalLightData.lightLayerMask); // Setup shadow paramters: // - for the main light, they have already been setup globally, so nothing to do. @@ -818,7 +818,7 @@ void RenderStencilPointLights(CommandBuffer cmd, ref RenderingData renderingData UniversalRenderPipeline.InitializeLightConstants_Common(visibleLights, visLightIndex, out lightPos, out lightColor, out lightAttenuation, out lightSpotDir, out lightOcclusionChannel); var additionalLightData = vl.light.GetUniversalAdditionalLightData(); - uint lightLayerMask = (uint)additionalLightData.lightLayerMask; + uint lightLayerMask = RenderingLayerUtils.ToRenderingLayers(additionalLightData.lightLayerMask); int lightFlags = 0; if (vl.light.bakingOutput.lightmapBakeType == LightmapBakeType.Mixed) @@ -880,7 +880,7 @@ void RenderStencilSpotLights(CommandBuffer cmd, ref RenderingData renderingData, UniversalRenderPipeline.InitializeLightConstants_Common(visibleLights, visLightIndex, out lightPos, out lightColor, out lightAttenuation, out lightSpotDir, out lightOcclusionChannel); var additionalLightData = vl.light.GetUniversalAdditionalLightData(); - uint lightLayerMask = (uint)additionalLightData.lightLayerMask; + uint lightLayerMask = RenderingLayerUtils.ToRenderingLayers(additionalLightData.lightLayerMask); int lightFlags = 0; if (vl.light.bakingOutput.lightmapBakeType == LightmapBakeType.Mixed) From 6d1836534f8e9f9fbbb75eecceb7ba275b6097f4 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 8 Feb 2022 17:24:53 +0200 Subject: [PATCH 22/38] Spliting draw object pass logic into old draw object pass and additional with render layers --- .../Runtime/Passes/DrawObjectsPass.cs | 60 +++++++++++-------- .../Runtime/UniversalRenderer.cs | 22 ++++--- 2 files changed, 45 insertions(+), 37 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs index 8319ecc29c5..9ab6a611cfb 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs @@ -4,6 +4,38 @@ namespace UnityEngine.Rendering.Universal.Internal { + /// + /// Extension of DrawObjectPass that also output Rendering Layers Texture as second render target. + /// + internal class DrawObjectsAndRenderingLayersPass : DrawObjectsPass + { + RTHandle[] m_ColorTargetIndentifiers; + RTHandle m_DepthTargetIndentifiers; + + public DrawObjectsAndRenderingLayersPass(URPProfileId profilerTag, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference) : + base(profilerTag, opaque, evt, renderQueueRange, layerMask, stencilState, stencilReference) + { + m_ColorTargetIndentifiers = new RTHandle[2]; + } + + public void Setup(RTHandle colorAttachment, RTHandle renderingLayersTexture, RTHandle depthAttachment) + { + m_ColorTargetIndentifiers[0] = colorAttachment; + m_ColorTargetIndentifiers[1] = renderingLayersTexture; + m_DepthTargetIndentifiers = depthAttachment; + } + + public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) + { + ConfigureTarget(m_ColorTargetIndentifiers, m_DepthTargetIndentifiers); + } + + protected override void OnExecute(CommandBuffer cmd) + { + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.WriteRenderingLayers, true); + } + } + /// /// Draw objects into the given color and depth target /// @@ -21,9 +53,6 @@ public class DrawObjectsPass : ScriptableRenderPass bool m_UseDepthPriming; - RTHandle[] m_ColorTargetIndentifiers; - RTHandle m_DepthTargetIndentifiers; - static readonly int s_DrawObjectPassDataPropID = Shader.PropertyToID("_DrawObjectPassData"); public DrawObjectsPass(string profilerTag, ShaderTagId[] shaderTagIds, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference) @@ -47,26 +76,6 @@ public DrawObjectsPass(string profilerTag, ShaderTagId[] shaderTagIds, bool opaq } } - public void Setup() - { - m_ColorTargetIndentifiers = null; - m_DepthTargetIndentifiers = null; - } - - public void Setup(RTHandle[] colorAttachments, RTHandle depthAttachment) - { - m_ColorTargetIndentifiers = colorAttachments; - m_DepthTargetIndentifiers = depthAttachment; - } - - public override void Configure(CommandBuffer cmd, RenderTextureDescriptor cameraTextureDescriptor) - { - if (m_ColorTargetIndentifiers == null) - ResetTarget(); - else - ConfigureTarget(m_ColorTargetIndentifiers, m_DepthTargetIndentifiers); - } - public DrawObjectsPass(string profilerTag, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference) : this(profilerTag, new ShaderTagId[] { new ShaderTagId("SRPDefaultUnlit"), new ShaderTagId("UniversalForward"), new ShaderTagId("UniversalForwardOnly") }, @@ -117,8 +126,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData : new Vector4(flipSign, 0.0f, 1.0f, 1.0f); cmd.SetGlobalVector(ShaderPropertyId.scaleBiasRt, scaleBias); - // TODO: Move from this pass - CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.WriteRenderingLayers, this.m_ColorTargetIndentifiers != null); + OnExecute(cmd); context.ExecuteCommandBuffer(cmd); cmd.Clear(); @@ -160,5 +168,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); } + + protected virtual void OnExecute(CommandBuffer cmd) { } } } diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 0d74f991398..b25b270f1aa 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -72,6 +72,7 @@ private static class Profiling DeferredPass m_DeferredPass; DrawObjectsPass m_RenderOpaqueForwardOnlyPass; DrawObjectsPass m_RenderOpaqueForwardPass; + DrawObjectsAndRenderingLayersPass m_RenderOpaqueForwardAndRenderingLayersPass; DrawSkyboxPass m_DrawSkyboxPass; CopyDepthPass m_CopyDepthPass; CopyColorPass m_CopyColorPass; @@ -236,6 +237,7 @@ public UniversalRenderer(UniversalRendererData data) : base(data) // Always create this pass even in deferred because we use it for wireframe rendering in the Editor or offscreen depth texture rendering. m_RenderOpaqueForwardPass = new DrawObjectsPass(URPProfileId.DrawOpaqueObjects, true, RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask, m_DefaultStencilState, stencilData.stencilReference); + m_RenderOpaqueForwardAndRenderingLayersPass = new DrawObjectsAndRenderingLayersPass(URPProfileId.DrawOpaqueObjects, true, RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask, m_DefaultStencilState, stencilData.stencilReference); bool copyDepthAfterTransparents = m_CopyDepthMode == CopyDepthMode.AfterTransparents; @@ -823,23 +825,19 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re } } - m_RenderOpaqueForwardPass.ConfigureColorStoreAction(opaquePassColorStoreAction); - m_RenderOpaqueForwardPass.ConfigureDepthStoreAction(opaquePassDepthStoreAction); - + DrawObjectsPass renderOpaqueForwardPass = null; if (renderingLayerProvidesRenderObjectPass) { - RTHandle[] rts = new RTHandle[] - { - m_ActiveCameraColorAttachment, - m_DecalLayersTexture, - }; - - m_RenderOpaqueForwardPass.Setup(rts, m_ActiveCameraDepthAttachment); + renderOpaqueForwardPass = m_RenderOpaqueForwardAndRenderingLayersPass; + m_RenderOpaqueForwardAndRenderingLayersPass.Setup(m_ActiveCameraColorAttachment, m_DecalLayersTexture, m_ActiveCameraDepthAttachment); } else - m_RenderOpaqueForwardPass.Setup(); + renderOpaqueForwardPass = m_RenderOpaqueForwardPass; - EnqueuePass(m_RenderOpaqueForwardPass); + renderOpaqueForwardPass.ConfigureColorStoreAction(opaquePassColorStoreAction); + renderOpaqueForwardPass.ConfigureDepthStoreAction(opaquePassDepthStoreAction); + + EnqueuePass(renderOpaqueForwardPass); } if (camera.clearFlags == CameraClearFlags.Skybox && cameraData.renderType != CameraRenderType.Overlay) From e832df401df7d75248c8cac9f6b76989a7b627ea Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 8 Feb 2022 17:29:58 +0200 Subject: [PATCH 23/38] Cleanup --- .../ShaderLibrary/ShaderVariablesFunctions.hlsl | 4 ++-- com.unity.render-pipelines.universal/Shaders/Lit.shader | 1 - .../Shaders/Utils/StencilDeferred.shader | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl index 989e6dd0131..b1422f84c4d 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl @@ -424,13 +424,13 @@ uint GetMeshRenderingLayer() float EncodeMeshRenderingLayer(uint renderingLayer) { - //return (renderingLayer & 0x0000FFFF) / (255.0 * 255.0); // todo expose as property + // TODO: Expose as property for the size return PackInt(renderingLayer, 16); } uint DecodeMeshRenderingLayer(float renderingLayer) { - //return (renderingLayer & 0x0000FFFF) / (255.0 * 255.0); // todo expose as property + // TODO: Expose as property for the size return UnpackInt(renderingLayer, 16); } diff --git a/com.unity.render-pipelines.universal/Shaders/Lit.shader b/com.unity.render-pipelines.universal/Shaders/Lit.shader index 00cacd15e87..892db392125 100644 --- a/com.unity.render-pipelines.universal/Shaders/Lit.shader +++ b/com.unity.render-pipelines.universal/Shaders/Lit.shader @@ -301,7 +301,6 @@ Shader "Universal Render Pipeline/Lit" HLSLPROGRAM #pragma exclude_renderers gles gles3 glcore #pragma target 4.5 -#pragma enable_d3d11_debug_symbols #pragma vertex DepthNormalsVertex #pragma fragment DepthNormalsFragment diff --git a/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader b/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader index a9fd0bbafa6..8460b55f3f4 100644 --- a/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader +++ b/com.unity.render-pipelines.universal/Shaders/Utils/StencilDeferred.shader @@ -508,7 +508,6 @@ Shader "Hidden/Universal Render Pipeline/StencilDeferred" HLSLPROGRAM #pragma exclude_renderers gles gles3 glcore #pragma target 4.5 -#pragma enable_d3d11_debug_symbols #pragma multi_compile_fragment _DEFERRED_STENCIL #pragma multi_compile _DIRECTIONAL From f4f8d6ec5820a077dfa3ca7bc1e5b06b0656ab1a Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 9 Feb 2022 09:18:51 +0200 Subject: [PATCH 24/38] Adding scene 250 into editor build settings --- .../ProjectSettings/EditorBuildSettings.asset | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TestProjects/UniversalGraphicsTest_Foundation/ProjectSettings/EditorBuildSettings.asset b/TestProjects/UniversalGraphicsTest_Foundation/ProjectSettings/EditorBuildSettings.asset index 9fd5fc5f573..bace9d7334f 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/ProjectSettings/EditorBuildSettings.asset +++ b/TestProjects/UniversalGraphicsTest_Foundation/ProjectSettings/EditorBuildSettings.asset @@ -269,4 +269,7 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/206_Motion_Vectors.unity guid: aa08e99a89c77574e9a00b9888fc75ce + - enabled: 1 + path: Assets/Scenes/250_RenderingLayers.unity + guid: 87ee64df2c957224ab067a27a80ea7af m_configObjects: {} From aa8930b5c7fcf5e14122d5939bf44e9c81a5256d Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 9 Feb 2022 10:05:47 +0200 Subject: [PATCH 25/38] Manual fix after merge --- .../Runtime/RendererFeatures/DecalRendererFeature.cs | 2 +- .../Runtime/RenderingLayerUtils.cs | 2 +- .../Runtime/UniversalRenderer.cs | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index e038ca5c73b..8ecb4c60590 100644 --- a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -491,7 +491,7 @@ public override void SetupRenderPasses(ScriptableRenderer renderer, in Rendering { if (m_Technique == DecalTechnique.DBuffer) { - m_DBufferRenderPass.Setup(renderingData.actualRenderingMode); + m_DBufferRenderPass.Setup(renderingData.cameraData); var universalRenderer = renderer as UniversalRenderer; if (universalRenderer.renderingModeActual == RenderingMode.Deferred) diff --git a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs index 6f77126460c..ad0c5a0ad49 100644 --- a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs +++ b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs @@ -32,7 +32,7 @@ public static Event GetEvent(UniversalRendererData universalRendererData) public static Event GetEvent(UniversalRenderer universalRenderer, List rendererFeatures) { var e = Event.None; - bool isDeferred = universalRenderer.renderingMode == RenderingMode.Deferred; + bool isDeferred = universalRenderer.renderingModeActual == RenderingMode.Deferred; foreach (var rendererFeature in rendererFeatures) { diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 73074355959..7b35e6e09d7 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -638,7 +638,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re if ((this.renderingModeActual == RenderingMode.Deferred && !this.useRenderPassEnabled) || requiresDepthPrepass || requiresDepthCopyPass) { var depthDescriptor = cameraTargetDescriptor; - if (requiresDepthPrepass && this.actualRenderingMode != RenderingMode.Deferred) + if (requiresDepthPrepass && this.renderingModeActual != RenderingMode.Deferred) { depthDescriptor.graphicsFormat = GraphicsFormat.None; depthDescriptor.depthStencilFormat = k_DepthStencilFormat; @@ -665,7 +665,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re ref var renderingLayersTexture = ref m_DecalLayersTexture; string renderingLayersTextureName = "_CameraRenderingLayersTexture"; - if (this.actualRenderingMode == RenderingMode.Deferred && m_DeferredLights.UseRenderingLayers) + if (this.renderingModeActual == RenderingMode.Deferred && m_DeferredLights.UseRenderingLayers) { renderingLayersTexture = ref m_DeferredLights.GbufferAttachments[(int)m_DeferredLights.GBufferRenderingLayers]; renderingLayersTextureName = renderingLayersTexture.name; @@ -679,7 +679,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // Find compatible render-target format for storing normals. // Shader code outputs normals in signed format to be compatible with deferred gbuffer layout. // Deferred gbuffer format is signed so that normals can be blended for terrain geometry. - if (this.actualRenderingMode == RenderingMode.Deferred && m_DeferredLights.UseRenderingLayers) + if (this.renderingModeActual == RenderingMode.Deferred && m_DeferredLights.UseRenderingLayers) renderingLayersDescriptor.graphicsFormat = m_DeferredLights.GetGBufferFormat(m_DeferredLights.GBufferRenderingLayers); // the one used by the gbuffer. else renderingLayersDescriptor.graphicsFormat = GraphicsFormat.R16_UNorm; @@ -688,7 +688,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re CommandBuffer cmd = CommandBufferPool.Get(); cmd.SetGlobalTexture(renderingLayersTexture.name, renderingLayersTexture.nameID); - if (this.actualRenderingMode == RenderingMode.Deferred) // TODO: Clean this up + if (this.renderingModeActual == RenderingMode.Deferred) // TODO: Clean this up cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersTexture.nameID); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); @@ -722,7 +722,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re CommandBuffer cmd = CommandBufferPool.Get(); cmd.SetGlobalTexture(normalsTexture.name, normalsTexture.nameID); - if (this.actualRenderingMode == RenderingMode.Deferred) // TODO: Clean this up + if (this.renderingModeActual == RenderingMode.Deferred) // TODO: Clean this up cmd.SetGlobalTexture("_CameraNormalsTexture", normalsTexture.nameID); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); From 212a5af964651510ff6f19fdc7b83ef03aaab666 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 9 Feb 2022 15:24:05 +0200 Subject: [PATCH 26/38] Fixing forward emissive to work with decal layers --- .../Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs index e7817d4517f..b1acf01784d 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs @@ -513,6 +513,7 @@ static class DecalPasses renderStates = DecalRenderStates.ForwardEmissiveMesh, pragmas = DecalPragmas.MultipleRenderTargets, defines = DecalDefines.MeshWithEmission, + keywords = DecalKeywords.ForwardEmissiveProjector, includes = DecalIncludes.DBuffer, }; @@ -780,6 +781,7 @@ static class DecalPragmas { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, + { Pragma.debug }, }; public static PragmaCollection GBuffer = new PragmaCollection @@ -789,6 +791,7 @@ static class DecalPragmas { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, + { Pragma.debug }, }; public static PragmaCollection MultipleRenderTargets = new PragmaCollection @@ -952,6 +955,11 @@ static class Descriptors { Descriptors.DecalLayers }, }; + public static KeywordCollection ForwardEmissiveProjector = new KeywordCollection + { + { Descriptors.DecalLayers }, + }; + public static readonly KeywordCollection ScreenSpaceMesh = new KeywordCollection { { CoreKeywordDescriptors.StaticLightmap }, From 41bf05bca8b705d8de0b32d36ff8f451365aa925 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 9 Feb 2022 16:40:44 +0200 Subject: [PATCH 27/38] Removing accidental commit --- .../Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs index b1acf01784d..9e836701a7c 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs @@ -781,7 +781,6 @@ static class DecalPragmas { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, - { Pragma.debug }, }; public static PragmaCollection GBuffer = new PragmaCollection @@ -791,7 +790,6 @@ static class DecalPragmas { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, - { Pragma.debug }, }; public static PragmaCollection MultipleRenderTargets = new PragmaCollection From 8b27fcba786d5c29265c6b2e387ab50ef35b2c6a Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 22 Feb 2022 10:19:30 +0200 Subject: [PATCH 28/38] Removing decal layers from gl and fixing emissive --- .../Targets/UniversalDecalSubTarget.cs | 1 + .../Editor/ShaderPreprocessor.cs | 67 ++++++++++++++++++- .../Decal/DBuffer/DBufferRenderPass.cs | 3 +- .../Runtime/UniversalRenderer.cs | 14 +++- 4 files changed, 80 insertions(+), 5 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs index 9e836701a7c..422b5df4ad1 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs @@ -404,6 +404,7 @@ static class DecalPasses renderStates = DecalRenderStates.ForwardEmissiveProjector, pragmas = DecalPragmas.MultipleRenderTargets, defines = DecalDefines.ProjectorWithEmission, + keywords = DecalKeywords.ForwardEmissiveProjector, includes = DecalIncludes.DBuffer, }; diff --git a/com.unity.render-pipelines.universal/Editor/ShaderPreprocessor.cs b/com.unity.render-pipelines.universal/Editor/ShaderPreprocessor.cs index 4bea4261d86..c140b004362 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderPreprocessor.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderPreprocessor.cs @@ -16,7 +16,7 @@ namespace UnityEditor.Rendering.Universal { [Flags] - enum ShaderFeatures + enum ShaderFeatures : long { None = 0, MainLight = (1 << 0), @@ -50,6 +50,10 @@ enum ShaderFeatures ScreenSpaceOcclusionAfterOpaque = (1 << 28), AdditionalLightsKeepOffVariants = (1 << 29), ShadowsKeepOffVariants = (1 << 30), + DecalLayers = (1 << 31), + OpaqueWriteRenderingLayers = (1L << 32), + GBufferWriteRenderingLayers = (1L << 33), + DepthNormalPassRenderingLayers = (1L << 34), } [Flags] @@ -70,6 +74,8 @@ enum VolumeFeatures internal class ShaderPreprocessor : IPreprocessShaders { public static readonly string kPassNameGBuffer = "GBuffer"; + public static readonly string kPassNameForwardLit = "ForwardLit"; + public static readonly string kPassNameDepthNormals = "DepthNormals"; public static readonly string kTerrainShaderName = "Universal Render Pipeline/Terrain/Lit"; #if PROFILE_BUILD private const string k_ProcessShaderTag = "OnProcessShader"; @@ -102,6 +108,8 @@ internal class ShaderPreprocessor : IPreprocessShaders LocalKeyword m_ScreenSpaceOcclusion; LocalKeyword m_UseFastSRGBLinearConversion; LocalKeyword m_LightLayers; + LocalKeyword m_DecalLayers; + LocalKeyword m_WriteRenderingLayers; LocalKeyword m_RenderPassEnabled; LocalKeyword m_DebugDisplay; LocalKeyword m_DBufferMRT1; @@ -174,6 +182,8 @@ void InitializeLocalShaderKeywords(Shader shader) m_ScreenSpaceOcclusion = TryGetLocalKeyword(shader, ShaderKeywordStrings.ScreenSpaceOcclusion); m_UseFastSRGBLinearConversion = TryGetLocalKeyword(shader, ShaderKeywordStrings.UseFastSRGBLinearConversion); m_LightLayers = TryGetLocalKeyword(shader, ShaderKeywordStrings.LightLayers); + m_DecalLayers = TryGetLocalKeyword(shader, ShaderKeywordStrings.DecalLayers); + m_WriteRenderingLayers = TryGetLocalKeyword(shader, ShaderKeywordStrings.WriteRenderingLayers); m_RenderPassEnabled = TryGetLocalKeyword(shader, ShaderKeywordStrings.RenderPassEnabled); m_DebugDisplay = TryGetLocalKeyword(shader, ShaderKeywordStrings.DEBUG_DISPLAY); m_DBufferMRT1 = TryGetLocalKeyword(shader, ShaderKeywordStrings.DBufferMRT1); @@ -480,6 +490,21 @@ bool StripUnusedFeatures(ShaderFeatures features, Shader shader, ShaderSnippetDa m_DBufferMRT3, ShaderFeatures.DBufferMRT3)) return true; + if (compilerData.shaderCompilerPlatform == ShaderCompilerPlatform.GLES20 || + compilerData.shaderCompilerPlatform == ShaderCompilerPlatform.GLES3x || + compilerData.shaderCompilerPlatform == ShaderCompilerPlatform.OpenGLCore) + { + // Rendering layers are not supported on gl + if (compilerData.shaderKeywordSet.IsEnabled(m_LightLayers)) + return true; + } + else + { + // Decal Layers + if (stripTool.StripMultiCompile(m_DecalLayers, ShaderFeatures.DecalLayers)) + return true; + } + // TODO: Test against lightMode tag instead. if (snippetData.passName == kPassNameGBuffer) { @@ -503,6 +528,29 @@ bool StripUnusedFeatures(ShaderFeatures features, Shader shader, ShaderSnippetDa m_DecalNormalBlendHigh, ShaderFeatures.DecalNormalBlendHigh)) return true; + string keywordNames = ""; + foreach (var keyword in compilerData.shaderKeywordSet.GetShaderKeywords()) + { + keywordNames += " " + keyword.name; + } + + // Write Rendering Layers + if (snippetData.passName == kPassNameDepthNormals) + { + if (stripTool.StripMultiCompile(m_WriteRenderingLayers, ShaderFeatures.DepthNormalPassRenderingLayers)) + return true; + } + if (snippetData.passName == kPassNameForwardLit) + { + if (stripTool.StripMultiCompile(m_WriteRenderingLayers, ShaderFeatures.OpaqueWriteRenderingLayers)) + return true; + } + if (snippetData.passName == kPassNameGBuffer) + { + if (stripTool.StripMultiCompile(m_WriteRenderingLayers, ShaderFeatures.GBufferWriteRenderingLayers)) + return true; + } + return false; } @@ -994,6 +1042,8 @@ private static ShaderFeatures GetSupportedShaderFeatures(UniversalRenderPipeline shaderFeatures |= ShaderFeatures.DecalGBuffer; break; } + if (decal.requiresDecalLayers) + shaderFeatures |= ShaderFeatures.DecalLayers; } } @@ -1002,6 +1052,21 @@ private static ShaderFeatures GetSupportedShaderFeatures(UniversalRenderPipeline rendererClustered = universalRendererData.renderingMode == RenderingMode.Forward && universalRendererData.clusteredRendering; + switch (RenderingLayerUtils.GetEvent(universalRendererData)) + { + case RenderingLayerUtils.Event.DepthNormalPrePass: + shaderFeatures |= ShaderFeatures.DepthNormalPassRenderingLayers; + break; + + case RenderingLayerUtils.Event.ForwardOpaque: + shaderFeatures |= ShaderFeatures.OpaqueWriteRenderingLayers; + break; + + case RenderingLayerUtils.Event.GBuffer: + shaderFeatures |= ShaderFeatures.GBufferWriteRenderingLayers; + break; + } + #if ENABLE_VR && ENABLE_XR_MODULE if (universalRendererData.xrSystemData != null) shaderFeatures |= ShaderFeatures.DrawProcedural; diff --git a/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs b/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs index 8fe294bc415..b856bb2edb7 100644 --- a/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Decal/DBuffer/DBufferRenderPass.cs @@ -21,7 +21,6 @@ internal class DBufferRenderPass : ScriptableRenderPass private FilteringSettings m_FilteringSettings; private List m_ShaderTagIdList; - private int m_DBufferCount; private ProfilingSampler m_ProfilingSampler; private bool m_DecalLayers; @@ -51,7 +50,6 @@ public DBufferRenderPass(Material dBufferClear, DBufferSettings settings, DecalD int dBufferCount = (int)settings.surfaceData + 1; dBufferColorHandles = new RTHandle[dBufferCount]; - m_DBufferCount = dBufferCount; } public void Dispose() @@ -187,6 +185,7 @@ public override void OnCameraCleanup(CommandBuffer cmd) CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DBufferMRT1, false); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DBufferMRT2, false); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DBufferMRT3, false); + CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.DecalLayers, false); } } } diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 7b35e6e09d7..6a94c251fd0 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -375,6 +375,11 @@ bool IsGLESDevice() return SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLES2 || SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLES3; } + bool IsGLDevice() + { + return IsGLESDevice() || SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLCore; + } + /// public override void Setup(ScriptableRenderContext context, ref RenderingData renderingData) { @@ -416,6 +421,11 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re var renderingLayersEvent = RenderingLayerUtils.GetEvent(this, rendererFeatures); + // All passes that use write to rendering layers are excluded from gl + // So we disable it to avoid setting multiple render targets + if (IsGLDevice()) + renderingLayersEvent = RenderingLayerUtils.Event.None; + bool requiresRenderingLayer = renderingLayersEvent != RenderingLayerUtils.Event.None; bool renderingLayerProvidesByDepthNormalPass = renderingLayersEvent == RenderingLayerUtils.Event.DepthNormalPrePass; bool renderingLayerProvidesRenderObjectPass = renderingLayersEvent == RenderingLayerUtils.Event.ForwardOpaque; @@ -674,8 +684,8 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re var renderingLayersDescriptor = cameraTargetDescriptor; renderingLayersDescriptor.depthBufferBits = 0; // Never have MSAA on this depth texture. When doing MSAA depth priming this is the texture that is resolved to and used for post-processing. - if (requiresDepthPrepass) - renderingLayersDescriptor.msaaSamples = 1;// Depth-Only pass don't use MSAA + //if (requiresDepthPrepass) + // renderingLayersDescriptor.msaaSamples = 1;// Depth-Only pass don't use MSAA // Find compatible render-target format for storing normals. // Shader code outputs normals in signed format to be compatible with deferred gbuffer layout. // Deferred gbuffer format is signed so that normals can be blended for terrain geometry. From 18a4e2fc7a3d743db28cb91016f43aaa76736d32 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Tue, 22 Feb 2022 10:20:06 +0200 Subject: [PATCH 29/38] Adding reference images for vulkan --- .../Vulkan/None/250_RenderingLayers.png | 3 + .../Vulkan/None/250_RenderingLayers.png.meta | 99 +++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png create mode 100644 TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png.meta diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png new file mode 100644 index 00000000000..2c9abdbf360 --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 +size 98831 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png.meta new file mode 100644 index 00000000000..6a36a6fda0e --- /dev/null +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: fce2a7fea27ea97469a1fcbb4ef396cb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: From bc6bb27ce37536cb0e203fcedc2b76d98f8f92d0 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 23 Feb 2022 09:00:08 +0200 Subject: [PATCH 30/38] Adding rending layer size controlling --- .../Runtime/DeferredLights.cs | 6 +- .../RendererFeatures/DecalRendererFeature.cs | 5 ++ .../Runtime/RenderingLayerUtils.cs | 71 ++++++++++++++++++- .../Runtime/ScriptableRendererFeature.cs | 5 ++ .../Runtime/UniversalRenderPipelineCore.cs | 2 + .../Runtime/UniversalRenderer.cs | 9 ++- .../ShaderLibrary/Input.hlsl | 2 + .../ShaderVariablesFunctions.hlsl | 6 +- .../Runtime/DrawRenderingLayersFeature.cs | 8 +++ 9 files changed, 103 insertions(+), 11 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs index fa51dfbbb2b..41ad9eef3fb 100644 --- a/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs +++ b/com.unity.render-pipelines.universal/Runtime/DeferredLights.cs @@ -153,7 +153,7 @@ internal GraphicsFormat GetGBufferFormat(int index) else if (index == GBufferShadowMask) // Optional: shadow mask is outputed in mixed lighting subtractive mode for non-static meshes only return GraphicsFormat.R8G8B8A8_UNorm; else if (index == GBufferRenderingLayers) // Optional: rendering layers is outputed when light layers are enabled (subset of rendering layers) - return GraphicsFormat.R16_UNorm; + return RenderingLayersFormat; else return GraphicsFormat.None; } @@ -163,6 +163,8 @@ internal GraphicsFormat GetGBufferFormat(int index) // internal bool UseRenderingLayers { get { return UseLightLayers || UseDecalLayers; } } // + internal GraphicsFormat RenderingLayersFormat { get; set; } + // internal bool UseDecalLayers { get; set; } // internal bool UseLightLayers { get { return UniversalRenderPipeline.asset.supportsLightLayers; } } @@ -308,6 +310,8 @@ internal void SetupLights(ScriptableRenderContext context, ref RenderingData ren // This should be moved to a more global scope when framebuffer fetch is introduced to more passes CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.RenderPassEnabled, this.UseRenderPass && renderingData.cameraData.cameraType == CameraType.Game); CoreUtils.SetKeyword(cmd, ShaderKeywordStrings.LightLayers, UseLightLayers); + + cmd.SetGlobalInt(ShaderPropertyId.renderingLayerMaskSize, RenderingLayerUtils.GetBits(RenderingLayersFormat)); } context.ExecuteCommandBuffer(cmd); diff --git a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index 8ecb4c60590..7bf2a3c9092 100644 --- a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -223,6 +223,11 @@ internal override RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferr return isDeferred ? RenderingLayerUtils.Event.GBuffer : RenderingLayerUtils.Event.ForwardOpaque; } + internal override RenderingLayerUtils.MaskSize RequireRenderingLayerMaskSize(bool isDeferred) + { + return RenderingLayerUtils.MaskSize.Bits16; + } + internal DBufferSettings GetDBufferSettings() { if (m_Settings.technique == DecalTechniqueOption.Automatic) diff --git a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs index ad0c5a0ad49..331d4cf57a6 100644 --- a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs +++ b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs @@ -1,4 +1,6 @@ +using System; using System.Collections.Generic; +using UnityEngine.Experimental.Rendering; namespace UnityEngine.Rendering.Universal { @@ -23,7 +25,7 @@ public static Event GetEvent(UniversalRendererData universalRendererData) foreach (var rendererFeature in universalRendererData.rendererFeatures) { if (rendererFeature.isActive) - e = CombineEvents(e, rendererFeature.RequireRenderingLayers(isDeferred)); + e = Combine(e, rendererFeature.RequireRenderingLayers(isDeferred)); } return e; @@ -37,12 +39,70 @@ public static Event GetEvent(UniversalRenderer universalRenderer, List rendererFeatures) + { + var e = MaskSize.Bits8; + bool isDeferred = universalRenderer.renderingModeActual == RenderingMode.Deferred; + + foreach (var rendererFeature in rendererFeatures) + { + if (rendererFeature.isActive) + e = Combine(e, rendererFeature.RequireRenderingLayerMaskSize(isDeferred)); + } + + return e; + } + + public enum MaskSize + { + Bits8, + Bits16, + Bits24, + Bits32, + } + + public static int GetBits(GraphicsFormat format) + { + switch (format) + { + case GraphicsFormat.R8_UNorm: + return 8; + case GraphicsFormat.R16_UNorm: + return 16; + case GraphicsFormat.R32_SFloat: + return 31; + default: + throw new NotImplementedException(); + } + } + + public static int GetBits(MaskSize maskSize) + { + return GetBits(GetFormat(maskSize)); + } + + public static GraphicsFormat GetFormat(MaskSize maskSize) + { + switch (maskSize) + { + case MaskSize.Bits8: + return GraphicsFormat.R8_UNorm; + case MaskSize.Bits16: + return GraphicsFormat.R16_UNorm; + case MaskSize.Bits24: + case MaskSize.Bits32: + return GraphicsFormat.R32_SFloat; + default: + throw new NotImplementedException(); + } + } + public static uint ToRenderingLayers(LightLayerEnum lightLayers) { return (uint)lightLayers; @@ -53,9 +113,14 @@ public static uint ToRenderingLayers(DecalLayerEnum decalLayers) return (uint)decalLayers << 8; } - static Event CombineEvents(Event a, Event b) + static Event Combine(Event a, Event b) { return (Event)Mathf.Min((int)a, (int)b); } + + static MaskSize Combine(MaskSize a, MaskSize b) + { + return (MaskSize)Mathf.Max((int)a, (int)b); + } } } diff --git a/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs index ac791d97e02..73dbef71d45 100644 --- a/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs @@ -71,6 +71,11 @@ internal virtual RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferre return RenderingLayerUtils.Event.None; } + internal virtual RenderingLayerUtils.MaskSize RequireRenderingLayerMaskSize(bool isDeferred) + { + return RenderingLayerUtils.MaskSize.Bits8; + } + /// /// Sets the state of ScriptableRenderFeature (true: the feature is active, false: the feature is inactive). /// If the feature is active, it is added to the renderer it is attached to, otherwise the feature is skipped while rendering. diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs index 7fb71160fa9..9517503f9a1 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipelineCore.cs @@ -369,6 +369,8 @@ internal static class ShaderPropertyId // Required for 2D Unlit Shadergraph master node as it doesn't currently support hidden properties. public static readonly int rendererColor = Shader.PropertyToID("_RendererColor"); + + public static readonly int renderingLayerMaskSize = Shader.PropertyToID("_RenderingLayerMaskSize"); } /// diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 6a94c251fd0..eac55c595fa 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -420,6 +420,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re RenderPassInputSummary renderPassInputs = GetRenderPassInputs(ref renderingData); var renderingLayersEvent = RenderingLayerUtils.GetEvent(this, rendererFeatures); + var renderingLayersSize = RenderingLayerUtils.GetMaskSize(this, rendererFeatures); // All passes that use write to rendering layers are excluded from gl // So we disable it to avoid setting multiple render targets @@ -437,6 +438,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // TODO: investigate the order of call, had to change because of requiresRenderingLayer if (m_DeferredLights != null) { + m_DeferredLights.RenderingLayersFormat = RenderingLayerUtils.GetFormat(renderingLayersSize); m_DeferredLights.UseDecalLayers = requiresRenderingLayer; // TODO: This needs to be setup early, otherwise gbuffer attachments will be allocated with wrong size @@ -684,20 +686,21 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re var renderingLayersDescriptor = cameraTargetDescriptor; renderingLayersDescriptor.depthBufferBits = 0; // Never have MSAA on this depth texture. When doing MSAA depth priming this is the texture that is resolved to and used for post-processing. - //if (requiresDepthPrepass) - // renderingLayersDescriptor.msaaSamples = 1;// Depth-Only pass don't use MSAA + if (!renderingLayerProvidesRenderObjectPass) + renderingLayersDescriptor.msaaSamples = 1;// Depth-Only pass don't use MSAA // Find compatible render-target format for storing normals. // Shader code outputs normals in signed format to be compatible with deferred gbuffer layout. // Deferred gbuffer format is signed so that normals can be blended for terrain geometry. if (this.renderingModeActual == RenderingMode.Deferred && m_DeferredLights.UseRenderingLayers) renderingLayersDescriptor.graphicsFormat = m_DeferredLights.GetGBufferFormat(m_DeferredLights.GBufferRenderingLayers); // the one used by the gbuffer. else - renderingLayersDescriptor.graphicsFormat = GraphicsFormat.R16_UNorm; + renderingLayersDescriptor.graphicsFormat = RenderingLayerUtils.GetFormat(renderingLayersSize); RenderingUtils.ReAllocateIfNeeded(ref renderingLayersTexture, renderingLayersDescriptor, FilterMode.Point, TextureWrapMode.Clamp, name: renderingLayersTextureName); CommandBuffer cmd = CommandBufferPool.Get(); cmd.SetGlobalTexture(renderingLayersTexture.name, renderingLayersTexture.nameID); + cmd.SetGlobalInt(ShaderPropertyId.renderingLayerMaskSize, RenderingLayerUtils.GetBits(renderingLayersSize)); if (this.renderingModeActual == RenderingMode.Deferred) // TODO: Clean this up cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersTexture.nameID); context.ExecuteCommandBuffer(cmd); diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl index ed54ebee52e..6652f796da3 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl @@ -93,6 +93,8 @@ half4 _AmbientOcclusionParam; half4 _AdditionalLightsCount; +uint _RenderingLayerMaskSize; + #if USE_CLUSTERED_LIGHTING // Directional lights would be in all clusters, so they don't go into the cluster structure. // Instead, they are stored first in the light buffer. diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl index 01292ce99b7..2d0206a4e6a 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl @@ -424,14 +424,12 @@ uint GetMeshRenderingLayer() float EncodeMeshRenderingLayer(uint renderingLayer) { - // TODO: Expose as property for the size - return PackInt(renderingLayer, 16); + return PackInt(renderingLayer, _RenderingLayerMaskSize); } uint DecodeMeshRenderingLayer(float renderingLayer) { - // TODO: Expose as property for the size - return UnpackInt(renderingLayer, 16); + return UnpackInt(renderingLayer, _RenderingLayerMaskSize); } #endif // UNITY_SHADER_VARIABLES_FUNCTIONS_INCLUDED diff --git a/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs index 33745ac5fee..0f6762b1c29 100644 --- a/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs +++ b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs @@ -115,6 +115,9 @@ private void Render(CommandBuffer cmd, in CameraData cameraData) [SerializeField] private RenderPassEvent m_Event = RenderPassEvent.AfterRenderingPrePasses; + [SerializeField] + internal RenderingLayerUtils.MaskSize m_MaskSize = RenderingLayerUtils.MaskSize.Bits8; + private Material m_Material; private DrawRenderingLayersPrePass m_DrawRenderingLayerPass; private DrawRenderingLayersPass m_RequestRenderingLayerPass; @@ -131,6 +134,11 @@ internal override RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferr return RenderingLayerUtils.Event.ForwardOpaque; } + internal override RenderingLayerUtils.MaskSize RequireRenderingLayerMaskSize(bool isDeferred) + { + return m_MaskSize; + } + /// public override void Create() { From b8258c21996d9b9f1471251cde585c64d62706c5 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 23 Feb 2022 09:54:10 +0200 Subject: [PATCH 31/38] Cleanup --- .../Editor/ShaderPreprocessor.cs | 25 +++++--- .../Runtime/Passes/DrawObjectsPass.cs | 11 +++- .../RendererFeatures/DecalRendererFeature.cs | 14 ++-- .../Runtime/RenderingLayerUtils.cs | 64 +++++++++---------- .../Runtime/ScriptableRendererFeature.cs | 17 +++-- .../Runtime/UniversalRenderer.cs | 26 ++++---- .../Runtime/DrawRenderingLayersFeature.cs | 15 ++--- 7 files changed, 86 insertions(+), 86 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderPreprocessor.cs b/com.unity.render-pipelines.universal/Editor/ShaderPreprocessor.cs index c140b004362..5156fada833 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderPreprocessor.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderPreprocessor.cs @@ -1052,19 +1052,24 @@ private static ShaderFeatures GetSupportedShaderFeatures(UniversalRenderPipeline rendererClustered = universalRendererData.renderingMode == RenderingMode.Forward && universalRendererData.clusteredRendering; - switch (RenderingLayerUtils.GetEvent(universalRendererData)) + if (RenderingLayerUtils.RequireRenderingLayers(universalRendererData, + out var renderingLayersEvent, out var renderingLayerMaskSize)) { - case RenderingLayerUtils.Event.DepthNormalPrePass: - shaderFeatures |= ShaderFeatures.DepthNormalPassRenderingLayers; - break; + switch (renderingLayersEvent) + { + case RenderingLayerUtils.Event.DepthNormalPrePass: + shaderFeatures |= ShaderFeatures.DepthNormalPassRenderingLayers; + break; - case RenderingLayerUtils.Event.ForwardOpaque: - shaderFeatures |= ShaderFeatures.OpaqueWriteRenderingLayers; - break; + case RenderingLayerUtils.Event.Opaque: + shaderFeatures |= universalRendererData.renderingMode == RenderingMode.Forward ? + ShaderFeatures.OpaqueWriteRenderingLayers : + ShaderFeatures.GBufferWriteRenderingLayers; + break; - case RenderingLayerUtils.Event.GBuffer: - shaderFeatures |= ShaderFeatures.GBufferWriteRenderingLayers; - break; + default: + throw new NotImplementedException(); + } } #if ENABLE_VR && ENABLE_XR_MODULE diff --git a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs index 4ce0b417db1..ef6b87f6127 100644 --- a/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs +++ b/com.unity.render-pipelines.universal/Runtime/Passes/DrawObjectsPass.cs @@ -7,12 +7,12 @@ namespace UnityEngine.Rendering.Universal.Internal /// /// Extension of DrawObjectPass that also output Rendering Layers Texture as second render target. /// - internal class DrawObjectsAndRenderingLayersPass : DrawObjectsPass + internal class DrawObjectsWithRenderingLayersPass : DrawObjectsPass { RTHandle[] m_ColorTargetIndentifiers; RTHandle m_DepthTargetIndentifiers; - public DrawObjectsAndRenderingLayersPass(URPProfileId profilerTag, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference) : + public DrawObjectsWithRenderingLayersPass(URPProfileId profilerTag, bool opaque, RenderPassEvent evt, RenderQueueRange renderQueueRange, LayerMask layerMask, StencilState stencilState, int stencilReference) : base(profilerTag, opaque, evt, renderQueueRange, layerMask, stencilState, stencilReference) { m_ColorTargetIndentifiers = new RTHandle[2]; @@ -20,6 +20,13 @@ public DrawObjectsAndRenderingLayersPass(URPProfileId profilerTag, bool opaque, public void Setup(RTHandle colorAttachment, RTHandle renderingLayersTexture, RTHandle depthAttachment) { + if (colorAttachment == null) + throw new ArgumentException("Color attachment can not be null", "colorAttachment"); + if (renderingLayersTexture == null) + throw new ArgumentException("Rendering layers attachment can not be null", "renderingLayersTexture"); + if (depthAttachment == null) + throw new ArgumentException("Depth attachment can not be null", "depthAttachment"); + m_ColorTargetIndentifiers[0] = colorAttachment; m_ColorTargetIndentifiers[1] = renderingLayersTexture; m_DepthTargetIndentifiers = depthAttachment; diff --git a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs index 7bf2a3c9092..c8d53334c81 100644 --- a/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/RendererFeatures/DecalRendererFeature.cs @@ -214,18 +214,12 @@ public override void Create() m_RecreateSystems = true; } - internal override RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferred) + internal override bool RequireRenderingLayers(bool isDeferred, out RenderingLayerUtils.Event atEvent, out RenderingLayerUtils.MaskSize maskSize) { var technique = GetTechnique(isDeferred); - if (technique == DecalTechnique.DBuffer) - return RenderingLayerUtils.Event.DepthNormalPrePass; - else - return isDeferred ? RenderingLayerUtils.Event.GBuffer : RenderingLayerUtils.Event.ForwardOpaque; - } - - internal override RenderingLayerUtils.MaskSize RequireRenderingLayerMaskSize(bool isDeferred) - { - return RenderingLayerUtils.MaskSize.Bits16; + atEvent = technique == DecalTechnique.DBuffer ? RenderingLayerUtils.Event.DepthNormalPrePass : RenderingLayerUtils.Event.Opaque; + maskSize = RenderingLayerUtils.MaskSize.Bits16; + return requiresDecalLayers; } internal DBufferSettings GetDBufferSettings() diff --git a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs index 331d4cf57a6..12d7380ea1a 100644 --- a/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs +++ b/com.unity.render-pipelines.universal/Runtime/RenderingLayerUtils.cs @@ -12,59 +12,57 @@ internal static class RenderingLayerUtils public enum Event { DepthNormalPrePass, - ForwardOpaque, - GBuffer, - None, + Opaque, } - public static Event GetEvent(UniversalRendererData universalRendererData) + public enum MaskSize { - var e = Event.None; - bool isDeferred = universalRendererData.renderingMode == RenderingMode.Deferred; - - foreach (var rendererFeature in universalRendererData.rendererFeatures) - { - if (rendererFeature.isActive) - e = Combine(e, rendererFeature.RequireRenderingLayers(isDeferred)); - } - - return e; + Bits8, + Bits16, + Bits24, + Bits32, } - public static Event GetEvent(UniversalRenderer universalRenderer, List rendererFeatures) + public static bool RequireRenderingLayers(UniversalRendererData universalRendererData, + out Event combinedEvent, out MaskSize combinedMaskSize) { - var e = Event.None; - bool isDeferred = universalRenderer.renderingModeActual == RenderingMode.Deferred; + combinedEvent = Event.DepthNormalPrePass; + combinedMaskSize = MaskSize.Bits8; - foreach (var rendererFeature in rendererFeatures) + bool isDeferred = universalRendererData.renderingMode == RenderingMode.Deferred; + bool result = false; + foreach (var rendererFeature in universalRendererData.rendererFeatures) { if (rendererFeature.isActive) - e = Combine(e, rendererFeature.RequireRenderingLayers(isDeferred)); + { + result |= rendererFeature.RequireRenderingLayers(isDeferred, out Event rendererEvent, out MaskSize rendererMaskSize); + combinedEvent = Combine(combinedEvent, rendererEvent); + combinedMaskSize = Combine(combinedMaskSize, rendererMaskSize); + } } - return e; + return result; } - public static MaskSize GetMaskSize(UniversalRenderer universalRenderer, List rendererFeatures) + public static bool RequireRenderingLayers(UniversalRenderer universalRenderer, List rendererFeatures, + out Event combinedEvent, out MaskSize combinedMaskSize) { - var e = MaskSize.Bits8; - bool isDeferred = universalRenderer.renderingModeActual == RenderingMode.Deferred; + combinedEvent = Event.Opaque; + combinedMaskSize = MaskSize.Bits8; + bool isDeferred = universalRenderer.renderingModeActual == RenderingMode.Deferred; + bool result = false; foreach (var rendererFeature in rendererFeatures) { if (rendererFeature.isActive) - e = Combine(e, rendererFeature.RequireRenderingLayerMaskSize(isDeferred)); + { + result |= rendererFeature.RequireRenderingLayers(isDeferred, out Event rendererEvent, out MaskSize rendererMaskSize); + combinedEvent = Combine(combinedEvent, rendererEvent); + combinedMaskSize = Combine(combinedMaskSize, rendererMaskSize); + } } - return e; - } - - public enum MaskSize - { - Bits8, - Bits16, - Bits24, - Bits32, + return result; } public static int GetBits(GraphicsFormat format) diff --git a/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs b/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs index 73dbef71d45..191eb2a0931 100644 --- a/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs +++ b/com.unity.render-pipelines.universal/Runtime/ScriptableRendererFeature.cs @@ -62,18 +62,17 @@ internal virtual bool SupportsNativeRenderPass() } /// - /// Override this method and return event in order URP to produce rendering layers texture at specified event. + /// Override this method and return true that renderer would produce rendering layers texture. /// - /// The true value if Renderer is using deffered rendering path. + /// True if renderer is using deferred rendering mode + /// Requeted event at which rendering layers texture will be produced + /// Requested bit size of rendering layers texture /// - internal virtual RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferred) + internal virtual bool RequireRenderingLayers(bool isDeferred, out RenderingLayerUtils.Event atEvent, out RenderingLayerUtils.MaskSize maskSize) { - return RenderingLayerUtils.Event.None; - } - - internal virtual RenderingLayerUtils.MaskSize RequireRenderingLayerMaskSize(bool isDeferred) - { - return RenderingLayerUtils.MaskSize.Bits8; + atEvent = RenderingLayerUtils.Event.DepthNormalPrePass; + maskSize = RenderingLayerUtils.MaskSize.Bits8; + return false; } /// diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index eac55c595fa..531691ceacd 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -72,7 +72,7 @@ private static class Profiling DeferredPass m_DeferredPass; DrawObjectsPass m_RenderOpaqueForwardOnlyPass; DrawObjectsPass m_RenderOpaqueForwardPass; - DrawObjectsAndRenderingLayersPass m_RenderOpaqueForwardAndRenderingLayersPass; + DrawObjectsWithRenderingLayersPass m_RenderOpaqueForwardWithRenderingLayersPass; DrawSkyboxPass m_DrawSkyboxPass; CopyDepthPass m_CopyDepthPass; CopyColorPass m_CopyColorPass; @@ -234,7 +234,7 @@ public UniversalRenderer(UniversalRendererData data) : base(data) // Always create this pass even in deferred because we use it for wireframe rendering in the Editor or offscreen depth texture rendering. m_RenderOpaqueForwardPass = new DrawObjectsPass(URPProfileId.DrawOpaqueObjects, true, RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask, m_DefaultStencilState, stencilData.stencilReference); - m_RenderOpaqueForwardAndRenderingLayersPass = new DrawObjectsAndRenderingLayersPass(URPProfileId.DrawOpaqueObjects, true, RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask, m_DefaultStencilState, stencilData.stencilReference); + m_RenderOpaqueForwardWithRenderingLayersPass = new DrawObjectsWithRenderingLayersPass(URPProfileId.DrawOpaqueObjects, true, RenderPassEvent.BeforeRenderingOpaques, RenderQueueRange.opaque, data.opaqueLayerMask, m_DefaultStencilState, stencilData.stencilReference); bool copyDepthAfterTransparents = m_CopyDepthMode == CopyDepthMode.AfterTransparents; @@ -419,19 +419,21 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // Gather render passe input requirements RenderPassInputSummary renderPassInputs = GetRenderPassInputs(ref renderingData); - var renderingLayersEvent = RenderingLayerUtils.GetEvent(this, rendererFeatures); - var renderingLayersSize = RenderingLayerUtils.GetMaskSize(this, rendererFeatures); + // Gather render pass require rendering layers event and mask size + bool requiresRenderingLayer = RenderingLayerUtils.RequireRenderingLayers(this, rendererFeatures, + out var renderingLayersEvent, out var renderingLayersSize); + bool renderingLayerProvidesByDepthNormalPass = requiresRenderingLayer && renderingLayersEvent == RenderingLayerUtils.Event.DepthNormalPrePass; + bool renderingLayerProvidesRenderObjectPass = requiresRenderingLayer && + this.renderingModeActual == RenderingMode.Forward && renderingLayersEvent == RenderingLayerUtils.Event.Opaque; + bool renderingLayerProvidesGBufferPass = requiresRenderingLayer && + this.renderingModeActual == RenderingMode.Deferred && renderingLayersEvent == RenderingLayerUtils.Event.Opaque; // All passes that use write to rendering layers are excluded from gl // So we disable it to avoid setting multiple render targets if (IsGLDevice()) - renderingLayersEvent = RenderingLayerUtils.Event.None; - - bool requiresRenderingLayer = renderingLayersEvent != RenderingLayerUtils.Event.None; - bool renderingLayerProvidesByDepthNormalPass = renderingLayersEvent == RenderingLayerUtils.Event.DepthNormalPrePass; - bool renderingLayerProvidesRenderObjectPass = renderingLayersEvent == RenderingLayerUtils.Event.ForwardOpaque; - bool renderingLayerProvidesGBufferPass = renderingLayersEvent == RenderingLayerUtils.Event.GBuffer; + requiresRenderingLayer = false; + // Enable depth normal prepass if (renderingLayerProvidesByDepthNormalPass) renderPassInputs.requiresNormalsTexture = true; @@ -849,8 +851,8 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re DrawObjectsPass renderOpaqueForwardPass = null; if (renderingLayerProvidesRenderObjectPass) { - renderOpaqueForwardPass = m_RenderOpaqueForwardAndRenderingLayersPass; - m_RenderOpaqueForwardAndRenderingLayersPass.Setup(m_ActiveCameraColorAttachment, m_DecalLayersTexture, m_ActiveCameraDepthAttachment); + renderOpaqueForwardPass = m_RenderOpaqueForwardWithRenderingLayersPass; + m_RenderOpaqueForwardWithRenderingLayersPass.Setup(m_ActiveCameraColorAttachment, m_DecalLayersTexture, m_ActiveCameraDepthAttachment); } else renderOpaqueForwardPass = m_RenderOpaqueForwardPass; diff --git a/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs index 0f6762b1c29..7995207eeac 100644 --- a/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs +++ b/com.unity.testing.urp/Scripts/Runtime/DrawRenderingLayersFeature.cs @@ -124,19 +124,14 @@ private void Render(CommandBuffer cmd, in CameraData cameraData) private RTHandle m_ColoredRenderingLayersTextureHandle; - internal override RenderingLayerUtils.Event RequireRenderingLayers(bool isDeferred) + internal override bool RequireRenderingLayers(bool isDeferred, out RenderingLayerUtils.Event atEvent, out RenderingLayerUtils.MaskSize maskSize) { if (m_Event < RenderPassEvent.AfterRenderingGbuffer) - return RenderingLayerUtils.Event.DepthNormalPrePass; - else if (m_Event < RenderPassEvent.AfterRenderingOpaques) - return RenderingLayerUtils.Event.GBuffer; + atEvent = RenderingLayerUtils.Event.DepthNormalPrePass; else - return RenderingLayerUtils.Event.ForwardOpaque; - } - - internal override RenderingLayerUtils.MaskSize RequireRenderingLayerMaskSize(bool isDeferred) - { - return m_MaskSize; + atEvent = RenderingLayerUtils.Event.Opaque; + maskSize = m_MaskSize; + return true; } /// From 9478028e3eaaa7cac45626205ba3fd1160bec6a8 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 23 Feb 2022 09:58:58 +0200 Subject: [PATCH 32/38] Adding comment --- .../Runtime/UniversalRenderer.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 531691ceacd..ce562245ba1 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -703,7 +703,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re CommandBuffer cmd = CommandBufferPool.Get(); cmd.SetGlobalTexture(renderingLayersTexture.name, renderingLayersTexture.nameID); cmd.SetGlobalInt(ShaderPropertyId.renderingLayerMaskSize, RenderingLayerUtils.GetBits(renderingLayersSize)); - if (this.renderingModeActual == RenderingMode.Deferred) // TODO: Clean this up + if (this.renderingModeActual == RenderingMode.Deferred) // As this is requested by render pass we still want to set it cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersTexture.nameID); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); @@ -737,7 +737,7 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re CommandBuffer cmd = CommandBufferPool.Get(); cmd.SetGlobalTexture(normalsTexture.name, normalsTexture.nameID); - if (this.renderingModeActual == RenderingMode.Deferred) // TODO: Clean this up + if (this.renderingModeActual == RenderingMode.Deferred) // As this is requested by render pass we still want to set it cmd.SetGlobalTexture("_CameraNormalsTexture", normalsTexture.nameID); context.ExecuteCommandBuffer(cmd); CommandBufferPool.Release(cmd); From 2c3d2faf9aa3081b437c855f75ecf01e456c17e3 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 23 Feb 2022 10:02:31 +0200 Subject: [PATCH 33/38] Update reference images and renderers of test 250 --- .../Linear/Android/OpenGLES3/None/250_RenderingLayers.png | 4 ++-- .../Android/OpenGLES3/None/250_RenderingLayers.png.meta | 2 +- .../Linear/Android/Vulkan/None/250_RenderingLayers.png | 4 ++-- .../Linear/Android/Vulkan/None/250_RenderingLayers.png.meta | 2 +- .../LinuxEditor/OpenGLCore/None/250_RenderingLayers.png | 4 ++-- .../LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta | 2 +- .../Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png | 4 ++-- .../LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta | 2 +- .../Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png | 4 ++-- .../LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta | 2 +- .../Linear/OSXEditor/Metal/None/250_RenderingLayers.png | 4 ++-- .../Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta | 2 +- .../Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png | 4 ++-- .../OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta | 2 +- .../Linear/OSXPlayer/Metal/None/250_RenderingLayers.png | 4 ++-- .../Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta | 2 +- .../Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png | 4 ++-- .../OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta | 2 +- .../WindowsEditor/Direct3D11/None/250_RenderingLayers.png | 4 ++-- .../Direct3D11/None/250_RenderingLayers.png.meta | 2 +- .../WindowsEditor/Direct3D12/None/250_RenderingLayers.png | 4 ++-- .../Direct3D12/None/250_RenderingLayers.png.meta | 2 +- .../Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png | 4 ++-- .../WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta | 2 +- .../WindowsPlayer/Direct3D11/None/250_RenderingLayers.png | 4 ++-- .../Direct3D11/None/250_RenderingLayers.png.meta | 2 +- .../WindowsPlayer/Direct3D12/None/250_RenderingLayers.png | 4 ++-- .../Direct3D12/None/250_RenderingLayers.png.meta | 2 +- .../Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png | 4 ++-- .../WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta | 2 +- .../Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png | 4 ++-- .../iPhonePlayer/Metal/None/250_RenderingLayers.png.meta | 2 +- .../250_RenderingLayers/DrawRenderingLayersGBuffer.asset | 4 ++-- .../250_RenderingLayers/DrawRenderingLayersOpaque.asset | 2 +- .../250_RenderingLayers/DrawRenderingLayersPrePass.asset | 2 +- 35 files changed, 52 insertions(+), 52 deletions(-) diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png.meta index f2d7908aead..0d8fba829e4 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/OpenGLES3/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 29dc4aa0b4a8048468b70e1063b97e79 +guid: ffb757406f431fe4e89151324ceca8dc TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png.meta index 6a36a6fda0e..f06fe2845f6 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/Android/Vulkan/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fce2a7fea27ea97469a1fcbb4ef396cb +guid: 57f8fe137ee2dd842b3f966d8e9a78ff TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta index 262e5d9fae1..eb02429d499 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/OpenGLCore/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aa9e2052f09eab846aa1886672c052ea +guid: 8e2c0d7d5da321049a3a44f56270631e TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta index 01a9eebc3a1..460f798701e 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxEditor/Vulkan/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 59d5e3adc24989c45b48be42ad926338 +guid: 5fa81c699b0082a4b92e551b1df73940 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta index 3c5182c7834..28857893f7a 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/LinuxPlayer/Vulkan/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 98115400383608841af0ef9d6faee17d +guid: e59bde3cd2ccdaf4899e18194c12b84d TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta index 74c2e90ab3b..f610df7f243 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/Metal/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bfc43fd695ed84c45a4c79db2787d853 +guid: e8c5ac7cc12971f4fb1cbf7b612e52e0 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta index 363a60c7b72..08aa9d601df 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXEditor/OpenGLCore/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: abb46bccc9c0b994eb8571c88112170f +guid: d907924d0497b2e4d890320f8e139664 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta index 62c7af9cba0..ccd9c6d4917 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/Metal/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2f087da5d23149147b2bcf5fa0783f46 +guid: 8a18a868a8d26954eaf7c398fb2ef2e7 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta index f8e1db0109e..a21fec1f78b 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/OSXPlayer/OpenGLCore/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 3c5f8d95e5d12d1428748fcade63f167 +guid: 60a4d3d1dab64154b814256f6f2905e0 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png.meta index 27c6c2dc824..d3e6736a086 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D11/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 23084697860678845bf0a60d0555469d +guid: 221f211c488e8d04e8c7ee3a88733477 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png.meta index 3a48a3fa7fe..7dab057efcf 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Direct3D12/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 662f10d04b9afa64c8b1e63d5571f327 +guid: 43155163a45f6dd47be0f7164a3da1bc TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta index 03abdb08d31..d4e7130345d 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsEditor/Vulkan/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9a41ab33c5c974a459878d3145816190 +guid: 946ac9c1b4ecd9241b22628fa82a5a60 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png.meta index 8562c766643..92895c6d1cf 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D11/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 50560bb98b3d2b048a76331e10697110 +guid: e51968c9232ed804cb0988f4a516d20b TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png.meta index 025bfc9d5e9..be6551d0493 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Direct3D12/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d9a863870ca67304891f6d9b537da905 +guid: ee4513fad4eda874aa6833bdab036116 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta index 4074bf63a60..7bf8c377a24 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/WindowsPlayer/Vulkan/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 686c874fd60799c47b3a1aca25384ad5 +guid: f3749054d3e4f2d42bc3c33853be27ec TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png index 2c9abdbf360..546af041756 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1af7aea32d2b4c8c40400fadfe6776e4b64c8cf5a703fae149fd88d6e481fd62 -size 98831 +oid sha256:2db13e38f5cd139bd08f46e2b6f6bd9fc3eb1488e51b6ccb519b278f2b8dabd4 +size 98386 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png.meta b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png.meta index 24457646e14..e043986c8f0 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png.meta +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/ReferenceImages/Linear/iPhonePlayer/Metal/None/250_RenderingLayers.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cac6f4b57fb639f4e8d5fd3f659535de +guid: 79f4a21f47c9e424c8870df2746a2006 TextureImporter: internalIDToNameTable: [] externalObjects: {} diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset index 5bd9c79f709..2d26ecaa2c8 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersGBuffer.asset @@ -14,7 +14,8 @@ MonoBehaviour: m_EditorClassIdentifier: m_Active: 1 m_Shader: {fileID: 4800000, guid: 1c19806167865d546982c2df72fe1cc6, type: 3} - m_Event: 240 + m_Event: 220 + m_MaskSize: 0 --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -72,4 +73,3 @@ MonoBehaviour: m_AccurateGbufferNormals: 0 m_ClusteredRendering: 0 m_TileSize: 32 - m_IntermediateTextureMode: 1 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset index db11a09b3ff..84da51f526a 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersOpaque.asset @@ -15,6 +15,7 @@ MonoBehaviour: m_Active: 1 m_Shader: {fileID: 4800000, guid: 1c19806167865d546982c2df72fe1cc6, type: 3} m_Event: 300 + m_MaskSize: 1 --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -72,4 +73,3 @@ MonoBehaviour: m_AccurateGbufferNormals: 0 m_ClusteredRendering: 0 m_TileSize: 32 - m_IntermediateTextureMode: 1 diff --git a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset index b34052b2ab3..a64842fd85e 100644 --- a/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset +++ b/TestProjects/UniversalGraphicsTest_Foundation/Assets/Scenes/250_RenderingLayers/DrawRenderingLayersPrePass.asset @@ -15,6 +15,7 @@ MonoBehaviour: m_Active: 1 m_Shader: {fileID: 4800000, guid: 1c19806167865d546982c2df72fe1cc6, type: 3} m_Event: 200 + m_MaskSize: 3 --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 @@ -72,4 +73,3 @@ MonoBehaviour: m_AccurateGbufferNormals: 0 m_ClusteredRendering: 0 m_TileSize: 32 - m_IntermediateTextureMode: 1 From 78332e2112842911bba8db1ec5b52074353426ad Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Wed, 23 Feb 2022 12:26:55 +0200 Subject: [PATCH 34/38] Adding rendering layers to simple lit, unlit sg, lit sg --- .../Includes/DepthNormalsOnlyPass.hlsl | 17 +++++++-- .../ShaderGraph/Includes/PBRForwardPass.hlsl | 15 ++++++-- .../ShaderGraph/Includes/UnlitPass.hlsl | 15 ++++++-- .../Targets/UniversalLitSubTarget.cs | 36 ++++++++++++------- .../ShaderGraph/Targets/UniversalTarget.cs | 15 ++++++++ .../Targets/UniversalUnlitSubTarget.cs | 26 +++++++------- .../Shaders/SimpleLit.shader | 1 + .../Shaders/SimpleLitForwardPass.hlsl | 15 ++++++-- .../Shaders/Unlit.shader | 1 + .../Shaders/UnlitForwardPass.hlsl | 15 ++++++-- 10 files changed, 121 insertions(+), 35 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DepthNormalsOnlyPass.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DepthNormalsOnlyPass.hlsl index 674d0fbb775..0debb794a7b 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DepthNormalsOnlyPass.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/DepthNormalsOnlyPass.hlsl @@ -10,7 +10,13 @@ PackedVaryings vert(Attributes input) return packedOutput; } -half4 frag(PackedVaryings packedInput) : SV_TARGET +void frag( + PackedVaryings packedInput + , out half4 outNormalWS : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif +) { Varyings unpacked = UnpackVaryings(packedInput); UNITY_SETUP_INSTANCE_ID(unpacked); @@ -26,7 +32,7 @@ half4 frag(PackedVaryings packedInput) : SV_TARGET float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] - return half4(packedNormalWS, 0.0); + outNormalWS = half4(packedNormalWS, 0.0); #else // Retrieve the normal from the bump map or mesh normal #if defined(_NORMALMAP) @@ -44,7 +50,12 @@ half4 frag(PackedVaryings packedInput) : SV_TARGET float3 normalWS = unpacked.normalWS; #endif - return half4(NormalizeNormalPerPixel(normalWS), 0.0); + outNormalWS = half4(NormalizeNormalPerPixel(normalWS), 0.0); + #endif + + #ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); #endif } diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/PBRForwardPass.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/PBRForwardPass.hlsl index c64f08bc7cd..ebf56c3ac58 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/PBRForwardPass.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/PBRForwardPass.hlsl @@ -63,7 +63,13 @@ PackedVaryings vert(Attributes input) return packedOutput; } -half4 frag(PackedVaryings packedInput) : SV_TARGET +void frag( + PackedVaryings packedInput + , out half4 outColor : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif +) { Varyings unpacked = UnpackVaryings(packedInput); UNITY_SETUP_INSTANCE_ID(unpacked); @@ -123,5 +129,10 @@ half4 frag(PackedVaryings packedInput) : SV_TARGET half4 color = UniversalFragmentPBR(inputData, surface); color.rgb = MixFog(color.rgb, inputData.fogCoord); - return color; + outColor = color; + +#ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif } diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/UnlitPass.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/UnlitPass.hlsl index 81b2657f739..07aaaabb483 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/UnlitPass.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/UnlitPass.hlsl @@ -30,7 +30,13 @@ PackedVaryings vert(Attributes input) return packedOutput; } -half4 frag(PackedVaryings packedInput) : SV_TARGET +void frag( + PackedVaryings packedInput + , out half4 outColor : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif +) { Varyings unpacked = UnpackVaryings(packedInput); UNITY_SETUP_INSTANCE_ID(unpacked); @@ -61,5 +67,10 @@ half4 frag(PackedVaryings packedInput) : SV_TARGET half4 finalColor = UniversalFragmentUnlit(inputData, surfaceDescription.BaseColor, alpha); - return finalColor; + outColor = finalColor; + +#ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif } diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalLitSubTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalLitSubTarget.cs index b804bfcf597..cd5f84b3462 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalLitSubTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalLitSubTarget.cs @@ -17,7 +17,7 @@ sealed class UniversalLitSubTarget : UniversalSubTarget, ILegacyTarget { static readonly GUID kSourceCodeGuid = new GUID("d6c78107b64145745805d963de80cc17"); // UniversalLitSubTarget.cs - public override int latestVersion => 1; + public override int latestVersion => 2; [SerializeField] WorkflowMode m_WorkflowMode = WorkflowMode.Metallic; @@ -338,9 +338,9 @@ public static SubShaderDescriptor LitComputeDotsSubShader(UniversalTarget target }; if (complexLit) - result.passes.Add(LitPasses.ForwardOnly(target, workflowMode, complexLit, blendModePreserveSpecular, CoreBlockMasks.Vertex, LitBlockMasks.FragmentComplexLit, CorePragmas.DOTSForward)); + result.passes.Add(LitPasses.ForwardOnly(target, workflowMode, complexLit, blendModePreserveSpecular, CoreBlockMasks.Vertex, LitBlockMasks.FragmentComplexLit, CorePragmas.DOTSForward, LitKeywords.DOTSForward)); else - result.passes.Add(LitPasses.Forward(target, workflowMode, blendModePreserveSpecular, CorePragmas.DOTSForward)); + result.passes.Add(LitPasses.Forward(target, workflowMode, blendModePreserveSpecular, CorePragmas.DOTSForward, LitKeywords.DOTSForward)); if (!complexLit) result.passes.Add(LitPasses.GBuffer(target, workflowMode, blendModePreserveSpecular)); @@ -385,9 +385,9 @@ public static SubShaderDescriptor LitGLESSubShader(UniversalTarget target, Workf }; if (complexLit) - result.passes.Add(LitPasses.ForwardOnly(target, workflowMode, complexLit, blendModePreserveSpecular, CoreBlockMasks.Vertex, LitBlockMasks.FragmentComplexLit, CorePragmas.Forward)); + result.passes.Add(LitPasses.ForwardOnly(target, workflowMode, complexLit, blendModePreserveSpecular, CoreBlockMasks.Vertex, LitBlockMasks.FragmentComplexLit, CorePragmas.Forward, LitKeywords.Forward)); else - result.passes.Add(LitPasses.Forward(target, workflowMode, blendModePreserveSpecular)); + result.passes.Add(LitPasses.Forward(target, workflowMode, blendModePreserveSpecular, CorePragmas.Forward, LitKeywords.Forward)); // cull the shadowcaster pass if we know it will never be used if (target.castShadows || target.allowMaterialOverride) @@ -432,7 +432,12 @@ static void AddReceiveShadowsControlToPass(ref PassDescriptor pass, UniversalTar pass.defines.Add(LitKeywords.ReceiveShadowsOff, 1); } - public static PassDescriptor Forward(UniversalTarget target, WorkflowMode workflowMode, bool blendModePreserveSpecular, PragmaCollection pragmas = null) + public static PassDescriptor Forward( + UniversalTarget target, + WorkflowMode workflowMode, + bool blendModePreserveSpecular, + PragmaCollection pragmas, + KeywordCollection keywords) { var result = new PassDescriptor() { @@ -459,7 +464,7 @@ public static PassDescriptor Forward(UniversalTarget target, WorkflowMode workfl renderStates = CoreRenderStates.UberSwitchedRenderState(target, blendModePreserveSpecular), pragmas = pragmas ?? CorePragmas.Forward, // NOTE: SM 2.0 only GL defines = new DefineCollection() { CoreDefines.UseFragmentFog }, - keywords = new KeywordCollection() { LitKeywords.Forward }, + keywords = new KeywordCollection() { keywords }, includes = LitIncludes.Forward, // Custom Interpolator Support @@ -480,7 +485,8 @@ public static PassDescriptor ForwardOnly( bool blendModePreserveSpecular, BlockFieldDescriptor[] vertexBlocks, BlockFieldDescriptor[] pixelBlocks, - PragmaCollection pragmas) + PragmaCollection pragmas, + KeywordCollection keywords) { var result = new PassDescriptor { @@ -507,7 +513,7 @@ public static PassDescriptor ForwardOnly( renderStates = CoreRenderStates.UberSwitchedRenderState(target, blendModePreserveSpecular), pragmas = pragmas, defines = new DefineCollection() { CoreDefines.UseFragmentFog }, - keywords = new KeywordCollection() { LitKeywords.Forward }, + keywords = new KeywordCollection() { keywords }, includes = LitIncludes.Forward, // Custom Interpolator Support @@ -666,7 +672,7 @@ public static PassDescriptor DepthNormal(UniversalTarget target) renderStates = CoreRenderStates.DepthNormalsOnly(target), pragmas = CorePragmas.Instanced, defines = new DefineCollection(), - keywords = new KeywordCollection(), + keywords = new KeywordCollection() { CoreKeywords.DOTSDepthNormal }, includes = CoreIncludes.DepthNormalsOnly, // Custom Interpolator Support @@ -705,7 +711,7 @@ public static PassDescriptor DepthNormalOnly(UniversalTarget target) renderStates = CoreRenderStates.DepthNormalsOnly(target), pragmas = CorePragmas.Instanced, defines = new DefineCollection(), - keywords = new KeywordCollection(), + keywords = new KeywordCollection() { CoreKeywords.DOTSDepthNormal }, includes = CoreIncludes.DepthNormalsOnly, // Custom Interpolator Support @@ -879,6 +885,12 @@ static class LitKeywords { CoreKeywordDescriptors.ClusteredRendering }, }; + public static readonly KeywordCollection DOTSForward = new KeywordCollection + { + { Forward }, + { CoreKeywordDescriptors.WriteRenderingLayers }, + }; + public static readonly KeywordCollection GBuffer = new KeywordCollection { { CoreKeywordDescriptors.StaticLightmap }, @@ -893,7 +905,7 @@ static class LitKeywords { CoreKeywordDescriptors.MixedLightingSubtractive }, { CoreKeywordDescriptors.DBuffer }, { CoreKeywordDescriptors.GBufferNormalsOct }, - { CoreKeywordDescriptors.LightLayers }, + { CoreKeywordDescriptors.WriteRenderingLayers }, { CoreKeywordDescriptors.RenderPassEnabled }, { CoreKeywordDescriptors.DebugDisplay }, }; diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalTarget.cs index 62408cb48a8..7def4e67420 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalTarget.cs @@ -1705,6 +1705,16 @@ static class CoreKeywordDescriptors stages = KeywordShaderStage.Fragment, }; + public static readonly KeywordDescriptor WriteRenderingLayers = new KeywordDescriptor() + { + displayName = "Write Rendering Layers", + referenceName = "_WRITE_RENDERING_LAYERS", + type = KeywordType.Boolean, + definition = KeywordDefinition.MultiCompile, + scope = KeywordScope.Global, + stages = KeywordShaderStage.Fragment, + }; + public static readonly KeywordDescriptor RenderPassEnabled = new KeywordDescriptor() { displayName = "Render Pass Enabled", @@ -1861,6 +1871,11 @@ static class CoreKeywords { { CoreKeywordDescriptors.CastingPunctualLightShadow }, }; + + public static readonly KeywordCollection DOTSDepthNormal = new KeywordCollection + { + { CoreKeywordDescriptors.WriteRenderingLayers }, + }; } #endregion diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalUnlitSubTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalUnlitSubTarget.cs index 1f545756fc2..bd8567b6fb9 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalUnlitSubTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalUnlitSubTarget.cs @@ -13,7 +13,7 @@ sealed class UniversalUnlitSubTarget : UniversalSubTarget, ILegacyTarget { static readonly GUID kSourceCodeGuid = new GUID("97c3f7dcb477ec842aa878573640313a"); // UniversalUnlitSubTarget.cs - public override int latestVersion => 1; + public override int latestVersion => 2; public UniversalUnlitSubTarget() { @@ -167,7 +167,7 @@ public static SubShaderDescriptor Unlit(UniversalTarget target, string renderTyp passes = new PassCollection() }; - result.passes.Add(UnlitPasses.Forward(target)); + result.passes.Add(UnlitPasses.Forward(target, UnlitKeywords.Forward)); if (target.mayWriteDepth) result.passes.Add(CorePasses.DepthOnly(target)); @@ -182,8 +182,6 @@ public static SubShaderDescriptor Unlit(UniversalTarget target, string renderTyp result.passes.Add(CorePasses.SceneSelection(target)); result.passes.Add(CorePasses.ScenePicking(target)); - result.passes.Add(UnlitPasses.DepthNormalOnly(target)); - return result; } @@ -199,12 +197,12 @@ public static SubShaderDescriptor UnlitDOTS(UniversalTarget target, string rende passes = new PassCollection() }; - result.passes.Add(PassVariant(UnlitPasses.Forward(target), CorePragmas.DOTSForward)); + result.passes.Add(PassVariant(UnlitPasses.Forward(target, UnlitKeywords.DOTSForward), CorePragmas.DOTSForward)); if (target.mayWriteDepth) result.passes.Add(PassVariant(CorePasses.DepthOnly(target), CorePragmas.DOTSInstanced)); - result.passes.Add(PassVariant(CorePasses.DepthNormalOnly(target), CorePragmas.DOTSInstanced)); + result.passes.Add(PassVariant(UnlitPasses.DepthNormalOnly(target), CorePragmas.DOTSInstanced)); if (target.castShadows || target.allowMaterialOverride) result.passes.Add(PassVariant(CorePasses.ShadowCaster(target), CorePragmas.DOTSInstanced)); @@ -214,8 +212,6 @@ public static SubShaderDescriptor UnlitDOTS(UniversalTarget target, string rende result.passes.Add(CorePasses.SceneSelection(target)); result.passes.Add(CorePasses.ScenePicking(target)); - result.passes.Add(UnlitPasses.DepthNormalOnly(target)); - return result; } } @@ -224,7 +220,7 @@ public static SubShaderDescriptor UnlitDOTS(UniversalTarget target, string rende #region Pass static class UnlitPasses { - public static PassDescriptor Forward(UniversalTarget target) + public static PassDescriptor Forward(UniversalTarget target, KeywordCollection keywords) { var result = new PassDescriptor { @@ -250,7 +246,7 @@ public static PassDescriptor Forward(UniversalTarget target) renderStates = CoreRenderStates.UberSwitchedRenderState(target), pragmas = CorePragmas.Forward, defines = new DefineCollection() { CoreDefines.UseFragmentFog }, - keywords = new KeywordCollection() { UnlitKeywords.UnlitBaseKeywords }, + keywords = new KeywordCollection() { keywords }, includes = UnlitIncludes.Unlit, // Custom Interpolator Support @@ -289,7 +285,7 @@ public static PassDescriptor DepthNormalOnly(UniversalTarget target) renderStates = CoreRenderStates.DepthNormalsOnly(target), pragmas = CorePragmas.Forward, defines = new DefineCollection(), - keywords = new KeywordCollection(), + keywords = new KeywordCollection() { CoreKeywords.DOTSDepthNormal }, includes = CoreIncludes.DepthNormalsOnly, // Custom Interpolator Support @@ -334,7 +330,7 @@ static class UnlitRequiredFields #region Keywords static class UnlitKeywords { - public static readonly KeywordCollection UnlitBaseKeywords = new KeywordCollection() + public static readonly KeywordCollection Forward = new KeywordCollection() { // This contain lightmaps because without a proper custom lighting solution in Shadergraph, // people start with the unlit then add lightmapping nodes to it. @@ -345,6 +341,12 @@ static class UnlitKeywords CoreKeywordDescriptors.DBuffer, CoreKeywordDescriptors.DebugDisplay, }; + + public static readonly KeywordCollection DOTSForward = new KeywordCollection + { + { Forward }, + { CoreKeywordDescriptors.WriteRenderingLayers }, + }; } #endregion diff --git a/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader b/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader index fa45bb50222..7ca019ddf77 100644 --- a/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader @@ -92,6 +92,7 @@ Shader "Universal Render Pipeline/Simple Lit" #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile _ _CLUSTERED_RENDERING + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS // ------------------------------------- // Unity defined keywords diff --git a/com.unity.render-pipelines.universal/Shaders/SimpleLitForwardPass.hlsl b/com.unity.render-pipelines.universal/Shaders/SimpleLitForwardPass.hlsl index da790486e4c..c080a96176e 100644 --- a/com.unity.render-pipelines.universal/Shaders/SimpleLitForwardPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/SimpleLitForwardPass.hlsl @@ -162,7 +162,13 @@ Varyings LitPassVertexSimple(Attributes input) } // Used for StandardSimpleLighting shader -half4 LitPassFragmentSimple(Varyings input) : SV_Target +void LitPassFragmentSimple( + Varyings input + , out half4 outColor : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif +) { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); @@ -182,7 +188,12 @@ half4 LitPassFragmentSimple(Varyings input) : SV_Target color.rgb = MixFog(color.rgb, inputData.fogCoord); color.a = OutputAlpha(color.a, _Surface); - return color; + outColor = color; + +#ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif } #endif diff --git a/com.unity.render-pipelines.universal/Shaders/Unlit.shader b/com.unity.render-pipelines.universal/Shaders/Unlit.shader index de53ca75398..4178ee901e0 100644 --- a/com.unity.render-pipelines.universal/Shaders/Unlit.shader +++ b/com.unity.render-pipelines.universal/Shaders/Unlit.shader @@ -56,6 +56,7 @@ Shader "Universal Render Pipeline/Unlit" #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 #pragma multi_compile _ DEBUG_DISPLAY + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS #pragma vertex UnlitPassVertex #pragma fragment UnlitPassFragment diff --git a/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl b/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl index f75b5d679c3..92e953a6ab5 100644 --- a/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl +++ b/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl @@ -89,7 +89,13 @@ Varyings UnlitPassVertex(Attributes input) return output; } -half4 UnlitPassFragment(Varyings input) : SV_Target +void UnlitPassFragment( + Varyings input + , out half4 outColor : SV_Target0 +#ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 +#endif +) { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); @@ -131,7 +137,12 @@ half4 UnlitPassFragment(Varyings input) : SV_Target #endif finalColor.rgb = MixFog(finalColor.rgb, fogFactor); - return finalColor; + outColor = finalColor; + +#ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); +#endif } #endif From 10db83b7a6df644e22f8c43a93c23351411d114b Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Thu, 10 Mar 2022 12:16:37 +0200 Subject: [PATCH 35/38] Fixing webgl and simple lit for decal layers --- .../Targets/UniversalDecalSubTarget.cs | 171 ++++++++++++------ .../Runtime/UniversalRenderer.cs | 11 +- .../Shaders/Decal.shadergraph | 22 ++- .../Shaders/SimpleLit.shader | 2 +- 4 files changed, 145 insertions(+), 61 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs index 422b5df4ad1..7417e577176 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs @@ -99,6 +99,8 @@ public override void Setup(ref TargetSetupContext context) context.AddSubShader(subShader); } + + context.AddSubShader(SubShaders.Decal20); } private void CollectPassRenderState(ref PassDescriptor pass) @@ -309,7 +311,6 @@ public override void GetPropertiesGUI(ref TargetPropertyGUIContext context, Acti #region SubShader static class SubShaders { - // Relies on the order shader passes are declared in DecalSystem.cs public static SubShaderDescriptor Decal = new SubShaderDescriptor() { pipelineTag = UniversalTarget.kPipelineTag, @@ -328,6 +329,19 @@ static class SubShaders { DecalPasses.ScenePicking, new FieldCondition(DecalDefault, true) }, }, }; + + public static SubShaderDescriptor Decal20 = new SubShaderDescriptor() + { + pipelineTag = UniversalTarget.kPipelineTag, + customTags = "\"PreviewType\"=\"Plane\"", + generatesPreview = true, + passes = new PassCollection + { + { DecalPasses.ScreenSpaceProjector20, new FieldCondition(DecalDefault, true) }, + { DecalPasses.ScreenSpaceMesh20, new FieldCondition(DecalDefault, true) }, + { DecalPasses.ScenePicking, new FieldCondition(DecalDefault, true) }, + }, + }; } #endregion @@ -348,7 +362,7 @@ static class DecalPasses // Collections renderStates = DecalRenderStates.ScenePicking, - pragmas = DecalPragmas.MultipleRenderTargets, + pragmas = DecalPragmas.Instanced, defines = DecalDefines.ScenePicking, includes = DecalIncludes.ScenePicking, @@ -408,32 +422,39 @@ static class DecalPasses includes = DecalIncludes.DBuffer, }; - public static PassDescriptor ScreenSpaceProjector = new PassDescriptor() - { - // Definition - displayName = DecalShaderPassNames.DecalScreenSpaceProjector, - referenceName = "SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR", - lightMode = DecalShaderPassNames.DecalScreenSpaceProjector, - useInPreview = false, - - // Template - passTemplatePath = "Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalPass.template", - sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(), - - // Port mask - validPixelBlocks = DecalBlockMasks.Fragment, + public static PassDescriptor ScreenSpaceProjector20 = GetScreenSpaceProjector(DecalPragmas.ScreenSpace20, DecalKeywords.ScreenSpaceProjector20); - //Fields - structs = CoreStructCollections.Default, - requiredFields = DecalRequiredFields.ScreenSpaceProjector, - fieldDependencies = CoreFieldDependencies.Default, + public static PassDescriptor ScreenSpaceProjector = GetScreenSpaceProjector(DecalPragmas.ScreenSpace, DecalKeywords.ScreenSpaceProjector); - renderStates = DecalRenderStates.ScreenSpaceProjector, - pragmas = DecalPragmas.ScreenSpace, - defines = DecalDefines.ProjectorWithEmission, - keywords = DecalKeywords.ScreenSpaceProjector, - includes = DecalIncludes.ScreenSpace, - }; + public static PassDescriptor GetScreenSpaceProjector(PragmaCollection pragma, KeywordCollection keywords) + { + return new PassDescriptor + { + // Definition + displayName = DecalShaderPassNames.DecalScreenSpaceProjector, + referenceName = "SHADERPASS_DECAL_SCREEN_SPACE_PROJECTOR", + lightMode = DecalShaderPassNames.DecalScreenSpaceProjector, + useInPreview = false, + + // Template + passTemplatePath = "Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalPass.template", + sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(), + + // Port mask + validPixelBlocks = DecalBlockMasks.Fragment, + + //Fields + structs = CoreStructCollections.Default, + requiredFields = DecalRequiredFields.ScreenSpaceProjector, + fieldDependencies = CoreFieldDependencies.Default, + + renderStates = DecalRenderStates.ScreenSpaceProjector, + pragmas = pragma, + defines = DecalDefines.ProjectorWithEmission, + keywords = keywords, + includes = DecalIncludes.ScreenSpace, + }; + } public static PassDescriptor GBufferProjector = new PassDescriptor() { @@ -518,32 +539,39 @@ static class DecalPasses includes = DecalIncludes.DBuffer, }; - public static PassDescriptor ScreenSpaceMesh = new PassDescriptor() - { - // Definition - displayName = DecalShaderPassNames.DecalScreenSpaceMesh, - referenceName = "SHADERPASS_DECAL_SCREEN_SPACE_MESH", - lightMode = DecalShaderPassNames.DecalScreenSpaceMesh, - useInPreview = true, - - // Template - passTemplatePath = "Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalPass.template", - sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(), - - // Port mask - validPixelBlocks = DecalBlockMasks.Fragment, // todo + public static PassDescriptor ScreenSpaceMesh20 = GetScreenSpaceMesh(DecalPragmas.ScreenSpace20, DecalKeywords.ScreenSpaceMesh20); - //Fields - structs = CoreStructCollections.Default, - requiredFields = DecalRequiredFields.ScreenSpaceMesh, - fieldDependencies = CoreFieldDependencies.Default, + public static PassDescriptor ScreenSpaceMesh = GetScreenSpaceMesh(DecalPragmas.ScreenSpace, DecalKeywords.ScreenSpaceMesh); - renderStates = DecalRenderStates.ScreenSpaceMesh, - pragmas = DecalPragmas.ScreenSpace, - defines = DecalDefines.MeshWithEmission, - keywords = DecalKeywords.ScreenSpaceMesh, - includes = DecalIncludes.ScreenSpace, - }; + public static PassDescriptor GetScreenSpaceMesh(PragmaCollection pragma, KeywordCollection keywords) + { + return new PassDescriptor + { + // Definition + displayName = DecalShaderPassNames.DecalScreenSpaceMesh, + referenceName = "SHADERPASS_DECAL_SCREEN_SPACE_MESH", + lightMode = DecalShaderPassNames.DecalScreenSpaceMesh, + useInPreview = true, + + // Template + passTemplatePath = "Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalPass.template", + sharedTemplateDirectories = GenerationUtils.GetDefaultSharedTemplateDirectories(), + + // Port mask + validPixelBlocks = DecalBlockMasks.Fragment, // todo + + //Fields + structs = CoreStructCollections.Default, + requiredFields = DecalRequiredFields.ScreenSpaceMesh, + fieldDependencies = CoreFieldDependencies.Default, + + renderStates = DecalRenderStates.ScreenSpaceMesh, + pragmas = pragma, + defines = DecalDefines.MeshWithEmission, + keywords = keywords, + includes = DecalIncludes.ScreenSpace, + }; + } public static PassDescriptor GBufferMesh = new PassDescriptor() { @@ -775,30 +803,56 @@ static class DecalRenderStates #region Pragmas static class DecalPragmas { + public static PragmaCollection ScreenSpace20 = new PragmaCollection + { + { Pragma.Target(ShaderModel.Target20) }, + { Pragma.OnlyRenderers(new[] { Platform.GLES, Platform.GLES3, Platform.GLCore, Platform.D3D11 }) }, + { Pragma.Vertex("Vert") }, + { Pragma.Fragment("Frag") }, + { Pragma.MultiCompileInstancing }, + { Pragma.MultiCompileFog }, + { Pragma.debug }, + }; + public static PragmaCollection ScreenSpace = new PragmaCollection { { Pragma.Target(ShaderModel.Target25) }, // Derivatives + { Pragma.ExcludeRenderers(new[] { Platform.GLES, Platform.GLES3, Platform.GLCore }) }, { Pragma.Vertex("Vert") }, { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, + { Pragma.debug }, }; public static PragmaCollection GBuffer = new PragmaCollection { { Pragma.Target(ShaderModel.Target35) }, // MRT4 + { Pragma.ExcludeRenderers(new[] { Platform.GLES, Platform.GLES3, Platform.GLCore }) }, { Pragma.Vertex("Vert") }, { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, + { Pragma.debug }, }; public static PragmaCollection MultipleRenderTargets = new PragmaCollection { { Pragma.Target(ShaderModel.Target35) }, // MRT4 + { Pragma.ExcludeRenderers(new[] { Platform.GLES, Platform.GLES3, Platform.GLCore }) }, { Pragma.Vertex("Vert") }, { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, + { Pragma.debug }, + }; + + public static readonly PragmaCollection Instanced = new PragmaCollection + { + { Pragma.Target(ShaderModel.Target20) }, + { Pragma.OnlyRenderers(new[] { Platform.GLES, Platform.GLES3, Platform.GLCore, Platform.D3D11 }) }, + { Pragma.MultiCompileInstancing }, + { Pragma.Vertex("Vert") }, + { Pragma.Fragment("Frag") }, }; } #endregion @@ -959,7 +1013,7 @@ static class Descriptors { Descriptors.DecalLayers }, }; - public static readonly KeywordCollection ScreenSpaceMesh = new KeywordCollection + public static readonly KeywordCollection ScreenSpaceMesh20 = new KeywordCollection { { CoreKeywordDescriptors.StaticLightmap }, { CoreKeywordDescriptors.DynamicLightmap }, @@ -972,11 +1026,17 @@ static class Descriptors { CoreKeywordDescriptors.ShadowsShadowmask }, { CoreKeywordDescriptors.ClusteredRendering }, { Descriptors.DecalsNormalBlend }, - { Descriptors.DecalLayers }, { Descriptors.LodCrossFade, new FieldCondition(Fields.LodCrossFade, true) }, }; - public static readonly KeywordCollection ScreenSpaceProjector = new KeywordCollection + public static readonly KeywordCollection ScreenSpaceMesh = new KeywordCollection + { + { ScreenSpaceMesh20 }, + { Descriptors.DecalLayers }, + + }; + + public static readonly KeywordCollection ScreenSpaceProjector20 = new KeywordCollection { { CoreKeywordDescriptors.MainLightShadows }, { CoreKeywordDescriptors.AdditionalLights }, @@ -984,6 +1044,11 @@ static class Descriptors { CoreKeywordDescriptors.ShadowsSoft }, { CoreKeywordDescriptors.ClusteredRendering }, { Descriptors.DecalsNormalBlend }, + }; + + public static readonly KeywordCollection ScreenSpaceProjector = new KeywordCollection + { + { ScreenSpaceProjector20 }, { Descriptors.DecalLayers }, }; diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index ce562245ba1..c0240ba1c18 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -422,17 +422,18 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // Gather render pass require rendering layers event and mask size bool requiresRenderingLayer = RenderingLayerUtils.RequireRenderingLayers(this, rendererFeatures, out var renderingLayersEvent, out var renderingLayersSize); - bool renderingLayerProvidesByDepthNormalPass = requiresRenderingLayer && renderingLayersEvent == RenderingLayerUtils.Event.DepthNormalPrePass; - bool renderingLayerProvidesRenderObjectPass = requiresRenderingLayer && - this.renderingModeActual == RenderingMode.Forward && renderingLayersEvent == RenderingLayerUtils.Event.Opaque; - bool renderingLayerProvidesGBufferPass = requiresRenderingLayer && - this.renderingModeActual == RenderingMode.Deferred && renderingLayersEvent == RenderingLayerUtils.Event.Opaque; // All passes that use write to rendering layers are excluded from gl // So we disable it to avoid setting multiple render targets if (IsGLDevice()) requiresRenderingLayer = false; + bool renderingLayerProvidesByDepthNormalPass = requiresRenderingLayer && renderingLayersEvent == RenderingLayerUtils.Event.DepthNormalPrePass; + bool renderingLayerProvidesRenderObjectPass = requiresRenderingLayer && + this.renderingModeActual == RenderingMode.Forward && renderingLayersEvent == RenderingLayerUtils.Event.Opaque; + bool renderingLayerProvidesGBufferPass = requiresRenderingLayer && + this.renderingModeActual == RenderingMode.Deferred && renderingLayersEvent == RenderingLayerUtils.Event.Opaque; + // Enable depth normal prepass if (renderingLayerProvidesByDepthNormalPass) renderPassInputs.requiresNormalsTexture = true; diff --git a/com.unity.render-pipelines.universal/Shaders/Decal.shadergraph b/com.unity.render-pipelines.universal/Shaders/Decal.shadergraph index 89763d3ace9..36e992fa3b7 100644 --- a/com.unity.render-pipelines.universal/Shaders/Decal.shadergraph +++ b/com.unity.render-pipelines.universal/Shaders/Decal.shadergraph @@ -260,6 +260,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -306,6 +307,7 @@ "m_GeneratePropertyBlock": true, "m_UseCustomSlotLabel": false, "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, "m_Precision": 0, "overrideHLSLDeclaration": false, "hlslDeclarationOverride": 0, @@ -383,6 +385,7 @@ "m_GeneratePropertyBlock": true, "m_UseCustomSlotLabel": false, "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, "m_Precision": 0, "overrideHLSLDeclaration": false, "hlslDeclarationOverride": 0, @@ -457,13 +460,15 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": false, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] }, "m_TextureType": 1, "m_NormalMapSpace": 0, - "m_EnableGlobalMipBias": true + "m_EnableGlobalMipBias": true, + "m_MipSamplingMode": 0 } { @@ -530,6 +535,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -578,6 +584,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -665,6 +672,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -759,6 +767,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -823,6 +832,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -1052,13 +1062,15 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": false, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] }, "m_TextureType": 0, "m_NormalMapSpace": 0, - "m_EnableGlobalMipBias": true + "m_EnableGlobalMipBias": true, + "m_MipSamplingMode": 0 } { @@ -1139,6 +1151,7 @@ ], "m_Precision": 0, "m_PreviewExpanded": false, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -1186,6 +1199,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -1221,6 +1235,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -1269,6 +1284,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] @@ -1306,6 +1322,7 @@ "m_GeneratePropertyBlock": true, "m_UseCustomSlotLabel": false, "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, "m_Precision": 0, "overrideHLSLDeclaration": false, "hlslDeclarationOverride": 0, @@ -1473,6 +1490,7 @@ "synonyms": [], "m_Precision": 0, "m_PreviewExpanded": true, + "m_DismissedVersion": 0, "m_PreviewMode": 0, "m_CustomColors": { "m_SerializableColors": [] diff --git a/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader b/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader index 7ca019ddf77..71b0a51032f 100644 --- a/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader +++ b/com.unity.render-pipelines.universal/Shaders/SimpleLit.shader @@ -267,7 +267,7 @@ Shader "Universal Render Pipeline/Simple Lit" // ------------------------------------- // Universal Pipeline keywords - #pragma multi_compile_fargment _ _WRITE_RENDERING_LAYERS + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS //-------------------------------------- // GPU Instancing From 7e12ae0e55aa4da5b79f206922caf3153fa08a98 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 14 Mar 2022 12:39:33 +0200 Subject: [PATCH 36/38] Removing accidental debug pragma --- .../Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs | 4 ---- 1 file changed, 4 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs index 7417e577176..f84df8268cf 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Targets/UniversalDecalSubTarget.cs @@ -811,7 +811,6 @@ static class DecalPragmas { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, - { Pragma.debug }, }; public static PragmaCollection ScreenSpace = new PragmaCollection @@ -822,7 +821,6 @@ static class DecalPragmas { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, - { Pragma.debug }, }; public static PragmaCollection GBuffer = new PragmaCollection @@ -833,7 +831,6 @@ static class DecalPragmas { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, { Pragma.MultiCompileFog }, - { Pragma.debug }, }; public static PragmaCollection MultipleRenderTargets = new PragmaCollection @@ -843,7 +840,6 @@ static class DecalPragmas { Pragma.Vertex("Vert") }, { Pragma.Fragment("Frag") }, { Pragma.MultiCompileInstancing }, - { Pragma.debug }, }; public static readonly PragmaCollection Instanced = new PragmaCollection From d1bbebb20a4ffce21abf6d0efdd2447c87b796ba Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 14 Mar 2022 14:02:10 +0200 Subject: [PATCH 37/38] Fixing decal layer pack and upack to work correctly for mobile variants --- .../Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl | 3 ++- .../ShaderLibrary/ShaderVariablesFunctions.hlsl | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl index ba38a46afea..55216469497 100644 --- a/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl +++ b/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPassDecal.hlsl @@ -190,7 +190,8 @@ void Frag(PackedVaryings packedInput, uint surfaceRenderingLayer = LoadSceneRenderingLayer(input.positionCS.xy); #endif uint projectorRenderingLayer = uint(UNITY_ACCESS_INSTANCED_PROP(Decal, _DecalLayerMaskFromDecal)); - clip((surfaceRenderingLayer & projectorRenderingLayer) != 0 ? 1 : -1); + clip((surfaceRenderingLayer & projectorRenderingLayer) - 0.1); + #endif #if defined(DECAL_PROJECTOR) diff --git a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl index 2d0206a4e6a..b43622d7f31 100644 --- a/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl +++ b/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl @@ -424,12 +424,16 @@ uint GetMeshRenderingLayer() float EncodeMeshRenderingLayer(uint renderingLayer) { - return PackInt(renderingLayer, _RenderingLayerMaskSize); + uint maxInt = (1u << _RenderingLayerMaskSize) - 1u; + return saturate(renderingLayer * rcp(maxInt)); + //return PackInt(renderingLayer, 16); } uint DecodeMeshRenderingLayer(float renderingLayer) { - return UnpackInt(renderingLayer, _RenderingLayerMaskSize); + uint maxInt = (1u << _RenderingLayerMaskSize) - 1u; + return (uint)(renderingLayer * maxInt + 0.5); // Round instead of truncating + //return UnpackInt(renderingLayer, 16); } #endif // UNITY_SHADER_VARIABLES_FUNCTIONS_INCLUDED From 8eb97e9e87920b21126d8c2275167322812f03c4 Mon Sep 17 00:00:00 2001 From: Lukas Chodosevicius Date: Mon, 14 Mar 2022 17:11:55 +0200 Subject: [PATCH 38/38] Leftover --- .../Runtime/UniversalRenderer.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 35ed4fe610a..db4dce5687a 100644 --- a/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -731,13 +731,12 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re RenderingUtils.ReAllocateIfNeeded(ref renderingLayersTexture, renderingLayersDescriptor, FilterMode.Point, TextureWrapMode.Clamp, name: renderingLayersTextureName); - CommandBuffer cmd = CommandBufferPool.Get(); cmd.SetGlobalTexture(renderingLayersTexture.name, renderingLayersTexture.nameID); cmd.SetGlobalInt(ShaderPropertyId.renderingLayerMaskSize, RenderingLayerUtils.GetBits(renderingLayersSize)); if (this.renderingModeActual == RenderingMode.Deferred) // As this is requested by render pass we still want to set it cmd.SetGlobalTexture("_CameraRenderingLayersTexture", renderingLayersTexture.nameID); context.ExecuteCommandBuffer(cmd); - CommandBufferPool.Release(cmd); + cmd.Clear(); } // Allocate normal texture if used