From 30ab507a415997c0d1fa966034a035c1e86f5cdc Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Sun, 25 Jan 2026 00:20:40 +0000 Subject: [PATCH 01/79] Per probe request sample counts --- .../ProbeGIBaking.LightTransport.cs | 2 -- .../Lighting/ProbeVolume/ProbeGIBaking.cs | 18 ++++++++++++++--- .../PathTracing/BakeInputSerialization.cs | 6 +++++- .../Editor/PathTracing/LightBakerStrangler.cs | 20 ++++++++++++------- 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.LightTransport.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.LightTransport.cs index 44516cd7bce..61da51d993a 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.LightTransport.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.LightTransport.cs @@ -219,7 +219,6 @@ private struct BakeJob : IDisposable public int directSampleCount; public int indirectSampleCount; public int validitySampleCount; - public int occlusionSampleCount; public int maxBounces; public int skyOcclusionBakingSamples; @@ -269,7 +268,6 @@ void Create(LightingSettings lightingSettings, bool ignoreEnvironement, int dire this.directSampleCount = directSampleCount * sampleCountMultiplier; this.indirectSampleCount = indirectSampleCount * sampleCountMultiplier; this.validitySampleCount = indirectSampleCount * sampleCountMultiplier; - this.occlusionSampleCount = directSampleCount * sampleCountMultiplier; this.maxBounces = maxBounces; this.indirectScale = lightingSettings.indirectScale; diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs index 10d597db8fd..df10104fdfa 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs @@ -1067,9 +1067,9 @@ private static void OnInputExtraction(InputExtraction.BakeInput bakeInput) if (s_BakeData.sortedPositions.Length == 0) return; - var lsa = ProbeVolumeLightingTab.GetLightingSettings(); + var lightingSettings = ProbeVolumeLightingTab.GetLightingSettings(); ProbeBakeRequestOutput outputTypes = ProbeBakeRequestOutput.All; - if (lsa.mixedBakeMode == MixedLightingMode.IndirectOnly) + if (lightingSettings.mixedBakeMode == MixedLightingMode.IndirectOnly) outputTypes &= ~ProbeBakeRequestOutput.Occlusion; var extraPos = s_BakeData.sortedPositions.ToArray(); @@ -1087,9 +1087,21 @@ private static void OnInputExtraction(InputExtraction.BakeInput bakeInput) bakeInput.SetProbePositions(newPositions); bakeInput.SetOcclusionLightIndices(newOcclusionIndices); + + int sampleCountMultiplier = (int)lightingSettings.lightProbeSampleCountMultiplier; +#if UNIFIED_BAKER + int indirectSampleCount = lightingSettings.indirectSampleCount; +#else + int indirectSampleCount = Math.Max(lightingSettings.indirectSampleCount, lightingSettings.environmentSampleCount); +#endif + bakeInput.AddProbeRequest(new ProbeBakeRequest { outputTypes = outputTypes, + directSampleCount = (uint)(lightingSettings.directSampleCount * sampleCountMultiplier), + indirectSampleCount = (uint)(indirectSampleCount * sampleCountMultiplier), + environmentSampleCount = (uint)(lightingSettings.environmentSampleCount * sampleCountMultiplier), + maxBounces = (uint)lightingSettings.maxBounces, positionOffset = (ulong)prevProbeCount, positionLength = (ulong)extraPos.Length, bakeOutputFolderPath = APVLightBakerOutputFolder, @@ -1097,7 +1109,7 @@ private static void OnInputExtraction(InputExtraction.BakeInput bakeInput) ignoreDirectEnvironment = m_BakingSet != null ? m_BakingSet.bakedSkyOcclusion : false, ignoreIndirectEnvironment = m_BakingSet != null ? m_BakingSet.bakedSkyOcclusion : false, pushoff = 0.0001f, - indirectScale = lsa.indirectScale, + indirectScale = lightingSettings.indirectScale, dering = true, }); diff --git a/Packages/com.unity.render-pipelines.core/Editor/PathTracing/BakeInputSerialization.cs b/Packages/com.unity.render-pipelines.core/Editor/PathTracing/BakeInputSerialization.cs index 0327156571c..cad2bdb6d0b 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/PathTracing/BakeInputSerialization.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/PathTracing/BakeInputSerialization.cs @@ -615,6 +615,8 @@ internal struct ProbeRequest : IBakeInputVisitable public ProbeRequestOutputType outputTypeMask; public UInt64 positionOffset; public UInt64 count; + public SampleCount sampleCount; + public UInt32 maxBounces; public float pushoff; public string outputFolderPath; @@ -628,6 +630,8 @@ public void Transfer(IBakeInputVisitor visitor) visitor.TransferBlittable(ref outputTypeMask); visitor.TransferBlittable(ref positionOffset); visitor.TransferBlittable(ref count); + visitor.TransferBlittable(ref sampleCount); + visitor.TransferBlittable(ref maxBounces); visitor.TransferBlittable(ref pushoff); visitor.TransferString(ref outputFolderPath); visitor.TransferBlittable(ref integrationRadiusOffset); @@ -923,7 +927,7 @@ internal static class BakeInputSerialization { // Should match BakeInputSerialization::kCurrentFileVersion in BakeInputSerialization.h. // If these are out of sync, the implementation in this file probably needs to be updated. - const UInt64 CurrentFileVersion = 202509021; + const UInt64 CurrentFileVersion = 202601191; public static bool Deserialize(string path, out BakeInput bakeInput) { diff --git a/Packages/com.unity.render-pipelines.core/Editor/PathTracing/LightBakerStrangler.cs b/Packages/com.unity.render-pipelines.core/Editor/PathTracing/LightBakerStrangler.cs index f0b242bb8ab..cbb9cb9fc9c 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/PathTracing/LightBakerStrangler.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/PathTracing/LightBakerStrangler.cs @@ -398,7 +398,7 @@ internal static bool Bake(string bakeInputPath, string lightmapRequestsPath, str ulong lightmapWorkSteps = CalculateWorkStepsForLightmapRequests(in lightmapRequestData, lightmapDescriptors, lightmapBakeSettings); progressState.SetTotalWorkSteps(probeWorkSteps + lightmapWorkSteps); - if (!ExecuteProbeRequests(in bakeInput, in probeRequestData, deviceContext, useLegacyBakingBehavior, world, bakeInput.lightingSettings.maxBounces, progressState, samplingResources)) + if (!ExecuteProbeRequests(in bakeInput, in probeRequestData, deviceContext, useLegacyBakingBehavior, world, progressState, samplingResources)) return false; if (lightmapRequestData.requests.Length <= 0) @@ -419,11 +419,16 @@ internal static bool Bake(string bakeInputPath, string lightmapRequestsPath, str internal static ulong CalculateWorkStepsForProbeRequests(in BakeInput bakeInput, in ProbeRequestData probeRequestData) { - (uint directSampleCount, uint effectiveIndirectSampleCount) = GetProbeSampleCounts(bakeInput.lightingSettings.probeSampleCounts); ulong calculatedWorkSteps = 0; foreach (ProbeRequest probeRequest in probeRequestData.requests) - calculatedWorkSteps += CalculateProbeWorkSteps(probeRequest.count, probeRequest.outputTypeMask, directSampleCount, effectiveIndirectSampleCount, bakeInput.lightingSettings.mixedLightingMode != MixedLightingMode.IndirectOnly, - bakeInput.lightingSettings.maxBounces); + { + (uint directSampleCount, uint effectiveIndirectSampleCount) = GetProbeSampleCounts(probeRequest.sampleCount); + + calculatedWorkSteps += CalculateProbeWorkSteps(probeRequest.count, probeRequest.outputTypeMask, + directSampleCount, effectiveIndirectSampleCount, + bakeInput.lightingSettings.mixedLightingMode != MixedLightingMode.IndirectOnly, + probeRequest.maxBounces); + } return calculatedWorkSteps; } @@ -1443,7 +1448,7 @@ private static (uint directSampleCount, uint effectiveIndirectSampleCount) GetPr } internal static bool ExecuteProbeRequests(in BakeInput bakeInput, in ProbeRequestData probeRequestData, UnityComputeDeviceContext deviceContext, - bool useLegacyBakingBehavior, UnityComputeWorld world, uint bounceCount, BakeProgressState progressState, + bool useLegacyBakingBehavior, UnityComputeWorld world, BakeProgressState progressState, UnityEngine.Rendering.Sampling.SamplingResources samplingResources) { if (probeRequestData.requests.Length == 0) @@ -1470,8 +1475,6 @@ internal static bool ExecuteProbeRequests(in BakeInput bakeInput, in ProbeReques BufferSlice perProbeLightIndicesBufferSlice = perProbeLightIndicesBuffer.Slice(); deviceContext.WriteBuffer(perProbeLightIndicesBufferSlice, inputPerProbeLightIndices); - (uint directSampleCount, uint effectiveIndirectSampleCount) = GetProbeSampleCounts(bakeInput.lightingSettings.probeSampleCounts); - ProbeRequest[] probeRequests = probeRequestData.requests; for (int probeRequestIndex = 0; probeRequestIndex < probeRequests.Length; probeRequestIndex++) { @@ -1481,6 +1484,9 @@ internal static bool ExecuteProbeRequests(in BakeInput bakeInput, in ProbeReques int requestLength = (int)request.count; ulong floatBufferSize = sizeof(float) * request.count; float pushoff = request.pushoff; + int bounceCount = (int)request.maxBounces; + (uint directSampleCount, uint effectiveIndirectSampleCount) = GetProbeSampleCounts(request.sampleCount); + probeIntegrator.Prepare(deviceContext, world, positionsBuffer.Slice(), pushoff, (int)bounceCount); List eventsToWaitFor = new(); From 8989bcf74a8f95874eac3cb96faabcb8aaa85733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Chapelain?= Date: Sun, 25 Jan 2026 00:20:44 +0000 Subject: [PATCH 02/79] [HDRP] Fix water height sampling when distant wind speed is high --- .../Water/HDRenderPipeline.WaterSystem.SimulationCPU.Search.cs | 2 +- .../Runtime/Water/Shaders/SampleWaterSurface.hlsl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/HDRenderPipeline.WaterSystem.SimulationCPU.Search.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/HDRenderPipeline.WaterSystem.SimulationCPU.Search.cs index 8075163f7c5..d93d952264c 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/HDRenderPipeline.WaterSystem.SimulationCPU.Search.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/HDRenderPipeline.WaterSystem.SimulationCPU.Search.cs @@ -343,7 +343,7 @@ static WaterSimulationTapData EvaluateDisplacementData(WaterSimSearchData wsd, f EvaluateSimulationDisplacement(wsd, currentLocation, includeSimulation, out data.horizontalDisplacement, out data.direction, out data.verticalDisplacements); // Evaluate the distance to the reference point - data.offset = (currentLocation.xz + data.horizontalDisplacement) - referencePosition.xz; + data.offset = currentLocation.xz - referencePosition.xz; data.distance = length(data.offset); return data; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/SampleWaterSurface.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/SampleWaterSurface.hlsl index fb09f49872e..aad4bb68dc2 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/SampleWaterSurface.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/SampleWaterSurface.hlsl @@ -579,7 +579,7 @@ TapData EvaluateDisplacementData(float3 currentLocation, float3 referencePositio EvaluateSimulationDisplacement(currentLocation, data.horizontalDisplacement, data.verticalDisplacements); // Evaluate the distance to the reference point - data.offset = (currentLocation.xz + data.horizontalDisplacement) - referencePosition.xz; + data.offset = currentLocation.xz - referencePosition.xz; data.distance = length(data.offset); return data; From 24e1277d4189bedea5d4bfdfc72ec4a3d761e3ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20V=C3=A1zquez?= Date: Sun, 25 Jan 2026 00:20:45 +0000 Subject: [PATCH 03/79] Batch mode Converters - Debug Warning instead of deprecating API. --- .../Editor/Converter/Converters.cs | 18 +++++------------- .../Editor/Tools/Converters/ConvertersTests.cs | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs b/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs index 4348fe604fb..6a4981182e5 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs @@ -10,8 +10,7 @@ namespace UnityEditor.Rendering.Universal /// /// Filter for the list of converters used in batch mode. /// - /// .) - [Obsolete("This enum has been obsoleted, please use the Type of the converter directly. #from(6000.4)")] + /// public enum ConverterFilter { /// @@ -28,8 +27,7 @@ public enum ConverterFilter /// /// The container to run in batch mode. /// - /// .) - [Obsolete("This enum has been obsoleted, please use the Type of the converter directly. #from(6000.4)")] + /// public enum ConverterContainerId { /// @@ -54,7 +52,6 @@ public enum ConverterContainerId } [AttributeUsage(AttributeTargets.Field, AllowMultiple = false)] - [Obsolete("This attribute has been obsoleted, please use the Type of the converter directly. #from(6000.4)")] internal class BatchModeConverterInfo : Attribute { public Type converterType { get; } @@ -70,8 +67,7 @@ public BatchModeConverterInfo(ConverterContainerId containerName, Type converter /// /// The converter to run in batch mode. /// - /// .) - [Obsolete("This enum has been obsoleted, please use the Type of the converter directly. #from(6000.4)")] + /// public enum ConverterId { /// @@ -148,14 +144,11 @@ private static void DumpAvailableConverters() /// Call this method to run all the converters in a specific container in batch mode. /// /// The name of the container which will be batched. All Converters in this Container will run if prerequisites are met. - [Obsolete("RunInBatchMode will be removed. Please open the Unity Editor and perform the conversion from the Converter UI. #from(6000.4)", false)] public static void RunInBatchMode(ConverterContainerId containerName) { RunInBatchMode(containerName, new List() { }, ConverterFilter.Exclusive); } - [Obsolete("RunInBatchMode will be removed. Please open the Unity Editor and perform the conversion from the Converter UI. #from(6000.4)", false)] - internal static bool TryGetTypeInContainer(ConverterId value, ConverterContainerId containerName, out Type type) { type = null; @@ -178,15 +171,12 @@ internal static bool TryGetTypeInContainer(ConverterId value, ConverterContainer /// The name of the container which will be batched. /// The list of converters that will be either included or excluded from batching. These converters need to be part of the passed in container for them to run. /// The enum that decide if the list of converters will be included or excluded when batching. - [Obsolete("RunInBatchMode will be removed. Please open the Unity Editor and perform the conversion from the Converter UI. #from(6000.4)", false)] public static void RunInBatchMode(ConverterContainerId containerName, List converterList, ConverterFilter converterFilter) { var types = FilterConverters(containerName, converterList, converterFilter); RunInBatchMode(types); } - [Obsolete("RunInBatchMode will be removed. Please open the Unity Editor and perform the conversion from the Converter UI. #from(6000.4)", false)] - internal static List FilterConverters(ConverterContainerId containerName, List converterList, ConverterFilter converterFilter) { Array converters = Enum.GetValues(typeof(ConverterId)); @@ -213,6 +203,8 @@ internal static List FilterConverters(ConverterContainerId containerName, /// False if there were errors. internal static bool RunInBatchMode(List converterTypes) { + Debug.LogWarning("Using this API can lead to incomplete or unpredictable conversion outcomes. For reliable results, please perform the conversion via the dedicated window: Window > Rendering > Render Pipeline Converter."); + List convertersToExecute = new(); bool errors = false; diff --git a/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs b/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs index 7d8cfb1ee2c..7bb2a2f5049 100644 --- a/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs +++ b/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; using NUnit.Framework; +using UnityEngine.TestTools; +using UnityEngine; namespace UnityEditor.Rendering.Universal.Tools { @@ -49,6 +51,19 @@ public void BatchModeFails() Assert.IsFalse(ok); } + [Test] + public void RunInBatchMode_LogsUsageWarning() + { + LogAssert.Expect( + LogType.Warning, + "Using this API can lead to incomplete or unpredictable conversion outcomes. " + + "For reliable results, please perform the conversion via the dedicated window: " + + "Window > Rendering > Render Pipeline Converter." + ); + + bool _ = Converters.RunInBatchMode(new List() {}); + } + #pragma warning disable CS0618 // Type or member is obsolete public static IEnumerable TestCases() { From df1542ea5702c447650c13349a9eeda8b6a0cb1a Mon Sep 17 00:00:00 2001 From: Justin Schwartz Date: Sun, 25 Jan 2026 00:20:50 +0000 Subject: [PATCH 04/79] UUM-130732: Fix GPU Crash on Switch 2 in `Sort.compute` --- .../com.unity.visualeffectgraph/Shaders/Sort.compute | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Packages/com.unity.visualeffectgraph/Shaders/Sort.compute b/Packages/com.unity.visualeffectgraph/Shaders/Sort.compute index e4fe54c210a..217e205ddda 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/Sort.compute +++ b/Packages/com.unity.visualeffectgraph/Shaders/Sort.compute @@ -41,6 +41,13 @@ #define USE_ALTERNATE_BITONIC_NETWORK 0 #endif +// Some platforms require the use of a dynamic branch when accessing buffers that could be out of bounds +#if defined(SHADER_API_SWITCH) || defined(SHADER_API_SWITCH2) +#define USE_DYNAMIC_BRANCH UNITY_BRANCH +#else +#define USE_DYNAMIC_BRANCH +#endif + #define ELEMENTS_PER_THREAD (2 * ITERATIONS_COUNT) #define BITONIC_THREADS_COUNT ELEMENTS_COUNT / ELEMENTS_PER_THREAD #define MERGE_THREADS_COUNT ELEMENTS_COUNT @@ -112,6 +119,8 @@ void LoadFromMemory(uint3 groupId, uint ldsIndex) uint memIndex = DST_INDEX(groupId, ldsIndex); KVP kvp = { REJECTED_VALUE, 0xFFFFFFFF }; + + USE_DYNAMIC_BRANCH if (instanceDstIndex < GetElementCount(groupId.z)) kvp = inputSequence[totalInstanceCount + memIndex]; @@ -245,6 +254,7 @@ void MERGE_PASS(uint3 groupId : SV_GroupID, const int arrayStart = arraySize * (id / arraySize); // If the current array considered is less than one half filled (due to element count), we can copy it directly as it is already sorted + USE_DYNAMIC_BRANCH if (GetElementCount(groupId.z) - (uint)arrayStart <= subArraySize) { #if FINAL_PASS From af992514faf0c9311f09c9ec16611c3fc8b25548 Mon Sep 17 00:00:00 2001 From: Ludovic Theobald Date: Sun, 25 Jan 2026 00:20:51 +0000 Subject: [PATCH 05/79] [VFX] Fix static in VFX package following Fast Enter Play Mode recommandations --- .../VisualEffectControlClip.cs | 2 +- .../Runtime/Utilities/SDF/MeshToSDFBaker.cs | 116 +++++++++--------- 2 files changed, 56 insertions(+), 62 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Runtime/Utilities/Playables/VisualEffectControl/VisualEffectControlClip.cs b/Packages/com.unity.visualeffectgraph/Runtime/Utilities/Playables/VisualEffectControl/VisualEffectControlClip.cs index a09b4ce71b8..ea7e6bba6d5 100644 --- a/Packages/com.unity.visualeffectgraph/Runtime/Utilities/Playables/VisualEffectControl/VisualEffectControlClip.cs +++ b/Packages/com.unity.visualeffectgraph/Runtime/Utilities/Playables/VisualEffectControl/VisualEffectControlClip.cs @@ -56,7 +56,7 @@ public struct PrewarmClipSettings [Serializable] public struct ClipEvent { - public static Color defaultEditorColor = new Color32(123, 158, 5, 255); + public static readonly Color defaultEditorColor = new Color32(123, 158, 5, 255); public Color editorColor; public VisualEffectPlayableSerializedEventNoColor enter; public VisualEffectPlayableSerializedEventNoColor exit; diff --git a/Packages/com.unity.visualeffectgraph/Runtime/Utilities/SDF/MeshToSDFBaker.cs b/Packages/com.unity.visualeffectgraph/Runtime/Utilities/SDF/MeshToSDFBaker.cs index b42134eb6b5..022c5ce557c 100644 --- a/Packages/com.unity.visualeffectgraph/Runtime/Utilities/SDF/MeshToSDFBaker.cs +++ b/Packages/com.unity.visualeffectgraph/Runtime/Utilities/SDF/MeshToSDFBaker.cs @@ -58,14 +58,14 @@ private GraphicsBuffer private int m_RayMapUseCounter = 0; - internal static uint kMaxRecommandedGridSize = 1 << 24; - internal static uint kMaxAbsoluteGridSize = 1 << 27; + internal const uint kMaxRecommandedGridSize = 1 << 24; + internal static readonly uint kMaxAbsoluteGridSize = 1 << 27; //TODO: Use PLATFORM_UAVS_SEPARATE_TO_RTS (or equivalent) when it will be available #if (UNITY_PS4 || UNITY_PS5) && (!UNITY_EDITOR) - private static int kNbActualRT = 1; + private readonly int kNbActualRT = 1; #else - private static int kNbActualRT = 0; + private readonly int kNbActualRT = 0; #endif internal VFXRuntimeResources m_RuntimeResources; @@ -1148,77 +1148,71 @@ internal void SaveToAsset(string assetName = "") #endif - static class ShaderProperties { - internal static int indicesBuffer = Shader.PropertyToID("indices"); - internal static int verticesBuffer = Shader.PropertyToID("vertices"); - internal static int vertexPositionOffset = Shader.PropertyToID("vertexPositionOffset"); - internal static int vertexStride = Shader.PropertyToID("vertexStride"); - internal static int indexStride = Shader.PropertyToID("indexStride"); - - internal static int coordFlipBuffer = Shader.PropertyToID("coordFlip"); - internal static int verticesOutBuffer = Shader.PropertyToID("verticesOut"); - internal static int aabbBuffer = Shader.PropertyToID("aabb"); - internal static int worldToClip = Shader.PropertyToID("worldToClip"); - internal static int currentAxis = Shader.PropertyToID("currentAxis"); - internal static int voxelsBuffer = Shader.PropertyToID("voxelsBuffer"); - internal static int rw_trianglesUV = Shader.PropertyToID("rw_trianglesUV"); - internal static int trianglesUV = Shader.PropertyToID("trianglesUV"); - internal static int voxelsTexture = Shader.PropertyToID("voxels"); - internal static int voxelsTmpTexture = Shader.PropertyToID("voxelsTmp"); - internal static int rayMap = Shader.PropertyToID("rayMap"); - internal static int rayMapTmp = Shader.PropertyToID("rayMapTmp"); - internal static int rw_rayMapTmp = Shader.PropertyToID("rw_rayMapTmp"); - internal static int nTriangles = Shader.PropertyToID("nTriangles"); - internal static int minBoundsExtended = Shader.PropertyToID("minBoundsExtended"); - internal static int maxBoundsExtended = Shader.PropertyToID("maxBoundsExtended"); - internal static int maxExtent = Shader.PropertyToID("maxExtent"); - internal static int upperBoundCount = Shader.PropertyToID("upperBoundCount"); - internal static int counter = Shader.PropertyToID("counter"); - - internal static int dimX = Shader.PropertyToID("dimX"); - internal static int dimY = Shader.PropertyToID("dimY"); - internal static int dimZ = Shader.PropertyToID("dimZ"); - internal static int size = Shader.PropertyToID("size"); + internal static readonly int indicesBuffer = Shader.PropertyToID("indices"); + internal static readonly int verticesBuffer = Shader.PropertyToID("vertices"); + internal static readonly int vertexPositionOffset = Shader.PropertyToID("vertexPositionOffset"); + internal static readonly int vertexStride = Shader.PropertyToID("vertexStride"); + internal static readonly int indexStride = Shader.PropertyToID("indexStride"); + + internal static readonly int coordFlipBuffer = Shader.PropertyToID("coordFlip"); + internal static readonly int verticesOutBuffer = Shader.PropertyToID("verticesOut"); + internal static readonly int aabbBuffer = Shader.PropertyToID("aabb"); + internal static readonly int worldToClip = Shader.PropertyToID("worldToClip"); + internal static readonly int currentAxis = Shader.PropertyToID("currentAxis"); + internal static readonly int voxelsBuffer = Shader.PropertyToID("voxelsBuffer"); + internal static readonly int rw_trianglesUV = Shader.PropertyToID("rw_trianglesUV"); + internal static readonly int trianglesUV = Shader.PropertyToID("trianglesUV"); + internal static readonly int voxelsTexture = Shader.PropertyToID("voxels"); + internal static readonly int voxelsTmpTexture = Shader.PropertyToID("voxelsTmp"); + internal static readonly int rayMap = Shader.PropertyToID("rayMap"); + internal static readonly int rayMapTmp = Shader.PropertyToID("rayMapTmp"); + internal static readonly int rw_rayMapTmp = Shader.PropertyToID("rw_rayMapTmp"); + internal static readonly int nTriangles = Shader.PropertyToID("nTriangles"); + internal static readonly int minBoundsExtended = Shader.PropertyToID("minBoundsExtended"); + internal static readonly int maxBoundsExtended = Shader.PropertyToID("maxBoundsExtended"); + internal static readonly int maxExtent = Shader.PropertyToID("maxExtent"); + internal static readonly int upperBoundCount = Shader.PropertyToID("upperBoundCount"); + internal static readonly int counter = Shader.PropertyToID("counter"); + + internal static readonly int dimX = Shader.PropertyToID("dimX"); + internal static readonly int dimY = Shader.PropertyToID("dimY"); + internal static readonly int dimZ = Shader.PropertyToID("dimZ"); + internal static readonly int size = Shader.PropertyToID("size"); //Prefix sum - internal static int inputBuffer = Shader.PropertyToID("Input"); - internal static int inputCounter = Shader.PropertyToID("inputCounter"); - internal static int auxBuffer = Shader.PropertyToID("auxBuffer"); - internal static int resultBuffer = Shader.PropertyToID("Result"); - internal static int numElem = Shader.PropertyToID("numElem"); - internal static int exclusive = Shader.PropertyToID("exclusive"); - internal static int dispatchWidth = Shader.PropertyToID("dispatchWidth"); - - - //Copy kernels - internal static int src = Shader.PropertyToID("src"); - internal static int dest = Shader.PropertyToID("dest"); + internal static readonly int inputBuffer = Shader.PropertyToID("Input"); + internal static readonly int inputCounter = Shader.PropertyToID("inputCounter"); + internal static readonly int auxBuffer = Shader.PropertyToID("auxBuffer"); + internal static readonly int resultBuffer = Shader.PropertyToID("Result"); + internal static readonly int numElem = Shader.PropertyToID("numElem"); + internal static readonly int exclusive = Shader.PropertyToID("exclusive"); + internal static readonly int dispatchWidth = Shader.PropertyToID("dispatchWidth"); //Sign map - internal static int signMap = Shader.PropertyToID("signMap"); - internal static int threshold = Shader.PropertyToID("threshold"); - internal static int signMapTmp = Shader.PropertyToID("signMapTmp"); - internal static int normalizeFactor = Shader.PropertyToID("normalizeFactor"); - internal static int numNeighbours = Shader.PropertyToID("numNeighbours"); - internal static int passId = Shader.PropertyToID("passId"); - internal static int needNormalize = Shader.PropertyToID("needNormalize"); + internal static readonly int signMap = Shader.PropertyToID("signMap"); + internal static readonly int threshold = Shader.PropertyToID("threshold"); + internal static readonly int signMapTmp = Shader.PropertyToID("signMapTmp"); + internal static readonly int normalizeFactor = Shader.PropertyToID("normalizeFactor"); + internal static readonly int numNeighbours = Shader.PropertyToID("numNeighbours"); + internal static readonly int passId = Shader.PropertyToID("passId"); + internal static readonly int needNormalize = Shader.PropertyToID("needNormalize"); //JFA - internal static int offset = Shader.PropertyToID("offset"); + internal static readonly int offset = Shader.PropertyToID("offset"); //Ray Map - internal static int offsetRayMap = Shader.PropertyToID("offsetRayMap"); - internal static int triangleIDs = Shader.PropertyToID("triangleIDs"); - internal static int accumCounter = Shader.PropertyToID("accumCounter"); + internal static readonly int offsetRayMap = Shader.PropertyToID("offsetRayMap"); + internal static readonly int triangleIDs = Shader.PropertyToID("triangleIDs"); + internal static readonly int accumCounter = Shader.PropertyToID("accumCounter"); //Distance - internal static int distanceTexture = Shader.PropertyToID("distanceTexture"); - internal static int sdfOffset = Shader.PropertyToID("sdfOffset"); + internal static readonly int distanceTexture = Shader.PropertyToID("distanceTexture"); + internal static readonly int sdfOffset = Shader.PropertyToID("sdfOffset"); } - internal class Kernels + class Kernels { internal int inBucketSum = -1; internal int blockSums = -1; From cb36b7e2791bac05a6b33eb1c17246dbb1044904 Mon Sep 17 00:00:00 2001 From: Keng Iuan Tan Date: Sun, 25 Jan 2026 00:20:53 +0000 Subject: [PATCH 06/79] [UUM-132809] Fix naming in add component menu and GameObject creation menu for ugui shadergraph samples --- .../Samples~/UGUIShaders/Scripts/Runtime/CustomButton.cs | 4 ++-- .../Samples~/UGUIShaders/Scripts/Runtime/CustomSlider.cs | 4 ++-- .../Samples~/UGUIShaders/Scripts/Runtime/CustomToggle.cs | 4 ++-- .../Samples~/UGUIShaders/Scripts/Runtime/GraphicColor.cs | 2 +- .../Samples~/UGUIShaders/Scripts/Runtime/Meter.cs | 4 ++-- .../Samples~/UGUIShaders/Scripts/Runtime/RangeBar.cs | 4 ++-- .../Samples~/UGUIShaders/Scripts/Runtime/RectTransformSize.cs | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomButton.cs b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomButton.cs index 27c09387b49..662f67d812b 100644 --- a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomButton.cs +++ b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomButton.cs @@ -17,7 +17,7 @@ namespace Unity.UI.Shaders.Sample /// is called. /// Implemented as a . /// - [AddComponentMenu("UI/ShaderGraph Samples/Button")] + [AddComponentMenu("UI (Canvas)/ShaderGraph Samples/Button")] public class CustomButton : Selectable, IPointerClickHandler, ISubmitHandler /*Button*/, IMaterialModifier { public UnityEvent onClick; @@ -105,7 +105,7 @@ public virtual Material GetModifiedMaterial(Material baseMaterial) } #if UNITY_EDITOR - [MenuItem("GameObject/UI/ShaderGraph Samples/Button", false, 30)] + [MenuItem("GameObject/UI (Canvas)/ShaderGraph Samples/Button", false, 30)] static void CreateButtonGameObject(MenuCommand command) { GameObject go = ObjectFactory.CreateGameObject("SG Button", new Type[] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image), typeof(CustomButton) }); diff --git a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomSlider.cs b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomSlider.cs index d6ba085023c..7cbd04c1531 100644 --- a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomSlider.cs +++ b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomSlider.cs @@ -15,7 +15,7 @@ namespace Unity.UI.Shaders.Sample /// A custom Slider. /// Unlike a , this uses only a single RectTransform. /// - [AddComponentMenu("UI/ShaderGraph Samples/Slider")] + [AddComponentMenu("UI (Canvas)/ShaderGraph Samples/Slider")] [RequireComponent(typeof(Graphic))] [DisallowMultipleComponent] public class CustomSlider : Selectable, IDragHandler, IInitializePotentialDragHandler, IMaterialModifier @@ -288,7 +288,7 @@ public virtual void OnInitializePotentialDrag(PointerEventData eventData) } #if UNITY_EDITOR - [MenuItem("GameObject/UI/ShaderGraph Samples/Slider", false, 30)] + [MenuItem("GameObject/UI (Canvas)/ShaderGraph Samples/Slider", false, 30)] static void CreateToggleGameObject(MenuCommand command) { GameObject go = ObjectFactory.CreateGameObject("Slider", new Type[] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image), typeof(RectTransformSize), typeof(CustomSlider) }); diff --git a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomToggle.cs b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomToggle.cs index c952b694feb..d5d33e380a5 100644 --- a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomToggle.cs +++ b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/CustomToggle.cs @@ -17,7 +17,7 @@ namespace Unity.UI.Shaders.Sample /// changes. /// Implemented as a variant of to make it work nicely with . /// - [AddComponentMenu("UI/ShaderGraph Samples/Toggle")] + [AddComponentMenu("UI (Canvas)/ShaderGraph Samples/Toggle")] [RequireComponent(typeof(Graphic))] public class CustomToggle : Toggle, IMaterialModifier { @@ -129,7 +129,7 @@ public override void OnSubmit(BaseEventData eventData) } #if UNITY_EDITOR - [MenuItem("GameObject/UI/ShaderGraph Samples/Toggle", false, 30)] + [MenuItem("GameObject/UI (Canvas)/ShaderGraph Samples/Toggle", false, 30)] static void CreateToggleGameObject(MenuCommand command) { GameObject go = ObjectFactory.CreateGameObject("SG Toggle", new Type[] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image), typeof(CustomToggle) }); diff --git a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/GraphicColor.cs b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/GraphicColor.cs index 6e9a443ee1c..74b59cec70f 100644 --- a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/GraphicColor.cs +++ b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/GraphicColor.cs @@ -7,7 +7,7 @@ namespace Unity.UI.Shaders.Sample /// /// /// - [AddComponentMenu("UI/ShaderGraph Samples/Graphic Color")] + [AddComponentMenu("UI (Canvas)/ShaderGraph Samples/Graphic Color")] [RequireComponent(typeof(Graphic))] public class GraphicColor : UIBehaviour { diff --git a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/Meter.cs b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/Meter.cs index c1477e47b8a..f9795421c0b 100644 --- a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/Meter.cs +++ b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/Meter.cs @@ -12,7 +12,7 @@ namespace Unity.UI.Shaders.Sample /// /// A simple Meter. /// - [AddComponentMenu("UI/ShaderGraph Samples/Meter")] + [AddComponentMenu("UI (Canvas)/ShaderGraph Samples/Meter")] [RequireComponent(typeof(Graphic))] [DisallowMultipleComponent] public class Meter : UIBehaviour, IMaterialModifier @@ -108,7 +108,7 @@ public virtual Material GetModifiedMaterial(Material baseMaterial) } #if UNITY_EDITOR - [MenuItem("GameObject/UI/ShaderGraph Samples/Meter", false, 30)] + [MenuItem("GameObject/UI (Canvas)/ShaderGraph Samples/Meter", false, 30)] static void CreateToggleGameObject(MenuCommand command) { GameObject go = ObjectFactory.CreateGameObject("Meter", new System.Type[] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image), typeof(RectTransformSize), typeof(Meter) }); diff --git a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/RangeBar.cs b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/RangeBar.cs index 6c594ce6c3c..660d6f7edc9 100644 --- a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/RangeBar.cs +++ b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/RangeBar.cs @@ -13,7 +13,7 @@ namespace Unity.UI.Shaders.Sample /// A simple ProgressBar. /// Becomes interactable when associated with a /// - [AddComponentMenu("UI/ShaderGraph Samples/Range Bar")] + [AddComponentMenu("UI (Canvas)/ShaderGraph Samples/Range Bar")] [RequireComponent(typeof(Graphic))] [DisallowMultipleComponent] public class RangeBar : UIBehaviour, IMaterialModifier @@ -137,7 +137,7 @@ public virtual Material GetModifiedMaterial(Material baseMaterial) } #if UNITY_EDITOR - [MenuItem("GameObject/UI/ShaderGraph Samples/Range Bar", false, 30)] + [MenuItem("GameObject/UI (Canvas)/ShaderGraph Samples/Range Bar", false, 30)] static void CreateToggleGameObject(MenuCommand command) { GameObject go = ObjectFactory.CreateGameObject("Range Bar", new System.Type[] { typeof(RectTransform), typeof(CanvasRenderer), typeof(Image), typeof(RectTransformSize), typeof(RangeBar) }); diff --git a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/RectTransformSize.cs b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/RectTransformSize.cs index a5e23c61e56..ccef45d76e7 100644 --- a/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/RectTransformSize.cs +++ b/Packages/com.unity.shadergraph/Samples~/UGUIShaders/Scripts/Runtime/RectTransformSize.cs @@ -7,7 +7,7 @@ namespace Unity.UI.Shaders.Sample /// /// Sets the UI Material's Property to the 's screen size. /// - [AddComponentMenu("UI/ShaderGraph Samples/RectTransform Size")] + [AddComponentMenu("UI (Canvas)/ShaderGraph Samples/RectTransform Size")] [ExecuteAlways] [RequireComponent(typeof(RectTransform), typeof(Graphic))] [DisallowMultipleComponent] From d6adcb4bea6c125c0e4d1017851c939a9e1619af Mon Sep 17 00:00:00 2001 From: Yvain Raeymaekers Date: Sun, 25 Jan 2026 00:20:57 +0000 Subject: [PATCH 07/79] [GFXLIGHT-2080] Fix terrain texture not being properly sampled in the Unified Baker --- .../Runtime/UnifiedRayTracing/Common/TerrainToMesh.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/Common/TerrainToMesh.cs b/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/Common/TerrainToMesh.cs index 32e150e37c5..3b2c165498e 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/Common/TerrainToMesh.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/UnifiedRayTracing/Common/TerrainToMesh.cs @@ -99,6 +99,7 @@ public Mesh GetMesh() mesh.indexFormat = IndexFormat.UInt32; mesh.SetVertices(m_Job.positions); mesh.SetUVs(0, m_Job.uvs); + mesh.SetUVs(1, m_Job.uvs); mesh.SetNormals(m_Job.normals); mesh.SetIndices(TriangleIndicesWithoutHoles().ToArray(), MeshTopology.Triangles, 0); From 662a055ab36f2805b707f8d50d3bd8915ffd851a Mon Sep 17 00:00:00 2001 From: Julien Amsellem Date: Tue, 27 Jan 2026 03:38:34 +0000 Subject: [PATCH 08/79] Fixed UI clipping not done nicely on Bake Tool and Point Cache windows --- .../Utilities/SDF/BakeTool/SDFBakeTool.cs | 21 ++++++++++++------- .../BakeTool/PointCacheBakeTool.Mesh.cs | 12 ++++++++++- .../BakeTool/PointCacheBakeTool.Texture.cs | 6 +++++- .../pCache/BakeTool/PointCacheBakeTool.cs | 3 +++ 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/Utilities/SDF/BakeTool/SDFBakeTool.cs b/Packages/com.unity.visualeffectgraph/Editor/Utilities/SDF/BakeTool/SDFBakeTool.cs index 4e84caf3028..f4debf67a1e 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Utilities/SDF/BakeTool/SDFBakeTool.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Utilities/SDF/BakeTool/SDFBakeTool.cs @@ -111,8 +111,10 @@ protected void OnGUI() EditorGUI.BeginChangeCheck(); - var newSettings = (SdfBakerSettings)EditorGUILayout.ObjectField(Contents.settingsAsset, m_Settings, typeof(SdfBakerSettings), true, GUILayout.MinWidth(20), - GUILayout.MaxWidth(400), GUILayout.ExpandWidth(true)); + GUILayout.BeginHorizontal(); + var newSettings = (SdfBakerSettings)EditorGUILayout.ObjectField(Contents.settingsAsset, m_Settings, typeof(SdfBakerSettings), true, GUILayout.MaxWidth(400)); + GUILayout.EndHorizontal(); + if (EditorGUI.EndChangeCheck()) { if (newSettings != null) @@ -233,7 +235,9 @@ protected void OnGUI() } EditorGUI.BeginChangeCheck(); + GUILayout.BeginHorizontal(); modelSource = (ModelSource)EditorGUILayout.EnumPopup(Contents.bakeSource, modelSource); + GUILayout.EndHorizontal(); bool changedSource = EditorGUI.EndChangeCheck(); needsUpdate |= changedSource; @@ -241,8 +245,9 @@ protected void OnGUI() { case ModelSource.Mesh: EditorGUI.BeginChangeCheck(); - selectedMesh = - (Mesh)EditorGUILayout.ObjectField(Contents.mesh, selectedMesh, typeof(Mesh), false); + GUILayout.BeginHorizontal(); + selectedMesh = (Mesh)EditorGUILayout.ObjectField(Contents.mesh, selectedMesh, typeof(Mesh), false); + GUILayout.EndHorizontal(); bool meshFieldHasChanged = EditorGUI.EndChangeCheck(); needsUpdate |= meshFieldHasChanged; @@ -256,9 +261,9 @@ protected void OnGUI() case ModelSource.MeshPrefab: EditorGUI.BeginChangeCheck(); - meshPrefab = - (GameObject)EditorGUILayout.ObjectField(Contents.meshPrefab, meshPrefab, typeof(GameObject), - false); + GUILayout.BeginHorizontal(); + meshPrefab = (GameObject)EditorGUILayout.ObjectField(Contents.meshPrefab, meshPrefab, typeof(GameObject), false); + GUILayout.EndHorizontal(); meshFieldHasChanged = EditorGUI.EndChangeCheck() || m_PrefabChanged; m_PrefabChanged = false; @@ -326,7 +331,9 @@ protected void OnGUI() GUI.enabled = true; + GUILayout.BeginHorizontal(); previewObject = (PreviewChoice)EditorGUILayout.EnumPopup(Contents.previewChoice, previewObject); + GUILayout.EndHorizontal(); if ((previewObject & PreviewChoice.Mesh) != 0) { UpdateMeshPreview(); diff --git a/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.Mesh.cs b/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.Mesh.cs index dabd4ceb01b..469a89457d9 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.Mesh.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.Mesh.cs @@ -35,10 +35,18 @@ public enum Distribution void OnGUI_Mesh() { GUILayout.Label("Mesh Baking", EditorStyles.boldLabel); - m_Mesh = (Mesh)EditorGUILayout.ObjectField(Contents.mesh, m_Mesh, typeof(Mesh), false); + GUILayout.BeginHorizontal(); + m_Mesh = (Mesh)EditorGUILayout.ObjectField(Contents.mesh, m_Mesh, typeof(Mesh), false, GUILayout.MaxWidth(400), GUILayout.ExpandWidth(true)); + GUILayout.EndHorizontal(); + GUILayout.BeginHorizontal(); m_Distribution = (Distribution)EditorGUILayout.EnumPopup(Contents.distribution, m_Distribution); + GUILayout.EndHorizontal(); if (m_Distribution != Distribution.RandomUniformArea) + { + GUILayout.BeginHorizontal(); m_MeshBakeMode = (MeshBakeMode)EditorGUILayout.EnumPopup(Contents.meshBakeMode, m_MeshBakeMode); + GUILayout.EndHorizontal(); + } m_ExportNormals = EditorGUILayout.Toggle("Export Normals", m_ExportNormals); m_ExportColors = EditorGUILayout.Toggle("Export Colors", m_ExportColors); @@ -48,7 +56,9 @@ void OnGUI_Mesh() if (m_Distribution != Distribution.Sequential) m_SeedMesh = EditorGUILayout.IntField("Seed", m_SeedMesh); + GUILayout.BeginHorizontal(); m_OutputFormat = (PCache.Format)EditorGUILayout.EnumPopup("File Format", m_OutputFormat); + GUILayout.EndHorizontal(); if (m_Mesh != null) { diff --git a/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.Texture.cs b/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.Texture.cs index 57fbbb4af4a..c18d37fdc38 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.Texture.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.Texture.cs @@ -27,9 +27,11 @@ void OnGUI_Texture() { GUILayout.Label("Texture baking", EditorStyles.boldLabel); + GUILayout.BeginHorizontal(); m_Texture = (Texture2D)EditorGUILayout.ObjectField("Texture", m_Texture, typeof(Texture2D), false); + GUILayout.EndHorizontal(); - m_DecimationThresholdMode = (DecimationThresholdMode)EditorGUILayout.EnumPopup("Decimation Threshold", m_DecimationThresholdMode); + m_DecimationThresholdMode = (DecimationThresholdMode)EditorGUILayout.EnumPopup("Decimation Threshold", m_DecimationThresholdMode, GUILayout.ExpandWidth(false)); if (m_DecimationThresholdMode != DecimationThresholdMode.None) m_Threshold = EditorGUILayout.Slider("Threshold", m_Threshold, 0.0f, 1.0f); @@ -38,7 +40,9 @@ void OnGUI_Texture() m_SeedPixels = EditorGUILayout.IntField("Seed", m_SeedPixels); m_ExportColors = EditorGUILayout.Toggle("Export Colors", m_ExportColors); + GUILayout.BeginHorizontal(); m_OutputFormat = (PCache.Format)EditorGUILayout.EnumPopup("File Format", m_OutputFormat); + GUILayout.EndHorizontal(); if (m_Texture != null) { diff --git a/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.cs b/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.cs index 6ad60663852..9d8a73cc447 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Utilities/pCache/BakeTool/PointCacheBakeTool.cs @@ -24,7 +24,10 @@ public enum BakeMode private void OnGUI() { + GUILayout.BeginHorizontal(); mode = (BakeMode)EditorGUILayout.EnumPopup(Contents.mode, mode); + GUILayout.EndHorizontal(); + switch (mode) { case BakeMode.Mesh: OnGUI_Mesh(); break; From a2bff753901e46a7b805f007aa3b71a0a471c6b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20V=C3=A1zquez?= Date: Tue, 27 Jan 2026 03:38:45 +0000 Subject: [PATCH 09/79] Render Pipeline Converter - Multiple fixes on the UI and usability. --- .../Window/RenderPipelineConvertersEditor.cs | 33 ++++++++++++- .../Window/RenderPipelineConvertersEditor.uss | 11 +++-- .../RenderPipelineConvertersEditor.uxml | 2 +- .../Editor/HeaderFoldout.cs | 46 ++++++++++++------- .../Editor/Converter/Converters.cs | 6 ++- 5 files changed, 73 insertions(+), 25 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.cs b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.cs index 2779480893e..d457e54e824 100644 --- a/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.cs +++ b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.cs @@ -79,6 +79,12 @@ public static void ShowWindow() wnd.Show(); } + [MenuItem("Window/Rendering/Render Pipeline Converter", true, 50)] + public static bool CanShowWindow() + { + return !EditorApplication.isPlaying; + } + internal static void DontSaveToLayout(EditorWindow wnd) { // Making sure that the window is not saved in layouts. @@ -182,6 +188,7 @@ public void CreateGUI() RenderPipelineConverterVisualElement converterVisualElement = new(element); converterVisualElement.converterSelected += EnableOrDisableConvertButton; + converterVisualElement.converterSelected += EnableOrDisableScanButton; m_ConvertersVisualElements.Add(element, converterVisualElement); } } @@ -219,11 +226,26 @@ public void CreateGUI() }); HideUnhideConverters(); + EnableOrDisableScanButton(); EnableOrDisableConvertButton(); UpdateUiForPlayMode(EditorApplication.isPlaying); } + private bool CanEnableScan() + { + foreach (var kvp in m_ConvertersVisualElements) + { + var ve = kvp.Value; + if (ve.isSelectedAndEnabled && + !ve.state.isInitialized) + { + return true; + } + } + return false; + } + private bool CanEnableConvert() { foreach (var kvp in m_ConvertersVisualElements) @@ -245,6 +267,11 @@ private void EnableOrDisableConvertButton() m_ConvertButton.SetEnabled(CanEnableConvert()); } + private void EnableOrDisableScanButton() + { + m_InitButton.SetEnabled(CanEnableScan()); + } + private void HideUnhideConverters() { if (currentContainer == null) @@ -298,8 +325,8 @@ IEnumerable selectedConverters void InitializeAllActiveConverters(ClickEvent evt) { - if (!SaveCurrentSceneAndContinue()) - return; + if (EditorApplication.isPlaying) return; + if (!SaveCurrentSceneAndContinue()) return; // Gather all the converters that are selected var convertersToInitialize = new List(); @@ -368,6 +395,7 @@ private void RefreshUI() converterVE.Refresh(); } + EnableOrDisableScanButton(); EnableOrDisableConvertButton(); } @@ -399,6 +427,7 @@ struct AnalyticContextInfo void Convert(ClickEvent evt) { + if (EditorApplication.isPlaying) return; if (!ShowIrreversibleChangesDialog()) return; // Ask to save save the current open scene and after the conversion is done reload the same scene. if (!SaveCurrentSceneAndContinue()) return; diff --git a/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.uss b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.uss index 25de710cf15..4bddc8cb2ae 100644 --- a/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.uss +++ b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.uss @@ -17,6 +17,7 @@ padding-top: 2px; width: auto; padding-bottom: 20px; + flex-direction: column; } .converter-top-info { @@ -57,6 +58,8 @@ .converter-scroll-view { flex-grow: 1; align-items: stretch; + flex-shrink: 1; + min-height: 0; } .converter-bottom-buttons { @@ -82,12 +85,14 @@ flex-direction: row; justify-content: flex-end; /* right align */ flex-wrap: wrap; /* allow wrapping */ - margin-bottom: 10px; + margin-top: 10px; + flex-shrink: 0; + min-height: 40px; } .converter-button { flex-shrink: 0; min-width: 100px; /* adjust to your layout */ - min-height: 20px; - margin-top: 10px; + align-self: flex-end; } + diff --git a/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.uxml b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.uxml index 09391e43e6d..c537e9592bd 100644 --- a/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.uxml +++ b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/Window/RenderPipelineConvertersEditor.uxml @@ -1,5 +1,5 @@ - + diff --git a/Packages/com.unity.render-pipelines.core/Editor/HeaderFoldout.cs b/Packages/com.unity.render-pipelines.core/Editor/HeaderFoldout.cs index d140d8d685a..809c11ee3a1 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/HeaderFoldout.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/HeaderFoldout.cs @@ -99,7 +99,8 @@ public bool showEnableCheckbox set => m_Text.tooltip = value; } - Vector2 m_LastLocalMousePos; + bool m_IsHoveringLabel; + Rect m_TooltipRect; /// Constructor public HeaderFoldout() : base() @@ -111,7 +112,33 @@ public HeaderFoldout() : base() RegisterCallback(DelayedInit); var line = hierarchy[0][0]; //pass by herarchy to ignore content redirection - + line.RegisterCallback(e => + { + m_IsHoveringLabel = true; + + const float tipWidth = 200f; + const float tipHeight = 24f; + + m_TooltipRect = new Rect( + e.position.x, + e.position.y, + tipWidth, + tipHeight + ); + }); + line.RegisterCallback(e => + { + m_IsHoveringLabel = false; + }); + line.RegisterCallback(evt => + { + if (!m_IsHoveringLabel) + return; + + evt.rect = m_TooltipRect; + evt.StopPropagation(); + }); + m_IconElement = new Image() { style = @@ -133,21 +160,6 @@ public HeaderFoldout() : base() m_Text = new Label(); m_Text.AddToClassList(k_LabelClass); - m_Text.RegisterCallback(e => - { - m_LastLocalMousePos = e.position; // in root's local coords - }); - m_Text.RegisterCallback(evt => - { - // Offset the tooltip slightly from the cursor - const float tipWidth = 200f; // approximate width; the system will size it - const float tipHeight = 24f; // approximate height - - evt.rect = new Rect(m_LastLocalMousePos.x, m_LastLocalMousePos.y, tipWidth, tipHeight); - - // Optional: ensure only this handler sets the rect - evt.StopPropagation(); - }); line.Add(m_Text); m_HelpButton = new Button(Background.FromTexture2D(CoreEditorStyles.iconHelp), () => Help.BrowseURL(m_DocumentationURL)); diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs b/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs index 6a4981182e5..7c136f098e1 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs @@ -243,7 +243,7 @@ internal static void BatchConverters(List converters) { foreach (var converter in converters) { - var sb = new StringBuilder($"Conversion results for item: {converter}:{Environment.NewLine}"); + var sb = new StringBuilder(); converter.Scan(OnConverterCompleteDataCollection); @@ -271,7 +271,9 @@ void OnConverterCompleteDataCollection(List items) } converter.AfterConvert(); - Debug.Log(sb.ToString()); + var conversionResult = sb.ToString(); + if (!string.IsNullOrEmpty(conversionResult)) + Debug.Log(sb.ToString()); } } From c9735511f7bfb943bec279c77b3e57b68557e007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Chapelain?= Date: Tue, 27 Jan 2026 03:38:46 +0000 Subject: [PATCH 10/79] [HDRP] Fix water decal sampling in Sample Water Surface VFX Graph Node --- .../Documentation~/water-vfx-interaction.md | 8 +- .../WaterSurface/VFX/SampleWaterSurface.cs | 6 + .../VFX/VFX Graphs/VFX_Bubbles.vfx | 253 ++++++++---------- 3 files changed, 121 insertions(+), 146 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-vfx-interaction.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-vfx-interaction.md index 0c9c34a2146..1f3374da6b1 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-vfx-interaction.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-vfx-interaction.md @@ -6,11 +6,17 @@ However there are several simulations that are important to be aware of. As the water surface gameobject is saved inside a scene, and the VFX graph is an asset on disk, it is not possible to directly reference the surface from within the graph. This means data of the water surface need to be set globally by the user before the VFX can sample the water. As a result, only a single surface can be sampled from any VFX Graph at any given time. -Additionally, the settings on the Sample node in the VFX Graph needs to be set according to what water surfaces will be bound globally at runtime. This inclues setting the proper **Surface Type** and enabling **Include Current** if a current map is assigned on the water surface. +Additionally, the settings on the Sample node in the VFX Graph needs to be set according to what water surfaces will be bound globally at runtime. This includes setting the proper **Surface Type** and enabling **Include Current** if a current map is assigned on the water surface. The **Evaluate Ripples** needs to be disabled if the surface doesn't have ripples, but can be disabled on purpose for performance reasons even if the surface has ripplies, at the cost of slighly lower precision in the results. The same applies to the **Include Deformation** option. +Finally, to ensure proper masking is applied, the option **Use Mask and Current Water Decals Workflow** must be set to match the **Enable Mask And Current Water Decals** setting in the Graphics settings. + The following script can be used to bind the relevant textures in the global scope, so that the VFX Graph can access them. +Alternatively, can also use the more complete script WaterSurfaceBindVFXEditor.cs, located in the HDRP Package Manager Water samples. ``` +using UnityEngine; +using UnityEngine.Rendering.HighDefinition; + public class WaterSurfaceBinder : MonoBehaviour { public WaterSurface waterSurface; diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Water/WaterSurface/VFX/SampleWaterSurface.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Water/WaterSurface/VFX/SampleWaterSurface.cs index 8f36e0ff95a..6e37f34fd56 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Water/WaterSurface/VFX/SampleWaterSurface.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Water/WaterSurface/VFX/SampleWaterSurface.cs @@ -46,6 +46,9 @@ class SampleWaterSurface : VFXOperator [VFXSetting(VFXSettingAttribute.VisibleFlags.Default)] [Tooltip("Specifies if the search should sample the current map.")] protected bool includeCurrent = false; + [VFXSetting(VFXSettingAttribute.VisibleFlags.Default)] + [Tooltip("Specifies if the system use mask and current water decal workflow. This has to be set in accordance with the same checkbox in the Graphics Settings.")] + protected bool useMaskAndCurrentWaterDecalsWorkflow = false; public class InputProperties { @@ -107,6 +110,9 @@ protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputE if (!includeDeformation) baseCode += "#define IGNORE_WATER_DEFORMATION\n"; if (includeCurrent) baseCode += "#define WATER_LOCAL_CURRENT\n"; + // We need this because water decals can attenuate frequency bands using a water mask when Mask and Current Water Decals workflow is enabled. + if (useMaskAndCurrentWaterDecalsWorkflow) baseCode += "#define WATER_DECAL_COMPLETE\n"; + baseCode += $"#include \"{m_SampleWaterSurface}\"\n"; string FindVerticalDisplacements = $"float error; int steps; float3 normal; float2 current; float height = FindVerticalDisplacement(positionWS, {maxIterations}, {error.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture)}, steps, error, normal, current);"; diff --git a/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/VFX/VFX Graphs/VFX_Bubbles.vfx b/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/VFX/VFX Graphs/VFX_Bubbles.vfx index ba6d105a9b2..817ebdf452a 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/VFX/VFX Graphs/VFX_Bubbles.vfx +++ b/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/VFX/VFX Graphs/VFX_Bubbles.vfx @@ -40,7 +40,7 @@ MonoBehaviour: x: -756 y: -1433 width: 2083 - height: 2555 + height: 2552 --- !u!114 &114350483966674976 MonoBehaviour: m_ObjectHideFlags: 1 @@ -79,7 +79,7 @@ MonoBehaviour: m_CustomAttributes: [] m_ParameterInfo: [] m_ImportDependencies: [] - m_GraphVersion: 18 + m_GraphVersion: 19 m_ResourceVersion: 1 m_SubgraphDependencies: [] m_CategoryPath: @@ -95,10 +95,6 @@ VisualEffectResource: m_RendererSettings: motionVectorGenerationMode: 0 shadowCastingMode: 0 - rayTracingMode: 0 - receiveShadows: 0 - reflectionProbeUsage: 0 - lightProbeUsage: 0 m_CullingFlags: 3 m_UpdateMode: 0 m_PreWarmDeltaTime: 0.05 @@ -531,6 +527,7 @@ MonoBehaviour: m_SubOutputs: - {fileID: 8926484042661614687} - {fileID: 8926484042661614833} + useBaseColorMap: 3 colorMapping: 0 uvMode: 0 flipbookLayout: 0 @@ -549,7 +546,7 @@ MonoBehaviour: enableRayTracing: 0 decimationFactor: 1 raytracedScaleMode: 0 - needsOwnSort: 0 + needsOwnSort: 1 needsOwnAabbBuffer: 0 shaderGraph: {fileID: 0} materialSettings: @@ -2401,7 +2398,7 @@ MonoBehaviour: m_UIIgnoredErrors: [] m_Parent: {fileID: 114350483966674976} m_Children: [] - m_UIPosition: {x: 107, y: 509} + m_UIPosition: {x: 249, y: 506} m_UICollapsed: 0 m_UISuperCollapsed: 0 m_InputSlots: @@ -3522,7 +3519,7 @@ MonoBehaviour: - {fileID: 8926484042661615048} - {fileID: 8926484042661615053} - {fileID: 8926484042661615054} - - {fileID: 8926484042661615058} + - {fileID: 8926484042661615098} error: 0.01 maxIterations: 8 surfaceType: 2 @@ -4038,142 +4035,6 @@ MonoBehaviour: PublicKeyToken=b77a5c561934e089 m_Direction: 1 m_LinkedSlots: [] ---- !u!114 &8926484042661615058 -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: ac39bd03fca81b849929b9c966f1836a, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UIIgnoredErrors: [] - m_Parent: {fileID: 0} - m_Children: - - {fileID: 8926484042661615059} - - {fileID: 8926484042661615060} - - {fileID: 8926484042661615061} - m_UIPosition: {x: 0, y: 0} - m_UICollapsed: 1 - m_UISuperCollapsed: 0 - m_MasterSlot: {fileID: 8926484042661615058} - m_MasterData: - m_Owner: {fileID: 8926484042661615042} - m_Value: - m_Type: - m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - m_SerializableObject: '{"x":0.0,"y":0.0,"z":0.0}' - m_Space: -1 - m_Property: - name: currentDirectionWS - m_serializedType: - m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, - Culture=neutral, PublicKeyToken=null - m_Direction: 1 - m_LinkedSlots: [] ---- !u!114 &8926484042661615059 -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: f780aa281814f9842a7c076d436932e7, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UIIgnoredErrors: [] - m_Parent: {fileID: 8926484042661615058} - m_Children: [] - m_UIPosition: {x: 0, y: 0} - m_UICollapsed: 1 - m_UISuperCollapsed: 0 - m_MasterSlot: {fileID: 8926484042661615058} - m_MasterData: - m_Owner: {fileID: 0} - m_Value: - m_Type: - m_SerializableType: - m_SerializableObject: - m_Space: -1 - m_Property: - name: x - m_serializedType: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - m_Direction: 1 - m_LinkedSlots: [] ---- !u!114 &8926484042661615060 -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: f780aa281814f9842a7c076d436932e7, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UIIgnoredErrors: [] - m_Parent: {fileID: 8926484042661615058} - m_Children: [] - m_UIPosition: {x: 0, y: 0} - m_UICollapsed: 1 - m_UISuperCollapsed: 0 - m_MasterSlot: {fileID: 8926484042661615058} - m_MasterData: - m_Owner: {fileID: 0} - m_Value: - m_Type: - m_SerializableType: - m_SerializableObject: - m_Space: -1 - m_Property: - name: y - m_serializedType: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - m_Direction: 1 - m_LinkedSlots: [] ---- !u!114 &8926484042661615061 -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: f780aa281814f9842a7c076d436932e7, type: 3} - m_Name: - m_EditorClassIdentifier: - m_UIIgnoredErrors: [] - m_Parent: {fileID: 8926484042661615058} - m_Children: [] - m_UIPosition: {x: 0, y: 0} - m_UICollapsed: 1 - m_UISuperCollapsed: 0 - m_MasterSlot: {fileID: 8926484042661615058} - m_MasterData: - m_Owner: {fileID: 0} - m_Value: - m_Type: - m_SerializableType: - m_SerializableObject: - m_Space: -1 - m_Property: - name: z - m_serializedType: - m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, - PublicKeyToken=b77a5c561934e089 - m_Direction: 1 - m_LinkedSlots: [] --- !u!114 &8926484042661615062 MonoBehaviour: m_ObjectHideFlags: 0 @@ -5339,3 +5200,105 @@ MonoBehaviour: m_Direction: 0 m_LinkedSlots: - {fileID: 8926484042661615038} +--- !u!114 &8926484042661615098 +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: 1b2b751071c7fc14f9fa503163991826, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.VisualEffectGraph.Editor::UnityEditor.VFX.VFXSlotFloat2 + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661615099} + - {fileID: 8926484042661615100} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615098} + m_MasterData: + m_Owner: {fileID: 8926484042661615042} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":0.0,"y":0.0}' + m_Space: -1 + m_Property: + name: currentDirectionWS + m_serializedType: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 1 + m_LinkedSlots: [] +--- !u!114 &8926484042661615099 +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: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.VisualEffectGraph.Editor::UnityEditor.VFX.VFXSlotFloat + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615098} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615098} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: [] +--- !u!114 &8926484042661615100 +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: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.VisualEffectGraph.Editor::UnityEditor.VFX.VFXSlotFloat + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615098} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615098} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: [] From 99a25d9020ad25fe1f63ebbb0ea64ee199054df6 Mon Sep 17 00:00:00 2001 From: Arttu Peltonen Date: Tue, 27 Jan 2026 03:38:49 +0000 Subject: [PATCH 11/79] Fix render graph viewer update getting stuck & label synchronization issues --- .../RenderGraphEditorLocalDebugSession.cs | 2 + .../RenderGraphViewer.PlayerConnection.cs | 19 ++-- .../Editor/RenderGraph/RenderGraphViewer.cs | 102 ++++++------------ .../Debug/RenderGraph.DebugData.cs | 4 + .../Debug/RenderGraphDebugSession.cs | 5 + 5 files changed, 53 insertions(+), 79 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphEditorLocalDebugSession.cs b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphEditorLocalDebugSession.cs index 79070230a4b..e5a142e2b36 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphEditorLocalDebugSession.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphEditorLocalDebugSession.cs @@ -8,6 +8,8 @@ internal sealed class RenderGraphEditorLocalDebugSession : RenderGraphDebugSessi public RenderGraphEditorLocalDebugSession() : base() { + connectionName = "Editor"; + RegisterAllLocallyKnownGraphsAndExecutions(); var analyticsPayload = new DebugMessageHandler.AnalyticsPayload(); diff --git a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphViewer.PlayerConnection.cs b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphViewer.PlayerConnection.cs index 800f7294110..1bbe0f5432a 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphViewer.PlayerConnection.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphViewer.PlayerConnection.cs @@ -8,19 +8,20 @@ public partial class RenderGraphViewer { class PlayerConnection : IDisposable { - IConnectionState m_ConnectionState; - - bool m_EditorQuitting; + public IConnectionState connectionState { get; private set; } readonly UnityEngine.Events.UnityAction m_OnPlayerConnected; readonly UnityEngine.Events.UnityAction m_OnPlayerDisconnected; - public PlayerConnection(IConnectionState connectionState, UnityEngine.Events.UnityAction onPlayerConnected, UnityEngine.Events.UnityAction onPlayerDisconnected) + public PlayerConnection(EditorWindow rgvWindow, UnityEngine.Events.UnityAction onPlayerConnected, UnityEngine.Events.UnityAction onPlayerDisconnected) { - m_ConnectionState = connectionState; + connectionState = PlayerConnectionGUIUtility.GetConnectionState(rgvWindow); m_OnPlayerConnected = onPlayerConnected; m_OnPlayerDisconnected = onPlayerDisconnected; + } + public void Connect() + { EditorConnection.instance.Initialize(); EditorConnection.instance.RegisterConnection(m_OnPlayerConnected); EditorConnection.instance.RegisterDisconnection(m_OnPlayerDisconnected); @@ -28,19 +29,19 @@ public PlayerConnection(IConnectionState connectionState, UnityEngine.Events.Uni public void Dispose() { - if (m_ConnectionState != null) + if (connectionState != null) { EditorConnection.instance.UnregisterConnection(m_OnPlayerConnected); EditorConnection.instance.UnregisterDisconnection(m_OnPlayerDisconnected); - m_ConnectionState.Dispose(); - m_ConnectionState = null; + connectionState.Dispose(); + connectionState = null; } } public void OnConnectionDropdownIMGUI() { - PlayerConnectionGUILayout.ConnectionTargetSelectionDropdown(m_ConnectionState, EditorStyles.toolbarDropDown, 250); + PlayerConnectionGUILayout.ConnectionTargetSelectionDropdown(connectionState, EditorStyles.toolbarDropDown, 250); } } } diff --git a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphViewer.cs b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphViewer.cs index 184a807165a..cf5a1c3d27d 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphViewer.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/RenderGraph/RenderGraphViewer.cs @@ -1,10 +1,9 @@ using System; using System.Collections.Generic; -using UnityEditor.Networking.PlayerConnection; using UnityEditor.Rendering.Analytics; -using UnityEditor.Toolbars; using UnityEditor.UIElements; using UnityEngine; +using UnityEngine.Networking.PlayerConnection; using UnityEngine.Rendering; using UnityEngine.Rendering.RenderGraphModule; using UnityEngine.Scripting.APIUpdating; @@ -125,9 +124,6 @@ internal static partial class Classes bool m_Paused = false; static EntityId s_EditorWindowEntityId; - DateTime m_LastDataCaptureTime = DateTime.MinValue; - string m_ConnectedDeviceName = "Local Editor"; - bool m_IsDeviceConnected = true; bool HasValidDebugData => m_CurrentDebugData != null && m_CurrentDebugData.valid; @@ -889,7 +885,11 @@ void OnAutoPlayStatusChanged(ChangeEvent evt) autoPlayToggle.text = evt.newValue ? L10n.Tr("Auto Update") : L10n.Tr("Pause"); m_Paused = evt.newValue; - if (!m_Paused && !m_IsDeviceConnected && m_ConnectedDeviceName != k_EditorName) + // When enabling Auto Update, if the current debug data is from a player that is no longer connected, + // switch back to Editor target. + if (!m_Paused && + RenderGraphDebugSession.currentDebugSession is RenderGraphEditorRemoteDebugSession && + m_PlayerConnection.connectionState.connectedToTarget != ConnectionTarget.Player) { ConnectDebugSession(); } @@ -1033,7 +1033,7 @@ void RebuildPassFilterUI() var passFilter = rootVisualElement.Q(Names.kPassFilterField); BuildEnumFlagsToggleDropdown(passFilter, m_PassFilter, kPassFilterEditorPrefsKey, val => m_PassFilter = val, true); - + passFilter.text = L10n.Tr("Pass Filter"); } @@ -2010,17 +2010,25 @@ void UpdateStatusLabel() if (!m_Paused) return; - string connectionStatus = m_IsDeviceConnected ? "Online" : "Offline"; - - bool isEditor = m_ConnectedDeviceName == k_EditorName; - string sourceLabel = isEditor ? "Source: Editor" : $"Source: {m_ConnectedDeviceName} ({connectionStatus})"; - - bool hasCapture = HasValidDebugData && m_LastDataCaptureTime != DateTime.MinValue; - string captureLabel = hasCapture ? $"Captured: {m_LastDataCaptureTime:HH:mm:ss}" : "No data captured"; - - string statusText = $"{sourceLabel} | {captureLabel}"; - - statusLabel.text = statusText; + if (!HasValidDebugData) + { + statusLabel.text = "No data captured"; + } + else + { + string sourceLabel; + if (RenderGraphDebugSession.currentDebugSession is RenderGraphEditorLocalDebugSession) + { + sourceLabel = "Editor"; + } + else + { + bool isConnected = m_PlayerConnection.connectionState.connectedToTarget == ConnectionTarget.Player; + string connectionStatus = isConnected ? "Online" : "Offline"; + sourceLabel = $"{m_CurrentDebugData.captureSourceString} ({connectionStatus})"; + } + statusLabel.text = $"Source: {sourceLabel} | Captured: {m_CurrentDebugData.captureTimestamp}"; + } } void UpdateCurrentDebugData(bool force = false) @@ -2031,10 +2039,6 @@ void UpdateCurrentDebugData(bool force = false) if (selectedExecutionItem != null) { m_CurrentDebugData = RenderGraphDebugSession.GetDebugData(m_SelectedRenderGraph, selectedExecutionItem.id); - - // Update timestamp when we get valid data, or when forcing an update - if (HasValidDebugData || force) - m_LastDataCaptureTime = DateTime.Now; } else { @@ -2047,8 +2051,6 @@ void UpdateCurrentDebugData(bool force = false) currentGraphDropdown.style.display = DisplayStyle.None; if (currentExecutionToolbarMenu != null) currentExecutionToolbarMenu.style.display = DisplayStyle.None; - - m_LastDataCaptureTime = DateTime.MinValue; } UpdateStatusLabel(); @@ -2090,31 +2092,15 @@ void CreateGUI() InitializeUI(); - if (m_PlayerConnection == null) - { - var connectionState = PlayerConnectionGUIUtility.GetConnectionState(this); - m_PlayerConnection = new PlayerConnection(connectionState, OnPlayerConnected, OnPlayerDisconnected); - - // Initialize device connection state right here while we have it - if (!string.IsNullOrEmpty(connectionState.connectionName)) - { - m_ConnectedDeviceName = connectionState.connectionName; - m_IsDeviceConnected = true; - } - else - { - m_ConnectedDeviceName = k_EditorName; - m_IsDeviceConnected = true; - } - - connectionState.Dispose(); // Dispose it immediately after use - } + m_PlayerConnection ??= new PlayerConnection(this, OnPlayerConnected, OnPlayerDisconnected); + m_PlayerConnection.Connect(); var connectionDropdown = rootVisualElement.Q(Names.kConnectionDropdown); connectionDropdown.onGUIHandler = m_PlayerConnection.OnConnectionDropdownIMGUI; if (RenderGraphDebugSession.currentDebugSession == null) ConnectDebugSession(); + UpdateStatusLabel(); } @@ -2137,22 +2123,12 @@ void OnDisable() void OnPlayerConnected(int playerID) { - // Get device name fresh when needed - using (var connectionState = PlayerConnectionGUIUtility.GetConnectionState(this)) - { - m_ConnectedDeviceName = connectionState?.connectionName ?? $"Remote Device {playerID}"; - } - m_IsDeviceConnected = true; - - ConnectDebugSession(); + RenderGraphDebugSession.currentDebugSession.connectionName = m_PlayerConnection.connectionState.connectionName; } void OnPlayerDisconnected(int playerID) { - m_IsDeviceConnected = false; - m_ConnectedDeviceName = k_EditorName; - if (!m_Paused) { var autoPlayToggle = rootVisualElement.Q(Names.kAutoPauseToggle); @@ -2175,23 +2151,11 @@ void OnPlayerDisconnected(int playerID) internal void ConnectDebugSession() where TSession : RenderGraphDebugSession, new() { - if (typeof(TSession) == typeof(RenderGraphEditorLocalDebugSession)) - { - if (m_ConnectedDeviceName == "Unknown" || m_ConnectedDeviceName == k_EditorName) - { - m_ConnectedDeviceName = k_EditorName; - m_IsDeviceConnected = true; - } - } - - //If we are paused, we need to force update the current debug data once to ensure that the UI is up to date when the - //connection changes + // If we are paused, we need to force update the current debug data once to ensure that the UI is up to date when the + // connection changes if (m_Paused) OnRegisteredGraphsChangedInternal(true); - if (RenderGraphDebugSession.currentDebugSession?.GetType() == typeof(TSession)) - return; - DisconnectDebugSession(); RenderGraphDebugSession.Create(); @@ -2210,9 +2174,7 @@ void DisconnectDebugSession() RenderGraphDebugSession.onRegisteredGraphsChanged -= OnRegisteredGraphsChanged; RenderGraphDebugSession.onDebugDataUpdated -= OnDebugDataUpdated; - m_IsDeviceConnected = false; UpdateStatusLabel(); - ClearGraphViewerUI(); } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraph.DebugData.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraph.DebugData.cs index 795611f1035..25282cf2b2b 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraph.DebugData.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraph.DebugData.cs @@ -39,6 +39,10 @@ public DebugData(string executionName) // Set to true when data has been set public bool valid = false; + // Capture metadata that is not populated by default + public string captureSourceString; + public string captureTimestamp; + // Compilation hash of the render graph that produced this DebugData. public int graphHash; diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraphDebugSession.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraphDebugSession.cs index 4b749c72c59..f3c8eb8ce08 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraphDebugSession.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Debug/RenderGraphDebugSession.cs @@ -92,6 +92,8 @@ public void Invalidate() // Session is considered active when it is collecting debug data public abstract bool isActive { get; } + public string connectionName { get; set; } + DebugDataContainer debugDataContainer { get; } protected RenderGraphDebugSession() @@ -198,6 +200,9 @@ public static DebugData GetDebugData(string renderGraph, EntityId executionId) public static void SetDebugData(string renderGraph, EntityId executionId, DebugData data) { + data.captureSourceString = s_CurrentDebugSession.connectionName; + data.captureTimestamp = $"{DateTime.Now:HH:mm:ss}"; + s_CurrentDebugSession.debugDataContainer.SetDebugData(renderGraph, executionId, data); onDebugDataUpdated?.Invoke(renderGraph, executionId); } From 9e2b6a1c39d05e6b3a413dacea4ab53d172b601c Mon Sep 17 00:00:00 2001 From: Esther Ugolini Date: Tue, 27 Jan 2026 03:38:51 +0000 Subject: [PATCH 12/79] Update UI Test Framework package version to 6.5.0 for Unity 6.5 --- .../Projects/VisualEffectGraph_HDRP/Packages/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Packages/manifest.json b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Packages/manifest.json index aa554242228..125930c63f5 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Packages/manifest.json +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Packages/manifest.json @@ -17,7 +17,7 @@ "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.timeline": "1.8.8", "com.unity.ugui": "2.0.0", - "com.unity.ui.test-framework": "file:../../../../../Packages/com.unity.ui.test-framework", + "com.unity.ui.test-framework": "6.5.0", "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", "com.unity.testframework.graphics": "file:../../../Packages/com.unity.test-framework.graphics", "com.unity.test-framework": "file:../../../../../Packages/com.unity.test-framework", From a50d4a878c4463f099696da143e3e6404aa87a7e Mon Sep 17 00:00:00 2001 From: Esmeralda Salamone Date: Tue, 27 Jan 2026 11:39:49 +0000 Subject: [PATCH 13/79] [ShaderGraph] Subgraph and other improvements --- .../Data/Graphs/AbstractShaderProperty.cs | 5 + .../Editor/Data/Graphs/BooleanMaterialSlot.cs | 2 + .../Data/Graphs/BooleanShaderProperty.cs | 2 +- .../Editor/Data/Graphs/ColorMaterialSlot.cs | 2 + .../Editor/Data/Graphs/ColorShaderProperty.cs | 1 + .../Data/Graphs/GradientMaterialSlot.cs | 2 + .../Data/Graphs/GradientShaderProperty.cs | 1 + .../Editor/Data/Graphs/MaterialSlot.cs | 39 + .../Data/Graphs/Vector1MaterialEnumSlot.cs | 76 ++ .../Graphs/Vector1MaterialEnumSlot.cs.meta | 2 + .../Data/Graphs/Vector1MaterialIntegerSlot.cs | 56 ++ .../Graphs/Vector1MaterialIntegerSlot.cs.meta | 2 + .../Data/Graphs/Vector1MaterialRangeSlot.cs | 76 ++ .../Graphs/Vector1MaterialRangeSlot.cs.meta | 2 + .../Editor/Data/Graphs/Vector1MaterialSlot.cs | 37 +- .../Data/Graphs/Vector1ShaderProperty.cs | 35 +- .../Editor/Data/Nodes/AbstractMaterialNode.cs | 15 +- .../Data/Nodes/Utility/Logic/SwitchNode.cs | 245 +++++ .../Nodes/Utility/Logic/SwitchNode.cs.meta | 2 + .../Editor/Data/Nodes/Utility/SubGraphNode.cs | 8 +- .../GraphDataPropertyDrawer.cs | 4 +- .../ShaderInputPropertyDrawer.cs | 72 +- .../SwitchNodePropertyDrawer.cs | 96 ++ .../SwitchNodePropertyDrawer.cs.meta | 2 + .../Editor/Drawing/Views/MaterialNodeView.cs | 40 +- .../Drawing/Views/ReorderableListView.cs | 62 ++ .../Drawing/Views/ReorderableListView.cs.meta | 2 + .../Drawing/Views/ReorderableTextListView.cs | 4 +- .../Views/Slots/BooleanSlotControlView.cs | 7 +- .../Views/Slots/ColorSlotControlView.cs | 6 +- .../Views/Slots/GradientSlotControlView.cs | 6 +- .../Styles/Controls/ColorControlView.uss | 4 + .../Styles/Controls/GradientControlView.uss | 4 + .../Styles/Controls/SliderSlotControlView.uss | 51 + .../Controls/SliderSlotControlView.uss.meta | 12 + .../Assets/Scenes/LogicNodes.unity | 552 +++++++++- .../Graphs/Utility/Logic/Switch.shadergraph | 948 ++++++++++++++++++ .../Utility/Logic/Switch.shadergraph.meta | 10 + .../Graphs/Utility/Logic/SwitchGreen.mat | 140 +++ .../Graphs/Utility/Logic/SwitchGreen.mat.meta | 8 + .../Graphs/Utility/Logic/SwitchRed.mat | 140 +++ .../Graphs/Utility/Logic/SwitchRed.mat.meta | 8 + 42 files changed, 2702 insertions(+), 86 deletions(-) create mode 100644 Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialEnumSlot.cs create mode 100644 Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialEnumSlot.cs.meta create mode 100644 Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialIntegerSlot.cs create mode 100644 Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialIntegerSlot.cs.meta create mode 100644 Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialRangeSlot.cs create mode 100644 Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialRangeSlot.cs.meta create mode 100644 Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/SwitchNode.cs create mode 100644 Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/SwitchNode.cs.meta create mode 100644 Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/SwitchNodePropertyDrawer.cs create mode 100644 Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/SwitchNodePropertyDrawer.cs.meta create mode 100644 Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableListView.cs create mode 100644 Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableListView.cs.meta create mode 100644 Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/SliderSlotControlView.uss create mode 100644 Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/SliderSlotControlView.uss.meta create mode 100644 Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/Switch.shadergraph create mode 100644 Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/Switch.shadergraph.meta create mode 100644 Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchGreen.mat create mode 100644 Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchGreen.mat.meta create mode 100644 Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchRed.mat create mode 100644 Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchRed.mat.meta diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/AbstractShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/AbstractShaderProperty.cs index 605684cc6a0..5b00fc1be58 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/AbstractShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/AbstractShaderProperty.cs @@ -70,6 +70,11 @@ internal virtual HLSLDeclaration GetDefaultHLSLDeclaration() [SerializeField] internal HLSLDeclaration hlslDeclarationOverride; + [SerializeField] + internal bool hideConnector = false; + + internal virtual bool canHideConnector => false; + override internal bool isExposed => base.isExposed && shouldForceExposed; internal bool shouldForceExposed => (hlslDeclarationOverride == HLSLDeclaration.HybridPerInstance || GetDefaultHLSLDeclaration() == HLSLDeclaration.UnityPerMaterial) && isExposable; diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/BooleanMaterialSlot.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/BooleanMaterialSlot.cs index 92bff6f46a2..356398ef009 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/BooleanMaterialSlot.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/BooleanMaterialSlot.cs @@ -48,6 +48,8 @@ public bool value set { m_Value = value; } } + internal override bool canHideConnector => true; + public override bool isDefaultValue => value.Equals(defaultValue); protected override string ConcreteSlotValueAsVariable() diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/BooleanShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/BooleanShaderProperty.cs index 048fa887b87..317c7eb662e 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/BooleanShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/BooleanShaderProperty.cs @@ -20,7 +20,7 @@ internal BooleanShaderProperty() internal override bool isExposable => true; internal override bool isRenamable => true; - + internal override bool canHideConnector => true; internal override string GetPropertyAsArgumentString(string precisionString) { return $"{concreteShaderValueType.ToShaderString(precisionString)} {referenceName}"; diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ColorMaterialSlot.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ColorMaterialSlot.cs index cb955386e94..a8b71dbbe29 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ColorMaterialSlot.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ColorMaterialSlot.cs @@ -25,6 +25,8 @@ public ColorRGBAMaterialSlot( { } + internal override bool canHideConnector => true; + public override VisualElement InstantiateControl() { return new ColorRGBASlotControlView(this); diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ColorShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ColorShaderProperty.cs index 7a8c51696bb..53ef66803b2 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/ColorShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/ColorShaderProperty.cs @@ -32,6 +32,7 @@ internal ColorShaderProperty(int version) : this() internal override bool isExposable => true; internal override bool isRenamable => true; + internal override bool canHideConnector => true; [SerializeField] internal bool isMainColor = false; diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/GradientMaterialSlot.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/GradientMaterialSlot.cs index 7e31aa6bffa..bc458542c49 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/GradientMaterialSlot.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/GradientMaterialSlot.cs @@ -23,6 +23,8 @@ public GradientMaterialSlot( public override ConcreteSlotValueType concreteValueType { get { return ConcreteSlotValueType.Gradient; } } public override bool isDefaultValue => true; + internal override bool canHideConnector => true; + public override void AddDefaultProperty(PropertyCollector properties, GenerationMode generationMode) { } diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/GradientShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/GradientShaderProperty.cs index 7d4c6fe17c8..770939d0fa0 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/GradientShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/GradientShaderProperty.cs @@ -24,6 +24,7 @@ public GradientShaderProperty() internal override bool isExposable => false; internal override bool isRenamable => true; + internal override bool canHideConnector => true; internal override bool AllowHLSLDeclaration(HLSLDeclaration decl) => false; // disable UI, nothing to choose internal override void ForeachHLSLProperty(Action action) diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/MaterialSlot.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/MaterialSlot.cs index 57a967c93e2..896f03e0d56 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/MaterialSlot.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/MaterialSlot.cs @@ -27,6 +27,9 @@ abstract class MaterialSlot : JsonObject, IDisposable [SerializeField] bool m_Hidden; + [SerializeField] + bool m_HideConnector; + [SerializeField] string m_ShaderOutputName; @@ -138,6 +141,34 @@ public string RawDisplayName() return m_DisplayName; } + public static MaterialSlot CreateMaterialSlotFromProperty(AbstractShaderProperty property, int slotId) + { + MaterialSlot slot; + switch (property) + { + case ColorShaderProperty color: + slot = new ColorRGBAMaterialSlot(slotId, property.displayName, property.referenceName, SlotType.Input, color.value); + break; + case Vector1ShaderProperty vector1: + switch (vector1.floatType) + { + case FloatType.Slider: slot = new Vector1MaterialRangeSlot(slotId, vector1); break; + case FloatType.Integer: slot = new Vector1MaterialIntegerSlot(slotId, vector1); break; + case FloatType.Enum: slot = new Vector1MaterialEnumSlot(slotId, vector1); break; + default: + case FloatType.Default: slot = new Vector1MaterialSlot(slotId, vector1); break; + } + (slot as Vector1MaterialSlot).LiteralMode = vector1.LiteralFloatMode; + break; + default: + SlotValueType valueType = property.concreteShaderValueType.ToSlotValueType(); + slot = CreateMaterialSlot(valueType, slotId, property.displayName, property.referenceName, SlotType.Input, Vector4.zero); + break; + } + slot.hideConnector = property.hideConnector; + return slot; + } + public static MaterialSlot CreateMaterialSlot( SlotValueType type, int slotId, @@ -219,6 +250,14 @@ public bool hidden set { m_Hidden = value; } } + internal virtual bool canHideConnector => false; + + public bool hideConnector + { + get { return m_HideConnector && canHideConnector; } + set { m_HideConnector = value; } + } + public int id { get { return m_Id; } diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialEnumSlot.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialEnumSlot.cs new file mode 100644 index 00000000000..13912f3330c --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialEnumSlot.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using UnityEditor.Graphing; +using UnityEditor.ShaderGraph; +using UnityEditor.ShaderGraph.Drawing.Slots; +using UnityEditor.ShaderGraph.Internal; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UnityEditor.ShaderGraph +{ + [Serializable] + class Vector1MaterialEnumSlot : Vector1MaterialSlot + { + [SerializeField] + List options; + + [SerializeField] + List values; + + internal Vector1MaterialEnumSlot() { } + + internal Vector1MaterialEnumSlot(int slotId, Vector1ShaderProperty fromProperty) + : base(slotId, fromProperty) + { + options = new(); + values = new(); + + options.AddRange(fromProperty.enumNames); + values.AddRange(fromProperty.enumValues); + } + + public override void CopyValuesFrom(MaterialSlot foundSlot) + { + base.CopyValuesFrom(foundSlot); + if (!values.Contains((int)value)) + value = 0; + } + + public override VisualElement InstantiateControl() + { + return new EnumSlotControlView(this); + } + + class EnumSlotControlView : VisualElement + { + Vector1MaterialEnumSlot m_Slot; + + public EnumSlotControlView(Vector1MaterialEnumSlot slot) + { + m_Slot = slot; + + var dropdownField = slot.hideConnector + ? new DropdownField(slot.RawDisplayName(), slot.options, 0) + : new DropdownField(slot.options, 0); + + dropdownField.RegisterValueChangedCallback(OnValueChange); + Add(dropdownField); + } + + void OnValueChange(ChangeEvent evt) + { + int newIndex = m_Slot.options.FindIndex(e => e == evt.newValue); + + int newValue = m_Slot.values[newIndex]; // TODO Safety + + if (newValue != m_Slot.value) + { + m_Slot.owner.owner.owner.RegisterCompleteObjectUndo("Dropdown Change"); + m_Slot.value = newValue; + m_Slot.owner.Dirty(ModificationScope.Node); + } + } + } + } +} diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialEnumSlot.cs.meta b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialEnumSlot.cs.meta new file mode 100644 index 00000000000..e0180b5cbf7 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialEnumSlot.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: baf5a8113e979e542a1c2e3059964950 \ No newline at end of file diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialIntegerSlot.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialIntegerSlot.cs new file mode 100644 index 00000000000..974031ad947 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialIntegerSlot.cs @@ -0,0 +1,56 @@ +using System; +using System.Collections.Generic; +using UnityEditor.Graphing; +using UnityEditor.ShaderGraph.Drawing.Slots; +using UnityEditor.ShaderGraph.Internal; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UnityEditor.ShaderGraph +{ + [Serializable] + class Vector1MaterialIntegerSlot : Vector1MaterialSlot + { + internal Vector1MaterialIntegerSlot() { } + + internal Vector1MaterialIntegerSlot(int slotId, Vector1ShaderProperty property) : base(slotId, property) { } + + public override VisualElement InstantiateControl() + { + return new IntegerSlotControlView(this); + } + + public override void CopyValuesFrom(MaterialSlot foundSlot) + { + base.CopyValuesFrom(foundSlot); + value = Mathf.RoundToInt(value); + } + + class IntegerSlotControlView : VisualElement + { + Vector1MaterialIntegerSlot m_Slot; + + public IntegerSlotControlView(Vector1MaterialIntegerSlot slot) + { + m_Slot = slot; + var integerField = slot.hideConnector + ? new IntegerField(slot.RawDisplayName()) + : new IntegerField(); + + integerField.value = (int)slot.value; + integerField.RegisterValueChangedCallback(OnValueChange); + Add(integerField); + } + + void OnValueChange(ChangeEvent evt) + { + if (evt.newValue != m_Slot.value) + { + m_Slot.owner.owner.owner.RegisterCompleteObjectUndo("Integer Change"); + m_Slot.value = evt.newValue; + m_Slot.owner.Dirty(ModificationScope.Node); + } + } + } + } +} diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialIntegerSlot.cs.meta b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialIntegerSlot.cs.meta new file mode 100644 index 00000000000..057c5c7cf41 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialIntegerSlot.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 55b79ff3831685f4eb272ac0a2cc2238 \ No newline at end of file diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialRangeSlot.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialRangeSlot.cs new file mode 100644 index 00000000000..e6dd500c8e3 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialRangeSlot.cs @@ -0,0 +1,76 @@ +using System; +using UnityEditor.Graphing; +using UnityEditor.ShaderGraph.Internal; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UnityEditor.ShaderGraph +{ + [Serializable] + class Vector1MaterialRangeSlot : Vector1MaterialSlot + { + [SerializeField] + Vector2 m_sliderRange = new Vector2(0.0f, 1.0f); + + [SerializeField] + SliderType m_SliderType = SliderType.Default; + + [SerializeField] + float m_SliderPower = 3.0f; + + internal Vector1MaterialRangeSlot() { } + + internal Vector1MaterialRangeSlot(int slotId, Vector1ShaderProperty fromProperty) + : base(slotId, fromProperty) + { + m_sliderRange = fromProperty.rangeValues; + m_SliderType = fromProperty.sliderType; + m_SliderPower = fromProperty.sliderPower; + } + + public override VisualElement InstantiateControl() + { + return new SliderSlotControlView(this); + } + + public override void CopyValuesFrom(MaterialSlot foundSlot) + { + base.CopyValuesFrom(foundSlot); + value = Mathf.Clamp(value, m_sliderRange.x, m_sliderRange.y); + } + + class SliderSlotControlView : VisualElement + { + Vector1MaterialRangeSlot m_Slot; + + public SliderSlotControlView(Vector1MaterialRangeSlot slot) + { + m_Slot = slot; + + if (!slot.hideConnector) + styleSheets.Add(Resources.Load("Styles/Controls/SliderSlotControlView")); + else styleSheets.Add(Resources.Load("Styles/Controls/SliderSlotControlView")); + + + var sliderField = slot.hideConnector + ? new Slider(m_Slot.RawDisplayName(), m_Slot.m_sliderRange.x, m_Slot.m_sliderRange.y) + : new Slider(m_Slot.m_sliderRange.x, m_Slot.m_sliderRange.y); + + sliderField.RegisterValueChangedCallback(OnValueChange); + + + Add(sliderField); + } + + void OnValueChange(ChangeEvent evt) + { + if (evt.newValue != m_Slot.value) + { + m_Slot.owner.owner.owner.RegisterCompleteObjectUndo("Slider Change"); + m_Slot.value = evt.newValue; + m_Slot.owner.Dirty(ModificationScope.Node); + } + } + } + } +} diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialRangeSlot.cs.meta b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialRangeSlot.cs.meta new file mode 100644 index 00000000000..d3b76562de6 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialRangeSlot.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8f3b525478c843a4ba4a2ab758392ece \ No newline at end of file diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialSlot.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialSlot.cs index b9d3b354019..786a2ee237e 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialSlot.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1MaterialSlot.cs @@ -40,10 +40,16 @@ public bool LiteralMode set => m_LiteralMode = value; } + internal override bool canHideConnector => true; public Vector1MaterialSlot() { } + public Vector1MaterialSlot(int slotId, Vector1ShaderProperty fromProperty) + : this(slotId, fromProperty.displayName, fromProperty.referenceName, SlotType.Input, fromProperty.value, literal: fromProperty.LiteralFloatMode) + { + } + public Vector1MaterialSlot( int slotId, string displayName, @@ -75,7 +81,9 @@ public float value public override VisualElement InstantiateControl() { - return new MultiFloatSlotControlView(owner, labels, () => new Vector4(value, 0f, 0f, 0f), (newValue) => value = newValue.x); + return hideConnector + ? new FloatSlotControlView(this) + : new MultiFloatSlotControlView(owner, labels, () => new Vector4(value, 0f, 0f, 0f), (newValue) => value = newValue.x); } protected override string ConcreteSlotValueAsVariable() @@ -136,5 +144,32 @@ public override void CopyDefaultValue(MaterialSlot other) m_DefaultValue = ms.defaultValue; } } + + class FloatSlotControlView : VisualElement + { + Vector1MaterialSlot m_Slot; + + public FloatSlotControlView(Vector1MaterialSlot slot) + { + m_Slot = slot; + var integerField = slot.hideConnector + ? new FloatField(slot.RawDisplayName()) + : new FloatField(); + + integerField.value = slot.value; + integerField.RegisterValueChangedCallback(OnValueChange); + Add(integerField); + } + + void OnValueChange(ChangeEvent evt) + { + if (evt.newValue != m_Slot.value) + { + m_Slot.owner.owner.owner.RegisterCompleteObjectUndo("Integer Change"); + m_Slot.value = evt.newValue; + m_Slot.owner.Dirty(ModificationScope.Node); + } + } + } } } diff --git a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1ShaderProperty.cs b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1ShaderProperty.cs index 191abd25318..e14af59d0d9 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1ShaderProperty.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Graphs/Vector1ShaderProperty.cs @@ -21,6 +21,7 @@ internal Vector1ShaderProperty() internal override bool isExposable => true; internal override bool isRenamable => true; + internal override bool canHideConnector => true; public override float value { @@ -161,10 +162,26 @@ public EnumType enumType public Type cSharpEnumType { - get => m_CSharpEnumType; + get => m_CSharpEnumType ?? GetEnumHelper(m_CSharpEnumString); set => m_CSharpEnumType = value; } + internal static Type GetEnumHelper(string typeName) + { + if (string.IsNullOrEmpty(typeName)) + return null; + + var type = Type.GetType(typeName, false, true); + if (type != null) return type; + foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) + { + type = a.GetType(typeName, false, true); + if (type != null && type.IsEnum) + return type; + } + return null; + } + [SerializeField] string m_CSharpEnumString; @@ -179,7 +196,9 @@ internal string cSharpEnumString public List enumNames { - get => m_EnumNames; + get => enumType == EnumType.CSharpEnum && cSharpEnumType != null && cSharpEnumType.IsEnum + ? new List(cSharpEnumType.GetEnumNames()) + : m_EnumNames; set => m_EnumNames = value; } @@ -188,7 +207,17 @@ public List enumNames public List enumValues { - get => m_EnumValues; + get + { + if (enumType == EnumType.CSharpEnum && cSharpEnumType != null && cSharpEnumType.IsEnum) + { + var values = new List(); + foreach (var item in cSharpEnumType.GetEnumValues()) + values.Add((int)item); + return values; + } + return m_EnumValues; + } set => m_EnumValues = value; } diff --git a/Packages/com.unity.shadergraph/Editor/Data/Nodes/AbstractMaterialNode.cs b/Packages/com.unity.shadergraph/Editor/Data/Nodes/AbstractMaterialNode.cs index df214e998cf..f9ffad3bb46 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Nodes/AbstractMaterialNode.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Nodes/AbstractMaterialNode.cs @@ -909,6 +909,19 @@ public MaterialSlot AddSlot(MaterialSlot slot, bool attemptToModifyExistingInsta { foundSlot.displayName = slot.RawDisplayName(); foundSlot.CopyDefaultValue(slot); + if (foundSlot.hideConnector != slot.hideConnector) + { + foundSlot.hideConnector = slot.hideConnector; // MARK DIRTY + this.Dirty(ModificationScope.Topological); + + if (foundSlot.hideConnector && foundSlot.isConnected) + { + List edges = new(); + owner.GetEdges(foundSlot, edges); + foreach (var edge in edges) + owner.RemoveEdge(edge); + } + } return foundSlot; } @@ -944,7 +957,7 @@ public void RemoveSlot(int slotId) // Remove edges that use this slot // no owner can happen after creation // but before added to graph - if (owner != null) + if (owner != null && this.FindSlot(slotId) != null) { var edges = owner.GetEdges(GetSlotReference(slotId)); owner.RemoveEdges(edges.ToArray()); diff --git a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/SwitchNode.cs b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/SwitchNode.cs new file mode 100644 index 00000000000..55f46e12363 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/SwitchNode.cs @@ -0,0 +1,245 @@ +using System; +using System.Collections.Generic; +using UnityEditor.Graphing; +using UnityEditor.ShaderGraph.Drawing; +using UnityEditor.ShaderGraph.Internal; +using UnityEngine; + +namespace UnityEditor.ShaderGraph +{ + [Title("Utility", "Logic", "Switch")] + class SwitchNode : AbstractMaterialNode, IGeneratesBodyCode, IGeneratesFunction, IShaderInputObserver + { + const int kPredicateSlot = 0; + const int kDefaultSlot = 1; + const int kOutputSlot = 2; + const int kFirstCaseSlot = 3; + + public override bool hasPreview => true; + + [Serializable] + internal struct EntryCase + { + [SerializeField] + internal string name; + [SerializeField] + internal ComparisonType comparisonType; + [SerializeField] + internal float threshold; + } + + protected override bool CanPropagateFloatLiteral => true; + + [SerializeField] + internal bool m_floorPredicate = true; + + [SerializeField] + internal List m_cases = new(); + + + [SerializeField] + internal bool m_useProperty = false; + + [SerializeField] + internal List m_casesFromUpstreamEnumProperty = new(); + + internal Vector1ShaderProperty UpstreamFloatEnumProperty + { + get + { + try + { + if (GetInputNodeFromSlot(kPredicateSlot) is PropertyNode propertyNode && propertyNode.property is Vector1ShaderProperty property && property.floatType == FloatType.Enum) + return property; + else return null; + } + catch + { + return null; + } + } + } + + List cases => m_useProperty ? m_casesFromUpstreamEnumProperty : m_cases; + + public SwitchNode() + { + name = "Switch"; + synonyms = new string[] { "switch" }; + UpdateNodeAfterDeserialization(); + } + + public override void Concretize() + { + // concretize is called when a connection is made. + // we can use this opportunity to check if we need to switch modes. + + if (m_useProperty = UpstreamFloatEnumProperty != null) // automatic mode means reserializing our properties. + { + UpstreamFloatEnumProperty?.AddObserver(this); + m_casesFromUpstreamEnumProperty = new(); + for (int i = 0; i < UpstreamFloatEnumProperty.enumNames.Count; ++i) + { + m_casesFromUpstreamEnumProperty.Add(new EntryCase { name = UpstreamFloatEnumProperty.enumNames[i], threshold = UpstreamFloatEnumProperty.enumValues[i], comparisonType = ComparisonType.Equal }); + } + } + + UpdateNodeAfterDeserialization(); + base.Concretize(); + } + + + public override void UpdateNodeAfterDeserialization() + { + List validSlots = new() { kPredicateSlot, kDefaultSlot, kOutputSlot }; + AddSlot(new Vector1MaterialSlot(kPredicateSlot, "Predicate", "Predicate", SlotType.Input, 0)); + AddSlot(new DynamicVectorMaterialSlot(kDefaultSlot, "Fallback", "Fallback", SlotType.Input, Vector4.zero)); + AddSlot(new DynamicVectorMaterialSlot(kOutputSlot, "Out", "Out", SlotType.Output, Vector4.zero)); + + for (int i = 0; i < cases.Count; ++i) + { + var displayName = m_useProperty ? cases[i].name : $"{(char)('A'+i)}"; + var safeName = "case_"+NodeUtils.GetHLSLSafeName(displayName); + + AddSlot(new DynamicVectorMaterialSlot(kFirstCaseSlot + i, displayName, safeName, SlotType.Input, Vector4.zero)); + validSlots.Add(kFirstCaseSlot + i); + } + RemoveSlotsNameNotMatching(validSlots, true); + } + + public void GenerateNodeFunction(FunctionRegistry registry, GenerationMode generationMode) + { + registry.ProvideFunction(hlslFunctionName, s => { GetFunctionDefinition(s); }); + } + + public void GenerateNodeCode(ShaderStringBuilder sb, GenerationMode generationMode) + { + using (var inputSlots = PooledList.Get()) + using (var outputSlots = PooledList.Get()) + { + GetInputSlots(inputSlots); + GetOutputSlots(outputSlots); + + // Declare Outputs + foreach (var output in outputSlots) + sb.AppendLine("{0} {1};", output.concreteValueType.ToShaderString(), GetVariableNameForSlot(output.id)); + + // Call Function + sb.TryAppendIndentation(); + sb.Append(hlslFunctionName); + sb.Append("("); + bool first = true; + + foreach (var input in inputSlots) + { + string argument = SlotInputValue(input, generationMode); + if (first && m_floorPredicate) // predicate is first + argument = $"floor({argument})"; + if (!first) + sb.Append(", "); + first = false; + + sb.Append(argument); + } + + foreach (var output in outputSlots) + { + if (!first) + sb.Append(", "); + first = false; + sb.Append(GetVariableNameForSlot(output.id)); + } + sb.Append(");"); + sb.AppendNewLine(); + } + } + + string hlslFunctionName => $"SwitchNode_$precision{this.objectId}"; + + static string Op(ComparisonType op) + { + switch (op) + { + default: + case ComparisonType.Equal: return "=="; + case ComparisonType.NotEqual: return "!="; + case ComparisonType.Less: return "<"; + case ComparisonType.LessOrEqual: return "<="; + case ComparisonType.Greater: return ">"; + case ComparisonType.GreaterOrEqual: return ">="; + } + } + + void GetFunctionDefinition(ShaderStringBuilder sb) + { + using (var inputSlots = PooledList.Get()) + using (var outputSlots = PooledList.Get()) + { + ShaderStringBuilder body = new(); + body.AppendLine("Out = Fallback;"); + + GetInputSlots(inputSlots); + GetOutputSlots(outputSlots); + + sb.Append("void "); + sb.Append(hlslFunctionName); + sb.Append("("); + + var first = true; + + foreach (var argument in inputSlots) + { + if (!first) + sb.Append(", "); + first = false; + argument.AppendHLSLParameterDeclaration(sb, argument.shaderOutputName); + + if (argument.id >= kFirstCaseSlot) + { + var entry = cases[argument.id - kFirstCaseSlot]; + if (argument.id == kFirstCaseSlot) + body.AppendLine("[branch]"); + body.AppendLine($"{(argument.id > kFirstCaseSlot ? "else " : "")}if (Predicate {Op(entry.comparisonType)} {entry.threshold})"); + using (body.BlockScope()) + { + body.AppendLine($"Out = {argument.shaderOutputName};"); + } + } + } + + foreach (var argument in outputSlots) + { + if (!first) + sb.Append(", "); + first = false; + sb.Append("out "); + argument.AppendHLSLParameterDeclaration(sb, argument.shaderOutputName); + } + sb.AppendLine(")"); + using (sb.BlockScope()) + sb.AppendLines(body.ToString()); + } + } + + string SlotInputValue(MaterialSlot port, GenerationMode generationMode) + { + List edges = new(port.owner.owner.GetEdges(port.slotReference)); + if (edges.Count > 0) + { + var fromSocketRef = edges[0].outputSlot; + var fromNode = fromSocketRef.node; + if (fromNode == null) + return string.Empty; + + return fromNode.GetOutputForSlot(fromSocketRef, port.concreteValueType, generationMode); + } + return port.GetDefaultValue(generationMode); + } + + public void OnShaderInputUpdated(ModificationScope modificationScope) + { + Concretize(); + Dirty(ModificationScope.Topological); + } + } +} diff --git a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/SwitchNode.cs.meta b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/SwitchNode.cs.meta new file mode 100644 index 00000000000..f0b6b7dc5fc --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/Logic/SwitchNode.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 53413c183a3867a44a249b129ae86e6e \ No newline at end of file diff --git a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/SubGraphNode.cs b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/SubGraphNode.cs index ea84da9178a..7c4f7623d5d 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/SubGraphNode.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Utility/SubGraphNode.cs @@ -392,7 +392,6 @@ public virtual void UpdateSlots() var toFix = new HashSet<(SlotReference from, SlotReference to)>(); foreach (var prop in props) { - SlotValueType valueType = prop.concreteShaderValueType.ToSlotValueType(); var propertyString = prop.guid.ToString(); var propertyIndex = m_PropertyGuids.IndexOf(propertyString); if (propertyIndex < 0) @@ -418,12 +417,7 @@ public virtual void UpdateSlots() } MaterialSlot slot; - if (prop is Vector1ShaderProperty { LiteralFloatMode: true }) - { - slot = new Vector1MaterialSlot(id, prop.displayName, prop.referenceName, SlotType.Input, 0, literal:true); - } - else - slot = MaterialSlot.CreateMaterialSlot(valueType, id, prop.displayName, prop.referenceName, SlotType.Input, Vector4.zero); + slot = MaterialSlot.CreateMaterialSlotFromProperty(prop, id); // Copy defaults switch (prop.concreteShaderValueType) diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/GraphDataPropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/GraphDataPropertyDrawer.cs index dcf3d7d9208..31e57b998bc 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/GraphDataPropertyDrawer.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/GraphDataPropertyDrawer.cs @@ -50,7 +50,7 @@ void RegisterActionToUndo(string actionName) targetSettingsLabel.style.unityFontStyleAndWeight = FontStyle.Bold; element.Add(new PropertyRow(targetSettingsLabel)); - var targetList = new ReorderableListView>( + var targetList = new ReorderableTextListView>( graphData.m_ActiveTargets, "Active Targets", false, // disallow reordering (active list is sorted) @@ -122,7 +122,7 @@ void RegisterActionToUndo(string actionName) dataExtensionSettings.style.unityFontStyleAndWeight = FontStyle.Bold; element.Add(new PropertyRow(dataExtensionSettings)); - var extensionList = new ReorderableListView>( + var extensionList = new ReorderableTextListView>( graphData.m_SubDatas, "Active Data Extensions", false, diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs index 2657bbc4439..191d19c50cc 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs @@ -156,6 +156,7 @@ public VisualElement DrawProperty( BuildDisplayNameField(propertySheet); BuildReferenceNameField(propertySheet); BuildPromoteField(propertySheet); + BuildNoConnectorField(propertySheet); BuildPropertyFields(propertySheet); BuildKeywordFields(propertySheet, shaderInput); BuildDropdownFields(propertySheet, shaderInput); @@ -218,6 +219,27 @@ void BuildPromoteField(PropertySheet propertySheet) tooltip: "Promote this as a material property to the final shader. It will not show up as an input port on the Subgraph Node.")); } + void BuildNoConnectorField(PropertySheet propertySheet) + { + if (shaderInput is not AbstractShaderProperty property) + return; + if (!isSubGraph || property.promoteToFinalShader || property.hidden || !property.canHideConnector) + return; + + var toggleDataPropertyDrawer = new ToggleDataPropertyDrawer(); + propertySheet.Add(toggleDataPropertyDrawer.CreateGUI( + evt => + { + this._preChangeValueCallback("Change disable connector toggle"); + property.hideConnector = evt.isOn; + this._postChangeValueCallback(true, ModificationScope.Topological); + }, + new ToggleData(property.hideConnector), + "Disable connector", + out _, + tooltip: "Select this to prevent a port from appearing on the subgraph.")); + } + void BuildExposedField(PropertySheet propertySheet) { if (!isSubGraph || shaderInput.promoteToFinalShader) @@ -617,7 +639,7 @@ enum EnumTypeForUI { ExplicitValues = EnumType.Enum, TypeReference = EnumType.CS void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderProperty vector1ShaderProperty) { - if (shaderInput.isExposed && (!isSubGraph || shaderInput.promoteToFinalShader) && !isCurrentPropertyGlobal) + if (shaderInput.isExposed && (!isSubGraph || shaderInput.promoteToFinalShader) && !isCurrentPropertyGlobal || isSubGraph && !shaderInput.promoteToFinalShader) { var enumPropertyDrawer = new EnumPropertyDrawer(); propertySheet.Add(enumPropertyDrawer.CreateGUI( @@ -626,33 +648,36 @@ void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderPrope this._preChangeValueCallback("Change Vector1 Mode"); vector1ShaderProperty.floatType = (FloatType)newValue; this._postChangeValueCallback(true); + this._dropdownChangedCallback(); }, vector1ShaderProperty.floatType, "Mode", FloatType.Default, out var modePropertyEnumField, - tooltip: "Indicate how this float property should appear in the material inspector UI.")); + tooltip: isSubGraph ? "Indicate which editor should appear on the node." : "Indicate how this float property should appear in the material inspector UI.")); } - var floatType = (!shaderInput.isExposed || isSubGraph || isCurrentPropertyGlobal) && !shaderInput.promoteToFinalShader ? FloatType.Default : vector1ShaderProperty.floatType; + var floatType = vector1ShaderProperty.floatType; // Handle vector 1 mode parameters switch (floatType) { case FloatType.Slider: - var sliderTypePropertyDrawer = new EnumPropertyDrawer(); - propertySheet.Add(sliderTypePropertyDrawer.CreateGUI( - newValue => - { - this._preChangeValueCallback("Change Slider Type"); - vector1ShaderProperty.sliderType = (SliderType)newValue; - this._postChangeValueCallback(true); - }, - vector1ShaderProperty.sliderType, - "Slider Type", - SliderType.Default, - out var sliderTypePropertyEnumField, - tooltip: "Set the Slider type.")); - + if (!isSubGraph) // slider type isn't supported in subgraphs + { + var sliderTypePropertyDrawer = new EnumPropertyDrawer(); + propertySheet.Add(sliderTypePropertyDrawer.CreateGUI( + newValue => + { + this._preChangeValueCallback("Change Slider Type"); + vector1ShaderProperty.sliderType = (SliderType)newValue; + this._postChangeValueCallback(true); + }, + vector1ShaderProperty.sliderType, + "Slider Type", + SliderType.Default, + out var sliderTypePropertyEnumField, + tooltip: "Set the Slider type.")); + } var floatPropertyDrawer = new FloatPropertyDrawer(); // Default field propertySheet.Add(floatPropertyDrawer.CreateGUI( @@ -785,6 +810,7 @@ void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderPrope this._preChangeValueCallback("Change Enum Type"); vector1ShaderProperty.enumType = (EnumType)newValue; this._postChangeValueCallback(true); + this._dropdownChangedCallback(); }, (EnumTypeForUI)vector1ShaderProperty.enumType, "Enum Type", @@ -807,10 +833,16 @@ void HandleVector1ShaderProperty(PropertySheet propertySheet, Vector1ShaderPrope newValue = GetSanitizedEnumRefName(newValue); vector1ShaderProperty.cSharpEnumString = newValue; this._postChangeValueCallback(true); + this._dropdownChangedCallback(); }, vector1ShaderProperty.cSharpEnumString, "C# Enum Type", - tooltip: "Enter an Enum type.")); + tooltip: "Enter a fully qualified enum type name.")); + + if (string.IsNullOrEmpty(vector1ShaderProperty.cSharpEnumString)) + propertySheet.Add(new HelpBoxRow($"Type name string is empty, must be a fully qualified enum type name.", MessageType.Error)); + else if (vector1ShaderProperty.cSharpEnumType == null) + propertySheet.Add(new HelpBoxRow($"Type of '{vector1ShaderProperty.cSharpEnumString}' could not be found or is not an enum type.", MessageType.Error)); break; case EnumType.KeywordEnum: default: @@ -1808,6 +1840,7 @@ void EnumAddCallbacks() vector1Property.enumValues[index] = value; this._postChangeValueCallback(true); + this._dropdownChangedCallback(); } }; @@ -1826,6 +1859,7 @@ void EnumAddCallbacks() // Update GUI this._postChangeValueCallback(true); + this._dropdownChangedCallback(); m_EnumSelectedIndex = list.count - 1; }; @@ -1840,6 +1874,7 @@ void EnumAddCallbacks() // Rebuild(); this._postChangeValueCallback(true); + this._dropdownChangedCallback(); m_EnumSelectedIndex = m_EnumSelectedIndex >= list.list.Count - 1 ? list.list.Count - 1 : m_EnumSelectedIndex; }; @@ -1878,6 +1913,7 @@ void EnumAddCallbacks() vector1Property.enumNames.Insert(newIndex, name); vector1Property.enumValues.Insert(newIndex, value); this._postChangeValueCallback(true); + this._dropdownChangedCallback(); }; } } diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/SwitchNodePropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/SwitchNodePropertyDrawer.cs new file mode 100644 index 00000000000..4583aea7f64 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/SwitchNodePropertyDrawer.cs @@ -0,0 +1,96 @@ +using System; +using UnityEditor.Graphing; +using UnityEngine.UIElements; +using UnityEngine; +using System.Collections.Generic; + +namespace UnityEditor.ShaderGraph.Drawing.Inspector.PropertyDrawers +{ + [SGPropertyDrawer(typeof(SwitchNode))] + class SwitchNodeNodePropertyDrawer : AbstractMaterialNodePropertyDrawer + { + private SwitchNode node; + + internal override void AddCustomNodeProperties(VisualElement parentElement, AbstractMaterialNode nodeBase, Action setNodesAsDirtyCallback, Action updateNodeViewsCallback) + { + node = nodeBase as SwitchNode; + + if (node.UpstreamFloatEnumProperty != null) + parentElement.Add(new HelpBoxRow($"Enum cases found in property '{node.UpstreamFloatEnumProperty.displayName}'.", MessageType.Info)); + + var intModeToggle = new Toggle("Floor Predicate") { value = node.m_floorPredicate }; + intModeToggle.OnToggleChanged((evt) => + { + node.owner.owner.RegisterCompleteObjectUndo("Toggle Change"); + node.m_floorPredicate = evt.newValue; + node.Dirty(ModificationScope.Node); + }); + + parentElement.Add(intModeToggle); + + // We are reading enum cases from a property, so we won't display the list view. + if (node.UpstreamFloatEnumProperty != null) + return; + + var listView = new ReorderableListView(node.m_cases, "Conditions"); + listView.InitializeItemCallback += (List List) => + { + return new SwitchNode.EntryCase { comparisonType = ComparisonType.Equal, threshold = List.Count }; + }; + + listView.ValueChangedCallback += (List list) => + { + node.owner.owner.RegisterCompleteObjectUndo("switch Entry List Change"); + node.Dirty(ModificationScope.Topological); + node.UpdateNodeAfterDeserialization(); + }; + + listView.DrawItemCallback += (Rect rect, int idx) => + { + EditorGUI.BeginChangeCheck(); + var data = node.m_cases[idx]; + var trirect = TriRectSplit(rect, 0); + EditorGUI.LabelField(trirect.a, $"Case {(char)(idx + 'A')} "); + data.comparisonType = (ComparisonType)EditorGUI.EnumPopup(trirect.b, (ComparisonType)data.comparisonType); + data.threshold = EditorGUI.DelayedFloatField(trirect.c, data.threshold); + + if (EditorGUI.EndChangeCheck()) + { + node.owner.owner.RegisterCompleteObjectUndo("switch Entry Value Change"); + node.m_cases[idx] = data; + node.Dirty(ModificationScope.Node); + node.UpdateNodeAfterDeserialization(); + } + }; + + parentElement.Add(listView); + } + + private static (Rect pad, Rect a, Rect b, Rect c) TriRectSplit(Rect rect, float padding) + { + var width = rect.width - padding; + + var P = rect.xMin; + var A = P + padding; + var B = rect.xMin + width / 3; + var C = B + width / 3; + var D = rect.xMax; + + Rect p = rect; + Rect a = rect; + Rect b = rect; + Rect c = rect; + + p.xMin = P; + p.xMax = A; + a.xMin = A; + a.xMax = B; + b.xMin = B; + b.xMax = C; + c.xMin = C; + c.xMax = D; + + return (p, a, b, c); + } + } +} diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/SwitchNodePropertyDrawer.cs.meta b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/SwitchNodePropertyDrawer.cs.meta new file mode 100644 index 00000000000..3b9acce095d --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/SwitchNodePropertyDrawer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 08d70afa217adb948a9c45a911ba0d3e \ No newline at end of file diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/MaterialNodeView.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/MaterialNodeView.cs index 830d0220222..731a2941a75 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Views/MaterialNodeView.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/MaterialNodeView.cs @@ -73,7 +73,7 @@ public void Initialize(AbstractMaterialNode inNode, PreviewManager previewManage foreach (IControlAttribute attribute in propertyInfo.GetCustomAttributes(typeof(IControlAttribute), false)) m_ControlItems.Add(attribute.InstantiateControl(node, propertyInfo)); } - if (m_ControlItems.childCount > 0) + if (m_ControlItems.childCount > 0 || inNode is SubGraphNode) contents.Add(controlsContainer); // Add dropdowns container @@ -575,6 +575,10 @@ void UpdateShaderPortsForSlots(bool inputSlots, List allSlots, Sha else portContainer.Remove(shaderPort); } + else if (allSlots[newSlotIndex].hideConnector && inputSlots) + { + portContainer.Remove(shaderPort.parent); + } else { var newSlot = allSlots[newSlotIndex]; @@ -612,6 +616,25 @@ public void OnModified(ModificationScope scope) UpdateShaderPortsForSlots(true, slots, slotShaderPorts); UpdateShaderPortsForSlots(false, slots, slotShaderPorts); + // Make sure inline slots match what is expected; + List toRemove = new(); + foreach(var item in m_ControlItems.Children()) + { + if (item.ClassListContains("SlotAsControl")) + { + var idx = slots.FindIndex(s => s.id == (int)item.userData); + if (idx < 0) + toRemove.Add(item); + else if (!slots[idx].hideConnector) + toRemove.Add(item); + else if (slots[idx].InstantiateControl().GetType() != item.GetType()) + toRemove.Add(item); + + } + } + foreach (var item in toRemove) + m_ControlItems.Remove(item); + // check if there are any new slots that must create new ports for (int i = 0; i < slots.Count; i++) { @@ -651,6 +674,21 @@ ShaderPort AddShaderPortForSlot(MaterialSlot slot) if (slot.hidden) return null; + if (slot.hideConnector) + { + foreach (var item in m_ControlItems.Children()) + if (item.ClassListContains("SlotAsControl") && (int)item.userData == slot.id) + return null; + + var control = slot.InstantiateControl(); + if (control == null) + return null; + control.userData = slot.id; + control.AddToClassList("SlotAsControl"); + m_ControlItems.Add(control); + return null; + } + ShaderPort port = ShaderPort.Create(slot, m_ConnectorListener); if (slot.isOutputSlot) { diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableListView.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableListView.cs new file mode 100644 index 00000000000..d7df13c6c80 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableListView.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using UnityEditorInternal; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UnityEditor.ShaderGraph.Drawing +{ + internal class ReorderableListView : VisualElement + { + List m_DataList; + string m_header; + ReorderableList m_ReorderableList; + + internal delegate T InitializeItemDelegate(List list); + internal InitializeItemDelegate InitializeItemCallback; + + internal delegate void ValueChangedDelegate(List list); + internal ValueChangedDelegate ValueChangedCallback; + + internal delegate void DrawItemDelegate(Rect rect, int idx); + internal DrawItemDelegate DrawItemCallback; + + internal ReorderableListView(List dataList, string header) + { + m_DataList = dataList; + m_header = header; + + styleSheets.Add(Resources.Load("Styles/ReorderableSlotListView")); + Add(new IMGUIContainer(() => OnGUIHandler()) { name = "ListContainer" }); + } + + void OnGUIHandler() + { + if (m_ReorderableList == null) + RecreateList(m_DataList, m_header); + + m_ReorderableList.DoLayoutList(); + } + + internal void RecreateList(List dataList, string header) + { + m_DataList = dataList; + m_header = header; + m_ReorderableList = new ReorderableList(m_DataList, typeof(T), true, true, true, true); + + if (InitializeItemCallback != null) + m_ReorderableList.onAddCallback += (ReorderableList list) + => m_DataList.Add(InitializeItemCallback(m_DataList)); + + m_ReorderableList.drawHeaderCallback += (Rect rect) + => EditorGUI.LabelField(new Rect(rect.x, rect.y, rect.width - 10, rect.height), m_header); + + if (DrawItemCallback != null) + m_ReorderableList.drawElementCallback += (Rect rect, int index, bool isActive, bool isFocused) + => DrawItemCallback(rect, index); + + if (ValueChangedCallback != null) + m_ReorderableList.onChangedCallback += (ReorderableList list) + => ValueChangedCallback(m_DataList); + } + } +} diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableListView.cs.meta b/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableListView.cs.meta new file mode 100644 index 00000000000..3117c3c2109 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableListView.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 09ee586b510e67243986436d6d148bac \ No newline at end of file diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableTextListView.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableTextListView.cs index 3f41d6762d0..434196d9027 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableTextListView.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/ReorderableTextListView.cs @@ -7,7 +7,7 @@ namespace UnityEditor.ShaderGraph.Drawing { - internal class ReorderableListView : VisualElement + internal class ReorderableTextListView : VisualElement { // generic control to display and allow the user to directly reorder/add/remove from a list of T @@ -42,7 +42,7 @@ internal class ReorderableListView : VisualElement internal delegate void ListReorderedDelegate(List reorderedList); public ListReorderedDelegate OnListReorderedCallback; - internal ReorderableListView( + internal ReorderableTextListView( List dataList, string header = "Reorder data:", bool allowReorder = true, diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/BooleanSlotControlView.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/BooleanSlotControlView.cs index a9380789f54..d05dc5ca7b1 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/BooleanSlotControlView.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/BooleanSlotControlView.cs @@ -12,10 +12,13 @@ class BooleanSlotControlView : VisualElement public BooleanSlotControlView(BooleanMaterialSlot slot) { - styleSheets.Add(Resources.Load("Styles/Controls/BooleanSlotControlView")); m_Slot = slot; - var toggleField = new Toggle() { value = m_Slot.value }; + if (!slot.hideConnector) + styleSheets.Add(Resources.Load("Styles/Controls/BooleanSlotControlView")); + var toggleField = new Toggle() { label = m_Slot.hideConnector ? m_Slot.RawDisplayName() : null, value = m_Slot.value }; + toggleField.OnToggleChanged(OnChangeToggle); + Add(toggleField); } diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/ColorSlotControlView.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/ColorSlotControlView.cs index a14909d35ad..5f3f3e6fa09 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/ColorSlotControlView.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/ColorSlotControlView.cs @@ -12,9 +12,11 @@ class ColorRGBASlotControlView : VisualElement public ColorRGBASlotControlView(ColorRGBAMaterialSlot slot) { - styleSheets.Add(Resources.Load("Styles/Controls/ColorRGBASlotControlView")); + if (!slot.hideConnector) + styleSheets.Add(Resources.Load("Styles/Controls/ColorRGBASlotControlView")); + else styleSheets.Add(Resources.Load("Styles/Controls/ColorControlView")); m_Slot = slot; - var colorField = new ColorField { value = slot.value, showEyeDropper = false }; + var colorField = new ColorField { label = m_Slot.hideConnector ? m_Slot.RawDisplayName() : null, value = slot.value, showEyeDropper = false }; colorField.RegisterValueChangedCallback(OnValueChanged); Add(colorField); } diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/GradientSlotControlView.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/GradientSlotControlView.cs index 7bf58a568f0..6acac5e76d3 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/GradientSlotControlView.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/Slots/GradientSlotControlView.cs @@ -24,7 +24,9 @@ class GradientSlotControlView : VisualElement public GradientSlotControlView(GradientInputMaterialSlot slot) { m_Slot = slot; - styleSheets.Add(Resources.Load("Styles/Controls/GradientSlotControlView")); + if (!slot.hideConnector) + styleSheets.Add(Resources.Load("Styles/Controls/GradientSlotControlView")); + else styleSheets.Add(Resources.Load("Styles/Controls/GradientControlView")); m_GradientObject = ScriptableObject.CreateInstance(); m_GradientObject.gradient = new Gradient(); @@ -33,7 +35,7 @@ public GradientSlotControlView(GradientInputMaterialSlot slot) m_GradientObject.gradient.SetKeys(m_Slot.value.colorKeys, m_Slot.value.alphaKeys); m_GradientObject.gradient.mode = m_Slot.value.mode; - var gradientField = new GradientField() { value = m_GradientObject.gradient, colorSpace = ColorSpace.Linear, hdr = true }; + var gradientField = new GradientField() { label = m_Slot.hideConnector ? m_Slot.RawDisplayName() : null, value = m_GradientObject.gradient, colorSpace = ColorSpace.Linear, hdr = true }; gradientField.RegisterValueChangedCallback(OnValueChanged); Add(gradientField); } diff --git a/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/ColorControlView.uss b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/ColorControlView.uss index a7034518b11..68d805b309c 100644 --- a/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/ColorControlView.uss +++ b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/ColorControlView.uss @@ -12,6 +12,10 @@ ColorControlView > ColorField { width: 184px; } +.unity-base-field__input{ + min-width: 24px; +} + ColorControlView > #enumPanel > EnumField { flex: 1; height: 19px; diff --git a/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/GradientControlView.uss b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/GradientControlView.uss index 35ee04d8c83..60adf878700 100644 --- a/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/GradientControlView.uss +++ b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/GradientControlView.uss @@ -14,6 +14,10 @@ GradientControlView > #gradientPanel > GradientField { margin-bottom: 1px; } +.unity-base-field__input { + min-width: 32px; +} + GradientControlView > #gradientPanel > Label { width: 100px; margin-left: 8px; diff --git a/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/SliderSlotControlView.uss b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/SliderSlotControlView.uss new file mode 100644 index 00000000000..30557112800 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/SliderSlotControlView.uss @@ -0,0 +1,51 @@ +SliderControlView { + padding-left: 8px; + padding-right: 8px; + padding-top: 4px; + padding-bottom: 4px; +} + +SliderControlView > #SliderPanel { + padding-bottom: 4px; + flex-direction: row; + flex-grow: 1; +} + +.unity-slider, +.unity-slider .unity-base-field__input { + margin-left: 0; + margin-right: 0; + flex-grow: 1; + min-width: 54px; + overflow:visible; +} + +SliderControlView > #SliderPanel > FloatField { + width: 40px; + padding-right: 0; + margin-right: 0; + -unity-text-align: middle-left; +} + +SliderControlView > #FieldsPanel { + flex-direction: row; + flex-grow: 1; + margin-left: 0; + margin-right: 0; +} + +SliderControlView > #FieldsPanel > Label { + -unity-text-align: middle-left; + margin-right: 8px; + padding-left: 4px; +} + +SliderControlView > #FieldsPanel > FloatField { + margin-left: 0; + margin-right: 0; + padding-right: 0; + flex-direction: row; + flex-grow: 1; + width: 40px; + -unity-text-align: middle-left; +} diff --git a/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/SliderSlotControlView.uss.meta b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/SliderSlotControlView.uss.meta new file mode 100644 index 00000000000..b58a5b5bcb3 --- /dev/null +++ b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/SliderSlotControlView.uss.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 997219cac3e66d746b7f6bc09d0e9967 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} + disableValidation: 0 + unsupportedSelectorAction: 0 diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Scenes/LogicNodes.unity b/Tests/SRPTests/Projects/ShaderGraph/Assets/Scenes/LogicNodes.unity index 7da9c893c88..1a66a056519 100644 --- a/Tests/SRPTests/Projects/ShaderGraph/Assets/Scenes/LogicNodes.unity +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Scenes/LogicNodes.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.12731749, g: 0.13414757, b: 0.1210787, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: 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 @@ -105,7 +101,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -118,7 +114,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -147,9 +143,11 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 24034508} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: - {fileID: 1679244218} - {fileID: 821450562} @@ -180,11 +178,12 @@ Transform: - {fileID: 54321320} - {fileID: 827042499} - {fileID: 1632791856} + - {fileID: 936742100} - {fileID: 737513153} + - {fileID: 2100841046} - {fileID: 1414463854} - {fileID: 795121295} m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &54321319 GameObject: @@ -211,12 +210,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 54321319} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 7, y: 0, z: 3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 26 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &54321321 MeshRenderer: @@ -235,6 +235,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -256,9 +261,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &54321322 MeshFilter: @@ -293,12 +300,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 237732386} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -5, y: 0, z: -1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &237732388 MeshRenderer: @@ -317,6 +325,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -338,9 +351,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &237732389 MeshFilter: @@ -375,12 +390,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 420467199} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 3, y: 0, z: -1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &420467201 MeshRenderer: @@ -399,6 +415,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -420,9 +441,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &420467202 MeshFilter: @@ -457,12 +480,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 429254499} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1, y: 0, z: -3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &429254501 MeshRenderer: @@ -481,6 +505,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -502,9 +531,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &429254502 MeshFilter: @@ -548,9 +579,11 @@ MonoBehaviour: ImageComparisonSettings: TargetWidth: 350 TargetHeight: 175 + TargetMSAASamples: 1 PerPixelCorrectnessThreshold: 0.00075 PerPixelGammaThreshold: 0.003921569 PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 AverageCorrectnessThreshold: 0.0001 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 @@ -573,9 +606,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -609,12 +650,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 487053996} + serializedVersion: 2 m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068} m_LocalPosition: {x: 1, y: 10, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} --- !u!114 &487054000 MonoBehaviour: @@ -638,6 +680,7 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 1 m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 m_RenderPostProcessing: 0 m_Antialiasing: 0 m_AntialiasingQuality: 2 @@ -645,8 +688,19 @@ MonoBehaviour: m_Dithering: 0 m_ClearDepth: 1 m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 m_Version: 2 --- !u!1 &523358339 GameObject: @@ -673,12 +727,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 523358339} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 5, y: 0, z: -1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 24 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &523358341 MeshRenderer: @@ -697,6 +752,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -718,9 +778,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &523358342 MeshFilter: @@ -755,12 +817,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 526137952} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -7, y: 0, z: -3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &526137954 MeshRenderer: @@ -779,6 +842,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -800,9 +868,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &526137955 MeshFilter: @@ -837,12 +907,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 607144758} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1, y: 0, z: 3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &607144760 MeshRenderer: @@ -861,6 +932,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -882,9 +958,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &607144761 MeshFilter: @@ -919,12 +997,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 608371298} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 5, y: 0, z: -3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 25 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &608371300 MeshRenderer: @@ -943,6 +1022,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -964,9 +1048,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &608371301 MeshFilter: @@ -1001,12 +1087,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 654947479} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1, y: 0, z: 1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &654947481 MeshRenderer: @@ -1025,6 +1112,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1046,9 +1138,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &654947482 MeshFilter: @@ -1083,12 +1177,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 731324151} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 3, y: 0, z: -3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 21 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &731324153 MeshRenderer: @@ -1107,6 +1202,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1128,9 +1228,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &731324154 MeshFilter: @@ -1165,12 +1267,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 737513152} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 7, y: 0, z: -3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 29 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &737513154 MeshRenderer: @@ -1189,6 +1292,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1210,9 +1318,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &737513155 MeshFilter: @@ -1247,12 +1357,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 795121294} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 9, y: 0, z: 1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 31 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &795121296 MeshRenderer: @@ -1271,6 +1382,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1292,9 +1408,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &795121297 MeshFilter: @@ -1339,6 +1457,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1360,9 +1483,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &821450561 MeshFilter: @@ -1379,12 +1504,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 821450559} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -7, y: 0, z: 1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &827042498 GameObject: @@ -1411,12 +1537,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 827042498} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 7, y: 0, z: 1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 27 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &827042500 MeshRenderer: @@ -1435,6 +1562,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1456,9 +1588,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &827042501 MeshFilter: @@ -1493,12 +1627,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 837578499} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -5, y: 0, z: 3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &837578501 MeshRenderer: @@ -1517,6 +1652,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1538,9 +1678,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &837578502 MeshFilter: @@ -1550,6 +1692,96 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 837578499} m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &936742099 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 936742100} + - component: {fileID: 936742102} + - component: {fileID: 936742101} + m_Layer: 0 + m_Name: CompareGreaterOrE1 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &936742100 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936742099} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9, y: 0, z: -1} + m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 24034509} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &936742101 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936742099} + 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_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ea1e6df6ec5a0ad41beee89f2f2c01a2, 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: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &936742102 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 936742099} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &946551484 GameObject: m_ObjectHideFlags: 0 @@ -1575,12 +1807,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 946551484} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1, y: 0, z: -1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &946551486 MeshRenderer: @@ -1599,6 +1832,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1620,9 +1858,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &946551487 MeshFilter: @@ -1657,12 +1897,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1185194200} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 1, y: 0, z: 1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1185194202 MeshRenderer: @@ -1681,6 +1922,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1702,9 +1948,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1185194203 MeshFilter: @@ -1739,12 +1987,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1250144434} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1, y: 0, z: -1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1250144436 MeshRenderer: @@ -1763,6 +2012,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1784,9 +2038,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1250144437 MeshFilter: @@ -1821,12 +2077,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1344289488} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1, y: 0, z: -3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1344289490 MeshRenderer: @@ -1845,6 +2102,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1866,9 +2128,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1344289491 MeshFilter: @@ -1903,12 +2167,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1414463853} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 9, y: 0, z: 3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 30 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1414463855 MeshRenderer: @@ -1927,6 +2192,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -1948,9 +2218,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1414463856 MeshFilter: @@ -1985,12 +2257,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1609722330} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -5, y: 0, z: 1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1609722332 MeshRenderer: @@ -2009,6 +2282,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2030,9 +2308,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1609722333 MeshFilter: @@ -2067,12 +2347,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1632791855} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 7, y: 0, z: -1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 28 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1632791857 MeshRenderer: @@ -2091,6 +2372,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2112,9 +2398,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1632791858 MeshFilter: @@ -2149,12 +2437,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1666618932} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -7, y: 0, z: -1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1666618934 MeshRenderer: @@ -2173,6 +2462,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2194,9 +2488,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1666618935 MeshFilter: @@ -2241,6 +2537,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2262,9 +2563,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1679244217 MeshFilter: @@ -2281,12 +2584,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1679244215} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -7, y: 0, z: 3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1884273235 GameObject: @@ -2313,12 +2617,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1884273235} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 3, y: 0, z: 1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1884273237 MeshRenderer: @@ -2337,6 +2642,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2358,9 +2668,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1884273238 MeshFilter: @@ -2395,12 +2707,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1951108575} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 3, y: 0, z: 3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1951108577 MeshRenderer: @@ -2419,6 +2732,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2440,9 +2758,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1951108578 MeshFilter: @@ -2477,12 +2797,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1978943294} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 5, y: 0, z: 3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 22 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &1978943296 MeshRenderer: @@ -2501,6 +2822,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2522,9 +2848,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1978943297 MeshFilter: @@ -2559,12 +2887,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2067272223} + serializedVersion: 2 m_LocalRotation: {x: -0.27059945, y: -0.6532809, z: 0.6532809, w: 0.27059945} m_LocalPosition: {x: -3, y: 0, z: 2} m_LocalScale: {x: 100, y: 200.00029, z: 100.0001} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 9 m_LocalEulerAnglesHint: {x: -225, y: 89.99999, z: -90} --- !u!23 &2067272225 MeshRenderer: @@ -2583,6 +2912,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2604,9 +2938,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &2067272226 MeshFilter: @@ -2616,6 +2952,96 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2067272223} m_Mesh: {fileID: -2910553531923820279, guid: 57aeda26ae9cd2f43829793cff67c85e, type: 3} +--- !u!1 &2100841045 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2100841046} + - component: {fileID: 2100841048} + - component: {fileID: 2100841047} + m_Layer: 0 + m_Name: CompareGreaterOrE2 (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2100841046 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100841045} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 9, y: 0, z: -3} + m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 24034509} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &2100841047 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100841045} + 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_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 07bc55ccf18b45e4293fe8b3c56500f3, 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: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_MaskInteraction: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2100841048 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2100841045} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &2112241611 GameObject: m_ObjectHideFlags: 0 @@ -2641,12 +3067,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2112241611} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -1, y: 0, z: 3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &2112241613 MeshRenderer: @@ -2665,6 +3092,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2686,9 +3118,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &2112241614 MeshFilter: @@ -2723,12 +3157,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2127730450} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 5, y: 0, z: 1} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 23 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &2127730452 MeshRenderer: @@ -2747,6 +3182,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2768,9 +3208,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &2127730453 MeshFilter: @@ -2805,12 +3247,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2146362975} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: -5, y: 0, z: -3} m_LocalScale: {x: 2, y: 2, z: 2} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!23 &2146362977 MeshRenderer: @@ -2829,6 +3272,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -2850,9 +3298,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &2146362978 MeshFilter: @@ -2877,12 +3327,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8296172669067083674} + serializedVersion: 2 m_LocalRotation: {x: -0.68301284, y: -0.1830124, z: 0.1830124, w: 0.68301284} m_LocalPosition: {x: -3, y: 0, z: -2} m_LocalScale: {x: 100, y: 200.00012, z: 100.00004} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 24034509} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: -120, y: 89.99999, z: -90} --- !u!23 &7718390322771659590 MeshRenderer: @@ -2901,6 +3352,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -2922,9 +3378,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!1 &8296172669067083674 GameObject: @@ -2944,3 +3402,9 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 487053999} + - {fileID: 24034509} diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/Switch.shadergraph b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/Switch.shadergraph new file mode 100644 index 00000000000..0518cd63171 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/Switch.shadergraph @@ -0,0 +1,948 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "6ce1db2b47f84b76ac190361b462342b", + "m_Properties": [ + { + "m_Id": "dbd759afd5154e8d8d388604315127d0" + } + ], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "f2059deef02c476ea03691ea8ae23ece" + } + ], + "m_Nodes": [ + { + "m_Id": "e4b3a2e8c626499da2bcbb70588aeee7" + }, + { + "m_Id": "2b221dcbb49b4f12a1a45d1e93d1beba" + }, + { + "m_Id": "2d95b23d9d0b481696d86f75e62cb5a6" + }, + { + "m_Id": "ee20745d3a254daaa8f1b06a9b35a890" + }, + { + "m_Id": "cacf9f374490425091028cefe8b7ca39" + }, + { + "m_Id": "f4dce878551b4347a8574419fa710f42" + }, + { + "m_Id": "15adff15a02f474f8dc37bd80bc89f05" + }, + { + "m_Id": "edee67105804466a9f4d0dc43bfb6fdc" + }, + { + "m_Id": "7e11b7008c7941d1b738b54f85c457bd" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "15adff15a02f474f8dc37bd80bc89f05" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f4dce878551b4347a8574419fa710f42" + }, + "m_SlotId": 4 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7e11b7008c7941d1b738b54f85c457bd" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f4dce878551b4347a8574419fa710f42" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "cacf9f374490425091028cefe8b7ca39" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f4dce878551b4347a8574419fa710f42" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "edee67105804466a9f4d0dc43bfb6fdc" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f4dce878551b4347a8574419fa710f42" + }, + "m_SlotId": 3 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f4dce878551b4347a8574419fa710f42" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "ee20745d3a254daaa8f1b06a9b35a890" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 1170.0, + "y": -88.00000762939453 + }, + "m_Blocks": [ + { + "m_Id": "e4b3a2e8c626499da2bcbb70588aeee7" + }, + { + "m_Id": "2b221dcbb49b4f12a1a45d1e93d1beba" + }, + { + "m_Id": "2d95b23d9d0b481696d86f75e62cb5a6" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 1170.0, + "y": 111.99999237060547 + }, + "m_Blocks": [ + { + "m_Id": "ee20745d3a254daaa8f1b06a9b35a890" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graph Tests/Utility/Logic", + "m_GraphPrecision": 0, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "b45a2f33d99a447aa77d8589d196c003" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0391318320754bb689dc577dc6f144c1", + "m_Id": 0, + "m_DisplayName": "Option", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [], + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "14b1ce2ee7384aee855c648d16d70c35", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.ColorNode", + "m_ObjectId": "15adff15a02f474f8dc37bd80bc89f05", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 557.0, + "y": 338.9999694824219, + "width": 208.0, + "height": 125.0 + } + }, + "m_Slots": [ + { + "m_Id": "f443f883e3504e13a4862b5c55663780" + } + ], + "synonyms": [ + "rgba" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Color": { + "color": { + "r": 0.0, + "g": 1.0, + "b": 0.0, + "a": 1.0 + }, + "mode": 0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "1fd6bff75f2b4ad6b87d1048e79caed2", + "m_Id": 1, + "m_DisplayName": "Fallback", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Fallback", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "23e08b11975a4490885a15e4854e731f", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "2b221dcbb49b4f12a1a45d1e93d1beba", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "45227798be9649f78fb32ff7e4d21caa" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "2d95b23d9d0b481696d86f75e62cb5a6", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "9e606acad9494a8eb8fcb6c07a4fb466" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "45227798be9649f78fb32ff7e4d21caa", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "55b5567d33ea46cabc277385072eb863", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.ColorNode", + "m_ObjectId": "7e11b7008c7941d1b738b54f85c457bd", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 557.0, + "y": 88.99995422363281, + "width": 208.0, + "height": 125.0 + } + }, + "m_Slots": [ + { + "m_Id": "55b5567d33ea46cabc277385072eb863" + } + ], + "synonyms": [ + "rgba" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Color": { + "color": { + "r": 1.0, + "g": 0.0, + "b": 1.0, + "a": 1.0 + }, + "mode": 0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "7f8fe51e90fb4ab98a0c6a029dbf61a9", + "m_Id": 4, + "m_DisplayName": "Green", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "case_Green", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "866fdd4b90ee474f88b47f818a6313e9", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "9e606acad9494a8eb8fcb6c07a4fb466", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "a310f918e2ef40a39e5b98a2ffe2bc55", + "m_Id": 0, + "m_DisplayName": "Predicate", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Predicate", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [], + "m_LiteralMode": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "a6cd78d93712443dab143aaf1877ff57", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "b45a2f33d99a447aa77d8589d196c003", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "b8ded5c60a2c4c06b63cb91b51932a44" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": false, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_DisableTint": false, + "m_Sort3DAs2DCompatible": false, + "m_AdditionalMotionVectorMode": 0, + "m_AlembicMotionVectors": false, + "m_SupportsLODCrossFade": false, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "b8ded5c60a2c4c06b63cb91b51932a44", + "m_KeepLightingVariants": false, + "m_DefaultDecalBlending": true, + "m_DefaultSSAO": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "cacf9f374490425091028cefe8b7ca39", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 655.0, + "y": 54.999996185302737, + "width": 110.0, + "height": 33.99995803833008 + } + }, + "m_Slots": [ + { + "m_Id": "0391318320754bb689dc577dc6f144c1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "dbd759afd5154e8d8d388604315127d0" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "d946cfb6b89645679e453b99c03c9e6e", + "m_Id": 3, + "m_DisplayName": "Red", + "m_SlotType": 0, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "case_Red", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_LiteralMode": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "dbd759afd5154e8d8d388604315127d0", + "m_Guid": { + "m_GuidSerialized": "a51e7d50-88d5-4568-815b-c32e224e1a65" + }, + "promotedFromAssetID": "", + "promotedFromCategoryName": "", + "promotedOrdering": -1, + "m_Name": "Option", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Option", + "m_DefaultReferenceName": "_Option", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "hideConnector": false, + "m_Hidden": false, + "m_PerRendererData": false, + "m_customAttributes": [], + "m_Value": 0.0, + "m_FloatType": 3, + "m_LiteralFloatMode": false, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + }, + "m_SliderType": 0, + "m_SliderPower": 3.0, + "m_EnumType": 0, + "m_CSharpEnumString": "", + "m_EnumNames": [ + "Red", + "Green" + ], + "m_EnumValues": [ + 0, + 1 + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "e4b3a2e8c626499da2bcbb70588aeee7", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "14b1ce2ee7384aee855c648d16d70c35" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.ColorNode", + "m_ObjectId": "edee67105804466a9f4d0dc43bfb6fdc", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Color", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 557.0, + "y": 213.9999542236328, + "width": 208.0, + "height": 125.00001525878906 + } + }, + "m_Slots": [ + { + "m_Id": "866fdd4b90ee474f88b47f818a6313e9" + } + ], + "synonyms": [ + "rgba" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Color": { + "color": { + "r": 1.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "mode": 0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "ee20745d3a254daaa8f1b06a9b35a890", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "a6cd78d93712443dab143aaf1877ff57" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "f2059deef02c476ea03691ea8ae23ece", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "dbd759afd5154e8d8d388604315127d0" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f443f883e3504e13a4862b5c55663780", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_HideConnector": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SwitchNode", + "m_ObjectId": "f4dce878551b4347a8574419fa710f42", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Switch", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 835.0, + "y": 46.999977111816409, + "width": 208.0, + "height": 350.0 + } + }, + "m_Slots": [ + { + "m_Id": "a310f918e2ef40a39e5b98a2ffe2bc55" + }, + { + "m_Id": "1fd6bff75f2b4ad6b87d1048e79caed2" + }, + { + "m_Id": "23e08b11975a4490885a15e4854e731f" + }, + { + "m_Id": "d946cfb6b89645679e453b99c03c9e6e" + }, + { + "m_Id": "7f8fe51e90fb4ab98a0c6a029dbf61a9" + } + ], + "synonyms": [ + "switch" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_floorPredicate": true, + "m_cases": [ + { + "name": "", + "comparisonType": 0, + "threshold": 0.0 + }, + { + "name": "", + "comparisonType": 0, + "threshold": 1.0 + } + ] +} + diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/Switch.shadergraph.meta b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/Switch.shadergraph.meta new file mode 100644 index 00000000000..a74de4a81d7 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/Switch.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7d996e790e7d4fe41a8ff9cf0a7daba1 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchGreen.mat b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchGreen.mat new file mode 100644 index 00000000000..314f18bd467 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchGreen.mat @@ -0,0 +1,140 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-23458516899665497 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SwitchGreen + m_Shader: {fileID: -6465566751694194690, guid: 7d996e790e7d4fe41a8ff9cf0a7daba1, + type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _Float: 0 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Option: 1 + - _Parallax: 0.005 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchGreen.mat.meta b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchGreen.mat.meta new file mode 100644 index 00000000000..4c5e7446ee1 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchGreen.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07bc55ccf18b45e4293fe8b3c56500f3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchRed.mat b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchRed.mat new file mode 100644 index 00000000000..11b4c4ff263 --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchRed.mat @@ -0,0 +1,140 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-23458516899665497 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SwitchRed + m_Shader: {fileID: -6465566751694194690, guid: 7d996e790e7d4fe41a8ff9cf0a7daba1, + type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _Float: 0 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Option: 0 + - _Parallax: 0.005 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchRed.mat.meta b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchRed.mat.meta new file mode 100644 index 00000000000..91fe5ef1bbe --- /dev/null +++ b/Tests/SRPTests/Projects/ShaderGraph/Assets/Testing/IntegrationTests/Graphs/Utility/Logic/SwitchRed.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ea1e6df6ec5a0ad41beee89f2f2c01a2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: From 580926ff7c319274e83dd644d1753fd0dd6fc303 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20V=C3=A1zquez?= Date: Tue, 27 Jan 2026 23:32:26 +0000 Subject: [PATCH 14/79] [Render Pipeline Converter] BiRP to URP 2D : Adding settings converter workflow. --- .../Converter/RenderSettingsConverter.cs | 132 ++++++++++++++ .../Converter/RenderSettingsConverter.cs.meta | 2 + .../BuiltInToURP2DRenderSettingsConverter.cs | 88 ++++++++++ ...ltInToURP2DRenderSettingsConverter.cs.meta | 2 + .../Editor/2D/Renderer2DMenus.cs | 2 +- .../Editor/Converter/Converters.cs | 8 +- ... BuiltInToURP3DRenderSettingsConverter.cs} | 163 ++++-------------- ...ltInToURP3DRenderSettingsConverter.cs.meta | 2 + .../RenderSettingsConverter.cs.meta | 2 - .../AnimationClipConverterTests.cs | 6 + .../Tools/Converters/ConvertersTests.cs | 3 +- .../RenderSettingsConverterTests.cs | 41 ++++- 12 files changed, 313 insertions(+), 138 deletions(-) create mode 100644 Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/RenderSettingsConverter.cs create mode 100644 Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/RenderSettingsConverter.cs.meta create mode 100644 Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DRenderSettingsConverter.cs create mode 100644 Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DRenderSettingsConverter.cs.meta rename Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/{RenderSettingsConverter.cs => BuiltInToURP3DRenderSettingsConverter.cs} (54%) create mode 100644 Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/BuiltInToURP3DRenderSettingsConverter.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/RenderSettingsConverter.cs.meta diff --git a/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/RenderSettingsConverter.cs b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/RenderSettingsConverter.cs new file mode 100644 index 00000000000..8b3195ad280 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/RenderSettingsConverter.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; +using UnityEngine.Rendering; + +namespace UnityEditor.Rendering.Converter +{ + [Serializable] + internal class RenderSettingsConverterItem : IRenderPipelineConverterItem + { + public int qualityLevelIndex { get; set; } + + public string name { get; set; } + + public string info { get; set; } + + public bool isEnabled { get; set; } + public string isDisabledMessage { get; set; } + + public Texture2D icon + { + get + { + var iconAttribute = typeof(RenderPipelineAsset).GetCustomAttribute(); + if (iconAttribute == null || string.IsNullOrEmpty(iconAttribute.path)) + return null; + return EditorGUIUtility.IconContent(iconAttribute.path)?.image as Texture2D; + } + } + public void OnClicked() + { + SettingsService.OpenProjectSettings("Project/Quality"); + } + } + + [Serializable] + abstract class RenderSettingsConverter : IRenderPipelineConverter + { + public void Scan(Action> onScanFinish) + { + List renderPipelineConverterItems = new (); + QualitySettings.ForEach((index, name) => + { + var item = new RenderSettingsConverterItem + { + qualityLevelIndex = index, + name = name + }; + + if (QualitySettings.renderPipeline is not RenderPipelineAsset) + { + item.isEnabled = true; + item.info = $"Create a Render Pipeline Asset for Quality Level {index} ({name})"; + } + else + { + item.info = "Quality Level already references a Render Pipeline Asset."; + item.isEnabled = false; + item.isDisabledMessage = item.info; + } + renderPipelineConverterItems.Add(item); + }); + + onScanFinish?.Invoke(renderPipelineConverterItems); + } + public abstract bool isEnabled { get; } + + public abstract string isDisabledMessage { get; } + + public Status Convert(IRenderPipelineConverterItem item, out string message) + { + message = string.Empty; + + if (item is RenderSettingsConverterItem qualityLevelItem) + { + if (CreateRPAssetForQualityLevel(qualityLevelItem.qualityLevelIndex, out message)) + { + message = "Each Quality Level now has a new, unique RP asset, but all share identical settings. Modify each asset to restore your performance/quality tiers."; + return Status.Warning; + } + } + + return Status.Error; + } + + private bool CreateRPAssetForQualityLevel(int qualityIndex, out string message) + { + bool ok = false; + message = string.Empty; + + var currentQualityLevel = QualitySettings.GetQualityLevel(); + + QualitySettings.SetQualityLevel(qualityIndex); + + if (QualitySettings.renderPipeline is RenderPipelineAsset rpAsset) + { + message = $"Quality Level {qualityIndex} already references a Render Pipeline Asset: {rpAsset.name}."; + } + else + { + var asset = CreateAsset($"{QualitySettings.names[qualityIndex]}"); + + if (asset != null) + { + // Map built-in data to the URP asset data + SetPipelineSettings(asset); + + // Set the asset dirty to make sure that the renderer data is saved + EditorUtility.SetDirty(asset); + AssetDatabase.SaveAssetIfDirty(asset); + + QualitySettings.renderPipeline = asset; + ok = true; + } + else + { + message = "Failed to create Universal Render Pipeline Asset."; + } + } + + // Restore back the quality level + QualitySettings.SetQualityLevel(currentQualityLevel); + + return ok; + } + + protected abstract RenderPipelineAsset CreateAsset(string name); + + protected abstract void SetPipelineSettings(RenderPipelineAsset asset); + } +} diff --git a/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/RenderSettingsConverter.cs.meta b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/RenderSettingsConverter.cs.meta new file mode 100644 index 00000000000..2086555801d --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor-PrivateShared/Tools/Converter/RenderSettingsConverter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 81990f396fa7c0a41be94125220f755a \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DRenderSettingsConverter.cs b/Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DRenderSettingsConverter.cs new file mode 100644 index 00000000000..dc95826c388 --- /dev/null +++ b/Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DRenderSettingsConverter.cs @@ -0,0 +1,88 @@ +using System; +using UnityEditor.Rendering.Converter; +using UnityEngine; +using UnityEngine.Categorization; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; + +namespace UnityEditor.Rendering.Universal +{ + [Serializable] + [PipelineConverter("Built-in", "Universal Render Pipeline (2D Renderer)")] + [ElementInfo(Name = "Rendering Settings", + Order = int.MinValue, + Description = "This converter creates Universal Render Pipeline (URP) assets and corresponding Renderer assets, configuring their settings to match the equivalent settings from the Built-in Render Pipeline.")] + class BuiltInToURP2DRenderSettingsConverter : RenderSettingsConverter + { + public override bool isEnabled => true; + + public override string isDisabledMessage => string.Empty; + + protected override RenderPipelineAsset CreateAsset(string name) + { + string path = $"Assets/{UniversalProjectSettings.projectSettingsFolderPath}/{name}.asset"; + if (AssetDatabase.AssetPathExists(path)) + return AssetDatabase.LoadAssetAtPath(path); + + try + { + CoreUtils.EnsureFolderTreeInAssetFilePath(path); + var asset = ScriptableObject.CreateInstance(typeof(UniversalRenderPipelineAsset)) as UniversalRenderPipelineAsset; + AssetDatabase.CreateAsset(asset, path); + AssetDatabase.SaveAssetIfDirty(asset); + return asset; + } + catch (Exception ex) + { + Debug.LogError($"Unable to create asset at path {path} with exception {ex.Message}"); + return null; + } + } + + Renderer2DData CreateRenderer2DDataAsset() + { + string path = $"Assets/{UniversalProjectSettings.projectSettingsFolderPath}/Default_2D_Renderer.asset"; + if (AssetDatabase.AssetPathExists(path)) + return AssetDatabase.LoadAssetAtPath(path); + + CoreUtils.EnsureFolderTreeInAssetFilePath(path); + + var asset = Renderer2DMenus.CreateRendererAsset(path, RendererType._2DRenderer, relativePath: false) as Renderer2DData; + + EditorUtility.SetDirty(asset); + AssetDatabase.SaveAssetIfDirty(asset); + + return asset; + } + + void GetRenderers(out ScriptableRendererData[] renderers, out int defaultIndex) + { + defaultIndex = 0; + + + using (ListPool.Get(out var tmp)) + { + tmp.Add(CreateRenderer2DDataAsset()); + + // In case we need multiple renderers modify the defaultIndex and add more renderers here + // ... + + renderers = tmp.ToArray(); + } + + // Tell the asset database to regenerate the fileId, otherwise when adding the reference to the URP + // asset the fileId might not be computed and the reference might be lost. + AssetDatabase.Refresh(); + } + + protected override void SetPipelineSettings(RenderPipelineAsset asset) + { + if (asset is not UniversalRenderPipelineAsset urpAsset) + return; + + GetRenderers(out var renderers, out var defaultIndex); + urpAsset.m_RendererDataList = renderers; + urpAsset.m_DefaultRendererIndex = defaultIndex; + } + } +} diff --git a/Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DRenderSettingsConverter.cs.meta b/Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DRenderSettingsConverter.cs.meta new file mode 100644 index 00000000000..acd84f0fb6b --- /dev/null +++ b/Packages/com.unity.render-pipelines.universal/Editor/2D/Converter/BuiltInToURP2DRenderSettingsConverter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a56824d790f2d894b87761a6d3c6f176 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.universal/Editor/2D/Renderer2DMenus.cs b/Packages/com.unity.render-pipelines.universal/Editor/2D/Renderer2DMenus.cs index a1368ebfea4..c45f6561991 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/2D/Renderer2DMenus.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/2D/Renderer2DMenus.cs @@ -32,7 +32,7 @@ public override void Action(EntityId entityId, string pathName, string resourceF } } - static ScriptableRendererData CreateRendererAsset(string path, RendererType type, bool relativePath = true, string suffix = "Renderer") + internal static ScriptableRendererData CreateRendererAsset(string path, RendererType type, bool relativePath = true, string suffix = "Renderer") { string packagePath = "Packages/com.unity.render-pipelines.universal"; diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs b/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs index 7c136f098e1..a4c2551c2dc 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/Converter/Converters.cs @@ -79,7 +79,7 @@ public enum ConverterId /// /// Use this for the render settings converters. /// - [BatchModeConverterInfo(ConverterContainerId.BuiltInToURP, typeof(RenderSettingsConverter))] + [BatchModeConverterInfo(ConverterContainerId.BuiltInToURP, typeof(BuiltInToURP3DRenderSettingsConverter))] RenderSettings, /// @@ -100,6 +100,12 @@ public enum ConverterId [BatchModeConverterInfo(ConverterContainerId.BuiltInToURP2D, typeof(BuiltInToURP2DReadonlyMaterialConverter))] ReadonlyMaterial2D, + /// + /// Use this for 2D material conversion + /// + [BatchModeConverterInfo(ConverterContainerId.BuiltInToURP2D, typeof(BuiltInToURP2DRenderSettingsConverter))] + RenderSettings2D, + /// /// Use this for 3D URP material conversion /// diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/RenderSettingsConverter.cs b/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/BuiltInToURP3DRenderSettingsConverter.cs similarity index 54% rename from Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/RenderSettingsConverter.cs rename to Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/BuiltInToURP3DRenderSettingsConverter.cs index 113603a9f1a..e5e6a25ad3b 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/RenderSettingsConverter.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/BuiltInToURP3DRenderSettingsConverter.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using UnityEditor.Rendering.Converter; using UnityEngine; using UnityEngine.Categorization; @@ -9,123 +8,19 @@ namespace UnityEditor.Rendering.Universal { - [Serializable] - internal class RenderSettingsConverterItem : IRenderPipelineConverterItem - { - public int qualityLevelIndex { get; set; } - - public string name { get; set; } - - public string info { get; set; } - - public bool isEnabled { get; set; } - public string isDisabledMessage { get; set; } - - public Texture2D icon => CoreUtils.GetIconForType(); - - public void OnClicked() - { - SettingsService.OpenProjectSettings("Project/Quality"); - } - } [Serializable] [URPHelpURL("features/rp-converter")] [PipelineConverter("Built-in", "Universal Render Pipeline (Universal Renderer)")] [ElementInfo(Name = "Rendering Settings", Order = int.MinValue, Description = "This converter creates Universal Render Pipeline (URP) assets and corresponding Renderer assets, configuring their settings to match the equivalent settings from the Built-in Render Pipeline.")] - class RenderSettingsConverter : IRenderPipelineConverter + class BuiltInToURP3DRenderSettingsConverter : RenderSettingsConverter { - public void Scan(Action> onScanFinish) - { - List renderPipelineConverterItems = new (); - QualitySettings.ForEach((index, name) => - { - var item = new RenderSettingsConverterItem - { - qualityLevelIndex = index, - name = name - }; - - if (QualitySettings.renderPipeline is not UniversalRenderPipelineAsset) - { - item.isEnabled = true; - item.info = $"Create a Universal Render Pipeline Asset for Quality Level {index} ({name})"; - } - else - { - item.info = "Quality Level already references a Universal Render Pipeline Asset."; - item.isEnabled = false; - item.isDisabledMessage = item.info; - } - renderPipelineConverterItems.Add(item); - }); - - onScanFinish?.Invoke(renderPipelineConverterItems); - } + public override bool isEnabled => true; - public bool isEnabled => true; + public override string isDisabledMessage => string.Empty; - public string isDisabledMessage => string.Empty; - - public Status Convert(IRenderPipelineConverterItem item, out string message) - { - message = string.Empty; - - if (item is RenderSettingsConverterItem qualityLevelItem) - { - if (CreateURPAssetForQualityLevel(qualityLevelItem.qualityLevelIndex, out message)) - return Status.Success; - } - - return Status.Error; - } - - private bool CreateURPAssetForQualityLevel(int qualityIndex, out string message) - { - bool ok = false; - message = string.Empty; - - var currentQualityLevel = QualitySettings.GetQualityLevel(); - - QualitySettings.SetQualityLevel(qualityIndex); - - if (QualitySettings.renderPipeline is UniversalRenderPipelineAsset urpAsset) - { - message = $"Quality Level {qualityIndex} already references a Universal Render Pipeline Asset: {urpAsset.name}."; - } - else - { - var asset = CreateAsset($"{QualitySettings.names[qualityIndex]}"); - - if (asset != null) - { - // Map built-in data to the URP asset data - SetPipelineSettings(asset); - - GetRenderers(out var renderers, out var defaultIndex); - asset.m_RendererDataList = renderers; - asset.m_DefaultRendererIndex = defaultIndex; - - // Set the asset dirty to make sure that the renderer data is saved - EditorUtility.SetDirty(asset); - - QualitySettings.renderPipeline = asset; - ok = true; - } - else - { - message = "Failed to create Universal Render Pipeline Asset."; - } - } - - // Restore back the quality level - QualitySettings.SetQualityLevel(currentQualityLevel); - - return ok; - } - - UniversalRenderPipelineAsset CreateAsset(string name) + protected override RenderPipelineAsset CreateAsset(string name) { string path = $"Assets/{UniversalProjectSettings.projectSettingsFolderPath}/{name}.asset"; if (AssetDatabase.AssetPathExists(path)) @@ -157,6 +52,9 @@ UniversalRendererData CreateUniversalRendererDataAsset(RenderingPath renderingPa var asset = UniversalRenderPipelineAsset.CreateRendererAsset(path, RendererType.UniversalRenderer, relativePath: false) as UniversalRendererData; asset.renderingMode = renderingPath == RenderingPath.Forward ? RenderingMode.Forward : RenderingMode.Deferred; + EditorUtility.SetDirty(asset); + AssetDatabase.SaveAssetIfDirty(asset); + return asset; } @@ -178,10 +76,21 @@ void GetRenderers(out ScriptableRendererData[] renderers, out int defaultIndex) renderers = tmp.ToArray(); } + + // Tell the asset database to regenerate the fileId, otherwise when adding the reference to the URP + // asset the fileId might not be computed and the reference might be lost. + AssetDatabase.Refresh(); } - private void SetPipelineSettings(UniversalRenderPipelineAsset asset) + protected override void SetPipelineSettings(RenderPipelineAsset asset) { + if (asset is not UniversalRenderPipelineAsset urpAsset) + return; + + GetRenderers(out var renderers, out var defaultIndex); + urpAsset.m_RendererDataList = renderers; + urpAsset.m_DefaultRendererIndex = defaultIndex; + var targetGrp = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget); var tier = EditorGraphicsSettings.GetTierSettings(targetGrp, GraphicsTier.Tier3); @@ -202,39 +111,39 @@ private void SetPipelineSettings(UniversalRenderPipelineAsset asset) var softParticles = QualitySettings.softParticles; // General - asset.supportsCameraDepthTexture = softParticles; + urpAsset.supportsCameraDepthTexture = softParticles; // Quality - asset.supportsHDR = hdr; - asset.msaaSampleCount = msaa == 0 ? 1 : msaa; + urpAsset.supportsHDR = hdr; + urpAsset.msaaSampleCount = msaa == 0 ? 1 : msaa; // Main Light - asset.mainLightRenderingMode = pixelLightCount == 0 + urpAsset.mainLightRenderingMode = pixelLightCount == 0 ? LightRenderingMode.Disabled : LightRenderingMode.PerPixel; - asset.supportsMainLightShadows = shadows != ShadowQuality.Disable; - asset.mainLightShadowmapResolution = + urpAsset.supportsMainLightShadows = shadows != ShadowQuality.Disable; + urpAsset.mainLightShadowmapResolution = GetEquivalentMainlightShadowResolution((int)shadowResolution); // Additional Lights - asset.additionalLightsRenderingMode = pixelLightCount == 0 + urpAsset.additionalLightsRenderingMode = pixelLightCount == 0 ? LightRenderingMode.PerVertex : LightRenderingMode.PerPixel; - asset.maxAdditionalLightsCount = pixelLightCount != 0 ? Mathf.Max(0, pixelLightCount) : 4; - asset.supportsAdditionalLightShadows = shadows != ShadowQuality.Disable; - asset.additionalLightsShadowmapResolution = + urpAsset.maxAdditionalLightsCount = pixelLightCount != 0 ? Mathf.Max(0, pixelLightCount) : 4; + urpAsset.supportsAdditionalLightShadows = shadows != ShadowQuality.Disable; + urpAsset.additionalLightsShadowmapResolution = GetEquivalentAdditionalLightAtlasShadowResolution((int)shadowResolution); // Reflection Probes - asset.reflectionProbeBlending = reflectionProbeBlending; - asset.reflectionProbeBoxProjection = reflectionProbeBoxProjection; + urpAsset.reflectionProbeBlending = reflectionProbeBlending; + urpAsset.reflectionProbeBoxProjection = reflectionProbeBoxProjection; // Shadows - asset.shadowDistance = shadowDistance; - asset.shadowCascadeCount = cascadeShadows ? shadowCascadeCount : 1; - asset.cascade2Split = cascadeSplit2; - asset.cascade4Split = cascadeSplit4; - asset.supportsSoftShadows = shadows == ShadowQuality.All; + urpAsset.shadowDistance = shadowDistance; + urpAsset.shadowCascadeCount = cascadeShadows ? shadowCascadeCount : 1; + urpAsset.cascade2Split = cascadeSplit2; + urpAsset.cascade4Split = cascadeSplit4; + urpAsset.supportsSoftShadows = shadows == ShadowQuality.All; } #region HelperFunctions diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/BuiltInToURP3DRenderSettingsConverter.cs.meta b/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/BuiltInToURP3DRenderSettingsConverter.cs.meta new file mode 100644 index 00000000000..05234f2c75e --- /dev/null +++ b/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/BuiltInToURP3DRenderSettingsConverter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 932911033fe1e934bbc87b0e1d9dd74e \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/RenderSettingsConverter.cs.meta b/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/RenderSettingsConverter.cs.meta deleted file mode 100644 index e1074bd5e7c..00000000000 --- a/Packages/com.unity.render-pipelines.universal/Editor/Tools/Converters/RenderSettingsConverter.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: d641e17d0fb6a429eb81d011e79dc1ea \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/AnimationClipConverter/AnimationClipConverterTests.cs b/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/AnimationClipConverter/AnimationClipConverterTests.cs index faddef0f7eb..1d0327bb94e 100644 --- a/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/AnimationClipConverter/AnimationClipConverterTests.cs +++ b/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/AnimationClipConverter/AnimationClipConverterTests.cs @@ -112,11 +112,17 @@ public static GameObject CreatePrefabForTest(Material[] materials, AnimationClip private static Material GetDefaultDiffuse() { + if (GraphicsSettings.currentRenderPipeline is not UniversalRenderPipelineAsset) + return null; + return AssetDatabase.GetBuiltinExtraResource("Default-Diffuse.mat"); } private static Material GetURPDefaultMaterial() { + if (GraphicsSettings.currentRenderPipeline is not UniversalRenderPipelineAsset) + return null; + // Get URP default material from graphics settings return GraphicsSettings.GetRenderPipelineSettings().defaultMaterial; } diff --git a/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs b/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs index 7bb2a2f5049..17fa8e4ea24 100644 --- a/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs +++ b/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/ConvertersTests.cs @@ -114,7 +114,7 @@ public static IEnumerable TestCases() #if PPV2_EXISTS typeof(PPv2Converter), #endif - typeof(RenderSettingsConverter), + typeof(BuiltInToURP3DRenderSettingsConverter), typeof(AnimationClipConverter), typeof(BuiltInToURP3DMaterialUpgrader), typeof(BuiltInToURP3DReadonlyMaterialConverter), @@ -127,6 +127,7 @@ public static IEnumerable TestCases() ConverterFilter.Exclusive, new List { + typeof(BuiltInToURP2DRenderSettingsConverter), typeof(BuiltInToURP2DReadonlyMaterialConverter), } ).SetName("BuiltInToURP2D - When Using Exclusive filter with no converters. The filter returns everything"); diff --git a/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/RenderSettingsConverterTests.cs b/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/RenderSettingsConverterTests.cs index 6802d535033..9c0e9aa73ac 100644 --- a/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/RenderSettingsConverterTests.cs +++ b/Packages/com.unity.render-pipelines.universal/Tests/Editor/Tools/Converters/RenderSettingsConverterTests.cs @@ -50,9 +50,9 @@ public void TearDown() } [Test] - public void WhenRunningTheConverter_TheCurrent_QualityLevel_IsNowURP_AndHasEverythingProperlyAssigned() + public void WhenRunningBuiltInToURP3DRenderSettingsConverter_TheCurrent_QualityLevel_IsNowURP_AndHasEverythingProperlyAssigned() { - var renderSettingsConverter = new RenderSettingsConverter(); + var renderSettingsConverter = new BuiltInToURP3DRenderSettingsConverter(); var expectedEntry = $"[{m_QualityLevel}] {m_QualityLevelName}"; void OnScanFinished(List scanItems) @@ -62,7 +62,7 @@ void OnScanFinished(List scanItems) Assert.AreEqual(m_QualityLevel, QualitySettings.GetQualityLevel(), "Initialization did not rollback quality level"); var status = renderSettingsConverter.Convert(scanItems[m_QualityLevel], out string msg); - Assert.IsTrue(status == Status.Success, msg); + Assert.IsTrue(status != Status.Error, msg); Assert.AreEqual(m_QualityLevel, QualitySettings.GetQualityLevel(), "Run did not rollback quality level"); @@ -90,13 +90,13 @@ void OnScanFinished(List scanItems) Assert.AreEqual(expectedMainLightMode, urpAsset.mainLightRenderingMode, "mainLightRenderingMode mismatch"); Assert.AreEqual(QualitySettings.shadows != UnityEngine.ShadowQuality.Disable, urpAsset.supportsMainLightShadows, "supportsMainLightShadows mismatch"); - Assert.AreEqual(RenderSettingsConverter.GetEquivalentMainlightShadowResolution((int)QualitySettings.shadowResolution), urpAsset.mainLightShadowmapResolution, "mainLightShadowmapResolution mismatch"); + Assert.AreEqual(BuiltInToURP3DRenderSettingsConverter.GetEquivalentMainlightShadowResolution((int)QualitySettings.shadowResolution), urpAsset.mainLightShadowmapResolution, "mainLightShadowmapResolution mismatch"); var expectedAdditionalLightsMode = QualitySettings.pixelLightCount == 0 ? LightRenderingMode.PerVertex : LightRenderingMode.PerPixel; Assert.AreEqual(expectedAdditionalLightsMode, urpAsset.additionalLightsRenderingMode, "additionalLightsRenderingMode mismatch"); Assert.AreEqual(QualitySettings.pixelLightCount != 0 ? Mathf.Max(0, QualitySettings.pixelLightCount) : 4, urpAsset.maxAdditionalLightsCount, "maxAdditionalLightsCount mismatch"); Assert.AreEqual(QualitySettings.shadows != UnityEngine.ShadowQuality.Disable, urpAsset.supportsAdditionalLightShadows, "supportsAdditionalLightShadows mismatch"); - Assert.AreEqual(RenderSettingsConverter.GetEquivalentAdditionalLightAtlasShadowResolution((int)QualitySettings.shadowResolution), urpAsset.additionalLightsShadowmapResolution, "additionalLightsShadowmapResolution mismatch"); + Assert.AreEqual(BuiltInToURP3DRenderSettingsConverter.GetEquivalentAdditionalLightAtlasShadowResolution((int)QualitySettings.shadowResolution), urpAsset.additionalLightsShadowmapResolution, "additionalLightsShadowmapResolution mismatch"); Assert.AreEqual(tier.reflectionProbeBlending, urpAsset.reflectionProbeBlending, "reflectionProbeBlending mismatch"); Assert.AreEqual(tier.reflectionProbeBoxProjection, urpAsset.reflectionProbeBoxProjection, "reflectionProbeBoxProjection mismatch"); @@ -114,8 +114,37 @@ void OnScanFinished(List scanItems) } renderSettingsConverter.Scan(OnScanFinished); + } + + [Test] + public void WhenRunningBuiltInToURP2DRenderSettingsConverter_TheCurrent_QualityLevel_IsNowURP_AndHasEverythingProperlyAssigned() + { + var renderSettingsConverter = new BuiltInToURP2DRenderSettingsConverter(); + var expectedEntry = $"[{m_QualityLevel}] {m_QualityLevelName}"; + + void OnScanFinished(List scanItems) + { + Assert.IsTrue(scanItems.Count > 0, "Initialization did not found the item to convert"); + + Assert.AreEqual(m_QualityLevel, QualitySettings.GetQualityLevel(), "Initialization did not rollback quality level"); + + var status = renderSettingsConverter.Convert(scanItems[m_QualityLevel], out string msg); + Assert.IsTrue(status != Status.Error, msg); - + Assert.AreEqual(m_QualityLevel, QualitySettings.GetQualityLevel(), "Run did not rollback quality level"); + + // ---------- ASSET REFERENCE CHECK ---------- + var urpAsset = QualitySettings.renderPipeline as UniversalRenderPipelineAsset; + Assert.IsNotNull(urpAsset, "URP asset is not assigned"); + Assert.AreEqual($"Assets/{UniversalProjectSettings.projectSettingsFolderPath}/{m_QualityLevelName}.asset", AssetDatabase.GetAssetPath(urpAsset)); + + // ---------- RENDERER REFERENCE CHECK ---------- + Assert.IsNotNull(urpAsset.m_RendererDataList); + Assert.AreEqual(1, urpAsset.m_RendererDataList.Length); + Assert.AreEqual($"Assets/{UniversalProjectSettings.projectSettingsFolderPath}/Default_2D_Renderer.asset", AssetDatabase.GetAssetPath(urpAsset.m_RendererDataList[0])); + } + + renderSettingsConverter.Scan(OnScanFinished); } } From 39bba43439f8ef80b64054c5507642266d5e60ea Mon Sep 17 00:00:00 2001 From: Paul Demeulenaere Date: Tue, 27 Jan 2026 23:32:32 +0000 Subject: [PATCH 15/79] [VFX/XR] Add ForceZoomXRFactor for Tests --- .../Runtime/ForceZoomXRFactor.cs | 27 ++ .../Runtime/ForceZoomXRFactor.cs.meta | 2 + .../Scenes/015_FixedTime.unity | 204 ++++++++-- .../Scenes/016_DirectLink.unity | 146 ++++++- .../Scenes/017_MaterialQueueOffset.unity | 373 ++++++++++++++++-- .../Scenes/025_Flipbook.unity | 171 +++----- .../Scenes/026_InstancingGPUevents.unity | 134 ++++++- .../GraphicsTests/103_LitDeferred.unity | 73 +++- .../Assets/GraphicsTests/103_LitForward.unity | 73 +++- .../GraphicsTests/105_MotionVectors.unity | 50 ++- .../GraphicsTests/106_URPDecalsReceiver.unity | 49 ++- 11 files changed, 1055 insertions(+), 247 deletions(-) create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Runtime/ForceZoomXRFactor.cs create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Runtime/ForceZoomXRFactor.cs.meta diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Runtime/ForceZoomXRFactor.cs b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Runtime/ForceZoomXRFactor.cs new file mode 100644 index 00000000000..7fb84aef30c --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Runtime/ForceZoomXRFactor.cs @@ -0,0 +1,27 @@ +using System; +using UnityEngine; +using UnityEngine.XR; + +namespace Unity.Testing.VisualEffectGraph +{ + public class ForceZoomXRFactor : MonoBehaviour + { + public float m_ForceZoomXRFactor = 1.0f; + float m_OriginalZoomXRFactor; + + void OnEnable() + { + m_OriginalZoomXRFactor = XRDisplaySubsystem.activeSubsystemOrStub.fovZoomFactor; + } + + void Update() + { + XRDisplaySubsystem.activeSubsystemOrStub.fovZoomFactor = m_ForceZoomXRFactor; + } + + void OnDisable() + { + XRDisplaySubsystem.activeSubsystemOrStub.fovZoomFactor = m_OriginalZoomXRFactor; + } + } +} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Runtime/ForceZoomXRFactor.cs.meta b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Runtime/ForceZoomXRFactor.cs.meta new file mode 100644 index 00000000000..e8ce48557fc --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Runtime/ForceZoomXRFactor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7f6457b9aeba46e47bd6f0bf5c9415df \ No newline at end of file diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/015_FixedTime.unity b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/015_FixedTime.unity index 576af39be39..43a80be109f 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/015_FixedTime.unity +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/015_FixedTime.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: 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 @@ -97,14 +93,14 @@ LightmapSettings: m_ExportTrainingData: 0 m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 0} + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} m_LightingSettings: {fileID: 0} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -144,6 +140,7 @@ GameObject: m_IsActive: 1 --- !u!73398921 &53466613 VFXRenderer: + serializedVersion: 1 m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -159,13 +156,13 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 - m_Materials: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -183,9 +180,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &53466614 VisualEffect: m_ObjectHideFlags: 0 @@ -199,6 +198,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 879 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -230,12 +231,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 53466612} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -1.2, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &53466616 MonoBehaviour: @@ -306,6 +308,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -327,9 +334,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!4 &83782607 Transform: @@ -338,12 +347,58 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 83782604} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.01, y: 0.675, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &250668981 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 250668983} + - component: {fileID: 250668982} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &250668982 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250668981} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::Unity.Testing.VisualEffectGraph.ForceZoomXRFactor + m_ForceZoomXRFactor: 2.485 +--- !u!4 &250668983 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250668981} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &719192467 GameObject: @@ -369,12 +424,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 719192467} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &719192469 MonoBehaviour: @@ -391,14 +447,15 @@ MonoBehaviour: ImageComparisonSettings: TargetWidth: 512 TargetHeight: 384 + TargetMSAASamples: 1 PerPixelCorrectnessThreshold: 0 PerPixelGammaThreshold: 0.003921569 PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 AverageCorrectnessThreshold: 0.0005 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 - ImageResolution: 0 ActiveImageTests: 1 ActivePixelTests: 7 captureFrameRate: 5 @@ -425,6 +482,7 @@ GameObject: m_IsActive: 1 --- !u!73398921 &1143506104 VFXRenderer: + serializedVersion: 1 m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -440,13 +498,13 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 - m_Materials: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -464,9 +522,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1143506105 VisualEffect: m_ObjectHideFlags: 0 @@ -480,6 +540,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 879 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -511,12 +573,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1143506103} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1.2, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1314763259 GameObject: @@ -559,9 +622,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -595,12 +666,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1314763259} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2.5, y: 0.05, z: -5} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1314763263 MonoBehaviour: @@ -624,6 +696,7 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 1 m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 m_RenderPostProcessing: 0 m_Antialiasing: 0 m_AntialiasingQuality: 2 @@ -631,8 +704,19 @@ MonoBehaviour: m_Dithering: 0 m_ClearDepth: 1 m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 m_Version: 2 --- !u!1 &1340493279 GameObject: @@ -654,6 +738,7 @@ GameObject: m_IsActive: 1 --- !u!73398921 &1340493280 VFXRenderer: + serializedVersion: 1 m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -669,13 +754,13 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 - m_Materials: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -693,9 +778,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1340493281 VisualEffect: m_ObjectHideFlags: 0 @@ -709,6 +796,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 879 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -740,12 +829,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1340493279} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1899492880 GameObject: @@ -804,6 +894,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -825,9 +920,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!4 &1899492883 Transform: @@ -836,12 +933,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1899492880} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.01, y: 1.875, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1961900611 GameObject: @@ -868,15 +966,14 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1961900611} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 13 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 m_SpotAngle: 30 m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 + m_CookieSize2D: {x: 10, y: 10} m_Shadows: m_Type: 2 m_Resolution: -1 @@ -920,8 +1017,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 - m_ShadowRadius: 0 + m_ForceVisible: 0 + m_ShapeRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1961900613 Transform: m_ObjectHideFlags: 0 @@ -929,12 +1030,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1961900611} + serializedVersion: 2 m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!1 &2054412067 GameObject: @@ -993,6 +1095,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1014,9 +1121,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!4 &2054412070 Transform: @@ -1025,10 +1134,25 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2054412067} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.01, y: -0.525, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1314763262} + - {fileID: 1961900613} + - {fileID: 1143506106} + - {fileID: 1340493282} + - {fileID: 53466615} + - {fileID: 1899492883} + - {fileID: 83782607} + - {fileID: 2054412070} + - {fileID: 719192468} + - {fileID: 250668983} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/016_DirectLink.unity b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/016_DirectLink.unity index cfe48339972..ddfdc2118ba 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/016_DirectLink.unity +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/016_DirectLink.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: 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 @@ -104,7 +100,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -160,6 +156,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -179,9 +180,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &106874543 VisualEffect: m_ObjectHideFlags: 0 @@ -195,6 +198,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 1456 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -226,13 +231,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 106874541} + serializedVersion: 2 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: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &106874545 MonoBehaviour: @@ -246,6 +251,51 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8158b13242aab0646b5d3814ac55a6ab, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &481798935 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 481798937} + - component: {fileID: 481798936} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &481798936 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 481798935} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::Unity.Testing.VisualEffectGraph.ForceZoomXRFactor + m_ForceZoomXRFactor: 6.5625 +--- !u!4 &481798937 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 481798935} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &700841549 GameObject: m_ObjectHideFlags: 0 @@ -282,6 +332,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -301,9 +356,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &700841551 VisualEffect: m_ObjectHideFlags: 0 @@ -317,6 +374,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 1 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -348,13 +407,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 700841549} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 1.25, y: 0.87, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &863513653 GameObject: @@ -388,14 +447,15 @@ MonoBehaviour: ImageComparisonSettings: TargetWidth: 768 TargetHeight: 384 + TargetMSAASamples: 1 PerPixelCorrectnessThreshold: 0 PerPixelGammaThreshold: 0.003921569 PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 AverageCorrectnessThreshold: 0.0005 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 - ImageResolution: 0 ActiveImageTests: 1 ActivePixelTests: 7 captureFrameRate: 30 @@ -409,13 +469,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 863513653} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.021352861, y: 0.1538854, z: -0.12544367} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &981572541 GameObject: @@ -454,6 +514,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -473,9 +538,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &981572543 VisualEffect: m_ObjectHideFlags: 0 @@ -489,6 +556,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 1254 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -520,13 +589,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 981572541} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &981572545 MonoBehaviour: @@ -583,9 +652,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -619,13 +696,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1349057642} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 1.05, y: 0, z: -8} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1349057646 MonoBehaviour: @@ -685,14 +762,19 @@ MonoBehaviour: stopNaNs: 0 taaSharpenStrength: 0.5 TAAQuality: 1 + taaSharpenMode: 0 + taaRingingReduction: 0 taaHistorySharpening: 0.35 taaAntiFlicker: 0.5 taaMotionVectorRejection: 0 taaAntiHistoryRinging: 0 + taaBaseBlendFactor: 0.875 + taaJitterScale: 1 physicalParameters: m_Iso: 200 m_ShutterSpeed: 0.005 m_Aperture: 16 + m_FocusDistance: 10 m_BladeCount: 5 m_Curvature: {x: 2, y: 11} m_BarrelClipping: 0.25 @@ -707,7 +789,25 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 4294967295 hasPersistentHistory: 0 + screenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + screenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + allowDeepLearningSuperSampling: 1 + deepLearningSuperSamplingUseCustomQualitySettings: 0 + deepLearningSuperSamplingQuality: 0 + deepLearningSuperSamplingUseCustomAttributes: 0 + deepLearningSuperSamplingUseOptimalSettings: 1 + deepLearningSuperSamplingSharpening: 0 + allowFidelityFX2SuperResolution: 1 + fidelityFX2SuperResolutionUseCustomQualitySettings: 0 + fidelityFX2SuperResolutionQuality: 0 + fidelityFX2SuperResolutionUseCustomAttributes: 0 + fidelityFX2SuperResolutionUseOptimalSettings: 1 + fidelityFX2SuperResolutionEnableSharpening: 0 + fidelityFX2SuperResolutionSharpening: 0 + fsrOverrideSharpness: 0 + fsrSharpness: 0.92 exposureTarget: {fileID: 0} + materialMipBias: 0 m_RenderingPathCustomFrameSettings: bitDatas: data1: 72198262773251917 @@ -721,13 +821,15 @@ MonoBehaviour: sssQualityMode: 0 sssQualityLevel: 0 sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 9 materialQuality: 0 renderingPathCustomFrameSettingsOverrideMask: mask: data1: 0 data2: 0 defaultFrameSettings: 0 - m_Version: 7 + m_Version: 9 m_ObsoleteRenderingPath: 0 m_ObsoleteFrameSettings: overrides: 0 @@ -774,3 +876,13 @@ MonoBehaviour: enableFptlForForwardOpaque: 0 enableBigTilePrepass: 0 isFptlEnabled: 0 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1349057645} + - {fileID: 981572544} + - {fileID: 106874544} + - {fileID: 700841552} + - {fileID: 863513655} + - {fileID: 481798937} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/017_MaterialQueueOffset.unity b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/017_MaterialQueueOffset.unity index 46efb530b7c..c7878a6eda9 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/017_MaterialQueueOffset.unity +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/017_MaterialQueueOffset.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: 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 @@ -104,7 +100,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -159,6 +155,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -178,9 +179,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &2378854 VisualEffect: m_ObjectHideFlags: 0 @@ -194,6 +197,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -231,12 +236,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2378852} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2, y: 0.25, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 14 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &251177872 GameObject: @@ -295,6 +301,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_Materials: @@ -316,9 +327,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!4 &251177875 Transform: @@ -327,12 +340,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 251177872} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -3, y: 4, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &352892806 GameObject: @@ -370,6 +384,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -389,9 +408,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &352892808 VisualEffect: m_ObjectHideFlags: 0 @@ -405,6 +426,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -442,12 +465,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 352892806} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2, y: -1.5, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 19 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &445338189 GameObject: @@ -485,6 +509,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -504,9 +533,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &445338191 VisualEffect: m_ObjectHideFlags: 0 @@ -520,6 +551,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -557,12 +590,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 445338189} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.25, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 12 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &634099875 GameObject: @@ -600,6 +634,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -619,9 +658,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &634099877 VisualEffect: m_ObjectHideFlags: 0 @@ -635,6 +676,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -672,12 +715,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 634099875} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -2, y: -1.5, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 15 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &643830845 GameObject: @@ -736,6 +780,11 @@ MeshRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_Materials: @@ -757,9 +806,11 @@ MeshRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 m_AdditionalVertexStreams: {fileID: 0} --- !u!4 &643830848 Transform: @@ -768,12 +819,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 643830845} + serializedVersion: 2 m_LocalRotation: {x: -0, y: -0, z: -0.70710576, w: 0.70710784} m_LocalPosition: {x: -3.25, y: 3.25, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} --- !u!1 &694315312 GameObject: @@ -811,6 +863,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -830,9 +887,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &694315314 VisualEffect: m_ObjectHideFlags: 0 @@ -846,6 +905,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -883,12 +944,58 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 694315312} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -2, y: 2, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &700045782 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 700045784} + - component: {fileID: 700045783} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &700045783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700045782} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::Unity.Testing.VisualEffectGraph.ForceZoomXRFactor + m_ForceZoomXRFactor: 2.4 +--- !u!4 &700045784 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700045782} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &757104142 GameObject: @@ -926,6 +1033,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -945,9 +1057,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &757104144 VisualEffect: m_ObjectHideFlags: 0 @@ -961,6 +1075,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -998,12 +1114,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 757104142} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -1.5, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 17 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &774261207 GameObject: @@ -1041,6 +1158,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1060,9 +1182,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &774261209 VisualEffect: m_ObjectHideFlags: 0 @@ -1076,6 +1200,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1113,12 +1239,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 774261207} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 2, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &778711200 GameObject: @@ -1156,6 +1283,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1175,9 +1307,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &778711202 VisualEffect: m_ObjectHideFlags: 0 @@ -1191,6 +1325,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1228,12 +1364,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 778711200} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2, y: -1.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 20 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &841847626 GameObject: @@ -1271,6 +1408,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1290,9 +1432,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &841847628 VisualEffect: m_ObjectHideFlags: 0 @@ -1306,6 +1450,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1343,12 +1489,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 841847626} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -2, y: 0.25, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &849401652 GameObject: @@ -1386,6 +1533,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1405,9 +1557,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &849401654 VisualEffect: m_ObjectHideFlags: 0 @@ -1421,6 +1575,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1458,12 +1614,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 849401652} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2, y: 2, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &958602161 GameObject: @@ -1501,6 +1658,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1520,9 +1682,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &958602163 VisualEffect: m_ObjectHideFlags: 0 @@ -1536,6 +1700,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1573,12 +1739,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 958602161} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -2, y: 0.25, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &991040909 GameObject: @@ -1616,6 +1783,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1635,9 +1807,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &991040911 VisualEffect: m_ObjectHideFlags: 0 @@ -1651,6 +1825,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1688,12 +1864,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 991040909} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2, y: 2, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1413211663 GameObject: @@ -1731,6 +1908,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1750,9 +1932,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1413211665 VisualEffect: m_ObjectHideFlags: 0 @@ -1766,6 +1950,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1803,12 +1989,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1413211663} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -2, y: -1.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 16 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1553119995 GameObject: @@ -1846,6 +2033,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1865,9 +2057,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1553119997 VisualEffect: m_ObjectHideFlags: 0 @@ -1881,6 +2075,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1918,12 +2114,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1553119995} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 2, y: 0.25, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 13 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1571596301 GameObject: @@ -1967,9 +2164,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -2003,12 +2208,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1571596301} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -0.3, y: 0.3, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1571596305 MonoBehaviour: @@ -2035,14 +2241,19 @@ MonoBehaviour: stopNaNs: 0 taaSharpenStrength: 0.5 TAAQuality: 1 + taaSharpenMode: 0 + taaRingingReduction: 0 taaHistorySharpening: 0.35 taaAntiFlicker: 0.5 taaMotionVectorRejection: 0 taaAntiHistoryRinging: 0 + taaBaseBlendFactor: 0.875 + taaJitterScale: 1 physicalParameters: m_Iso: 200 m_ShutterSpeed: 0.005 m_Aperture: 16 + m_FocusDistance: 10 m_BladeCount: 5 m_Curvature: {x: 2, y: 11} m_BarrelClipping: 0.25 @@ -2057,7 +2268,25 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 4294967295 hasPersistentHistory: 0 + screenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + screenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + allowDeepLearningSuperSampling: 1 + deepLearningSuperSamplingUseCustomQualitySettings: 0 + deepLearningSuperSamplingQuality: 0 + deepLearningSuperSamplingUseCustomAttributes: 0 + deepLearningSuperSamplingUseOptimalSettings: 1 + deepLearningSuperSamplingSharpening: 0 + allowFidelityFX2SuperResolution: 1 + fidelityFX2SuperResolutionUseCustomQualitySettings: 0 + fidelityFX2SuperResolutionQuality: 0 + fidelityFX2SuperResolutionUseCustomAttributes: 0 + fidelityFX2SuperResolutionUseOptimalSettings: 1 + fidelityFX2SuperResolutionEnableSharpening: 0 + fidelityFX2SuperResolutionSharpening: 0 + fsrOverrideSharpness: 0 + fsrSharpness: 0.92 exposureTarget: {fileID: 0} + materialMipBias: 0 m_RenderingPathCustomFrameSettings: bitDatas: data1: 72198262773251917 @@ -2071,13 +2300,15 @@ MonoBehaviour: sssQualityMode: 0 sssQualityLevel: 0 sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 9 materialQuality: 0 renderingPathCustomFrameSettingsOverrideMask: mask: data1: 0 data2: 0 defaultFrameSettings: 0 - m_Version: 7 + m_Version: 9 m_ObsoleteRenderingPath: 0 m_ObsoleteFrameSettings: overrides: 0 @@ -2146,6 +2377,7 @@ MonoBehaviour: serializedVersion: 2 m_Bits: 1 m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 m_RenderPostProcessing: 0 m_Antialiasing: 0 m_AntialiasingQuality: 2 @@ -2153,8 +2385,19 @@ MonoBehaviour: m_Dithering: 0 m_ClearDepth: 1 m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 m_Version: 2 --- !u!1 &1669786123 GameObject: @@ -2192,6 +2435,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -2211,9 +2459,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1669786125 VisualEffect: m_ObjectHideFlags: 0 @@ -2227,6 +2477,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -2264,12 +2516,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1669786123} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -2, y: 2, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1907205427 GameObject: @@ -2307,6 +2560,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -2326,9 +2584,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1907205429 VisualEffect: m_ObjectHideFlags: 0 @@ -2342,6 +2602,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -2379,12 +2641,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1907205427} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: -1.5, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 18 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1959845158 GameObject: @@ -2422,6 +2685,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -2441,9 +2709,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1959845160 VisualEffect: m_ObjectHideFlags: 0 @@ -2457,6 +2727,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -2494,12 +2766,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1959845158} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 2, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2007294437 GameObject: @@ -2537,6 +2810,11 @@ VFXRenderer: m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 257 m_RendererPriority: 0 m_StaticBatchInfo: @@ -2556,9 +2834,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &2007294439 VisualEffect: m_ObjectHideFlags: 0 @@ -2572,6 +2852,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -2609,10 +2891,37 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2007294437} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0.25, z: -0.75} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 11 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1571596304} + - {fileID: 251177875} + - {fileID: 643830848} + - {fileID: 694315315} + - {fileID: 1669786126} + - {fileID: 774261210} + - {fileID: 1959845161} + - {fileID: 849401655} + - {fileID: 991040912} + - {fileID: 841847629} + - {fileID: 958602164} + - {fileID: 2007294440} + - {fileID: 445338192} + - {fileID: 1553119998} + - {fileID: 2378855} + - {fileID: 634099878} + - {fileID: 1413211666} + - {fileID: 757104145} + - {fileID: 1907205430} + - {fileID: 352892809} + - {fileID: 778711203} + - {fileID: 700045784} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/025_Flipbook.unity b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/025_Flipbook.unity index 39ae014ea11..71177ff56fe 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/025_Flipbook.unity +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/025_Flipbook.unity @@ -38,12 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -150,126 +150,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 23c1ce4fb46143f46bc5cb5224c934f6, type: 3} m_Name: m_EditorClassIdentifier: - clearColorMode: 0 - backgroundColorHDR: {r: 0.025, g: 0.07, b: 0.19, a: 0} - clearDepth: 1 - volumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - volumeAnchorOverride: {fileID: 0} - antialiasing: 0 - SMAAQuality: 2 - dithering: 0 - stopNaNs: 0 - taaSharpenStrength: 0.5 - TAAQuality: 1 - taaSharpenMode: 0 - taaRingingReduction: 0 - taaHistorySharpening: 0.35 - taaAntiFlicker: 0.5 - taaMotionVectorRejection: 0 - taaAntiHistoryRinging: 0 - taaBaseBlendFactor: 0.875 - taaJitterScale: 1 - physicalParameters: - m_Iso: 200 - m_ShutterSpeed: 0.005 - m_Aperture: 16 - m_FocusDistance: 10 - m_BladeCount: 5 - m_Curvature: {x: 2, y: 11} - m_BarrelClipping: 0.25 - m_Anamorphism: 0 - flipYMode: 0 - xrRendering: 1 - fullscreenPassthrough: 0 - allowDynamicResolution: 0 - customRenderingSettings: 0 - invertFaceCulling: 0 - probeLayerMask: - serializedVersion: 2 - m_Bits: 4294967295 - hasPersistentHistory: 0 - screenSizeOverride: {x: 0, y: 0, z: 0, w: 0} - screenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} - allowDeepLearningSuperSampling: 1 - deepLearningSuperSamplingUseCustomQualitySettings: 0 - deepLearningSuperSamplingQuality: 0 - deepLearningSuperSamplingUseCustomAttributes: 0 - deepLearningSuperSamplingUseOptimalSettings: 1 - deepLearningSuperSamplingSharpening: 0 - fsrOverrideSharpness: 0 - fsrSharpness: 0.92 - exposureTarget: {fileID: 0} - materialMipBias: 0 - m_RenderingPathCustomFrameSettings: - bitDatas: - data1: 5770166122053453 - data2: 13799030890350739480 - lodBias: 1 - lodBiasMode: 0 - lodBiasQualityLevel: 0 - maximumLODLevel: 0 - maximumLODLevelMode: 0 - maximumLODLevelQualityLevel: 0 - sssQualityMode: 0 - sssQualityLevel: 0 - sssCustomSampleBudget: 20 - sssCustomDownsampleSteps: 0 - msaaMode: 1 - materialQuality: 0 - renderingPathCustomFrameSettingsOverrideMask: - mask: - data1: 0 - data2: 0 - defaultFrameSettings: 0 - m_Version: 9 - m_ObsoleteRenderingPath: 0 - m_ObsoleteFrameSettings: - overrides: 0 - enableShadow: 0 - enableContactShadows: 0 - enableShadowMask: 0 - enableSSR: 0 - enableSSAO: 0 - enableSubsurfaceScattering: 0 - enableTransmission: 0 - enableAtmosphericScattering: 0 - enableVolumetrics: 0 - enableReprojectionForVolumetrics: 0 - enableLightLayers: 0 - enableExposureControl: 1 - diffuseGlobalDimmer: 0 - specularGlobalDimmer: 0 - shaderLitMode: 0 - enableDepthPrepassWithDeferredRendering: 0 - enableTransparentPrepass: 0 - enableMotionVectors: 0 - enableObjectMotionVectors: 0 - enableDecals: 0 - enableRoughRefraction: 0 - enableTransparentPostpass: 0 - enableDistortion: 0 - enablePostprocess: 0 - enableOpaqueObjects: 0 - enableTransparentObjects: 0 - enableRealtimePlanarReflection: 0 - enableMSAA: 0 - enableAsyncCompute: 0 - runLightListAsync: 0 - runSSRAsync: 0 - runSSAOAsync: 0 - runContactShadowsAsync: 0 - runVolumeVoxelizationAsync: 0 - lightLoopSettings: - overrides: 0 - enableDeferredTileAndCluster: 0 - enableComputeLightEvaluation: 0 - enableComputeLightVariants: 0 - enableComputeMaterialVariants: 0 - enableFptlForForwardOpaque: 0 - enableBigTilePrepass: 0 - isFptlEnabled: 0 --- !u!81 &169116305 AudioListener: m_ObjectHideFlags: 0 @@ -551,7 +431,6 @@ MonoBehaviour: IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 - ImageResolution: 0 ActiveImageTests: 1 ActivePixelTests: -1 captureFrameRate: 30 @@ -573,6 +452,51 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1871682020 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1871682022} + - component: {fileID: 1871682021} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1871682021 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1871682020} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::Unity.Testing.VisualEffectGraph.ForceZoomXRFactor + m_ForceZoomXRFactor: 1.575 +--- !u!4 &1871682022 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1871682020} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -580,3 +504,4 @@ SceneRoots: - {fileID: 169116307} - {fileID: 370434960} - {fileID: 497558994} + - {fileID: 1871682022} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/026_InstancingGPUevents.unity b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/026_InstancingGPUevents.unity index 6829f71718f..fd896d9fb4e 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/026_InstancingGPUevents.unity +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/026_InstancingGPUevents.unity @@ -38,12 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -158,6 +158,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -177,9 +179,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &184803744 VisualEffect: m_ObjectHideFlags: 0 @@ -194,6 +198,7 @@ VisualEffect: m_StartSeed: 7 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -264,17 +269,23 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} m_Name: m_EditorClassIdentifier: - m_Version: 3 m_UsePipelineSettings: 1 m_AdditionalLightsShadowResolutionTier: 2 - m_LightLayerMask: 1 - m_RenderingLayers: 1 m_CustomShadowLayers: 0 - m_ShadowLayerMask: 1 - m_ShadowRenderingLayers: 1 m_LightCookieSize: {x: 1, y: 1} m_LightCookieOffset: {x: 0, y: 0} m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 --- !u!108 &203844588 Light: m_ObjectHideFlags: 0 @@ -283,14 +294,14 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 203844586} m_Enabled: 1 - serializedVersion: 11 + serializedVersion: 13 m_Type: 1 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 100000 m_Range: 10 m_SpotAngle: 30 m_InnerSpotAngle: 21.80208 - m_CookieSize: 10 + m_CookieSize2D: {x: 10, y: 10} m_Shadows: m_Type: 2 m_Resolution: -1 @@ -335,7 +346,7 @@ Light: m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 m_ForceVisible: 0 - m_ShadowRadius: 0 + m_ShapeRadius: 0 m_ShadowAngle: 0 m_LightUnit: 2 m_LuxAtDistance: 1 @@ -406,6 +417,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -425,9 +438,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &467450075 VisualEffect: m_ObjectHideFlags: 0 @@ -442,6 +457,7 @@ VisualEffect: m_StartSeed: 2 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -520,6 +536,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -539,9 +557,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &671625622 VisualEffect: m_ObjectHideFlags: 0 @@ -556,6 +576,7 @@ VisualEffect: m_StartSeed: 3 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -634,6 +655,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -653,9 +676,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &773097854 VisualEffect: m_ObjectHideFlags: 0 @@ -670,6 +695,7 @@ VisualEffect: m_StartSeed: 0 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -764,7 +790,6 @@ MonoBehaviour: m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 - m_Version: 2 m_TaaSettings: m_Quality: 3 m_FrameInfluence: 0.1 @@ -772,6 +797,7 @@ MonoBehaviour: m_MipBias: 0 m_VarianceClampScale: 0.9 m_ContrastAdaptiveSharpening: 0 + m_Version: 2 --- !u!81 &961739751 AudioListener: m_ObjectHideFlags: 0 @@ -885,6 +911,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -904,9 +932,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1003594904 VisualEffect: m_ObjectHideFlags: 0 @@ -921,6 +951,7 @@ VisualEffect: m_StartSeed: 6 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -999,6 +1030,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1018,9 +1051,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1136237268 VisualEffect: m_ObjectHideFlags: 0 @@ -1035,6 +1070,7 @@ VisualEffect: m_StartSeed: 5 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1116,6 +1152,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1135,9 +1173,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1185128606 VisualEffect: m_ObjectHideFlags: 0 @@ -1152,6 +1192,7 @@ VisualEffect: m_StartSeed: 4 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1230,6 +1271,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1249,9 +1292,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1379448521 VisualEffect: m_ObjectHideFlags: 0 @@ -1266,6 +1311,7 @@ VisualEffect: m_StartSeed: 3 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1396,6 +1442,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1415,9 +1463,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1685802244 VisualEffect: m_ObjectHideFlags: 0 @@ -1432,6 +1482,7 @@ VisualEffect: m_StartSeed: 2 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1513,6 +1564,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1532,9 +1585,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1805329495 VisualEffect: m_ObjectHideFlags: 0 @@ -1549,6 +1604,7 @@ VisualEffect: m_StartSeed: 1 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1627,6 +1683,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1646,9 +1704,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &1985236639 VisualEffect: m_ObjectHideFlags: 0 @@ -1663,6 +1723,7 @@ VisualEffect: m_StartSeed: 0 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1741,6 +1802,8 @@ VFXRenderer: m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_StaticBatchInfo: @@ -1760,9 +1823,11 @@ VFXRenderer: m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_MaskInteraction: 0 --- !u!2083052967 &2030789051 VisualEffect: m_ObjectHideFlags: 0 @@ -1777,6 +1842,7 @@ VisualEffect: m_StartSeed: 1 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -1819,6 +1885,51 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2105216048 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2105216050} + - component: {fileID: 2105216049} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2105216049 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105216048} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::Unity.Testing.VisualEffectGraph.ForceZoomXRFactor + m_ForceZoomXRFactor: 1.8 +--- !u!4 &2105216050 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2105216048} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -1830,3 +1941,4 @@ SceneRoots: - {fileID: 2030789052} - {fileID: 467450076} - {fileID: 671625623} + - {fileID: 2105216050} diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/103_LitDeferred.unity b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/103_LitDeferred.unity index 125c8d0a258..e4b741f1646 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/103_LitDeferred.unity +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/103_LitDeferred.unity @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -120,6 +119,51 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &1136658209 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1136658211} + - component: {fileID: 1136658210} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1136658210 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1136658209} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::Unity.Testing.VisualEffectGraph.ForceZoomXRFactor + m_ForceZoomXRFactor: 11.578 +--- !u!4 &1136658211 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1136658209} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1884987748 GameObject: m_ObjectHideFlags: 0 @@ -205,13 +249,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1884987748} + serializedVersion: 2 m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079} m_LocalPosition: {x: 0.5, y: 7, z: -6.525} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0} --- !u!114 &1884987752 MonoBehaviour: @@ -249,14 +293,14 @@ MonoBehaviour: m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 - m_Version: 2 m_TaaSettings: - quality: 3 - frameInfluence: 0.1 - jitterScale: 1 - mipBias: 0 - varianceClampScale: 0.9 - contrastAdaptiveSharpening: 0 + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 --- !u!1001 &1853057717524559733 PrefabInstance: m_ObjectHideFlags: 0 @@ -330,3 +374,10 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0cc0fb83d45e38740b87140c108e4a9c, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1884987751} + - {fileID: 1853057717524559733} + - {fileID: 1136658211} diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/103_LitForward.unity b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/103_LitForward.unity index f4cd15c1b65..28c09dd54ba 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/103_LitForward.unity +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/103_LitForward.unity @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -120,6 +119,51 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &1725086365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1725086367} + - component: {fileID: 1725086366} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1725086366 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725086365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::ForceZoomXRFactor + m_ForceZoomXRFactor: 14.4725 +--- !u!4 &1725086367 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1725086365} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1884987748 GameObject: m_ObjectHideFlags: 0 @@ -205,13 +249,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1884987748} + serializedVersion: 2 m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079} m_LocalPosition: {x: 0.5, y: 7, z: -6.525} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0} --- !u!114 &1884987752 MonoBehaviour: @@ -249,14 +293,14 @@ MonoBehaviour: m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 - m_Version: 2 m_TaaSettings: - quality: 3 - frameInfluence: 0.1 - jitterScale: 1 - mipBias: 0 - varianceClampScale: 0.9 - contrastAdaptiveSharpening: 0 + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 + m_Version: 2 --- !u!1001 &1853057717524559733 PrefabInstance: m_ObjectHideFlags: 0 @@ -330,3 +374,10 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 0cc0fb83d45e38740b87140c108e4a9c, type: 3} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1884987751} + - {fileID: 1853057717524559733} + - {fileID: 1725086367} diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/105_MotionVectors.unity b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/105_MotionVectors.unity index aeecf252c3c..89edc034de7 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/105_MotionVectors.unity +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/105_MotionVectors.unity @@ -200,6 +200,7 @@ VisualEffect: m_StartSeed: 0 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -5116,6 +5117,51 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!1 &815952495 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 815952497} + - component: {fileID: 815952496} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &815952496 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 815952495} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::ForceZoomXRFactor + m_ForceZoomXRFactor: 4.59375 +--- !u!4 &815952497 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 815952495} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1130978035 GameObject: m_ObjectHideFlags: 0 @@ -5294,7 +5340,6 @@ MonoBehaviour: IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 - ImageResolution: 0 ActiveImageTests: 1 ActivePixelTests: -1 captureFrameRate: 60 @@ -5524,6 +5569,7 @@ VisualEffect: m_StartSeed: 0 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -5627,6 +5673,7 @@ VisualEffect: m_StartSeed: 0 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -5676,3 +5723,4 @@ SceneRoots: - {fileID: 1505558167} - {fileID: 427587298} - {fileID: 768272105} + - {fileID: 815952497} diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/106_URPDecalsReceiver.unity b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/106_URPDecalsReceiver.unity index 05c080581f5..a3ae86e96c1 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/106_URPDecalsReceiver.unity +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/106_URPDecalsReceiver.unity @@ -475,6 +475,7 @@ VisualEffect: m_StartSeed: 1234 m_ResetSeedOnPlay: 0 m_AllowInstancing: 1 + m_ReleaseInstanceOnDisable: 0 m_ResourceVersion: 1 m_PropertySheet: m_Float: @@ -797,6 +798,51 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1085746395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1085746397} + - component: {fileID: 1085746396} + m_Layer: 0 + m_Name: ForceZoomXRFactor + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1085746396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085746395} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7f6457b9aeba46e47bd6f0bf5c9415df, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.Testing.VisualEffectGraph::ForceZoomXRFactor + m_ForceZoomXRFactor: 1.70625 +--- !u!4 &1085746397 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1085746395} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1772279402 GameObject: m_ObjectHideFlags: 0 @@ -1056,7 +1102,6 @@ MonoBehaviour: IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 - ImageResolution: 0 ActiveImageTests: 1 ActivePixelTests: 7 captureFrameRate: 20 @@ -1136,6 +1181,7 @@ MonoBehaviour: m_Offset: {x: 0, y: 0, z: 0.25} m_Size: {x: 1, y: 0.7, z: 0.5} m_FadeFactor: 1 + m_VisibleInScene: 1 version: 1 m_DecalLayerMask: 1 --- !u!1 &1931618844 @@ -1610,3 +1656,4 @@ SceneRoots: - {fileID: 718133004} - {fileID: 1781271295} - {fileID: 1826003500} + - {fileID: 1085746397} From 0b0fa11acdcc2b22e31b66b7f7597160bf4ea923 Mon Sep 17 00:00:00 2001 From: Esmeralda Salamone Date: Wed, 28 Jan 2026 06:36:12 +0000 Subject: [PATCH 16/79] [ShaderGraph] Fix swizzle mask regression plus some other minor issues --- .../Editor/Data/Nodes/Channel/SwizzleNode.cs | 2 +- .../Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs | 2 +- .../Editor/Resources/Styles/Controls/ChannelEnumControlView.uss | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Channel/SwizzleNode.cs b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Channel/SwizzleNode.cs index 3465b482fbd..210b7c7604a 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Channel/SwizzleNode.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Channel/SwizzleNode.cs @@ -102,7 +102,7 @@ public sealed override void UpdateNodeAfterDeserialization() int outputLength = _maskInput.Length; int inputLength = 1; - foreach(var c in _maskInput) + foreach(var c in _maskInput.ToLowerInvariant()) { switch (c) { diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs index 191d19c50cc..0ea843f4439 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/PropertyDrawers/ShaderInputPropertyDrawer.cs @@ -1997,7 +1997,7 @@ void KeywordAddCallbacks() else if (int.TryParse(displayName, out int intVal) || float.TryParse(displayName, out float floatVal)) Debug.LogWarning("Invalid display name. Display names cannot be valid integer or floating point numbers."); else - keyword.entries[index] = new KeywordEntry(GetFirstUnusedKeywordID(), displayName, referenceName); + keyword.entries[index] = new KeywordEntry(entry.id, displayName, referenceName); this._postChangeValueCallback(true); } diff --git a/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/ChannelEnumControlView.uss b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/ChannelEnumControlView.uss index 6db5b0fefcb..26dce472e2d 100644 --- a/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/ChannelEnumControlView.uss +++ b/Packages/com.unity.shadergraph/Editor/Resources/Styles/Controls/ChannelEnumControlView.uss @@ -14,7 +14,7 @@ ChannelEnumControlView > Label { max-width: 100px; width: 50px; margin-left: 8px; - margin-right: 8px; + margin-right: 12px; -unity-text-align : middle-left; flex-grow: 1; } From df2a281ea735c297a0c46fb4d181ce7caa37aa09 Mon Sep 17 00:00:00 2001 From: Kay Leng Chang Date: Wed, 28 Jan 2026 14:54:48 +0000 Subject: [PATCH 17/79] [UUM-130732][Switch2] Fix/workaround for GPU crash when running URP VFX unit tests --- .../Operators/Implementations/SampleMesh.cs | 1 + .../ProjectSettings/ProjectSettings.asset | 6 +- .../Switch2PlayerSettings.asset | 64 +++++++++++++++++++ 3 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/Switch2PlayerSettings.asset diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/SampleMesh.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/SampleMesh.cs index 6dc495661cd..921f478b3e9 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/SampleMesh.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/SampleMesh.cs @@ -445,6 +445,7 @@ private static VFXExpression SampleVertexAttribute(VFXExpression source, VFXExpr var outputType = GetSampledType(vertexAttribute); VFXExpression sampled = null; + vertexIndex = new VFXExpressionMin(vertexIndex, new VFXExpressionMeshVertexCount(mesh)); var meshChannelFormatAndDimension = new VFXExpressionMeshChannelInfos(mesh, channelIndex); var vertexOffset = vertexIndex * meshVertexStride + meshChannelOffset; diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/ProjectSettings.asset b/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/ProjectSettings.asset index 391570a6f26..c485e60474f 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/ProjectSettings.asset +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/ProjectSettings.asset @@ -120,15 +120,15 @@ PlayerSettings: xboxOneEnableTypeOptimization: 0 xboxOnePresentImmediateThreshold: 0 switchQueueCommandMemory: 1048576 - switchQueueControlMemory: 65536 + switchQueueControlMemory: 1048576 switchQueueComputeMemory: 262144 switchNVNShaderPoolsGranularity: 33554432 switchNVNDefaultPoolsGranularity: 16777216 switchNVNOtherPoolsGranularity: 16777216 switchGpuScratchPoolGranularity: 2097152 switchAllowGpuScratchShrinking: 0 - switchNVNMaxPublicTextureIDCount: 0 - switchNVNMaxPublicSamplerIDCount: 0 + switchNVNMaxPublicTextureIDCount: 65536 + switchNVNMaxPublicSamplerIDCount: 65536 switchMaxWorkerMultiple: 8 switchNVNGraphicsFirmwareMemory: 32 vulkanNumSwapchainBuffers: 3 diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/Switch2PlayerSettings.asset b/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/Switch2PlayerSettings.asset new file mode 100644 index 00000000000..54affd997d4 --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/Switch2PlayerSettings.asset @@ -0,0 +1,64 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +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: 21014, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: UnityEditor.Switch2.Extensions.dll::UnityEditor.Switch2.Switch2PlayerSettings + m_SocketConfigEnabled: 0 + m_SocketMemoryPoolSize: 6144 + m_SocketAllocatorPoolSize: 128 + m_SocketConcurrencyLimit: 14 + m_TcpInitialSendBufferSize: 32 + m_TcpInitialReceiveBufferSize: 64 + m_TcpAutoSendBufferSizeMax: 256 + m_TcpAutoReceiveBufferSizeMax: 256 + m_UdpSendBufferSize: 9 + m_UdpReceiveBufferSize: 42 + m_SocketBufferEfficiency: 4 + m_SocketInitializeEnabled: 1 + m_NetworkInterfaceManagerInitializeEnabled: 1 + m_HTCSForPlayerConnectionDisabled: 0 + m_LTOSetting: 0 + m_UseCPUProfiler: 0 + m_EnableFileSystemTrace: 0 + m_PrimaryQueueCommandMemory: 4194304 + m_PrimaryQueueControlMemory: 65536 + m_PrimaryQueueComputeMemory: 262144 + m_ComputeQueueCommandMemory: 4194304 + m_ComputeQueueControlMemory: 16384 + m_ComputeQueueComputeMemory: 262144 + m_NVNShaderPoolsGranularity: 33554432 + m_NVNDefaultPoolsGranularity: 16777216 + m_NVNOtherPoolsGranularity: 16777216 + m_GpuScratchPoolGranularity: 2097152 + m_AllowGpuScratchShrinking: 0 + m_NVNMaxPublicTextureIDCount: 65536 + m_NVNMaxPublicSamplerIDCount: 65536 + m_KMaxWorkerMultiple: 8 + m_DisableAsyncCompute: 0 + m_EnableNxLegacyTextureLayout: 0 + m_ExperimentalNvnDeviceInitializeDlssFlag: 0 + m_CompilerFlags: + - + m_NMETAOverride: + m_ScreenResolutionBehavior: 2 + m_NativeFsCacheSize: 32 + m_IsHoldTypeHorizontal: 1 + m_SupportedNpadCount: 8 + m_EnableTouchScreen: 1 + m_NSODependencies: + m_MicroSleepForYieldTime: 25 + m_EnableRamDiskSupport: 0 + m_RamDiskSpaceSize: 12 + m_DockedResolution: 1 + m_HandheldResolution: 1 + m_SupportedNpadStyles: 22 + m_ExtendedStructuredBufferBindings: 0 From ea11c1dcf571dce17118ac715d9f600edb8b13b8 Mon Sep 17 00:00:00 2001 From: Arttu Peltonen Date: Wed, 28 Jan 2026 18:51:37 +0000 Subject: [PATCH 18/79] Rendering Debugger UITK conversion --- .../Editor/BuildProcessors/CoreBuildData.cs | 11 +- ...nderingDebuggerRuntimeResourcesStripper.cs | 11 + ...ngDebuggerRuntimeResourcesStripper.cs.meta | 2 + .../Editor/Debugging/DebugState.cs | 15 + .../Debugging/DebugUIDrawer.Builtins.cs | 72 +- .../Editor/Debugging/DebugUIDrawer.cs | 21 +- .../Debugging/DebugUIHandlerCanvasEditor.cs | 87 - .../DebugUIHandlerCanvasEditor.cs.meta | 11 - .../Debugging/DebugWindow.Deprecated.cs | 236 + .../Debugging/DebugWindow.Deprecated.cs.meta | 3 + .../Editor/Debugging/DebugWindow.cs | 736 +- .../Editor/Debugging/DebugWindow.uss | 108 + .../Editor/Debugging/DebugWindow.uss.meta | 11 + .../Editor/Debugging/DebugWindow.uxml | 21 + .../Editor/Debugging/DebugWindow.uxml.meta | 10 + .../Editor/Debugging/UIFoldoutEditor.cs | 42 - .../Editor/Debugging/UIFoldoutEditor.cs.meta | 11 - .../Editor/Deprecated.cs | 4 +- .../ProbeVolume/ProbeSubdivisionContext.cs | 2 +- .../ProbeVolume/ProbeVolumeLightingTab.cs | 19 +- .../Unity.RenderPipelines.Core.Editor.asmdef | 5 + .../Runtime/Common/ReloadGroupAttribute.cs | 4 +- .../Debugging/DebugDisplaySerializer.cs | 121 + .../Debugging/DebugDisplaySerializer.cs.meta | 3 + .../DebugDisplaySettingsHDROutput.cs | 112 +- .../Debugging/DebugDisplaySettingsUI.cs | 4 + .../Debugging/DebugDisplaySettingsVolumes.cs | 77 +- .../Runtime/Debugging/DebugDisplayStats.cs | 1 + .../Runtime/Debugging/DebugFrameTiming.cs | 1 + .../Runtime/Debugging/DebugManager.Actions.cs | 38 +- .../DebugManager.SchedulerTracker.cs | 121 + .../DebugManager.SchedulerTracker.cs.meta | 3 + .../Runtime/Debugging/DebugManager.UIState.cs | 61 +- .../Runtime/Debugging/DebugManager.cs | 164 +- .../Runtime/Debugging/DebugUI.Containers.cs | 378 +- .../Runtime/Debugging/DebugUI.FieldUtils.cs | 163 + .../Debugging/DebugUI.FieldUtils.cs.meta | 3 + .../Runtime/Debugging/DebugUI.Fields.cs | 1095 +- .../Runtime/Debugging/DebugUI.Panel.cs | 64 +- .../Runtime/Debugging/DebugUI.cs | 454 +- .../Runtime/Debugging/DebugUpdater.cs | 163 +- .../ISerializedDebugDisplaySettings.cs | 9 + .../ISerializedDebugDisplaySettings.cs.meta | 3 + .../Prefabs/Resources/DebugUICanvas.prefab | 207 - .../Resources/DebugUICanvas.prefab.meta | 8 - .../Resources/DebugUIPersistentCanvas.prefab | 237 - .../DebugUIPersistentCanvas.prefab.meta | 8 - .../Runtime/Debugging/Prefabs/Scripts.meta | 8 - .../Prefabs/Scripts/DebugUIHandlerBitField.cs | 182 - .../Scripts/DebugUIHandlerBitField.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerButton.cs | 57 - .../Scripts/DebugUIHandlerButton.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerCanvas.cs | 365 - .../Scripts/DebugUIHandlerCanvas.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerColor.cs | 174 - .../Scripts/DebugUIHandlerColor.cs.meta | 11 - .../Scripts/DebugUIHandlerContainer.cs | 74 - .../Scripts/DebugUIHandlerContainer.cs.meta | 11 - .../Scripts/DebugUIHandlerEnumField.cs | 140 - .../Scripts/DebugUIHandlerEnumField.cs.meta | 11 - .../Scripts/DebugUIHandlerEnumHistory.cs | 73 - .../Scripts/DebugUIHandlerEnumHistory.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerField.cs | 105 - .../Scripts/DebugUIHandlerField.cs.meta | 11 - .../Scripts/DebugUIHandlerFloatField.cs | 84 - .../Scripts/DebugUIHandlerFloatField.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerFoldout.cs | 146 - .../Scripts/DebugUIHandlerFoldout.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerGroup.cs | 71 - .../Scripts/DebugUIHandlerGroup.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerHBox.cs | 58 - .../Scripts/DebugUIHandlerHBox.cs.meta | 11 - .../DebugUIHandlerIndirectFloatField.cs | 108 - .../DebugUIHandlerIndirectFloatField.cs.meta | 11 - .../Scripts/DebugUIHandlerIndirectToggle.cs | 93 - .../DebugUIHandlerIndirectToggle.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerIntField.cs | 85 - .../Scripts/DebugUIHandlerIntField.cs.meta | 11 - .../Scripts/DebugUIHandlerMessageBox.cs | 63 - .../Scripts/DebugUIHandlerMessageBox.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerObject.cs | 54 - .../Scripts/DebugUIHandlerObject.cs.meta | 11 - .../Scripts/DebugUIHandlerObjectList.cs | 62 - .../Scripts/DebugUIHandlerObjectList.cs.meta | 11 - .../Scripts/DebugUIHandlerObjectPopupField.cs | 86 - .../DebugUIHandlerObjectPopupField.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerPanel.cs | 126 - .../Scripts/DebugUIHandlerPanel.cs.meta | 11 - .../Scripts/DebugUIHandlerPersistentCanvas.cs | 100 - .../DebugUIHandlerPersistentCanvas.cs.meta | 11 - .../Scripts/DebugUIHandlerProgressBar.cs | 86 - .../Scripts/DebugUIHandlerProgressBar.cs.meta | 3 - .../DebugUIHandlerRenderingLayerField.cs | 159 - .../DebugUIHandlerRenderingLayerField.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerRow.cs | 131 - .../Prefabs/Scripts/DebugUIHandlerRow.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerToggle.cs | 85 - .../Scripts/DebugUIHandlerToggle.cs.meta | 11 - .../Scripts/DebugUIHandlerToggleHistory.cs | 69 - .../DebugUIHandlerToggleHistory.cs.meta | 11 - .../Scripts/DebugUIHandlerUIntField.cs | 91 - .../Scripts/DebugUIHandlerUIntField.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerVBox.cs | 59 - .../Scripts/DebugUIHandlerVBox.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerValue.cs | 82 - .../Scripts/DebugUIHandlerValue.cs.meta | 11 - .../Scripts/DebugUIHandlerValueTuple.cs | 121 - .../Scripts/DebugUIHandlerValueTuple.cs.meta | 3 - .../Prefabs/Scripts/DebugUIHandlerVector2.cs | 144 - .../Scripts/DebugUIHandlerVector2.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerVector3.cs | 154 - .../Scripts/DebugUIHandlerVector3.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerVector4.cs | 162 - .../Scripts/DebugUIHandlerVector4.cs.meta | 11 - .../Prefabs/Scripts/DebugUIHandlerWidget.cs | 150 - .../Scripts/DebugUIHandlerWidget.cs.meta | 11 - .../Debugging/Prefabs/Scripts/UIFoldout.cs | 68 - .../Prefabs/Scripts/UIFoldout.cs.meta | 11 - .../Prefabs/Textures/UIArrowDown.png | Bin 977 -> 0 bytes .../Prefabs/Textures/UIArrowDown.png.meta | 103 - .../Prefabs/Textures/UICheckMark.png | Bin 973 -> 0 bytes .../Prefabs/Textures/UICheckMark.png.meta | 103 - .../Prefabs/Textures/UIElement8px.png | Bin 942 -> 0 bytes .../Prefabs/Textures/UIElement8px.png.meta | 103 - .../Prefabs/Textures/UIFoldoutClosed.png | Bin 974 -> 0 bytes .../Prefabs/Textures/UIFoldoutClosed.png.meta | 103 - .../Prefabs/Textures/UIFoldoutOpened.png | Bin 970 -> 0 bytes .../Prefabs/Textures/UIFoldoutOpened.png.meta | 103 - .../Runtime/Debugging/Prefabs/Widgets.meta | 8 - .../Prefabs/Widgets/DebugUIBitField.prefab | 12621 ---------------- .../Widgets/DebugUIBitField.prefab.meta | 7 - .../Prefabs/Widgets/DebugUIButton.prefab | 231 - .../Prefabs/Widgets/DebugUIColor.prefab | 1390 -- .../Prefabs/Widgets/DebugUIColor.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIEnumField.prefab | 532 - .../Widgets/DebugUIEnumField.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIEnumHistory.prefab | 217 - .../Widgets/DebugUIEnumHistory.prefab.meta | 7 - .../Prefabs/Widgets/DebugUIFloatField.prefab | 808 - .../Widgets/DebugUIFloatField.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIFoldout.prefab | 550 - .../Widgets/DebugUIFoldout.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIGroup.prefab | 344 - .../Prefabs/Widgets/DebugUIGroup.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIHBox.prefab | 113 - .../Prefabs/Widgets/DebugUIHBox.prefab.meta | 8 - .../DebugUIHandlerRenderingLayerField.prefab | 12455 --------------- ...ugUIHandlerRenderingLayerField.prefab.meta | 7 - .../Prefabs/Widgets/DebugUIIntField.prefab | 812 - .../Widgets/DebugUIIntField.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIMessageBox.prefab | 220 - .../Widgets/DebugUIMessageBox.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIObject.prefab | 217 - .../Prefabs/Widgets/DebugUIObject.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIObjectList.prefab | 532 - .../Widgets/DebugUIObjectList.prefab.meta | 8 - .../Widgets/DebugUIObjectPopupField.prefab | 534 - .../DebugUIObjectPopupField.prefab.meta | 7 - .../Prefabs/Widgets/DebugUIPanel.prefab | 1990 --- .../Prefabs/Widgets/DebugUIPanel.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIProgressBar.prefab | 334 - .../Widgets/DebugUIProgressBar.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIRow.prefab | 545 - .../Prefabs/Widgets/DebugUIRow.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIToggle.prefab | 377 - .../Prefabs/Widgets/DebugUIToggle.prefab.meta | 8 - .../Widgets/DebugUIToggleHistory.prefab | 372 - .../Widgets/DebugUIToggleHistory.prefab.meta | 7 - .../Prefabs/Widgets/DebugUIUIntField.prefab | 812 - .../Widgets/DebugUIUIntField.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIVBox.prefab | 113 - .../Prefabs/Widgets/DebugUIVBox.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIValue.prefab | 215 - .../Prefabs/Widgets/DebugUIValue.prefab.meta | 8 - .../Widgets/DebugUIValuePersistent.prefab | 217 - .../DebugUIValuePersistent.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIValueTuple.prefab | 217 - .../Widgets/DebugUIValueTuple.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIVector2.prefab | 918 -- .../Widgets/DebugUIVector2.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIVector3.prefab | 1119 -- .../Widgets/DebugUIVector3.prefab.meta | 8 - .../Prefabs/Widgets/DebugUIVector4.prefab | 1320 -- .../Widgets/DebugUIVector4.prefab.meta | 8 - ...sources.meta => Runtime UI Resources.meta} | 2 +- .../DebugWindowCommon.uss | 110 + .../DebugWindowCommon.uss.meta | 12 + .../RuntimeDebugWindow.tss | 3 + .../RuntimeDebugWindow.tss.meta | 11 + .../RuntimeDebugWindow.uss | 312 + .../RuntimeDebugWindow.uss.meta | 11 + .../RuntimeDebugWindow.uxml | 12 + .../RuntimeDebugWindow.uxml.meta | 10 + .../RuntimeDebugWindow_PanelSettings.asset | 52 + ...ntimeDebugWindow_PanelSettings.asset.meta} | 4 +- .../Runtime/Debugging/RuntimeDebugWindow.cs | 283 + .../Debugging/RuntimeDebugWindow.cs.meta | 2 + .../Debugging/RuntimePersistentDebugUI.cs | 124 + .../RuntimePersistentDebugUI.cs.meta | 3 + .../{Prefabs/Textures => }/White1px.png | Bin .../{Prefabs/Textures => }/White1px.png.meta | 0 .../Runtime/Deprecated.cs | 17 +- .../GPUDriven/Culling/InstanceCuller.cs | 8 +- .../Culling/InstanceOcclusionCuller.cs | 2 +- .../Culling/OcclusionCullingCommon.cs | 9 +- .../Debug/DebugDisplayGPUResidentDrawer.cs | 79 +- .../GPUDriven/Debug/GPUResidentDrawerDebug.cs | 4 - .../Runtime/GPUDriven/GPUResidentDrawer.cs | 7 + .../ProbeVolume/ProbeReferenceVolume.Debug.cs | 10 +- .../ProbeVolume/ProbeReferenceVolume.cs | 4 +- .../RenderingDebuggerRuntimeResources.cs | 45 +- .../Common/Utilities/Utils.cs | 1 - .../Compute/BLASPositionsPool.cs | 2 - .../Unity.RenderPipelines.Core.Runtime.asmdef | 8 +- .../DebugPanelRenderingDebuggerTests.cs | 462 + .../DebugPanelRenderingDebuggerTests.cs.meta | 2 + .../Tests/Editor/Debugging/DebugUITests.cs | 68 + .../Editor/Debugging/DebugUITests.cs.meta | 3 + .../Tests/Editor/Debugging/GetItemTests.cs | 22 +- .../Debugging/PanelNameAndOrderTests.cs | 6 +- .../Editor/Debugging/SchedulerTrackerTests.cs | 139 + .../Debugging/SchedulerTrackerTests.cs.meta | 3 + .../Tests/Editor/Debugging/UndoRedoTests.cs | 92 - .../Editor/Debugging/UndoRedoTests.cs.meta | 11 - ...y.RenderPipelines.Core.Editor.Tests.asmdef | 8 +- .../Runtime/Debugging.meta} | 2 +- .../Debugging/DebugPanelDisplaySettings.cs | 827 + .../DebugPanelDisplaySettings.cs.meta | 2 + ....RenderPipelines.Core.Runtime.Tests.asmdef | 8 +- .../Editor/RenderPipeline/HDEditorUtils.cs | 3 +- .../Runtime/Debug/DebugDisplay.cs | 46 +- .../Debug/DebugDisplaySettingsCamera.cs | 144 +- .../Debug/DebugDisplaySettingsDecal.cs | 4 +- .../Debug/DebugDisplayVirtualTexturing.cs | 7 +- .../Runtime/Debug/DecalsDebug.cs | 2 +- .../Runtime/Debug/HDDebugDisplaySettings.cs | 12 +- .../Runtime/Debug/MaterialDebug.cs | 1 - .../RenderPipeline/HDRenderPipeline.Debug.cs | 2 +- .../RenderPipeline/HDRenderPipeline.cs | 10 + .../Utilities/HDRenderPipelinePreferences.cs | 13 +- .../Debug/DebugDisplaySettingsCommon.cs | 83 +- .../Debug/DebugDisplaySettingsLighting.cs | 37 +- .../Debug/DebugDisplaySettingsMaterial.cs | 149 +- .../Debug/DebugDisplaySettingsRendering.cs | 269 +- .../Runtime/Debug/DebugHandler.cs | 4 + ...ersalRenderPipelineDebugDisplaySettings.cs | 12 +- ...niversalRenderPipelineDebugDisplayStats.cs | 3 +- .../VFXTemplateHelperInternal.cs | 2 +- .../Scripts/DebugViewController.cs | 4 +- ...yTests.cs => UIElementsDependencyTests.cs} | 50 +- ...meta => UIElementsDependencyTests.cs.meta} | 0 .../SRP_SmokeTest/Packages/manifest.json | 3 +- 252 files changed, 6244 insertions(+), 47461 deletions(-) create mode 100644 Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/SettingsStrippers/RenderingDebuggerRuntimeResourcesStripper.cs create mode 100644 Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/SettingsStrippers/RenderingDebuggerRuntimeResourcesStripper.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIHandlerCanvasEditor.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIHandlerCanvasEditor.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.Deprecated.cs create mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.Deprecated.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.uss create mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.uss.meta create mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.uxml create mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.uxml.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/UIFoldoutEditor.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Editor/Debugging/UIFoldoutEditor.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySerializer.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySerializer.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.SchedulerTracker.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.SchedulerTracker.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.FieldUtils.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.FieldUtils.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/ISerializedDebugDisplaySettings.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/ISerializedDebugDisplaySettings.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Resources/DebugUICanvas.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Resources/DebugUICanvas.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Resources/DebugUIPersistentCanvas.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Resources/DebugUIPersistentCanvas.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerBitField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerBitField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerButton.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerButton.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerCanvas.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerCanvas.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerColor.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerColor.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerContainer.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerContainer.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerEnumField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerEnumField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerEnumHistory.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerEnumHistory.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerFloatField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerFloatField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerFoldout.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerFoldout.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerGroup.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerGroup.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerHBox.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerHBox.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerIndirectFloatField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerIndirectFloatField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerIndirectToggle.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerIndirectToggle.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerIntField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerIntField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerMessageBox.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerMessageBox.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerObject.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerObject.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerObjectList.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerObjectList.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerObjectPopupField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerObjectPopupField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerPanel.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerPanel.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerPersistentCanvas.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerPersistentCanvas.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerProgressBar.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerProgressBar.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRenderingLayerField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRenderingLayerField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRow.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerRow.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggle.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggle.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggleHistory.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerToggleHistory.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerUIntField.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerUIntField.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerVBox.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerVBox.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerValue.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerValue.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerValueTuple.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerValueTuple.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerVector2.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerVector2.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerVector3.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerVector3.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerVector4.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerVector4.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerWidget.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/DebugUIHandlerWidget.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/UIFoldout.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Scripts/UIFoldout.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UIArrowDown.png delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UIArrowDown.png.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UICheckMark.png delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UICheckMark.png.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UIElement8px.png delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UIElement8px.png.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UIFoldoutClosed.png delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UIFoldoutClosed.png.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UIFoldoutOpened.png delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Textures/UIFoldoutOpened.png.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIBitField.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIBitField.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIButton.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIColor.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIColor.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIEnumField.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIEnumField.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIEnumHistory.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIEnumHistory.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIFloatField.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIFloatField.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIFoldout.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIFoldout.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIGroup.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIGroup.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIHBox.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIHBox.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIHandlerRenderingLayerField.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIHandlerRenderingLayerField.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIIntField.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIIntField.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIMessageBox.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIMessageBox.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIObject.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIObject.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIObjectList.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIObjectList.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIObjectPopupField.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIObjectPopupField.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIPanel.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIPanel.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIProgressBar.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIProgressBar.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIRow.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIRow.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIToggle.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIToggle.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIToggleHistory.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIToggleHistory.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIUIntField.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIUIntField.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIVBox.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIVBox.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIValue.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIValue.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIValuePersistent.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIValuePersistent.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIValueTuple.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIValueTuple.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIVector2.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIVector2.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIVector3.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIVector3.prefab.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIVector4.prefab delete mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Prefabs/Widgets/DebugUIVector4.prefab.meta rename Packages/com.unity.render-pipelines.core/Runtime/Debugging/{Prefabs/Resources.meta => Runtime UI Resources.meta} (77%) create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/DebugWindowCommon.uss create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/DebugWindowCommon.uss.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/RuntimeDebugWindow.tss create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/RuntimeDebugWindow.tss.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/RuntimeDebugWindow.uss create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/RuntimeDebugWindow.uss.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/RuntimeDebugWindow.uxml create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/RuntimeDebugWindow.uxml.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/Runtime UI Resources/RuntimeDebugWindow_PanelSettings.asset rename Packages/com.unity.render-pipelines.core/Runtime/Debugging/{Prefabs/Widgets/DebugUIButton.prefab.meta => Runtime UI Resources/RuntimeDebugWindow_PanelSettings.asset.meta} (63%) create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/RuntimeDebugWindow.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/RuntimeDebugWindow.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/RuntimePersistentDebugUI.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Debugging/RuntimePersistentDebugUI.cs.meta rename Packages/com.unity.render-pipelines.core/Runtime/Debugging/{Prefabs/Textures => }/White1px.png (100%) rename Packages/com.unity.render-pipelines.core/Runtime/Debugging/{Prefabs/Textures => }/White1px.png.meta (100%) create mode 100644 Packages/com.unity.render-pipelines.core/Tests/Editor/Debugging/DebugPanelRenderingDebuggerTests.cs create mode 100644 Packages/com.unity.render-pipelines.core/Tests/Editor/Debugging/DebugPanelRenderingDebuggerTests.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Tests/Editor/Debugging/DebugUITests.cs create mode 100644 Packages/com.unity.render-pipelines.core/Tests/Editor/Debugging/DebugUITests.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Tests/Editor/Debugging/SchedulerTrackerTests.cs create mode 100644 Packages/com.unity.render-pipelines.core/Tests/Editor/Debugging/SchedulerTrackerTests.cs.meta delete mode 100644 Packages/com.unity.render-pipelines.core/Tests/Editor/Debugging/UndoRedoTests.cs delete mode 100644 Packages/com.unity.render-pipelines.core/Tests/Editor/Debugging/UndoRedoTests.cs.meta rename Packages/com.unity.render-pipelines.core/{Runtime/Debugging/Prefabs/Textures.meta => Tests/Runtime/Debugging.meta} (77%) create mode 100644 Packages/com.unity.render-pipelines.core/Tests/Runtime/Debugging/DebugPanelDisplaySettings.cs create mode 100644 Packages/com.unity.render-pipelines.core/Tests/Runtime/Debugging/DebugPanelDisplaySettings.cs.meta rename Tests/SRPTests/Projects/SRP_SmokeTest/Assets/Tests/Editor/{UguiDependencyTests.cs => UIElementsDependencyTests.cs} (63%) rename Tests/SRPTests/Projects/SRP_SmokeTest/Assets/Tests/Editor/{UguiDependencyTests.cs.meta => UIElementsDependencyTests.cs.meta} (100%) diff --git a/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/CoreBuildData.cs b/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/CoreBuildData.cs index 3f675d9c7c2..05de0b1a735 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/CoreBuildData.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/CoreBuildData.cs @@ -34,15 +34,22 @@ public class CoreBuildData : IDisposable /// public List renderPipelineAssets { get; private set; } = new(); + /// + /// Whether the build is a development build or not. + /// + public bool developmentBuild { get; private set; } = false; + internal Dictionary computeShaderCache { get; private set; } = new(); internal bool pipelineSupportGPUResidentDrawer { get; private set; } = false; internal bool playerNeedGPUResidentDrawer { get; private set; } = false; - private CoreBuildData(BuildTarget buildTarget) + private CoreBuildData(BuildTarget buildTarget, bool development) { m_Instance = this; + developmentBuild = development; + if (!buildTarget.TryGetRenderPipelineAssets(renderPipelineAssets)) return; @@ -56,7 +63,7 @@ private CoreBuildData(BuildTarget buildTarget) } private static CoreBuildData CreateInstance() - => new(EditorUserBuildSettings.activeBuildTarget); + => new(EditorUserBuildSettings.activeBuildTarget, EditorUserBuildSettings.development); private void CheckGPUResidentDrawerUsage() { diff --git a/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/SettingsStrippers/RenderingDebuggerRuntimeResourcesStripper.cs b/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/SettingsStrippers/RenderingDebuggerRuntimeResourcesStripper.cs new file mode 100644 index 00000000000..15fc576e592 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/SettingsStrippers/RenderingDebuggerRuntimeResourcesStripper.cs @@ -0,0 +1,11 @@ +using UnityEngine.Rendering; + +namespace UnityEditor.Rendering +{ + class RenderingDebuggerRuntimeResourcesStripper : IRenderPipelineGraphicsSettingsStripper + { + public bool active => true; + + public bool CanRemoveSettings(RenderingDebuggerRuntimeResources settings) => !CoreBuildData.instance.developmentBuild; + } +} diff --git a/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/SettingsStrippers/RenderingDebuggerRuntimeResourcesStripper.cs.meta b/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/SettingsStrippers/RenderingDebuggerRuntimeResourcesStripper.cs.meta new file mode 100644 index 00000000000..54f99ef88e4 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor/BuildProcessors/SettingsStrippers/RenderingDebuggerRuntimeResourcesStripper.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8f0cdf6a21623f84cad55c1a41d92b16 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugState.cs b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugState.cs index c9dafbe881b..eeda5bddfc4 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugState.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugState.cs @@ -8,6 +8,7 @@ namespace UnityEditor.Rendering /// Serialized state of a Debug Item. /// [Serializable] + [Obsolete("This class is no longer used. #from(6000.5)")] public abstract class DebugState : ScriptableObject { /// @@ -58,6 +59,7 @@ public virtual void OnEnable() /// /// The type of the Debug Item. [Serializable] + [Obsolete("This class is no longer used. #from(6000.5)")] public class DebugState : DebugState { /// @@ -115,6 +117,7 @@ public override int GetHashCode() /// /// Attribute specifying which types should be save as this Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] public sealed class DebugStateAttribute : Attribute { internal readonly Type[] types; @@ -133,12 +136,14 @@ public DebugStateAttribute(params Type[] types) /// /// Boolean Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.BoolField), typeof(DebugUI.Foldout), typeof(DebugUI.HistoryBoolField))] public sealed class DebugStateBool : DebugState { } /// /// Enums Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.EnumField), typeof(DebugUI.HistoryEnumField))] public sealed class DebugStateEnum : DebugState { @@ -173,12 +178,14 @@ public override void OnEnable() /// /// Integer Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.IntField))] public sealed class DebugStateInt : DebugState { } /// /// Object Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.ObjectPopupField), typeof(DebugUI.CameraSelector), typeof(DebugUI.ObjectField))] public sealed class DebugStateObject : DebugState { @@ -235,6 +242,7 @@ public override int GetHashCode() /// /// Flags Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.BitField))] public sealed class DebugStateFlags : DebugState { @@ -266,42 +274,49 @@ public override void SetValue(object value, DebugUI.IValueField field) /// /// Unsigned Integer Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.UIntField))] public sealed class DebugStateUInt : DebugState { } /// /// Rendering layer mask state. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.RenderingLayerField))] public sealed class DebugStateRenderingLayer : DebugState { } /// /// Float Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.FloatField))] public sealed class DebugStateFloat : DebugState { } /// /// Color Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.ColorField))] public sealed class DebugStateColor : DebugState { } /// /// Vector2 Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.Vector2Field))] public sealed class DebugStateVector2 : DebugState { } /// /// Vector3 Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.Vector3Field))] public sealed class DebugStateVector3 : DebugState { } /// /// Vector4 Debug State. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [Serializable, DebugState(typeof(DebugUI.Vector4Field))] public sealed class DebugStateVector4 : DebugState { } } diff --git a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIDrawer.Builtins.cs b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIDrawer.Builtins.cs index 1236c047ef2..3276089b073 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIDrawer.Builtins.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIDrawer.Builtins.cs @@ -9,6 +9,7 @@ namespace UnityEditor.Rendering /// /// Builtin Drawer for Value Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.Value))] public sealed class DebugUIDrawerValue : DebugUIWidgetDrawer { @@ -27,6 +28,7 @@ protected override void DoGUI(Rect rect, GUIContent label, DebugUI.Value field) /// /// Builtin Drawer for ValueTuple Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.ValueTuple))] public sealed class DebugUIDrawerValueTuple : DebugUIWidgetDrawer { @@ -48,13 +50,13 @@ protected override void DoGUI(Rect rect, GUIContent label, DebugUI.ValueTuple fi for (int i = 0; i < field.numElements; i++) { var columnRect = drawRect; - columnRect.x += EditorGUIUtility.labelWidth + i * DebugWindow.Styles.foldoutColumnWidth; - columnRect.width = DebugWindow.Styles.foldoutColumnWidth; + columnRect.x += EditorGUIUtility.labelWidth + i * LegacyStyles.foldoutColumnWidth; + columnRect.width = LegacyStyles.foldoutColumnWidth; var value = field.values[i].GetValue(); var style = EditorStyles.label; if (Convert.ToSingle(value) == 0) - style = DebugWindow.Styles.labelWithZeroValueStyle; + style = LegacyStyles.labelWithZeroValueStyle; EditorGUI.LabelField(columnRect, field.values[i].FormatString(value), style); } @@ -65,6 +67,7 @@ protected override void DoGUI(Rect rect, GUIContent label, DebugUI.ValueTuple fi /// /// Builtin Drawer for ProgressBarValue Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.ProgressBarValue))] public sealed class DebugUIDrawerProgressBarValue : DebugUIWidgetDrawer { @@ -85,6 +88,7 @@ protected override void DoGUI(Rect rect, GUIContent label, DebugUI.ProgressBarVa /// /// Builtin Drawer for Button Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.Button))] public sealed class DebugUIDrawerButton : DebugUIWidgetDrawer { @@ -108,6 +112,7 @@ protected override void DoGUI(Rect rect, GUIContent label, DebugUI.Button field) /// /// Builtin Drawer for Boolean Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.BoolField))] public sealed class DebugUIDrawerBoolField : DebugUIFieldDrawer { @@ -128,6 +133,7 @@ protected override bool DoGUI(Rect rect, GUIContent label, DebugUI.BoolField fie /// /// Builtin Drawer for History Boolean Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.HistoryBoolField))] public sealed class DebugUIDrawerHistoryBoolField : DebugUIFieldDrawer { @@ -168,6 +174,7 @@ protected override bool DoGUI(Rect rect, GUIContent label, DebugUI.HistoryBoolFi /// /// Builtin Drawer for Integer Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.IntField))] public sealed class DebugUIDrawerIntField : DebugUIFieldDrawer { @@ -190,6 +197,7 @@ protected override int DoGUI(Rect rect, GUIContent label, DebugUI.IntField field /// /// Builtin Drawer for Unsigned Integer Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.UIntField))] public sealed class DebugUIDrawerUIntField : DebugUIFieldDrawer { @@ -215,6 +223,7 @@ protected override uint DoGUI(Rect rect, GUIContent label, DebugUI.UIntField fie /// /// Builtin Drawer for Float Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.FloatField))] public sealed class DebugUIDrawerFloatField : DebugUIFieldDrawer { @@ -237,6 +246,7 @@ protected override float DoGUI(Rect rect, GUIContent label, DebugUI.FloatField f /// /// Builtin Drawer for Enum Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.EnumField))] public sealed class DebugUIDrawerEnumField : DebugUIFieldDrawer { @@ -274,6 +284,7 @@ protected override int DoGUI(Rect rect, GUIContent label, DebugUI.EnumField fiel /// /// Builtin Drawer for Object Popup Fields Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.ObjectPopupField))] public sealed class DebugUIDrawerObjectPopupField : DebugUIFieldDrawer { @@ -339,6 +350,7 @@ protected override UnityEngine.Object DoGUI(Rect rect, GUIContent label, DebugUI /// /// Builtin Drawer for History Enum Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.HistoryEnumField))] public sealed class DebugUIDrawerHistoryEnumField : DebugUIFieldDrawer { @@ -398,6 +410,7 @@ protected override int DoGUI(Rect rect, GUIContent label, DebugUI.HistoryEnumFie /// /// Builtin Drawer for Bitfield Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.BitField))] public sealed class DebugUIDrawerBitField : DebugUIFieldDrawer { @@ -427,6 +440,7 @@ protected override Enum DoGUI(Rect rect, GUIContent label, DebugUI.BitField fiel /// /// Builtin Drawer for Maskfield Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.RenderingLayerField))] public sealed class DebugUIDrawerRenderingLayerField : DebugUIFieldDrawer { @@ -449,6 +463,7 @@ protected override RenderingLayerMask DoGUI(Rect rect, GUIContent label, DebugUI /// /// Builtin Drawer for Foldout Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.Foldout))] public sealed class DebugUIDrawerFoldout : DebugUIDrawer { @@ -456,7 +471,7 @@ public sealed class DebugUIDrawerFoldout : DebugUIDrawer static void DisplayColumns(Rect drawRect, List rowContents) { drawRect.x += EditorGUIUtility.labelWidth; - drawRect.width = DebugWindow.Styles.foldoutColumnWidth; + drawRect.width = LegacyStyles.foldoutColumnWidth; int indent = EditorGUI.indentLevel; EditorGUI.indentLevel = 0; //be at left of rects @@ -465,7 +480,7 @@ static void DisplayColumns(Rect drawRect, List rowContents) EditorGUI.LabelField(drawRect, rowContents[i], EditorStyles.miniBoldLabel); // Offset the rect to the next possible column - drawRect.x += DebugWindow.Styles.foldoutColumnWidth; + drawRect.x += LegacyStyles.foldoutColumnWidth; } EditorGUI.indentLevel = indent; } @@ -478,7 +493,7 @@ static void DisplayColumns(Rect drawRect, List rowContents) public override void Begin(DebugUI.Widget widget, DebugState state) { CoreEditorUtils.DrawSplitter(); - + var w = Cast(widget); var s = Cast(state); @@ -540,6 +555,7 @@ public override void End(DebugUI.Widget widget, DebugState state) /// /// Builtin Drawer for Color Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.ColorField))] public sealed class DebugUIDrawerColorField : DebugUIFieldDrawer { @@ -560,6 +576,7 @@ protected override Color DoGUI(Rect rect, GUIContent label, DebugUI.ColorField f /// /// Builtin Drawer for Vector2 Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.Vector2Field))] public sealed class DebugUIDrawerVector2Field : DebugUIFieldDrawer { @@ -580,6 +597,7 @@ protected override Vector2 DoGUI(Rect rect, GUIContent label, DebugUI.Vector2Fie /// /// Builtin Drawer for Vector3 Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.Vector3Field))] public sealed class DebugUIDrawerVector3Field : DebugUIFieldDrawer { @@ -600,6 +618,7 @@ protected override Vector3 DoGUI(Rect rect, GUIContent label, DebugUI.Vector3Fie /// /// Builtin Drawer for Vector4 Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.Vector4Field))] public sealed class DebugUIDrawerVector4Field : DebugUIFieldDrawer { @@ -620,6 +639,7 @@ protected override Vector4 DoGUI(Rect rect, GUIContent label, DebugUI.Vector4Fie /// /// Builtin Drawer for items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.ObjectField))] public sealed class DebugUIDrawerObjectField : DebugUIFieldDrawer { @@ -640,6 +660,7 @@ protected override UnityEngine.Object DoGUI(Rect rect, GUIContent label, DebugUI /// /// Builtin Drawer for Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.ObjectListField))] public sealed class DebugUIDrawerObjectListField : DebugUIDrawer { @@ -654,7 +675,7 @@ public override bool OnGUI(DebugUI.Widget widget, DebugState state) var w = Cast(widget); var objects = w.GetValue(); - float height = Math.Max(objects != null ? objects.Length : 0, 1) * DebugWindow.Styles.singleRowHeight; + float height = Math.Max(objects != null ? objects.Length : 0, 1) * LegacyStyles.singleRowHeight; var rect = PrepareControlRect(height); rect = EditorGUI.PrefixLabel(rect, EditorGUIUtility.TrTextContent(widget.displayName)); @@ -679,7 +700,7 @@ internal static void DoObjectList(Rect rect, DebugUI.ObjectListField widget, Uni for (int i = 0; i < objects.Length; i++) { objects[i] = EditorGUI.ObjectField(rect, GUIContent.none, objects[i], widget.type, true); - rect.y += DebugWindow.Styles.singleRowHeight; + rect.y += LegacyStyles.singleRowHeight; } } } @@ -687,6 +708,7 @@ internal static void DoObjectList(Rect rect, DebugUI.ObjectListField widget, Uni /// /// Builtin Drawer for MessageBox Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.MessageBox))] public sealed class DebugUIDrawerMessageBox : DebugUIDrawer { @@ -717,6 +739,7 @@ public override bool OnGUI(DebugUI.Widget widget, DebugState state) /// /// Builtin Drawer for Container Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.Container))] public sealed class DebugUIDrawerContainer : DebugUIDrawer { @@ -748,6 +771,7 @@ public override void End(DebugUI.Widget widget, DebugState state) /// /// Builtin Drawer for Horizontal Box Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.HBox))] public sealed class DebugUIDrawerHBox : DebugUIDrawer { @@ -774,6 +798,7 @@ public override void End(DebugUI.Widget widget, DebugState state) /// /// Builtin Drawer for Vertical Box Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.VBox))] public sealed class DebugUIDrawerVBox : DebugUIDrawer { @@ -801,6 +826,7 @@ public override void End(DebugUI.Widget widget, DebugState state) /// /// Builtin Drawer for Table Debug Items. /// + [Obsolete("This class is no longer used. #from(6000.5)")] [DebugUIDrawer(typeof(DebugUI.Table))] public sealed class DebugUIDrawerTable : DebugUIDrawer { @@ -855,7 +881,7 @@ public override bool OnGUI(DebugUI.Widget widget, DebugState state) bool isAlternate = r % 2 == 0; - EditorGUI.LabelField(rowRect, GUIContent.none, EditorGUIUtility.TrTextContent(row.displayName), isAlternate ? DebugWindow.Styles.centeredLeft : DebugWindow.Styles.centeredLeftAlternate); + EditorGUI.LabelField(rowRect, GUIContent.none, EditorGUIUtility.TrTextContent(row.displayName), isAlternate ? LegacyStyles.centeredLeft : LegacyStyles.centeredLeftAlternate); rowRect.xMin -= 2; rowRect.xMax += 2; @@ -885,7 +911,7 @@ internal float GetRowHeight(DebugUI.Table.Row row, int[] visibleColumns) var child = row.children[visibleColumns[c] - 1] as DebugUI.ObjectListField; if (child == null || child.GetValue() == null) continue; - height = Mathf.Max(height, child.GetValue().Length * DebugWindow.Styles.singleRowHeight); + height = Mathf.Max(height, child.GetValue().Length * LegacyStyles.singleRowHeight); } return height; } @@ -923,7 +949,7 @@ internal void DisplayChild(Rect rect, DebugUI.Widget child, bool isAlternate) if (child.GetType() == typeof(DebugUI.Value)) { var widget = Cast(child); - EditorGUI.LabelField(rect, GUIContent.none, EditorGUIUtility.TrTextContent(widget.GetValue().ToString()), isAlternate ? DebugWindow.Styles.centeredLeft : DebugWindow.Styles.centeredLeftAlternate); + EditorGUI.LabelField(rect, GUIContent.none, EditorGUIUtility.TrTextContent(widget.GetValue().ToString()), isAlternate ? LegacyStyles.centeredLeft : LegacyStyles.centeredLeftAlternate); } else if (child.GetType() == typeof(DebugUI.ColorField)) { @@ -948,4 +974,28 @@ internal void DisplayChild(Rect rect, DebugUI.Widget child, bool isAlternate) } } } + + class LegacyStyles + { + public static GUIStyle labelWithZeroValueStyle { get; } = new GUIStyle(EditorStyles.label); + + public readonly GUIStyle sectionScrollView = "PreferencesSectionBox"; + public readonly GUIStyle sectionElement = new GUIStyle("PreferencesSection"); + + public static GUIStyle centeredLeft = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleLeft }; + public static GUIStyle centeredLeftAlternate = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleLeft }; + public static float singleRowHeight = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + + public static int foldoutColumnWidth = 70; + + public LegacyStyles() + { + sectionScrollView = new GUIStyle(sectionScrollView); + sectionScrollView.overflow.bottom += 1; + + sectionElement.alignment = TextAnchor.MiddleLeft; + + labelWithZeroValueStyle.normal.textColor = Color.gray; + } + } } diff --git a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIDrawer.cs b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIDrawer.cs index 2840a1ef939..014866fe478 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIDrawer.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIDrawer.cs @@ -10,6 +10,7 @@ namespace UnityEditor.Rendering /// /// Attribute specifying wich type of Debug Item should this drawer be used with. /// + [Obsolete("This class is no longer used. #from(6000.5)")] public class DebugUIDrawerAttribute : Attribute { internal readonly Type type; @@ -27,6 +28,7 @@ public DebugUIDrawerAttribute(Type type) /// /// Debug Item Drawer /// + [Obsolete("This class is no longer used. #from(6000.5)")] public class DebugUIDrawer { /// @@ -130,6 +132,7 @@ protected Rect PrepareControlRect(float height = -1, bool fullWidth = false) /// The internal value of the field /// The type of the field widget /// The state of the field + [Obsolete("This class is no longer used. #from(6000.5)")] public abstract class DebugUIFieldDrawer : DebugUIDrawer where TField : DebugUI.Field where TState : DebugState @@ -174,14 +177,6 @@ public override bool OnGUI(DebugUI.Widget widget, DebugState state) /// The current value from the UI protected abstract TValue DoGUI(Rect rect, GUIContent label, TField field, TState state); - struct WidgetChangedAction - { - public string query_path; - public TValue previous_value; - public TValue new_value; - } - - static List s_Analytic = new List(); /// /// Implement this to execute processing after UI rendering. /// @@ -194,16 +189,7 @@ public override void End(DebugUI.Widget widget, DebugState state) var w = Cast(widget); var s = Cast(state); - s_Analytic.Clear(); - s_Analytic.Add(new() - { - query_path = widget.queryPath, - previous_value = w.GetValue(), - new_value = value - }); - Apply(w, s, value); - GraphicsToolUsageAnalytic.ActionPerformed("Widget Value Changed", s_Analytic.ToNestedColumn()); } } } @@ -212,6 +198,7 @@ public override void End(DebugUI.Widget widget, DebugState state) /// Common class to help drawing widgets /// /// The widget + [Obsolete("This class is no longer used. #from(6000.5)")] public abstract class DebugUIWidgetDrawer : DebugUIDrawer where TWidget : DebugUI.Widget { diff --git a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIHandlerCanvasEditor.cs b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIHandlerCanvasEditor.cs deleted file mode 100644 index 988bbba97b6..00000000000 --- a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIHandlerCanvasEditor.cs +++ /dev/null @@ -1,87 +0,0 @@ -#if ENABLE_UGUI_PACKAGE && (UNITY_EDITOR || DEVELOPMENT_BUILD) -#define ENABLE_RENDERING_DEBUGGER_UI -#endif - -#if ENABLE_RENDERING_DEBUGGER_UI - -using System; -using System.Linq; -using UnityEditor; -using UnityEditor.Rendering; -using UnityEditorInternal; -using UnityEngine.Rendering; - -namespace UnityEngine.Rendering.UI -{ - [CustomEditor(typeof(DebugUIHandlerCanvas))] - sealed class DebugUIHandlerCanvasEditor : Editor - { - SerializedProperty m_PanelPrefab; - SerializedProperty m_Prefabs; - ReorderableList m_PrefabList; - - static string[] s_Types; // Assembly qualified names - static string[] s_DisplayTypes; // Pretty names - - static DebugUIHandlerCanvasEditor() - { - s_Types = CoreUtils.GetAllTypesDerivedFrom() - .Where(t => !t.IsAbstract) - .Select(t => t.AssemblyQualifiedName) - .ToArray(); - - s_DisplayTypes = new string[s_Types.Length]; - for (int i = 0; i < s_Types.Length; i++) - s_DisplayTypes[i] = Type.GetType(s_Types[i]).Name; - } - - void OnEnable() - { - var o = new PropertyFetcher(serializedObject); - m_PanelPrefab = o.Find(x => x.panelPrefab); - m_Prefabs = o.Find(x => x.prefabs); - - m_PrefabList = new ReorderableList(serializedObject, m_Prefabs, true, true, true, true) - { - drawHeaderCallback = rect => EditorGUI.LabelField(rect, "Widget Prefabs"), - drawElementCallback = (rect, index, isActive, isFocused) => - { - var element = m_PrefabList.serializedProperty.GetArrayElementAtIndex(index); - rect.y += 2f; - const float kTypeWidth = 100f; - - // Type selector - var typeProp = element.FindPropertyRelative("type"); - int typeIndex = ArrayUtility.IndexOf(s_Types, typeProp.stringValue); - typeIndex = Mathf.Max(typeIndex, 0); - typeIndex = EditorGUI.Popup(new Rect(rect.x, rect.y, kTypeWidth, EditorGUIUtility.singleLineHeight), typeIndex, s_DisplayTypes); - typeProp.stringValue = s_Types[typeIndex]; - - // Prefab - EditorGUI.PropertyField( - new Rect(rect.x + kTypeWidth + 2f, rect.y, rect.width - kTypeWidth - 2f, EditorGUIUtility.singleLineHeight), - element.FindPropertyRelative("prefab"), GUIContent.none); - }, - onSelectCallback = list => - { - var prefab = list.serializedProperty.GetArrayElementAtIndex(list.index).FindPropertyRelative("prefab").objectReferenceValue as GameObject; - if (prefab) - EditorGUIUtility.PingObject(prefab); - } - }; - } - - public override void OnInspectorGUI() - { - serializedObject.Update(); - - EditorGUILayout.PropertyField(m_PanelPrefab); - EditorGUILayout.Space(); - m_PrefabList.DoLayoutList(); - - serializedObject.ApplyModifiedProperties(); - } - } -} - -#endif diff --git a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIHandlerCanvasEditor.cs.meta b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIHandlerCanvasEditor.cs.meta deleted file mode 100644 index 510e472df28..00000000000 --- a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugUIHandlerCanvasEditor.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f1d41f85c15ac6048a850b51ff36c098 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.Deprecated.cs b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.Deprecated.cs new file mode 100644 index 00000000000..46caf670494 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.Deprecated.cs @@ -0,0 +1,236 @@ +#if ENABLE_UIELEMENTS_MODULE && (UNITY_EDITOR || DEVELOPMENT_BUILD) +#define ENABLE_RENDERING_DEBUGGER_UI +#endif + +#if ENABLE_RENDERING_DEBUGGER_UI + +using System; +using System.Collections.Generic; +using UnityEditor.Callbacks; +using UnityEngine; +using UnityEngine.Assertions; +using UnityEngine.Rendering; + +// This file encapsulates the deprecated widget state handling logic for the DebugWindow. It will be removed in a future release. + +#pragma warning disable CS0618 // Type or member is obsolete + +namespace UnityEditor.Rendering +{ + [Serializable] + sealed class WidgetStateDictionary : SerializedDictionary { } + + sealed partial class DebugWindow + { + [SerializeField] + WidgetStateDictionary m_WidgetStates; + + static bool s_TypeMapDirty; + static Dictionary s_WidgetStateMap; // DebugUI.Widget type -> DebugState type + + [DidReloadScripts] + static void OnEditorReload() + { + s_TypeMapDirty = true; + } + + void HookLegacyWidgetStateHandlingCallbacks() + { + AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReload; + AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + + AssemblyReloadEvents.afterAssemblyReload -= OnAfterAssemblyReload; + AssemblyReloadEvents.afterAssemblyReload += OnAfterAssemblyReload; + + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + void OnBeforeAssemblyReload() + { + UpdateWidgetStates(updateCurrentStates: true); + } + + void OnAfterAssemblyReload() + { + ApplyStates(); + } + + void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingEditMode || state == PlayModeStateChange.ExitingPlayMode) + UpdateWidgetStates(updateCurrentStates: true); + if (state == PlayModeStateChange.EnteredPlayMode || state == PlayModeStateChange.EnteredEditMode) + ApplyStates(); + } + + static void RebuildTypeMaps() + { + // Map states to widget (a single state can map to several widget types if the value to + // serialize is the same) + var attrType = typeof(DebugStateAttribute); + var stateTypes = new List(); + foreach (var type in CoreUtils.GetAllTypesDerivedFrom()) + { + if (type.IsDefined(attrType, false) && !type.IsAbstract) + { + stateTypes.Add(type); + } + } + + s_WidgetStateMap = new Dictionary(); + + foreach (var stateType in stateTypes) + { + var attr = (DebugStateAttribute)stateType.GetCustomAttributes(attrType, false)[0]; + + foreach (var t in attr.types) + s_WidgetStateMap.Add(t, stateType); + } + + // Done + s_TypeMapDirty = false; + } + + void DestroyWidgetStates() + { + if (m_WidgetStates == null) + return; + + // Clear all the states from memory + foreach (var state in m_WidgetStates) + { + var s = state.Value; + DestroyImmediate(s); + } + + m_WidgetStates.Clear(); + } + + void ReloadWidgetStates() + { + if (m_WidgetStates == null) + return; + + // Clear states from memory that don't have a corresponding widget + List keysToRemove = new (); + foreach (var state in m_WidgetStates) + { + var widget = DebugManager.instance.GetItem(state.Key); + if (widget == null) + { + var s = state.Value; + DestroyImmediate(s); + keysToRemove.Add(state.Key); + } + } + + // Cleanup null entries because they can break the dictionary serialization + foreach (var key in keysToRemove) + { + m_WidgetStates.Remove(key); + } + + UpdateWidgetStates(); + } + + bool AreWidgetStatesValid() + { + foreach (var state in m_WidgetStates) + { + if (state.Value == null) + { + return false; + } + } + return true; + } + + // We use item states to keep a cached value of each serializable debug items in order to + // handle domain reloads and play mode entering/exiting + // Note: no removal of orphan states + void UpdateWidgetStates(bool updateCurrentStates = false) + { + foreach (var panel in DebugManager.instance.panels) + UpdateWidgetStates(panel, updateCurrentStates); + } + + DebugState GetOrCreateDebugStateForValueField(DebugUI.Widget widget, bool updateCurrentStates) + { + // Skip runtime & readonly only items + if (widget.isInactiveInEditor) + return null; + + if (widget is not DebugUI.IValueField valueField) + return null; + + if (!widget.m_RequiresLegacyStateHandling) + return null; + + string queryPath = widget.queryPath; + if (!m_WidgetStates.TryGetValue(queryPath, out var state) || state == null) + { + var widgetType = widget.GetType(); + if (s_WidgetStateMap.TryGetValue(widgetType, out Type stateType)) + { + Assert.IsNotNull(stateType); + state = (DebugState)CreateInstance(stateType); + state.queryPath = queryPath; + state.SetValue(valueField.GetValue(), valueField); + m_WidgetStates[queryPath] = state; + } + } + + if (state != null && updateCurrentStates) + { + state.SetValue(valueField.GetValue(), valueField); + } + + return state; + } + + void UpdateWidgetStates(DebugUI.IContainer container, bool updateCurrentStates) + { + // Skip runtime only containers, we won't draw them so no need to serialize them either + if (container is DebugUI.Widget actualWidget && actualWidget.isInactiveInEditor) + return; + + // Recursively update widget states + foreach (var widget in container.children) + { + // Skip non-serializable widgets but still traverse them in case one of their + // children needs serialization support + var state = GetOrCreateDebugStateForValueField(widget, updateCurrentStates); + + if (state != null) + continue; + + // Recurse if the widget is a container + if (widget is DebugUI.IContainer containerField) + UpdateWidgetStates(containerField, updateCurrentStates); + } + } + + void ApplyStates() + { + // If we are in playmode, and the runtime UI is shown, avoid that the editor UI + // applies the data of the internal debug states, as they are not kept in sync + if (Application.isPlaying && DebugManager.instance.displayRuntimeUI) + return; + + foreach (var state in m_WidgetStates) + ApplyState(state.Key, state.Value); + } + + void ApplyState(string queryPath, DebugState state) + { + if (state == null || !(DebugManager.instance.GetItem(queryPath) is DebugUI.IValueField widget)) + return; + + widget.SetValue(state.GetValue()); + } + } +} + +#pragma warning restore CS0618 // Type or member is obsolete +#endif diff --git a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.Deprecated.cs.meta b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.Deprecated.cs.meta new file mode 100644 index 00000000000..49a8f086268 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.Deprecated.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 54fde5d97fa74a669522408aa1aa5685 +timeCreated: 1762166012 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.cs b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.cs index b66521c4fc2..9d5fc8b904e 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.cs @@ -1,376 +1,187 @@ -#if ENABLE_INPUT_SYSTEM && ENABLE_INPUT_SYSTEM_PACKAGE -#define USE_INPUT_SYSTEM +#if ENABLE_UIELEMENTS_MODULE && (UNITY_EDITOR || DEVELOPMENT_BUILD) +#define ENABLE_RENDERING_DEBUGGER_UI #endif using System; using System.Collections.Generic; -using System.Linq; -using UnityEditor.Callbacks; +using System.Reflection; using UnityEditor.Rendering.Analytics; -using UnityEditorInternal; using UnityEngine; -using UnityEngine.Assertions; using UnityEngine.Rendering; -using static UnityEngine.Rendering.DebugUI; +using UnityEditor.UIElements; +using UnityEngine.UIElements; namespace UnityEditor.Rendering { -#pragma warning disable 414 - - [Serializable] - sealed class WidgetStateDictionary : SerializedDictionary { } - - sealed class DebugWindowSettings : ScriptableObject + struct WidgetChangedAction { - // Keep these settings in a separate scriptable object so we can handle undo/redo on them - // without the rest of the debug window interfering - public int currentStateHash; - - public int selectedPanel - { - get => Mathf.Max(0, DebugManager.instance.PanelIndex(selectedPanelDisplayName)); - set - { - var displayName = DebugManager.instance.PanelDisplayName(value); - if (!string.IsNullOrEmpty(displayName)) - selectedPanelDisplayName = displayName; - } - } - - public string selectedPanelDisplayName; - - void OnEnable() - { - hideFlags = HideFlags.HideAndDontSave; - } + public string query_path; + public T previous_value; + public T new_value; } [CoreRPHelpURL("Rendering-Debugger")] - sealed class DebugWindow : EditorWindowWithHelpButton, IHasCustomMenu + sealed partial class DebugWindow : EditorWindowWithHelpButton +#if ENABLE_RENDERING_DEBUGGER_UI + , IHasCustomMenu +#endif { - static Styles s_Styles; - static GUIStyle s_SplitterLeft; + internal static GUIContent s_TitleContent = EditorGUIUtility.TrTextContent("Rendering Debugger"); - static float splitterPos = 150f; - const float minSideBarWidth = 100; - const float minContentWidth = 100; - bool dragging = false; - - [SerializeField] - WidgetStateDictionary m_WidgetStates; - - [SerializeField] - DebugWindowSettings m_Settings; - - bool m_IsDirty; - - Vector2 m_PanelScroll; - Vector2 m_ContentScroll; - - static bool s_TypeMapDirty; - static Dictionary s_WidgetStateMap; // DebugUI.Widget type -> DebugState type - static Dictionary s_WidgetDrawerMap; // DebugUI.Widget type -> DebugUIDrawer - - public static bool open + [MenuItem("Window/Analysis/Rendering Debugger", priority = 10005)] + static void Init() { - get => DebugManager.instance.displayEditorUI; - private set => DebugManager.instance.displayEditorUI = value; + var window = GetWindow(); + window.titleContent = s_TitleContent; + window.minSize = new Vector2(800f, 300f); } - [DidReloadScripts] - static void OnEditorReload() + [MenuItem("Window/Analysis/Rendering Debugger", validate = true)] + static bool ValidateMenuItem() { - s_TypeMapDirty = true; - - //find if it where open, relink static event end propagate the info - open = (Resources.FindObjectsOfTypeAll()?.Length ?? 0) > 0; + return RenderPipelineManager.currentPipeline != null; } - static void RebuildTypeMaps() + public void CreateGUI() { - // Map states to widget (a single state can map to several widget types if the value to - // serialize is the same) - var attrType = typeof(DebugStateAttribute); - var stateTypes = CoreUtils.GetAllTypesDerivedFrom() - .Where( - t => t.IsDefined(attrType, false) - && !t.IsAbstract - ); - - s_WidgetStateMap = new Dictionary(); - - foreach (var stateType in stateTypes) - { - var attr = (DebugStateAttribute)stateType.GetCustomAttributes(attrType, false)[0]; - - foreach (var t in attr.types) - s_WidgetStateMap.Add(t, stateType); - } +#if ENABLE_RENDERING_DEBUGGER_UI + RecreateGUI(); - // Drawers - attrType = typeof(DebugUIDrawerAttribute); - var types = CoreUtils.GetAllTypesDerivedFrom() - .Where( - t => t.IsDefined(attrType, false) - && !t.IsAbstract - ); + UpdateWidgetStates(); +#else + var helpBox = new HelpBox( + "UIElements Module is disabled. In order to use Rendering Debugger, enable the module in Package Manager > Built-in. ", + HelpBoxMessageType.Info); + helpBox.buttonText = "Open in Package Manager"; + helpBox.onButtonClicked += () => PackageManager.UI.Window.Open("com.unity.modules.uielements"); + rootVisualElement.Add(helpBox); +#endif + } - s_WidgetDrawerMap = new Dictionary(); +#if ENABLE_RENDERING_DEBUGGER_UI + [SerializeField] + string m_SelectedPanelName; - foreach (var t in types) + DebugUI.Panel m_SelectedPanel; + DebugUI.Panel selectedPanel + { + get => m_SelectedPanel; + set { - var attr = (DebugUIDrawerAttribute)t.GetCustomAttributes(attrType, false)[0]; - var inst = (DebugUIDrawer)Activator.CreateInstance(t); - s_WidgetDrawerMap.Add(attr.type, inst); + m_SelectedPanel = value; + m_SelectedPanelName = m_SelectedPanel?.displayName; } - - // Done - s_TypeMapDirty = false; } - [MenuItem("Window/Analysis/Rendering Debugger", priority = 10005)] - static void Init() - { - var window = GetWindow(); - window.titleContent = Styles.windowTitle; - window.minSize = new Vector2(800f, 300f); - } + VisualElement m_LeftPaneElement; + VisualElement m_RightPaneElement; - [MenuItem("Window/Analysis/Rendering Debugger", validate = true)] - static bool ValidateMenuItem() - { - return RenderPipelineManager.currentPipeline != null; - } + const string k_UssCommon = "Packages/com.unity.render-pipelines.core/Runtime/DEbugging/Runtime UI Resources/DebugWindowCommon.uss"; + const string k_Uss = "Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.uss"; + const string k_Uxml = "Packages/com.unity.render-pipelines.core/Editor/Debugging/DebugWindow.uxml"; + + bool m_IsDirty; + + Vector2 m_PanelScroll; + Vector2 m_ContentScroll; void OnEnable() { - open = true; + DebugManager.instance.displayEditorUI = true; DebugManager.instance.refreshEditorRequested = false; hideFlags = HideFlags.HideAndDontSave; autoRepaintOnSceneChange = true; - if (m_Settings == null) - m_Settings = CreateInstance(); - - // States are ScriptableObjects (necessary for Undo/Redo) but are not saved on disk so when the editor is closed then reopened, any existing debug window will have its states set to null - // Since we don't care about persistence in this case, we just re-init everything. if (m_WidgetStates == null || !AreWidgetStatesValid()) m_WidgetStates = new WidgetStateDictionary(); - - if (s_WidgetStateMap == null || s_WidgetDrawerMap == null || s_TypeMapDirty) + if (s_WidgetStateMap == null || s_TypeMapDirty) RebuildTypeMaps(); - Undo.undoRedoPerformed += OnUndoRedoPerformed; DebugManager.instance.onSetDirty += MarkDirty; - // First init - UpdateWidgetStates(); - - EditorApplication.update -= Repaint; - var panels = DebugManager.instance.panels; - var selectedPanelIndex = m_Settings.selectedPanel; - if (selectedPanelIndex >= 0 - && selectedPanelIndex < panels.Count - && panels[selectedPanelIndex].editorForceUpdate) - EditorApplication.update += Repaint; - GraphicsToolLifetimeAnalytic.WindowOpened(); - } - - // Note: this won't get called if the window is opened when the editor itself is closed - void OnDestroy() - { - open = false; - DebugManager.instance.onSetDirty -= MarkDirty; - Undo.ClearUndo(m_Settings); - - DestroyWidgetStates(); - } - private void OnDisable() - { - GraphicsToolLifetimeAnalytic.WindowClosed(); + HookLegacyWidgetStateHandlingCallbacks(); + HookValueChangedAnalytics(); } - public void DestroyWidgetStates() + // We use reflection to hook analytics to the onWidgetValueChangedAnalytic callback. The callback itself is required here because + // GraphicsToolUsageAnalytic is in the editor assembly but all widgets are in runtime. Reflection is used because we want to + // also hook analytics for any custom user widgets derived from public DebugUI.Field. + void HookValueChangedAnalytics() { - if (m_WidgetStates == null) - return; - - // Clear all the states from memory - foreach (var state in m_WidgetStates) + var allFieldTypes = TypeCache.GetTypesDerivedFrom(typeof(DebugUI.Field<>)); + foreach (var fieldType in allFieldTypes) { - var s = state.Value; - Undo.ClearUndo(s); // Don't leave dangling states in the global undo/redo stack - DestroyImmediate(s); - } - - m_WidgetStates.Clear(); - } - - public void ReloadWidgetStates() - { - if (m_WidgetStates == null) - return; - - // Clear states from memory that don't have a corresponding widget - List keysToRemove = new (); - foreach (var state in m_WidgetStates) - { - var widget = DebugManager.instance.GetItem(state.Key); - if (widget == null) + try { - var s = state.Value; - Undo.ClearUndo(s); // Don't leave dangling states in the global undo/redo stack - DestroyImmediate(s); - keysToRemove.Add(state.Key); + var genericArgs = fieldType.BaseType.GetGenericArguments(); + if (fieldType.IsAbstract || genericArgs.Length == 0) + continue; + + var field = fieldType.GetField(nameof(DebugUI.Field.onWidgetValueChangedAnalytic), BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy); + var method = GetType().GetMethod(nameof(SendWidgetValueChangedAnalytic), BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy); + var genericArg = fieldType.BaseType.GetGenericArguments()[0]; + var genericMethod = method.MakeGenericMethod(genericArg); + var delegateType = typeof(Action<,,>).MakeGenericType(typeof(string), genericArg, genericArg); + var callback = Delegate.CreateDelegate(delegateType, null, genericMethod); + field.SetValue(null, callback); } - } - - // Cleanup null entries because they can break the dictionary serialization - foreach (var key in keysToRemove) - { - m_WidgetStates.Remove(key); - } - - UpdateWidgetStates(); - } - - bool AreWidgetStatesValid() - { - foreach (var state in m_WidgetStates) - { - if (state.Value == null) + catch (Exception ex) { - return false; + Debug.LogWarning($"Failed to hook analytics for {fieldType}: {ex.Message}"); } } - return true; } - void MarkDirty() - { - m_IsDirty = true; - } - - // We use item states to keep a cached value of each serializable debug items in order to - // handle domain reloads, play mode entering/exiting and undo/redo - // Note: no removal of orphan states - void UpdateWidgetStates() - { - foreach (var panel in DebugManager.instance.panels) - UpdateWidgetStates(panel); - } - - internal DebugState GetOrCreateDebugStateForValueField(DebugUI.Widget widget) - { - // Skip runtime & readonly only items - if (widget.isInactiveInEditor) - return null; - - if (widget is not DebugUI.IValueField valueField) - return null; - - string queryPath = widget.queryPath; - if (!m_WidgetStates.TryGetValue(queryPath, out var state) || state == null) - { - var widgetType = widget.GetType(); - if (s_WidgetStateMap.TryGetValue(widgetType, out Type stateType)) - { - Assert.IsNotNull(stateType); - state = (DebugState)CreateInstance(stateType); - state.queryPath = queryPath; - state.SetValue(valueField.GetValue(), valueField); - m_WidgetStates[queryPath] = state; - } - } - - if (valueField is ISyncUIState sync && sync.syncState) - { - state.SetValue(valueField.GetValue(), valueField); - sync.syncState = false; - } - - return state; - } + // Store timestamps to throttle event sending + static readonly Dictionary s_SentAnalyticsTimestamps = new (); - void UpdateWidgetStates(DebugUI.IContainer container) + static void SendWidgetValueChangedAnalytic(string queryPath, T previousValue, T newValue) { - // Skip runtime only containers, we won't draw them so no need to serialize them either - if (container is DebugUI.Widget actualWidget && actualWidget.isInactiveInEditor) + if (queryPath == null) return; - // Recursively update widget states - foreach (var widget in container.children) - { - // Skip non-serializable widgets but still traverse them in case one of their - // children needs serialization support - var state = GetOrCreateDebugStateForValueField(widget); - - if (state != null) - continue; - - // Recurse if the widget is a container - if (widget is DebugUI.IContainer containerField) - UpdateWidgetStates(containerField); - } - } - - public void ApplyStates(bool forceApplyAll = false) - { - // If we are in playmode, and the runtime UI is shown, avoid that the editor UI - // applies the data of the internal debug states, as they are not kept in sync - if (Application.isPlaying && DebugManager.instance.displayRuntimeUI) + const float kMaxSendRateSeconds = 0.5f; + float now = (float)EditorApplication.timeSinceStartup; + if (s_SentAnalyticsTimestamps.TryGetValue(queryPath, out float lastSentAt) && now - lastSentAt < kMaxSendRateSeconds) return; - if (!forceApplyAll && DebugState.m_CurrentDirtyState != null) - { - ApplyState(DebugState.m_CurrentDirtyState.queryPath, DebugState.m_CurrentDirtyState); - } - else - { - foreach (var state in m_WidgetStates) - ApplyState(state.Key, state.Value); - } + s_SentAnalyticsTimestamps[queryPath] = now; - DebugState.m_CurrentDirtyState = null; + var analytic = new List> { new() + { + query_path = queryPath, + previous_value = previousValue, + new_value = newValue + } }; + GraphicsToolUsageAnalytic.ActionPerformed("Widget Value Changed", analytic.ToNestedColumn()); } - void ApplyState(string queryPath, DebugState state) + // Note: this won't get called if the window is opened when the editor itself is closed + void OnDestroy() { - if (state == null || !(DebugManager.instance.GetItem(queryPath) is DebugUI.IValueField widget)) - return; + // Note: In the case where the window is maximized/unmaximized, OnEnable for the new window gets called *before* OnDestroy. + // Therefore you need to be careful with statics/globals. In this case, we only mark displayEditorUI as false if we are + // closing the only/last DebugWindow instance. + if (Resources.FindObjectsOfTypeAll(typeof(DebugWindow)).Length == 0) + DebugManager.instance.displayEditorUI = false; - widget.SetValue(state.GetValue()); + DebugManager.instance.onSetDirty -= MarkDirty; + + DestroyWidgetStates(); } - void OnUndoRedoPerformed() + private void OnDisable() { - int stateHash = ComputeStateHash(); - - // Something has been undone / redone, re-apply states to the debug tree - if (stateHash != m_Settings.currentStateHash) - { - ApplyStates(true); - m_Settings.currentStateHash = stateHash; - } - - Repaint(); + GraphicsToolLifetimeAnalytic.WindowClosed(); } - int ComputeStateHash() + void MarkDirty() { - unchecked - { - int hash = 13; - - foreach (var state in m_WidgetStates) - hash = hash * 23 + state.Value.GetHashCode(); - - return hash; - } + m_IsDirty = true; } void Update() @@ -384,289 +195,130 @@ void Update() DebugManager.instance.refreshEditorRequested = false; } - int? requestedPanelIndex = DebugManager.instance.GetRequestedEditorWindowPanelIndex(); - if (requestedPanelIndex != null) + string requestedPanel = DebugManager.instance.GetRequestedEditorWindowPanel(); + if (requestedPanel != null) { - m_Settings.selectedPanel = requestedPanelIndex.Value; + SetSelectedPanel(requestedPanel); } if (m_IsDirty) { - UpdateWidgetStates(); - ApplyStates(); m_IsDirty = false; - - Repaint(); + RecreateGUI(); } } - void OnGUI() + private void RecreateGUI() { - if (s_Styles == null) - { - s_Styles = new Styles(); - s_SplitterLeft = new GUIStyle(); - } + rootVisualElement.Clear(); var panels = DebugManager.instance.panels; - int itemCount = panels.Count(x => !x.isInactiveInEditor && x.children.Count(w => !w.isInactiveInEditor) > 0); - - if (itemCount == 0) - { - EditorGUILayout.HelpBox("No debug item found.", MessageType.Info); - return; - } - GUILayout.BeginHorizontal(EditorStyles.toolbar); - GUILayout.FlexibleSpace(); - if (GUILayout.Button(Styles.resetButtonContent, EditorStyles.toolbarButton)) + // Adding all panels that are not inactive in editor and have at least one active child + var activePanels = new List(); + foreach (var panel in panels) { - DebugManager.instance.Reset(); - DestroyWidgetStates(); - UpdateWidgetStates(); - InternalEditorUtility.RepaintAllViews(); - } - - GUILayout.EndHorizontal(); - - using (new EditorGUILayout.HorizontalScope()) - { - // Side bar - using (var scrollScope = new EditorGUILayout.ScrollViewScope(m_PanelScroll, s_Styles.sectionScrollView, GUILayout.Width(splitterPos))) + if (!panel.isInactiveInEditor) { - if (m_Settings.selectedPanel >= panels.Count) - m_Settings.selectedPanel = 0; - - // Validate container id - while (panels[m_Settings.selectedPanel].isInactiveInEditor || panels[m_Settings.selectedPanel].children.Count(x => !x.isInactiveInEditor) == 0) + foreach (var child in panel.children) { - m_Settings.selectedPanel++; - - if (m_Settings.selectedPanel >= panels.Count) - m_Settings.selectedPanel = 0; - } - - // Root children are containers - for (int i = 0; i < panels.Count; i++) - { - var panel = panels[i]; - - if (panel.isInactiveInEditor) - continue; - - if (panel.children.Count(x => !x.isInactiveInEditor) == 0) - continue; - - var elementRect = GUILayoutUtility.GetRect(EditorGUIUtility.TrTextContent(panel.displayName), s_Styles.sectionElement, GUILayout.ExpandWidth(true)); - - if (m_Settings.selectedPanel == i && Event.current.type == EventType.Repaint) - s_Styles.selected.Draw(elementRect, false, false, false, false); - - EditorGUI.BeginChangeCheck(); - GUI.Toggle(elementRect, m_Settings.selectedPanel == i, panel.displayName, s_Styles.sectionElement); - if (EditorGUI.EndChangeCheck()) + if (!child.isInactiveInEditor) { - Undo.RegisterCompleteObjectUndo(m_Settings, $"Debug Panel '{panel.displayName}' Selection"); - var previousPanel = m_Settings.selectedPanel >= 0 && m_Settings.selectedPanel < panels.Count - ? panels[m_Settings.selectedPanel] - : null; - if (previousPanel != null && previousPanel.editorForceUpdate && !panel.editorForceUpdate) - EditorApplication.update -= Repaint; - else if ((previousPanel == null || !previousPanel.editorForceUpdate) && panel.editorForceUpdate) - EditorApplication.update += Repaint; - m_Settings.selectedPanel = i; + activePanels.Add(panel); + break; } } - - m_PanelScroll = scrollScope.scrollPosition; } + } - Rect splitterRect = new Rect(splitterPos - 3, 0, 6, Screen.height); - GUI.Box(splitterRect, "", s_SplitterLeft); - - const float topMargin = 2f; - GUILayout.Space(topMargin); - - // Main section - traverse current container - using (var changedScope = new EditorGUI.ChangeCheckScope()) - { - using (new EditorGUILayout.VerticalScope()) - { - var selectedPanel = panels[m_Settings.selectedPanel]; + if (activePanels.Count == 0) + { + rootVisualElement.Add(new HelpBox("No debug items registered. Make sure a Render Pipeline Asset is assigned in Quality Settings.", HelpBoxMessageType.Info)); + return; + } - using (new EditorGUILayout.HorizontalScope()) - { - var style = new GUIStyle(CoreEditorStyles.sectionHeaderStyle) { fontStyle = FontStyle.Bold }; - EditorGUILayout.LabelField(new GUIContent(selectedPanel.displayName), style); + var windowUxml = EditorGUIUtility.LoadRequired(k_Uxml) as VisualTreeAsset; + var commonUss = EditorGUIUtility.LoadRequired(k_UssCommon) as StyleSheet; + var windowUss = EditorGUIUtility.LoadRequired(k_Uss) as StyleSheet; - // Context menu - var rect = GUILayoutUtility.GetLastRect(); - var contextMenuRect = new Rect(rect.xMax, rect.y + 4f, 16f, 16f); + if (commonUss == null || windowUss == null || windowUxml == null) + throw new InvalidOperationException("Unable to find required UXML and USS files"); - CoreEditorUtils.ShowHelpButton(contextMenuRect, selectedPanel.documentationUrl, new GUIContent($"{selectedPanel.displayName} panel.")); - } + rootVisualElement.styleSheets.Add(commonUss); + rootVisualElement.styleSheets.Add(windowUss); + windowUxml.CloneTree(rootVisualElement); - const float leftMargin = 4f; - GUILayout.Space(leftMargin); + m_LeftPaneElement = rootVisualElement.Q(name: "tabs-insertion-element"); + m_RightPaneElement = rootVisualElement.Q(name: "panels-inspector-insertion-element"); - using (var scrollScope = new EditorGUILayout.ScrollViewScope(m_ContentScroll)) - { - const float scrollViewTopMargin = 4f; - GUILayout.Space(scrollViewTopMargin); - - TraverseContainerGUI(selectedPanel); - m_ContentScroll = scrollScope.scrollPosition; - - const float scrollViewBottomMargin = 10f; - GUILayout.Space(scrollViewBottomMargin); - } - } + if (m_LeftPaneElement == null || m_RightPaneElement == null) + throw new InvalidOperationException("Unable to find required insertion Visual Elements"); - if (changedScope.changed) - { - m_Settings.currentStateHash = ComputeStateHash(); - DebugManager.instance.ReDrawOnScreenDebug(); - } - } + m_LeftPaneElement.Clear(); + m_RightPaneElement.Clear(); - // Splitter events - if (Event.current != null) - { - switch (Event.current.rawType) - { - case EventType.MouseDown: - if (splitterRect.Contains(Event.current.mousePosition)) - { - dragging = true; - } - break; - case EventType.MouseDrag: - if (dragging) - { - splitterPos += Event.current.delta.x; - splitterPos = Mathf.Clamp(splitterPos, minSideBarWidth, position.width - minContentWidth); - Repaint(); - } - break; - case EventType.MouseUp: - if (dragging) - { - dragging = false; - } - break; - } - } - EditorGUIUtility.AddCursorRect(splitterRect, MouseCursor.ResizeHorizontal); - } - } + var resetButton = rootVisualElement.Q(name: "btn-reset"); + resetButton.clicked -= ResetClicked; + resetButton.clicked += ResetClicked; - void OnWidgetGUI(DebugUI.Widget widget) - { - if (widget.isInactiveInEditor || widget.isHidden) - return; + var uiPanels = DebugUIExtensions.CreatePanels(activePanels, DebugUI.Context.Editor); - if (widget.queryPath == null) + foreach (var (tab, panel) in uiPanels) { - Debug.LogError($"Widget {widget.GetType()} query path is null"); - return; + panel.style.display = DisplayStyle.None; + tab.RegisterCallback(_ => SetSelectedPanel(tab.text)); + m_LeftPaneElement.Add(tab); + m_RightPaneElement.Add(panel); } - if (!s_WidgetDrawerMap.TryGetValue(widget.GetType(), out DebugUIDrawer drawer)) + string selectedPanelName = m_SelectedPanelName; + if (string.IsNullOrEmpty(selectedPanelName) || m_LeftPaneElement.Q [DebugUIDrawer(typeof(DebugUI.MaskField))] - [Obsolete("DebugUI.MaskField has been deprecated and is not longer supported, please use BitField instead. #from(6000.2)")] + [Obsolete("DebugUI.MaskField has been deprecated and is not longer supported, please use BitField instead. #from(6000.2)", true)] public sealed class DebugUIDrawerMaskField : DebugUIFieldDrawer { /// diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeSubdivisionContext.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeSubdivisionContext.cs index f54e06a7637..2a2af0d35fa 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeSubdivisionContext.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeSubdivisionContext.cs @@ -28,7 +28,7 @@ static RealtimeProbeSubdivisionDebug() static void UpdateRealtimeSubdivisionDebug() { var debugDisplay = ProbeReferenceVolume.instance.probeVolumeDebug; - if (!debugDisplay.realtimeSubdivision) + if (debugDisplay == null || !debugDisplay.realtimeSubdivision) return; // Avoid killing the GPU when Unity is in background and runInBackground is disabled diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs index fd87b3966a8..0e41fa4d3b5 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs @@ -1,3 +1,7 @@ +#if ENABLE_UIELEMENTS_MODULE && (UNITY_EDITOR || DEVELOPMENT_BUILD) +#define ENABLE_RENDERING_DEBUGGER_UI +#endif + using System; using System.Linq; using System.Reflection; @@ -288,12 +292,12 @@ public override void OnHeaderSettingsGUI() internal static void OpenProbeVolumeDebugPanel(object userData, string[] options, int selected) { - var debugPanel = EditorWindow.GetWindow(); - debugPanel.titleContent = DebugWindow.Styles.windowTitle; - debugPanel.Show(); - var index = DebugManager.instance.FindPanelIndex(ProbeReferenceVolume.k_DebugPanelName); - if (index != -1) - DebugManager.instance.RequestEditorWindowPanelIndex(index); +#if ENABLE_RENDERING_DEBUGGER_UI + var debugWindow = EditorWindow.GetWindow(); + debugWindow.titleContent = DebugWindow.s_TitleContent; + debugWindow.Show(); + DebugManager.instance.RequestEditorWindowPanel(ProbeReferenceVolume.k_DebugPanelName); +#endif } // Need to have this only clear probes when we properly split lightmap and probe baking. @@ -1236,6 +1240,9 @@ bool IsVisible() var debug = ProbeReferenceVolume.instance.probeVolumeDebug; var bakingSet = ProbeReferenceVolume.instance.currentBakingSet; + if (debug == null) + return false; + bool debugLayers = debug.drawProbes && debug.probeShading == DebugProbeShadingMode.RenderingLayerMasks && bakingSet != null; if (!debug.drawBricks && !debug.drawProbeSamplingDebug && !debugLayers) return false; diff --git a/Packages/com.unity.render-pipelines.core/Editor/Unity.RenderPipelines.Core.Editor.asmdef b/Packages/com.unity.render-pipelines.core/Editor/Unity.RenderPipelines.Core.Editor.asmdef index 1500f6b0c6c..4e863d8105d 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Unity.RenderPipelines.Core.Editor.asmdef +++ b/Packages/com.unity.render-pipelines.core/Editor/Unity.RenderPipelines.Core.Editor.asmdef @@ -31,6 +31,11 @@ "name": "com.unity.modules.physics", "expression": "1.0.0", "define": "ENABLE_PHYSICS_MODULE" + }, + { + "name": "com.unity.modules.uielements", + "expression": "1.0.0", + "define": "ENABLE_UIELEMENTS_MODULE" } ], "noEngineReferences": false diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Common/ReloadGroupAttribute.cs b/Packages/com.unity.render-pipelines.core/Runtime/Common/ReloadGroupAttribute.cs index 65c9235b737..73db9e5359b 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Common/ReloadGroupAttribute.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Common/ReloadGroupAttribute.cs @@ -1,11 +1,9 @@ using System; -using UnityEditor; -using static UnityEngine.Rendering.DebugUI.Table; namespace UnityEngine.Rendering { /// - /// Attribute specifying that fields of this type should be inspected in depth by the . + /// Attribute specifying that fields of this type should be inspected in depth by the . /// If the associated class instance is null, the system attempts to recreate it using its default constructor. /// /// diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySerializer.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySerializer.cs new file mode 100644 index 00000000000..0f90d4ce225 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySerializer.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace UnityEngine.Rendering +{ + /// + /// Helper class that serializes Rendering Debugger state across domain reloads. + /// If you want the state of your debug variables to persist across domain reloads, the setting class should + /// be marked [Serializable] and implement the interface. + /// Then you can access the serialized instance through . + /// + public sealed class DebugDisplaySerializer +#if UNITY_EDITOR + : ScriptableSingleton +#endif + { + // For player builds, implement the singleton pattern internally +#if !UNITY_EDITOR + static Lazy s_Instance = new (() => new ()); + + /// Gets the instance of the singleton. + public static DebugDisplaySerializer instance => s_Instance.Value; +#endif + + [SerializeReference] + List m_Settings = new(); + + [SerializeField] + SerializedDictionary m_FoldoutStates = new(); + + ISerializedDebugDisplaySettings GetOrCreate(Type type) + { + var setting = Get(type); + if (setting != null) + return setting; + + if (!type.IsAbstract && !type.IsInterface) + { + setting = Activator.CreateInstance(type, nonPublic: true) as ISerializedDebugDisplaySettings; + m_Settings.Add(setting); + return setting; + } + + return null; + } + + ISerializedDebugDisplaySettings Get(Type type) + { + int numSettings = m_Settings.Count; + for (int i = 0; i < numSettings; ++i) + { + if (m_Settings[i].GetType() == type) + return m_Settings[i]; + } + + return null; + } + + /// + /// Returns the serialized instance for the given debug display settings type. + /// If the instance does not exist yet, it will be created. The next time this method is called with + /// the same type, the same instance will be returned. + /// + /// The debug display settings type to retrieve. + /// The serialized instance for the given debug display settings type. + public static T GetOrCreate() where T : class, ISerializedDebugDisplaySettings + { + return instance.GetOrCreate(typeof(T)) as T; + } + + /// + /// Returns the serialized instance for the given debug display settings type. + /// If the instance does not exist, null is returned. + /// + /// The debug display settings type to retrieve. + /// The serialized instance for the given debug display settings type if it exists, or null otherwise. + public static T Get() where T : class, ISerializedDebugDisplaySettings + { + return instance.Get(typeof(T)) as T; + } + + /// + /// Remove all instances of serialized debug display settings that have been created. + /// + public static void Clear() + { + instance.m_Settings.Clear(); + } + + /// + /// Restore foldout open/closed states from serialized data. + /// + public static void LoadFoldoutStates() + { + DebugManager.instance.ForEachWidget(widget => + { + if (widget is DebugUI.Foldout foldout) + if (instance.m_FoldoutStates.TryGetValue(widget.queryPath, out bool opened)) + foldout.opened = opened; + }); + } + + /// + /// Save foldout open/closed states to serialized data. + /// + public static void SaveFoldoutStates() + { + instance.m_FoldoutStates.Clear(); + + DebugManager.instance.ForEachWidget(widget => + { + if (widget is DebugUI.Foldout foldout) + instance.m_FoldoutStates.TryAdd(widget.queryPath, foldout.opened); + }); + } + } +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySerializer.cs.meta b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySerializer.cs.meta new file mode 100644 index 00000000000..ada457ffb65 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySerializer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5656576c8c834caeac23f9db698f265f +timeCreated: 1756467515 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsHDROutput.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsHDROutput.cs index 4a039b9fa80..a9ebedbdfa6 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsHDROutput.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsHDROutput.cs @@ -33,68 +33,20 @@ public static DebugUI.Table CreateHDROuputDisplayTable() var table = new DebugUI.Table() { displayName = Strings.hdrOutputAPI, + alternateRowColors = true, isReadOnly = true }; - var row_hdrActive = new DebugUI.Table.Row() - { - displayName = Strings.hdrActive, - opened = true - }; - - var row_hdrAvailable = new DebugUI.Table.Row() - { - displayName = Strings.hdrAvailable, - opened = true - }; - - var row_gamut = new DebugUI.Table.Row() - { - displayName = Strings.gamut, - opened = false - }; - - var row_format = new DebugUI.Table.Row() - { - displayName = Strings.format, - opened = false - }; - - var row_autoHdrTonemapping = new DebugUI.Table.Row() - { - displayName = Strings.autoHdrTonemapping, - opened = false - }; - - var row_paperWhite = new DebugUI.Table.Row() - { - displayName = Strings.paperWhite, - opened = false - }; - - var row_minLuminance = new DebugUI.Table.Row() - { - displayName = Strings.minLuminance, - opened = false - }; - - var row_maxLuminance = new DebugUI.Table.Row() - { - displayName = Strings.maxLuminance, - opened = false - }; - - var row_maxFullFrameLuminance = new DebugUI.Table.Row() - { - displayName = Strings.maxFullFrameLuminance, - opened = false - }; - - var row_modeChangeRequested = new DebugUI.Table.Row() - { - displayName = Strings.modeChangeRequested, - opened = false - }; + var row_hdrActive = new DebugUI.Table.Row { displayName = Strings.hdrActive }; + var row_hdrAvailable = new DebugUI.Table.Row { displayName = Strings.hdrAvailable }; + var row_gamut = new DebugUI.Table.Row { displayName = Strings.gamut }; + var row_format = new DebugUI.Table.Row { displayName = Strings.format }; + var row_autoHdrTonemapping = new DebugUI.Table.Row { displayName = Strings.autoHdrTonemapping }; + var row_paperWhite = new DebugUI.Table.Row { displayName = Strings.paperWhite }; + var row_minLuminance = new DebugUI.Table.Row { displayName = Strings.minLuminance }; + var row_maxLuminance = new DebugUI.Table.Row { displayName = Strings.maxLuminance }; + var row_maxFullFrameLuminance = new DebugUI.Table.Row { displayName = Strings.maxFullFrameLuminance}; + var row_modeChangeRequested = new DebugUI.Table.Row { displayName = Strings.modeChangeRequested }; //Iterate through all displays HDROutputSettings[] displays = HDROutputSettings.displays; @@ -115,9 +67,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_hdrActive.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { return d.active; } @@ -127,9 +79,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_hdrAvailable.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { return d.available; } @@ -139,9 +91,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_gamut.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { if(d.available) { @@ -155,9 +107,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_format.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { if(d.available) { @@ -171,9 +123,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_autoHdrTonemapping.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { if(d.available) { @@ -187,9 +139,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_paperWhite.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { if(d.available) { @@ -203,9 +155,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_minLuminance.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { if(d.available) { @@ -219,9 +171,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_maxLuminance.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { if(d.available) { @@ -235,9 +187,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_maxFullFrameLuminance.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { if(d.available) { @@ -251,9 +203,9 @@ public static DebugUI.Table CreateHDROuputDisplayTable() row_modeChangeRequested.children.Add ( new DebugUI.Value() - { + { displayName = name, - getter = () => + getter = () => { if(d.available) { @@ -280,4 +232,4 @@ public static DebugUI.Table CreateHDROuputDisplayTable() return table; } } -} \ No newline at end of file +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsUI.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsUI.cs index bb29b4cf382..f7fd9098d8e 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsUI.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsUI.cs @@ -66,6 +66,8 @@ public void RegisterDebug(IDebugDisplaySettings settings) }; m_Settings.ForEach(onExecute); + + DebugDisplaySerializer.LoadFoldoutStates(); } /// @@ -73,6 +75,8 @@ public void RegisterDebug(IDebugDisplaySettings settings) /// public void UnregisterDebug() { + DebugDisplaySerializer.SaveFoldoutStates(); + DebugManager debugManager = DebugManager.instance; if (m_DisposablePanels != null) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsVolumes.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsVolumes.cs index d385dd0ad3a..3619e4dbf17 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsVolumes.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplaySettingsVolumes.cs @@ -4,7 +4,6 @@ #if UNITY_EDITOR using UnityEditor; -using static UnityEngine.Rendering.DebugUI; #endif namespace UnityEngine.Rendering @@ -12,7 +11,8 @@ namespace UnityEngine.Rendering /// /// Debug Display Settings Volume /// - public class DebugDisplaySettingsVolume : IDebugDisplaySettingsData + [Serializable] + public class DebugDisplaySettingsVolume : IDebugDisplaySettingsData, ISerializedDebugDisplaySettings { /// Current volume debug settings. [Obsolete("This property has been obsoleted and will be removed in a future version. #from(6000.2)")] @@ -291,11 +291,7 @@ internal static void OpenInRenderingDebugger(VolumeComponent volumeComponent = n if (panel == null) return; - var idx = DebugManager.instance.FindPanelIndex(k_PanelTitle); - if (idx != -1) - { - DebugManager.instance.RequestEditorWindowPanelIndex(idx); - } + DebugManager.instance.RequestEditorWindowPanel(k_PanelTitle); // Try to select the given volume component in the component selector drop down if (volumeComponent != null && @@ -317,7 +313,6 @@ internal static void OpenInRenderingDebugger(VolumeComponent volumeComponent = n EditorApplication.delayCall = () => { componentSelector.SetValue(selectedIndex); - (componentSelector as ISyncUIState).syncState = true; }; } } @@ -375,9 +370,10 @@ internal static DebugUI.Widget CreateVolumeParameterWidget(string name, bool isR var p = (ColorParameter)param; return new DebugUI.ColorField() { - displayName = name, + displayName = "", hdr = p.hdr, showAlpha = p.showAlpha, + showPicker = false, getter = () => p.value, setter = value => p.value = value, isHiddenCallback = isHiddenCallback @@ -393,7 +389,7 @@ internal static DebugUI.Widget CreateVolumeParameterWidget(string name, bool isR { return new DebugUI.ObjectField() { - displayName = name, + displayName = "", getter = () => { var property = parameterType.GetProperty("value"); @@ -584,6 +580,7 @@ public static DebugUI.Table CreateVolumeTable(DebugDisplaySettingsVolume data) { displayName = Strings.parameter, isReadOnly = true, + alternateRowColors = true, isHiddenCallback = hiddenCallback, }; @@ -656,41 +653,11 @@ private static void GenerateTableColumns(DebugUI.Table table, DebugDisplaySettin private static void GenerateTableRows(DebugUI.Table table, List resolutionChain) { - var volumeInfoRow = new DebugUI.Table.Row() - { - displayName = Strings.volumeInfo, - opened = true, // Open by default for the in-game view - }; - - table.children.Add(volumeInfoRow); - - var gameObjectRow = new DebugUI.Table.Row() - { - displayName = Strings.gameObject, - }; - - table.children.Add(gameObjectRow); - - var priorityRow = new DebugUI.Table.Row() - { - displayName = Strings.priority, - }; - - table.children.Add(priorityRow); - - var volumeProfileRow = new DebugUI.Table.Row() - { - displayName = Strings.volumeProfile, - }; - table.children.Add(volumeProfileRow); - - - var separatorRow = new DebugUI.Table.Row() - { - displayName = string.Empty , - }; - - table.children.Add(separatorRow); + table.children.Add(new DebugUI.Table.Row { displayName = Strings.volumeInfo }); + table.children.Add(new DebugUI.Table.Row { displayName = Strings.gameObject }); + table.children.Add(new DebugUI.Table.Row { displayName = Strings.priority }); + table.children.Add(new DebugUI.Table.Row { displayName = Strings.volumeProfile }); + table.children.Add(new DebugUI.Table.Row { displayName = string.Empty }); // Empty separator row var results = resolutionChain[0].volumeComponent; for (int i = 0; i < results.parameterList.Length; ++i) @@ -701,10 +668,7 @@ private static void GenerateTableRows(DebugUI.Table table, List { - // When we are moving the scene camera, we want the editor window to be repainted too - public override DebugUI.Flags Flags => DebugUI.Flags.EditorForceUpdate; - public override void Dispose() { base.Dispose(); @@ -734,7 +695,9 @@ public SettingsPanel(DebugDisplaySettingsVolume data) data.selectedCamera = availableCameras[0]; AddWidget(cameraSelector); - AddWidget(WidgetFactory.CreateComponentSelector(this, (_, __) => Refresh())); + var componentSelector = WidgetFactory.CreateComponentSelector(this, (_, __) => Refresh()); + componentSelector.isHiddenCallback = () => data.selectedCamera == null; + AddWidget(componentSelector); Func hiddenCallback = () => data.selectedCamera == null || data.selectedComponent <= 0; AddWidget(new DebugUI.MessageBox() @@ -752,7 +715,6 @@ public SettingsPanel(DebugDisplaySettingsVolume data) private void OnVolumeInfluenceChanged(ObservableList sender, ListChangedEventArgs e) { Refresh(); - DebugManager.instance.ReDrawOnScreenDebug(); } DebugUI.Table m_VolumeTable = null; @@ -762,10 +724,8 @@ void Refresh() if (panel == null) return; - bool needsRefresh = false; if (m_Data.selectedComponent > 0 && m_Data.selectedCamera != null) { - needsRefresh = true; var volumeTable = WidgetFactory.CreateVolumeTable(m_Data); m_VolumeTable.children.Clear(); @@ -774,11 +734,6 @@ void Refresh() m_VolumeTable.children.Add(row); } } - - if (needsRefresh) - { - DebugManager.instance.ReDrawOnScreenDebug(); - } } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplayStats.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplayStats.cs index 42ff90f47a7..2c4b4b175ee 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplayStats.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugDisplayStats.cs @@ -118,6 +118,7 @@ protected DebugUI.Widget BuildDetailedStatsList(string title, List s { var foldout = new DebugUI.Foldout(title, BuildProfilingSamplerWidgetList(samplers), k_DetailedStatsColumnLabels); foldout.opened = true; + foldout.alternateRowColors = true; return foldout; } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugFrameTiming.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugFrameTiming.cs index 8f7c7557878..7cf16afe7cc 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugFrameTiming.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugFrameTiming.cs @@ -81,6 +81,7 @@ public void RegisterDebugUI(List list) displayName = "Frame Stats", opened = true, columnLabels = new string[] { "Avg", "Min", "Max" }, + alternateRowColors = true, children = { new DebugUI.ValueTuple diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.Actions.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.Actions.cs index 6cecbc96d61..fb1240c3203 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.Actions.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.Actions.cs @@ -14,9 +14,7 @@ internal enum DebugAction EnableDebugMenu, PreviousDebugPanel, NextDebugPanel, - Action, MakePersistent, - MoveVertical, MoveHorizontal, Multiplier, ResetAll, @@ -93,15 +91,6 @@ void RegisterActions() previousDebugPanel.repeatMode = DebugActionRepeatMode.Never; AddAction(DebugAction.PreviousDebugPanel, previousDebugPanel); - var validate = new DebugActionDesc(); -#if USE_INPUT_SYSTEM - validate.buttonAction = debugActionMap.FindAction(kValidateBtn); -#else - validate.buttonTriggerList.Add(new[] { kValidateBtn }); -#endif - validate.repeatMode = DebugActionRepeatMode.Never; - AddAction(DebugAction.Action, validate); - var persistent = new DebugActionDesc(); #if USE_INPUT_SYSTEM persistent.buttonAction = debugActionMap.FindAction(kPersistentBtn); @@ -118,20 +107,9 @@ void RegisterActions() multiplier.buttonTriggerList.Add(new[] { kMultiplierBtn }); #endif multiplier.repeatMode = DebugActionRepeatMode.Delay; - validate.repeatDelay = 0f; - + multiplier.repeatDelay = 0f; AddAction(DebugAction.Multiplier, multiplier); - var moveVertical = new DebugActionDesc(); -#if USE_INPUT_SYSTEM - moveVertical.buttonAction = debugActionMap.FindAction(kDPadVertical); -#else - moveVertical.axisTrigger = kDPadVertical; -#endif - moveVertical.repeatMode = DebugActionRepeatMode.Delay; - moveVertical.repeatDelay = 0.16f; - AddAction(DebugAction.MoveVertical, moveVertical); - var moveHorizontal = new DebugActionDesc(); #if USE_INPUT_SYSTEM moveHorizontal.buttonAction = debugActionMap.FindAction(kDPadHorizontal); @@ -329,12 +307,9 @@ void RegisterInputs() new InputManagerEntry { name = kResetBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "left alt", altBtnPositive = "joystick button 1" }, new InputManagerEntry { name = kDebugNextBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "page down", altBtnPositive = "joystick button 5" }, new InputManagerEntry { name = kDebugPreviousBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "page up", altBtnPositive = "joystick button 4" }, - new InputManagerEntry { name = kValidateBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "return", altBtnPositive = "joystick button 0" }, new InputManagerEntry { name = kPersistentBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "right shift", altBtnPositive = "joystick button 2" }, new InputManagerEntry { name = kMultiplierBtn, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "left shift", altBtnPositive = "joystick button 3" }, new InputManagerEntry { name = kDPadHorizontal, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "right", btnNegative = "left", gravity = 1000f, deadZone = 0.001f, sensitivity = 1000f }, - new InputManagerEntry { name = kDPadVertical, kind = InputManagerEntry.Kind.KeyOrButton, btnPositive = "up", btnNegative = "down", gravity = 1000f, deadZone = 0.001f, sensitivity = 1000f }, - new InputManagerEntry { name = kDPadVertical, kind = InputManagerEntry.Kind.Axis, axis = InputManagerEntry.Axis.Seventh, btnPositive = "up", btnNegative = "down", gravity = 1000f, deadZone = 0.001f, sensitivity = 1000f }, new InputManagerEntry { name = kDPadHorizontal, kind = InputManagerEntry.Kind.Axis, axis = InputManagerEntry.Axis.Sixth, btnPositive = "right", btnNegative = "left", gravity = 1000f, deadZone = 0.001f, sensitivity = 1000f }, }; @@ -365,10 +340,6 @@ void RegisterInputs() previous.AddBinding("/pageUp"); previous.AddBinding("/leftShoulder"); - var validateAction = debugActionMap.AddAction(kValidateBtn, type: InputActionType.Button); - validateAction.AddBinding("/enter"); - validateAction.AddBinding("/a"); - var persistentAction = debugActionMap.AddAction(kPersistentBtn, type: InputActionType.Button); persistentAction.AddBinding("/rightShift"); persistentAction.AddBinding("/x"); @@ -377,13 +348,6 @@ void RegisterInputs() multiplierAction.AddBinding("/leftShift"); multiplierAction.AddBinding("/y"); - var moveVerticalAction = debugActionMap.AddAction(kDPadVertical); - moveVerticalAction.AddCompositeBinding("1DAxis") - .With("Positive", "/dpad/up") - .With("Negative", "/dpad/down") - .With("Positive", "/upArrow") - .With("Negative", "/downArrow"); - var moveHorizontalAction = debugActionMap.AddAction(kDPadHorizontal); moveHorizontalAction.AddCompositeBinding("1DAxis") .With("Positive", "/dpad/right") diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.SchedulerTracker.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.SchedulerTracker.cs new file mode 100644 index 00000000000..daad5049666 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.SchedulerTracker.cs @@ -0,0 +1,121 @@ +#if ENABLE_UIELEMENTS_MODULE && (UNITY_EDITOR || DEVELOPMENT_BUILD) +#define ENABLE_RENDERING_DEBUGGER_UI +#endif + +#if ENABLE_RENDERING_DEBUGGER_UI + +using System.Collections.Generic; +using UnityEngine.UIElements; + +namespace UnityEngine.Rendering +{ + using ScheduledItemsDictionary = Dictionary>; + + public sealed partial class DebugManager + { + // This class keeps track of all VisualElementScheduledItems created by DebugUI widgets so they can be paused when the content is not visible, + // and resumed when it becomes visible again. This greatly speeds up the UI because we don't process schedulers in inactive panels and closed foldouts. + internal class SchedulerTracker + { + readonly ScheduledItemsDictionary[] m_ScheduledItems; + + public SchedulerTracker() + { + int numDictionaries = (int)DebugUI.Context.Count; + m_ScheduledItems = new ScheduledItemsDictionary[numDictionaries]; + for (int i = 0; i < numDictionaries; i++) + m_ScheduledItems[i] = new ScheduledItemsDictionary(); + } + + internal ScheduledItemsDictionary GetScheduledItemsDictionary(DebugUI.Context context) => m_ScheduledItems[(int)context]; + + public void SetEnabled(DebugUI.Context context, DebugUI.Widget widget, bool enabled) + { + var dict = GetScheduledItemsDictionary(context); + if (dict.TryGetValue(widget, out var scheduledItems)) + { + foreach (var scheduledItem in scheduledItems) + { + if (enabled) + scheduledItem.Resume(); + else + scheduledItem.Pause(); + } + } + } + + // Any time a widget constructs internal widgets (like containers, tuples, history fields), those widgets need to be handled + // here to ensure their schedulers are enabled/disabled when needed. + void UpdateSchedulersRecursive(DebugUI.Context context, DebugUI.IContainer container, bool enabled) + { + foreach (var child in container.children) + { + SetEnabled(context, child, enabled); + + if (child is DebugUI.IContainer childContainer) + { + bool childContainerEnabled = enabled; + if (child is DebugUI.Foldout childFoldout) + childContainerEnabled = enabled && childFoldout.opened; + UpdateSchedulersRecursive(context, childContainer, childContainerEnabled); + } + + if (child is DebugUI.ValueTuple childTuple) + { + foreach (var value in childTuple.values) + SetEnabled(context, value, enabled); + } + + if (child is DebugUI.HistoryBoolField childHistoryBoolField) + { + foreach (var value in childHistoryBoolField.childWidgets) + SetEnabled(context, value, enabled); + } + + if (child is DebugUI.HistoryEnumField childHistoryEnumField) + { + foreach (var value in childHistoryEnumField.childWidgets) + SetEnabled(context, value, enabled); + } + } + } + + public void SetHierarchyEnabled(DebugUI.Context context, DebugUI.IContainer container, bool enabled) + { + UpdateSchedulersRecursive(context, container, enabled); + } + + public void Add(DebugUI.Context context, DebugUI.Widget widget, IVisualElementScheduledItem scheduledItem) + { + var dict = GetScheduledItemsDictionary(context); + if (!dict.TryGetValue(widget, out var widgetScheduledItemList)) + { + widgetScheduledItemList = new List(); + dict.Add(widget, widgetScheduledItemList); + } + widgetScheduledItemList.Add(scheduledItem); + } + + public void Remove(DebugUI.Context context, DebugUI.Widget widget, VisualElement removedVisualElement) + { + var dict = GetScheduledItemsDictionary(context); + if (dict.TryGetValue(widget, out var widgetScheduledItemList)) + { + for (int i = widgetScheduledItemList.Count - 1; i >= 0; i--) + { + var scheduledItem = widgetScheduledItemList[i]; + if (scheduledItem.element == removedVisualElement) + { + scheduledItem.Pause(); + widgetScheduledItemList.RemoveAt(i); + } + } + if (widgetScheduledItemList.Count == 0) + dict.Remove(widget); + } + } + } + } +} + +#endif diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.SchedulerTracker.cs.meta b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.SchedulerTracker.cs.meta new file mode 100644 index 00000000000..a17f3a7f87e --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.SchedulerTracker.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3a99bcf1786a473e87ec8fb420401e52 +timeCreated: 1758007291 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.UIState.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.UIState.cs index 29f40b9aa04..1214c4385b6 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.UIState.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.UIState.cs @@ -1,22 +1,11 @@ -#if ENABLE_UGUI_PACKAGE && (UNITY_EDITOR || DEVELOPMENT_BUILD) +#if ENABLE_UIELEMENTS_MODULE && (UNITY_EDITOR || DEVELOPMENT_BUILD) #define ENABLE_RENDERING_DEBUGGER_UI #endif using System; -using System.Diagnostics; - -#if UNITY_EDITOR -using UnityEditor; -#endif - -#if ENABLE_RENDERING_DEBUGGER_UI -using UnityEngine.UI; -using UnityEngine.Rendering.UI; -#endif namespace UnityEngine.Rendering { - using UnityObject = UnityEngine.Object; public sealed partial class DebugManager { @@ -99,41 +88,37 @@ public bool enableRuntimeUI public bool displayRuntimeUI { #if ENABLE_RENDERING_DEBUGGER_UI - get => m_Root != null && m_Root.activeInHierarchy; + get => m_RuntimeDebugWindow != null && m_RuntimeDebugWindow.gameObject.activeInHierarchy; set { if (value) { - m_Root = UnityObject.Instantiate(Resources.Load("DebugUICanvas")).gameObject; - m_Root.name = "[Debug Canvas]"; - m_Root.transform.localPosition = Vector3.zero; - m_RootUICanvas = m_Root.GetComponent(); - -#if UNITY_ANDROID || UNITY_IPHONE || UNITY_TVOS || UNITY_SWITCH || UNITY_SWITCH2 - var canvasScaler = m_Root.GetComponent(); - canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize; -#endif - - m_Root.SetActive(true); + if (m_RuntimeDebugWindow == null && GraphicsSettings.TryGetRenderPipelineSettings(out _)) + { + var go = new GameObject("[Debug UI]"); + m_RuntimeDebugWindow = go.AddComponent(); + go.SetActive(true); + } } else { - CoreUtils.Destroy(m_Root); - m_Root = null; - m_RootUICanvas = null; + if (m_RuntimeDebugWindow != null) + { + CoreUtils.Destroy(m_RuntimeDebugWindow.gameObject); + m_RuntimeDebugWindow = null; + } } onDisplayRuntimeUIChanged(value); - DebugUpdater.HandleInternalEventSystemComponents(value); - runtimeUIState.open = m_Root != null && m_Root.activeInHierarchy; + runtimeUIState.open = m_RuntimeDebugWindow != null && m_RuntimeDebugWindow.gameObject.activeInHierarchy; } #else get => false; set { if (value) - throw new NotSupportedException("Rendering Debugger Runtime UI requires the ugui package."); + throw new NotSupportedException("Rendering Debugger Runtime UI requires the UIElements module."); } #endif } @@ -144,18 +129,22 @@ public bool displayRuntimeUI public bool displayPersistentRuntimeUI { #if ENABLE_RENDERING_DEBUGGER_UI - get => m_RootUIPersistentCanvas != null && m_PersistentRoot.activeInHierarchy; + get => m_RuntimePersistentDebugUI != null && m_RuntimePersistentDebugUI.gameObject.activeInHierarchy; set { if (value) { - EnsurePersistentCanvas(); + if (m_RuntimePersistentDebugUI == null && GraphicsSettings.TryGetRenderPipelineSettings(out _)) + { + var go = new GameObject("[Persistent Debug UI]"); + m_RuntimePersistentDebugUI = go.AddComponent(); + go.SetActive(true); + } } else { - CoreUtils.Destroy(m_PersistentRoot); - m_PersistentRoot = null; - m_RootUIPersistentCanvas = null; + CoreUtils.Destroy(m_RuntimePersistentDebugUI.gameObject); + m_RuntimePersistentDebugUI = null; } } #else @@ -163,7 +152,7 @@ public bool displayPersistentRuntimeUI set { if (value) - throw new NotSupportedException("Rendering Debugger Runtime UI requires the ugui package."); + throw new NotSupportedException("Rendering Debugger Runtime UI requires the UIElements module."); } #endif } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.cs index 444070bdf0f..8f198ffcd92 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugManager.cs @@ -1,4 +1,4 @@ -#if ENABLE_UGUI_PACKAGE && (UNITY_EDITOR || DEVELOPMENT_BUILD) +#if ENABLE_UIELEMENTS_MODULE && (UNITY_EDITOR || DEVELOPMENT_BUILD) #define ENABLE_RENDERING_DEBUGGER_UI #endif @@ -6,24 +6,16 @@ using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; -using System.Linq; -using UnityEngine.Assertions; - -#if ENABLE_RENDERING_DEBUGGER_UI -using UnityEngine.Rendering.UI; -#endif namespace UnityEngine.Rendering { - using UnityObject = UnityEngine.Object; - /// /// Implementing this interface enables integration with Unity's Rendering debugger, providing a way to manage and control the state of debug data. /// /// /// /// Use the `IDebugData` interface to register custom debug data. You can reset the data when necessary, which makes it suitable for debugging scenarios - /// where you need to clear or reset specific data. For example, when the application state changes or during gameplay session resets, + /// where you need to clear or reset specific data. For example, when the application state changes or during gameplay session resets, /// or when the **Reset** button is selected in the **Rendering Debugger** window in the Editor or at runtime. /// /// @@ -75,7 +67,7 @@ public interface IDebugData /// new DebugUI.Value { displayName = "Light Color", getter = () => Color.white, setter = value => Debug.Log($"Light Color set to {value}") } /// }; /// var items = list.ToArray(); - /// + /// /// /// Obtain the panel from the DebugManager instance, and add the Widgets that we want to display there. /// var panel = DebugManager.instance.GetPanel("Lighting", true); /// panel.children.AddRange(items); @@ -112,10 +104,33 @@ public ReadOnlyCollection panels } } + void ForEachWidgetInContainer(DebugUI.Widget widget, Action action) + { + action(widget); + + if (widget is DebugUI.IContainer container) + { + foreach (var child in container.children) + ForEachWidgetInContainer(child, action); + } + } + + /// + /// Iterate over all widgets in all panels and invoke the provided action on each widget. + /// + /// Action to invoke. + internal void ForEachWidget(Action action) + { + foreach (var panel in m_Panels) + foreach (var widget in panel.children) + ForEachWidgetInContainer(widget, action); + } + /// /// Callback called when the runtime UI changed. /// public event Action onDisplayRuntimeUIChanged = delegate { }; + /// /// Callback called when the debug window is dirty. /// @@ -128,16 +143,17 @@ public ReadOnlyCollection panels /// public bool refreshEditorRequested; - int? m_RequestedPanelIndex; + string m_RequestedPanel; #if ENABLE_RENDERING_DEBUGGER_UI - GameObject m_Root; - DebugUIHandlerCanvas m_RootUICanvas; + internal RuntimeDebugWindow m_RuntimeDebugWindow; + RuntimePersistentDebugUI m_RuntimePersistentDebugUI; - GameObject m_PersistentRoot; - DebugUIHandlerPersistentCanvas m_RootUIPersistentCanvas; + internal SchedulerTracker schedulerTracker { get; } = new(); #endif + internal DebugUI.Widget selectedWidget { get; set; } + /// /// Is any debug window or UI currently active. /// @@ -175,18 +191,20 @@ public void RefreshEditor() /// public void Reset() { + DebugDisplaySerializer.SaveFoldoutStates(); + DebugDisplaySerializer.Clear(); resetData?.Invoke(); - ReDrawOnScreenDebug(); } /// /// Request the runtime debug UI be redrawn on the next update. /// + [Obsolete("This method is obsolete. #from(6000.5)")] public void ReDrawOnScreenDebug() { #if ENABLE_RENDERING_DEBUGGER_UI if (displayRuntimeUI) - m_RootUICanvas?.RequestHierarchyReset(); + m_RuntimeDebugWindow?.RequestRecreateGUI(); #endif } @@ -202,78 +220,45 @@ public void ReDrawOnScreenDebug() /// Data to be registered. public void UnregisterData(IDebugData data) => resetData -= data.GetReset(); - /// - /// Get hashcode state of the Debug Window. - /// - /// The calculated hashcode for the current state of the Debug Window. - public int GetState() - { - int hash = 17; - - foreach (var panel in m_Panels) - hash = hash * 23 + panel.GetHashCode(); - - return hash; - } - -#if ENABLE_RENDERING_DEBUGGER_UI - internal void RegisterRootCanvas(DebugUIHandlerCanvas root) - { - Assert.IsNotNull(root); - m_Root = root.gameObject; - m_RootUICanvas = root; - } - - internal void ChangeSelection(DebugUIHandlerWidget widget, bool fromNext) + int GetMaxPinnedIndex(DebugUI.Container container) { - m_RootUICanvas.ChangeSelection(widget, fromNext); - } - - internal void SetScrollTarget(DebugUIHandlerWidget widget) - { - if (m_RootUICanvas != null) - m_RootUICanvas.SetScrollTarget(widget); - } - - void EnsurePersistentCanvas() - { - if (m_RootUIPersistentCanvas == null) + int pinnedIndex = -1; + foreach (var child in container.children) { - var uiManager = UnityObject.FindFirstObjectByType(); - - if (uiManager == null) + if (child is DebugUI.ValueTuple valueTuple && valueTuple.pinnedElementIndex > pinnedIndex) { - m_PersistentRoot = UnityObject.Instantiate(Resources.Load("DebugUIPersistentCanvas")).gameObject; - m_PersistentRoot.name = "[Debug Canvas - Persistent]"; - m_PersistentRoot.transform.localPosition = Vector3.zero; + pinnedIndex = valueTuple.pinnedElementIndex; } - else - { - m_PersistentRoot = uiManager.gameObject; - } - - m_RootUIPersistentCanvas = m_PersistentRoot.GetComponent(); } + return pinnedIndex; } - internal void TogglePersistent(DebugUI.Widget widget, int? forceTupleIndex = null) + internal void TogglePersistent() { + if (selectedWidget != null) + TogglePersistent(selectedWidget); + } + + void TogglePersistent(DebugUI.Widget widget, int? forceTupleIndex = null) + { +#if ENABLE_RENDERING_DEBUGGER_UI if (widget == null) return; - EnsurePersistentCanvas(); + displayPersistentRuntimeUI = true; + switch (widget) { case DebugUI.Value value: - m_RootUIPersistentCanvas.Toggle(value); + m_RuntimePersistentDebugUI.Toggle(value); break; case DebugUI.ValueTuple valueTuple: - m_RootUIPersistentCanvas.Toggle(valueTuple, forceTupleIndex); + m_RuntimePersistentDebugUI.Toggle(valueTuple, forceTupleIndex); break; case DebugUI.Container container: // When container is toggled, we make sure that if there are ValueTuples, they all get the same element index. - int pinnedIndex = container.children.Max(w => (w as DebugUI.ValueTuple)?.pinnedElementIndex ?? -1); + int pinnedIndex = GetMaxPinnedIndex(container); foreach (var child in container.children) { if (child is DebugUI.Value || child is DebugUI.ValueTuple) @@ -284,8 +269,11 @@ internal void TogglePersistent(DebugUI.Widget widget, int? forceTupleIndex = nul Debug.Log("Only readonly items can be made persistent."); break; } - } + + if (m_RuntimePersistentDebugUI != null && m_RuntimePersistentDebugUI.IsEmpty()) + displayPersistentRuntimeUI = false; #endif + } void OnPanelDirty(DebugUI.Panel panel) { @@ -321,7 +309,7 @@ public string PanelDiplayName(int panelIndex) { return PanelDisplayName(panelIndex); } - + /// /// Returns the panel display name /// @@ -339,19 +327,35 @@ public string PanelDisplayName(int panelIndex) /// Request DebugWindow to open the specified panel. /// /// Index of the debug window panel to activate. + [Obsolete("Use RequestEditorWindowPanelName instead. #from(6000.5)")] public void RequestEditorWindowPanelIndex(int index) { - // Similar to RefreshEditor(), this function is required to bypass a dependency problem where DebugWindow - // cannot be accessed from the Core.Runtime assembly. Should there be a better way to allow editor-dependent - // features in DebugUI? - m_RequestedPanelIndex = index; + if (m_Panels[index] != null) + RequestEditorWindowPanel(m_Panels[index].displayName); + } + + /// + /// Request DebugWindow to open the specified panel. + /// + /// Name of window panel to activate. + public void RequestEditorWindowPanel(string panelName) + { + int panelIndex = FindPanelIndex(panelName); + if (panelIndex != -1) + { + m_RequestedPanel = panelName; + } + else + { + Debug.LogWarning($"No panel with name {panelName} has been registered."); + } } - internal int? GetRequestedEditorWindowPanelIndex() + internal string GetRequestedEditorWindowPanel() { - int? requestedIndex = m_RequestedPanelIndex; - m_RequestedPanelIndex = null; - return requestedIndex; + string requestedPanel = m_RequestedPanel; + m_RequestedPanel = null; + return requestedPanel; } // TODO: Optimally we should use a query path here instead of a display name diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.Containers.cs b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.Containers.cs index db12b85c92a..94afe08d2fc 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.Containers.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debugging/DebugUI.Containers.cs @@ -1,7 +1,15 @@ +#if ENABLE_UIELEMENTS_MODULE && (UNITY_EDITOR || DEVELOPMENT_BUILD) +#define ENABLE_RENDERING_DEBUGGER_UI +#endif + using System; using System.Collections.Generic; #if UNITY_EDITOR using UnityEditor; + +#endif +#if ENABLE_RENDERING_DEBUGGER_UI +using UnityEngine.UIElements; #endif namespace UnityEngine.Rendering @@ -13,6 +21,71 @@ public partial class DebugUI /// public class Container : Widget, IContainer { +#if ENABLE_RENDERING_DEBUGGER_UI + /// + protected override VisualElement Create() + { + VisualElement container = new UIElements.VisualElement(); + container.AddToClassList("debug-window-container"); + if (!hideDisplayName) + { + var label = new Label(displayName); + label.AddToClassList("debug-window-container-displayname"); + container.Add(label); + } + + var content = new VisualElement(); + content.AddToClassList("debug-window-container-content"); + AddChildren(content, m_Context); + container.Add(content); + + return container; + } + + /// + /// Adds all the children to the given container + /// + /// The container to insert elements + /// The context where the widget is being added + protected void AddChildren(VisualElement container, DebugUI.Context context) + { + for (int i = 0; i < children.Count; ++i) + { + var child = children[i]; + + if (context == Context.Editor && child.isRuntimeOnly) + continue; + if (context.IsAnyRuntimeContext() && child.isEditorOnly) + continue; + + var childUIElement = child.ToVisualElement(context); + if (childUIElement != null) + container.Add(childUIElement); + } + + // As the elements might change visibility, we need to update alternating background colors + if (alternateRowColors) + { + this.ScheduleTracked(container, () => container.schedule.Execute(() => + { + int i = 0; + foreach (var child in container.Children()) + { + if (child.style.display == DisplayStyle.Flex) + { + if (i % 2 != 0) + child.AddToClassList(k_AlternateRowColorClassName); + else + child.RemoveFromClassList(k_AlternateRowColorClassName); + + ++i; + } + } + }).Every(100)); + } + } +#endif + const string k_IDToken = "#"; internal bool hideDisplayName => string.IsNullOrEmpty(displayName) || displayName.StartsWith(k_IDToken); @@ -21,6 +94,13 @@ public class Container : Widget, IContainer /// public ObservableList children { get; private set; } + const string k_AlternateRowColorClassName = "debug-window-row-alternate"; + + /// + /// Set to true to alternate background colors of the rows inside the container. + /// + public bool alternateRowColors { get; set; } + /// /// Panel the container is attached to. /// @@ -29,10 +109,6 @@ public override Panel panel get { return m_Panel; } internal set { - /// Frequenlty used panels do now own widgets - if (value != null && value.flags.HasFlag(DebugUI.Flags.FrequentlyUsed)) - return; - m_Panel = value; // Bubble down @@ -118,30 +194,133 @@ protected virtual void OnItemRemoved(ObservableList sender, ListChangedE if (m_Panel != null) m_Panel.SetDirty(); } - - /// - /// Returns the hash code of the widget. - /// - /// Hash code of the widget. - public override int GetHashCode() - { - int hash = 17; - hash = hash * 23 + queryPath.GetHashCode(); - hash = hash * 23 + isHidden.GetHashCode(); - - int numChildren = children.Count; - for (int i = 0; i < numChildren; i++) - hash = hash * 23 + children[i].GetHashCode(); - - return hash; - } } /// /// Unity-like foldout that can be collapsed. /// - public class Foldout : Container, IValueField + public class Foldout : Container +#pragma warning disable CS0618 // Type or member is obsolete + , IValueField +#pragma warning restore CS0618 // Type or member is obsolete { + +#if ENABLE_RENDERING_DEBUGGER_UI + + /// + protected override VisualElement Create() + { + var container = new UIElements.Foldout { text = displayName }; + if (m_Context == Context.Editor && (contextMenuItems != null || !string.IsNullOrEmpty(documentationUrl))) + { +#if UNITY_EDITOR + // Get Toggle element of the Foldout to be able to attach the help and menu buttons + var toggleHeader = container.Q().ElementAt(0); + if (!string.IsNullOrEmpty(documentationUrl)) + { + var infoButton = new UIElements.Button((Background.FromTexture2D((Texture2D)EditorGUIUtility.TrIconContent("_Help").image )),() => Help.BrowseURL(documentationUrl)); + infoButton.AddToClassList("info-button"); + infoButton.tooltip = $"Open Reference for {displayName}."; + toggleHeader.Add(infoButton); + } + if (contextMenuItems != null) + { + var button = new UIElements.Button(); + button.AddToClassList("more-options-button"); + + var contextualMenu = new GenericDropdownMenu(); + foreach(var item in contextMenuItems) + { + contextualMenu.AddItem(item.displayName, false, item.action ); + } + + button.clicked += () => + { + contextualMenu.DropDown(button.worldBound, button, DropdownMenuSizeMode.Auto); + }; + + toggleHeader.Add(button); + } +#endif + } + + // Add special classes for styles + container.AddToClassList("debug-window-foldout"); + + // Update UI to match object's initial state + container.SetValueWithoutNotify(GetValue()); + + // Sync value to object when changed in UI + container.RegisterCallback>(evt => + { + SetValue(container.value); + }); + // Sync value to object based on navigation events separately, because they don't trigger a ChangeEvent + container.RegisterCallback(evt => + { + if (DebugManager.instance.selectedWidget == this) + { + if (evt.direction == NavigationMoveEvent.Direction.Right) + SetValue(true); + else if (evt.direction == NavigationMoveEvent.Direction.Left) + SetValue(false); + } + }, TrickleDown.TrickleDown); // Foldout internally stops propagation so must use TrickleDown to see it + + // Sync opened state from object to UI + this.ScheduleTracked(container, () => container.schedule.Execute(() => + { + container.SetValueWithoutNotify(GetValue()); + }).Every(100)); + + if (columnLabels is { Length: > 0 }) + { + var columnLabelsValues = new DebugUI.Value[columnLabels.Length]; + + for (int i = 0; i < columnLabels.Length; i++) + { + string value = columnLabels[i]; + object Getter() => value; + columnLabelsValues[i] = new DebugUI.Value() + { + displayName = string.Empty, + getter = Getter + }; + } + + var header = new DebugUI.ValueTuple() + { + displayName = string.Empty, + isHeader = true, + values = columnLabelsValues + }; + + container.Add(header.ToVisualElement(m_Context)); + + container.RegisterCallback(evt => + { + var numColumns = columnLabels.Length; + foreach (var visualElement in container.Children()) + { + var width = (evt.newRect.width - ValueTuple.GetLabelWidth(m_Context)) / numColumns; + int i = 0; + foreach (var child in visualElement.Children()) + { + if (i != 0) + child.style.width = width; + + ++i; + } + } + }); + } + + AddChildren(container, m_Context); + + return container; + } +#endif + /// /// Context menu item. /// @@ -163,10 +342,27 @@ public struct ContextMenuItem /// public bool isReadOnly { get { return false; } } + bool m_Opened; + /// /// Opened state of the foldout. /// - public bool opened { get; set; } + public bool opened + { + get => m_Opened; + set + { + if (opened != value) + { +#if ENABLE_RENDERING_DEBUGGER_UI + if (m_VisualElement != null) + DebugManager.instance.schedulerTracker.SetHierarchyEnabled(m_Context, this, value); + +#endif + m_Opened = value; + } + } + } /// /// Draw the foldout in full width using a header style. @@ -287,6 +483,7 @@ public Foldout(string displayName, ObservableList children, string[] col /// Set the opened state of the foldout. /// /// True to open the foldout, false to close it. + [Obsolete("This method is no longer used. #from(6000.5)")] public void SetValue(object value) => SetValue((bool)value); /// @@ -294,6 +491,7 @@ public Foldout(string displayName, ObservableList children, string[] col /// /// Input value. /// The validated value. + [Obsolete("This method is no longer used. #from(6000.5)")] public object ValidateValue(object value) => value; /// @@ -301,16 +499,6 @@ public Foldout(string displayName, ObservableList children, string[] col /// /// Input value. public void SetValue(bool value) => opened = value; - - void IValueField.SetValue(object value) - { - SetValue((bool)ValidateValue(value)); - } - - object IValueField.ValidateValue(object value) - { - return (bool)value; - } } /// @@ -346,16 +534,120 @@ public VBox() /// public class Table : Container { - static GUIStyle columnHeaderStyle = new GUIStyle() +#if ENABLE_RENDERING_DEBUGGER_UI + /// + protected override VisualElement Create() { - alignment = TextAnchor.MiddleCenter - }; + var container = new UIElements.VisualElement(); + container.AddToClassList("debug-window-table"); + + using (ListPool.Get(out var tmp)) + { + if (children.Count != 0 && children[0] is Row row) + { + foreach (var child in row.children) + tmp.Add(child.displayName); + } + + var columnLabelsValues = new DebugUI.Value[tmp.Count]; + for (int i = 0; i < columnLabelsValues.Length; i++) + { + string value = tmp[i]; + object Getter() => value; + columnLabelsValues[i] = new DebugUI.Value() + { + displayName = string.Empty, + getter = Getter + }; + } + + var header = new DebugUI.ValueTuple() + { + displayName = string.Empty, + isHeader = true, + values = columnLabelsValues + }; + + var headerVisualElement = header.ToVisualElement(m_Context); + headerVisualElement.AddToClassList("debug-window-table-header-row"); + + foreach (var headerElement in headerVisualElement.Children()) + headerElement.AddToClassList("debug-window-table-header-cell"); + + container.Add(headerVisualElement); + + // NOTE: Current implementation constructs the table cells from individual elements, so cell width needs to be + // set manually like this. This is necessary because of the DebugUI.Table/Row structure, which is why we can't use + // a proper table. + container.RegisterCallback(evt => + { + var numColumns = columnLabelsValues.Length; + var availableWidth = evt.newRect.width; + if (displayRowNames) + availableWidth -= ValueTuple.GetLabelWidth(m_Context); + var width = availableWidth / numColumns; + + foreach (var visualElement in container.Children()) + { + int i = 0; + foreach (var child in visualElement.Children()) + { + if (i == 0) + child.style.display = displayRowNames ? DisplayStyle.Flex : DisplayStyle.None; + else + child.style.width = width; + ++i; + } + } + }); + } + + AddChildren(container, m_Context); + + container.enabledSelf = !isReadOnly; + + return container; + } +#endif /// Row Container. - public class Row : Foldout + public class Row : Container { /// Constructor. public Row() { displayName = "Row"; } + + /// Opened state of the row. No longer used. + [Obsolete("This class no longer inherits from Foldout, but from Container. This field is kept for compatibility but it no longer does anything. #from(6000.5)")] + public bool opened { get; set; } + +#if ENABLE_RENDERING_DEBUGGER_UI + /// + protected override VisualElement Create() + { + var rowContainer = new UIElements.VisualElement(); + rowContainer.AddToClassList("debug-window-table-row"); + + var label = new Label(displayName) { style = { width = ValueTuple.GetLabelWidth(m_Context) }, }; + label.AddToClassList("debug-window-table-row-displayname"); + rowContainer.Add(label); + + foreach (var c in children) + { + c.keepLayoutWhenHidden = true; + var rowElement = c.ToVisualElement(m_Context); + rowElement.AddToClassList("debug-window-table-cell"); + + // In Table layout we don't want to show the labels of DebugUI.Values + var valueLabel = rowElement.Q