From 2be27e214a3535e0c7e2d936cf9cac37b39bac19 Mon Sep 17 00:00:00 2001 From: Aske Johansen Date: Fri, 24 Apr 2026 17:45:12 +0000 Subject: [PATCH 001/109] Graphics/mesh/uum 131035 support fast enter play mode --- .../Runtime/GPUDriven/GPUResidentDrawer.cs | 41 +++++++++++-------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/GPUResidentDrawer.cs b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/GPUResidentDrawer.cs index cbb7780db58..e9863e87979 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/GPUResidentDrawer.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/GPUResidentDrawer.cs @@ -14,6 +14,7 @@ using UnityEngine.SceneManagement; using UnityEngine.Rendering.RenderGraphModule; using Unity.Burst; +using Unity.Scripting.LifecycleManagement; #if UNITY_EDITOR using UnityEditor; @@ -57,14 +58,21 @@ public partial class GPUResidentDrawer #else internal const bool EnableDeepValidation = false; #endif - + [AutoStaticsCleanup] internal static bool MaintainContext { get; set; } = false; - internal static bool ForceOcclusion { get; set; } = false; - private static GPUResidentDrawer s_Instance = null; + [AutoStaticsCleanup] + internal static bool ForceOcclusion { get; set; } = false; + [AutoStaticsCleanup] private static uint s_InstanceVersion = 0; + [AutoStaticsCleanup] + internal static Action initializedChanged; // previousValue, currentValue + + [NoAutoStaticsCleanup] // Manually cleaned up with [OnCodeUnloading] Cleanup() + private static GPUResidentDrawer s_Instance = null; + //////////////////////////////////////// // Public API for rendering pipelines // //////////////////////////////////////// @@ -272,13 +280,6 @@ private void RemoveFromPlayerLoop() LowLevel.PlayerLoop.SetPlayerLoop(rootLoop); } -#if UNITY_EDITOR - private static void OnAssemblyReload() - { - Cleanup(); - } -#endif - internal static GPUResidentDrawerSettings GetGlobalSettingsFromRPAsset() { var renderPipelineAsset = GraphicsSettings.currentRenderPipeline; @@ -343,7 +344,20 @@ internal static void Reinitialize() #endif } - internal static Action initializedChanged; // previousValue, currentValue +#if UNITY_EDITOR + [InitializeOnEnterPlayMode] + private static void OnEnteringPlaymode(EnterPlayModeOptions options) + { + if (options.HasFlag(EnterPlayModeOptions.DisableDomainReload)) + Cleanup(); + } + + [OnCodeUnloading] + private static void OnCodeUnloading() + { + Cleanup(); + } +#endif private static void Cleanup() { @@ -481,8 +495,6 @@ internal GPUResidentDrawer(in GPUResidentDrawerSettings settings, in InternalGPU #if UNITY_EDITOR m_FrameCameraIDs = new NativeList(1, Allocator.Persistent); - if (!internalSettings.isManagedByUnitTest) - AssemblyReloadEvents.beforeAssemblyReload += OnAssemblyReload; #endif SceneManager.sceneLoaded += OnSceneLoaded; @@ -512,9 +524,6 @@ internal void Dispose() m_GPUDrivenProcessor.DisableGPUDrivenRendering(rendererIDs); #if UNITY_EDITOR - if (!m_InternalSettings.isManagedByUnitTest) - AssemblyReloadEvents.beforeAssemblyReload -= OnAssemblyReload; - if (m_FrameCameraIDs.IsCreated) m_FrameCameraIDs.Dispose(); #endif From 732b80a9bd2e4e43e2d56deaee6dff7622376a36 Mon Sep 17 00:00:00 2001 From: Ludovic Theobald Date: Fri, 24 Apr 2026 22:45:20 +0000 Subject: [PATCH 002/109] [Fast Enter Play Mode] Reset static variables in LineRenderer --- .../Core/LineRendering.InstanceManagement.cs | 10 ++ .../Core/LineRendering.ShaderIDs.cs | 94 +++++++++---------- .../Core/LineRendering.ShadingAtlas.cs | 8 ++ .../LineRendering/Core/LineRendering.cs | 10 ++ .../HDRenderPipeline.LineRendering.cs | 8 ++ 5 files changed, 83 insertions(+), 47 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.InstanceManagement.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.InstanceManagement.cs index 2b7ba788476..65f0c83fcb9 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.InstanceManagement.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.InstanceManagement.cs @@ -16,6 +16,16 @@ partial class LineRendering private static ILineRenderer[] s_RendererInstancesAsArray = null; private static int s_RendererInstanceCount = 0; +#if UNITY_EDITOR + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] + static void ResetStaticsOnLoad_InstanceManagement() + { + s_RendererInstances.Clear(); + s_RendererInstancesAsArray = null; + s_RendererInstanceCount = 0; + } +#endif + private static void UpdateInstanceArray() { s_RendererInstanceCount = s_RendererInstances.Count; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.ShaderIDs.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.ShaderIDs.cs index 86664147a21..925ca99fa25 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.ShaderIDs.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.ShaderIDs.cs @@ -4,57 +4,57 @@ partial class LineRendering { internal static class ShaderIDs { - public static int _ConstantBuffer = Shader.PropertyToID("ShaderVariables"); - public static int _CounterBuffer = Shader.PropertyToID("_CounterBuffer"); - public static int _SegmentRecordBuffer = Shader.PropertyToID("_SegmentRecordBuffer"); - public static int _ClusterRecordBuffer = Shader.PropertyToID("_ClusterRecordBuffer"); - public static int _IndexBuffer = Shader.PropertyToID("_IndexBuffer"); - public static int _BinOffsetsBuffer = Shader.PropertyToID("_BinOffsetsBuffer"); - public static int _BinCountersBuffer = Shader.PropertyToID("_BinCountersBuffer"); - public static int _BinIndicesBuffer = Shader.PropertyToID("_BinIndicesBuffer"); - public static int _WorkQueueBuffer = Shader.PropertyToID("_WorkQueueBuffer"); - public static int _WorkQueueBinListBuffer = Shader.PropertyToID("_WorkQueueBinListBuffer"); - public static int _OutputWorkQueueArgs = Shader.PropertyToID("_OutputWorkQueueArgsBuffer"); - public static int _ShadingSamplesTexture = Shader.PropertyToID("_ShadingSamplesTexture"); - public static int _ShadingScratchTexture = Shader.PropertyToID("_ShadingScratchTexture"); - public static int _SoftwareLineOffscreenAtlasWidth = Shader.PropertyToID("_SoftwareLineOffscreenAtlasWidth"); - public static int _SoftwareLineOffscreenAtlasHeight = Shader.PropertyToID("_SoftwareLineOffscreenAtlasHeight"); - public static int _ShadingSampleVisibilityBuffer = Shader.PropertyToID("_ShadingSampleVisibilityBuffer"); - public static int _ShadingSampleVisibilityCount = Shader.PropertyToID("_ShadingSampleVisibilityCount"); - public static int _ShadingCompactionBuffer = Shader.PropertyToID("_ShadingCompactionBuffer"); - public static int _ClusterCountersBuffer = Shader.PropertyToID("_ClusterCountersBuffer"); - public static int _ClusterRangesBuffer = Shader.PropertyToID("_ClusterRangesBuffer"); - public static int _OutputTargetColor = Shader.PropertyToID("_OutputTargetColor"); - public static int _OutputTargetDepth = Shader.PropertyToID("_OutputTargetDepth"); - public static int _OutputTargetMV = Shader.PropertyToID("_OutputTargetMV"); - public static int _ViewSpaceDepthRangeBuffer = Shader.PropertyToID("_ViewSpaceDepthRangeBuffer"); - public static int _Vertex0RecordBuffer = Shader.PropertyToID("_Vertex0RecordBuffer"); - public static int _Vertex1RecordBuffer = Shader.PropertyToID("_Vertex1RecordBuffer"); - public static int _Vertex2RecordBuffer = Shader.PropertyToID("_Vertex2RecordBuffer"); - public static int _Vertex3RecordBuffer = Shader.PropertyToID("_Vertex3RecordBuffer"); - public static int _ActiveClusterIndices = Shader.PropertyToID("_ActiveClusterIndices"); - public static int _BinningArgsBuffer = Shader.PropertyToID("_BinningArgsBuffer"); - public static int _VertexOffset = Shader.PropertyToID("_VertexOffset"); - public static int _SegmentOffset = Shader.PropertyToID("_SegmentOffset"); + public static readonly int _ConstantBuffer = Shader.PropertyToID("ShaderVariables"); + public static readonly int _CounterBuffer = Shader.PropertyToID("_CounterBuffer"); + public static readonly int _SegmentRecordBuffer = Shader.PropertyToID("_SegmentRecordBuffer"); + public static readonly int _ClusterRecordBuffer = Shader.PropertyToID("_ClusterRecordBuffer"); + public static readonly int _IndexBuffer = Shader.PropertyToID("_IndexBuffer"); + public static readonly int _BinOffsetsBuffer = Shader.PropertyToID("_BinOffsetsBuffer"); + public static readonly int _BinCountersBuffer = Shader.PropertyToID("_BinCountersBuffer"); + public static readonly int _BinIndicesBuffer = Shader.PropertyToID("_BinIndicesBuffer"); + public static readonly int _WorkQueueBuffer = Shader.PropertyToID("_WorkQueueBuffer"); + public static readonly int _WorkQueueBinListBuffer = Shader.PropertyToID("_WorkQueueBinListBuffer"); + public static readonly int _OutputWorkQueueArgs = Shader.PropertyToID("_OutputWorkQueueArgsBuffer"); + public static readonly int _ShadingSamplesTexture = Shader.PropertyToID("_ShadingSamplesTexture"); + public static readonly int _ShadingScratchTexture = Shader.PropertyToID("_ShadingScratchTexture"); + public static readonly int _SoftwareLineOffscreenAtlasWidth = Shader.PropertyToID("_SoftwareLineOffscreenAtlasWidth"); + public static readonly int _SoftwareLineOffscreenAtlasHeight = Shader.PropertyToID("_SoftwareLineOffscreenAtlasHeight"); + public static readonly int _ShadingSampleVisibilityBuffer = Shader.PropertyToID("_ShadingSampleVisibilityBuffer"); + public static readonly int _ShadingSampleVisibilityCount = Shader.PropertyToID("_ShadingSampleVisibilityCount"); + public static readonly int _ShadingCompactionBuffer = Shader.PropertyToID("_ShadingCompactionBuffer"); + public static readonly int _ClusterCountersBuffer = Shader.PropertyToID("_ClusterCountersBuffer"); + public static readonly int _ClusterRangesBuffer = Shader.PropertyToID("_ClusterRangesBuffer"); + public static readonly int _OutputTargetColor = Shader.PropertyToID("_OutputTargetColor"); + public static readonly int _OutputTargetDepth = Shader.PropertyToID("_OutputTargetDepth"); + public static readonly int _OutputTargetMV = Shader.PropertyToID("_OutputTargetMV"); + public static readonly int _ViewSpaceDepthRangeBuffer = Shader.PropertyToID("_ViewSpaceDepthRangeBuffer"); + public static readonly int _Vertex0RecordBuffer = Shader.PropertyToID("_Vertex0RecordBuffer"); + public static readonly int _Vertex1RecordBuffer = Shader.PropertyToID("_Vertex1RecordBuffer"); + public static readonly int _Vertex2RecordBuffer = Shader.PropertyToID("_Vertex2RecordBuffer"); + public static readonly int _Vertex3RecordBuffer = Shader.PropertyToID("_Vertex3RecordBuffer"); + public static readonly int _ActiveClusterIndices = Shader.PropertyToID("_ActiveClusterIndices"); + public static readonly int _BinningArgsBuffer = Shader.PropertyToID("_BinningArgsBuffer"); + public static readonly int _VertexOffset = Shader.PropertyToID("_VertexOffset"); + public static readonly int _SegmentOffset = Shader.PropertyToID("_SegmentOffset"); // Shading Atlas - public static int _SampleCount = Shader.PropertyToID("_SampleCount"); - public static int _ShadingAtlasSampleOffset = Shader.PropertyToID("_ShadingAtlasSampleOffset"); - public static int _SourceShadingAtlasSampleOffset = Shader.PropertyToID("_SourceShadingAtlasSampleOffset"); - public static int _TargetTextureWidth = Shader.PropertyToID("_TargetTextureWidth"); - public static int _TargetTextureHeight = Shader.PropertyToID("_TargetTextureHeight"); - public static int _SourceTextureWidth = Shader.PropertyToID("_SourceTextureWidth"); - public static int _SourceTextureHeight = Shader.PropertyToID("_SourceTextureHeight"); - public static int _HistogramBuffer = Shader.PropertyToID("_HistogramBuffer"); - public static int _SampleIDOffset = Shader.PropertyToID("_SampleIDOffset"); - public static int _MaxSamplesToShade = Shader.PropertyToID("_MaxSamplesToShade"); - public static int _PrefixSumBuffer = Shader.PropertyToID("_PrefixSumBuffer"); + public static readonly int _SampleCount = Shader.PropertyToID("_SampleCount"); + public static readonly int _ShadingAtlasSampleOffset = Shader.PropertyToID("_ShadingAtlasSampleOffset"); + public static readonly int _SourceShadingAtlasSampleOffset = Shader.PropertyToID("_SourceShadingAtlasSampleOffset"); + public static readonly int _TargetTextureWidth = Shader.PropertyToID("_TargetTextureWidth"); + public static readonly int _TargetTextureHeight = Shader.PropertyToID("_TargetTextureHeight"); + public static readonly int _SourceTextureWidth = Shader.PropertyToID("_SourceTextureWidth"); + public static readonly int _SourceTextureHeight = Shader.PropertyToID("_SourceTextureHeight"); + public static readonly int _HistogramBuffer = Shader.PropertyToID("_HistogramBuffer"); + public static readonly int _SampleIDOffset = Shader.PropertyToID("_SampleIDOffset"); + public static readonly int _MaxSamplesToShade = Shader.PropertyToID("_MaxSamplesToShade"); + public static readonly int _PrefixSumBuffer = Shader.PropertyToID("_PrefixSumBuffer"); // LOD - public static int _LODBuffer = Shader.PropertyToID("_LODBuffer"); - public static int _SegmentsPerLine = Shader.PropertyToID("_SegmentsPerLine"); - public static int _LineCount = Shader.PropertyToID("_LineCount"); - public static int _LOD = Shader.PropertyToID("_LOD"); + public static readonly int _LODBuffer = Shader.PropertyToID("_LODBuffer"); + public static readonly int _SegmentsPerLine = Shader.PropertyToID("_SegmentsPerLine"); + public static readonly int _LineCount = Shader.PropertyToID("_LineCount"); + public static readonly int _LOD = Shader.PropertyToID("_LOD"); } } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.ShadingAtlas.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.ShadingAtlas.cs index c04d5dc90b9..54d1c7ea3c3 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.ShadingAtlas.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.ShadingAtlas.cs @@ -34,6 +34,14 @@ internal struct ShadingAtlasAllocation public int previousSize; } +#if UNITY_EDITOR + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] + static void ResetStaticsOnLoad_ShadingAtlas() + { + s_ShadingAtlasAllocations.Clear(); + } +#endif + void CleanupShadingAtlas() { RTHandles.Release(m_ShadingAtlasRT[0]); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.cs index ee6140f1233..8b6cffed876 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/Core/LineRendering.cs @@ -56,6 +56,16 @@ internal static LineRendering Instance } } +#if UNITY_EDITOR + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] + static void ResetStaticsOnLoad_LineRendering() + { + if(s_Instance != null && s_Instance.m_IsInitialized) + s_Instance.Cleanup(); + s_Instance = new LineRendering(); + } +#endif + private bool m_IsInitialized = false; private List m_VisibleDatas = new List(); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/HDRenderPipeline.LineRendering.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/HDRenderPipeline.LineRendering.cs index 883478fd6cb..60fce19def3 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/HDRenderPipeline.LineRendering.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/LineRendering/HDRenderPipeline.LineRendering.cs @@ -27,6 +27,14 @@ public partial class HDRenderPipeline private int m_LineCompositePassDepthMovecIndex; private static bool s_SupportLineRendering; +#if UNITY_EDITOR + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] + static void ResetStaticsOnLoad_LineRendering() + { + s_SupportLineRendering = false; + } +#endif + void InitializeLineRendering() { s_SupportLineRendering = asset.currentPlatformRenderPipelineSettings.supportHighQualityLineRendering; From 8428d908ede27e2abb6a467feb2b76c656d9e01b Mon Sep 17 00:00:00 2001 From: April Roszkowski Date: Fri, 24 Apr 2026 22:45:23 +0000 Subject: [PATCH 003/109] [UUM-123232] Limit Shader Graph heatmap data array sizes --- .../ShaderGraphHeatmapValuesEditor.cs | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/ShaderGraphHeatmapValuesEditor.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/ShaderGraphHeatmapValuesEditor.cs index 10b5cf2b4cd..24afe811adb 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/ShaderGraphHeatmapValuesEditor.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Inspector/ShaderGraphHeatmapValuesEditor.cs @@ -31,6 +31,9 @@ class ShaderGraphHeatmapValuesEditor : Editor const string k_RefreshNodesButtonName = "refresh-nodes-button"; const string k_HelpBoxHiddenUssModifier = "sg-heatmap__help-box--hidden"; + const int k_MaxColorsEntries = 500; + const int k_MaxSubgraphEntries = 500; + ShaderGraphHeatmapValues HeatmapValuesTarget => target as ShaderGraphHeatmapValues; MultiColumnListView m_NodesListView; @@ -245,6 +248,26 @@ public override VisualElement CreateInspectorGUI() root.styleSheets.Add(styleSheet); var colorsListView = root.Q(k_ColorsListName); + + void LimitTextFieldValue(TextField target, ChangeEvent ev, int limit) + { + if (int.TryParse(ev.newValue, out int newValue)) + { + target.value = Math.Min(newValue, limit).ToString(); + + // Consume the event to ensure no additional callbacks fire based on the invalid input + if (newValue > limit) + ev.StopPropagation(); + } + } + + // Limit the max number of color entries + TextField colorsArraySizeField = colorsListView.Q(className: BaseListView.arraySizeFieldUssClassName); + colorsArraySizeField?.RegisterCallback((ChangeEvent ev) => + { + LimitTextFieldValue(colorsArraySizeField, ev, k_MaxColorsEntries); + }, TrickleDown.TrickleDown); + colorsListView.bindingPath = serializedObject.FindProperty(nameof(ShaderGraphHeatmapValues.m_Colors)).propertyPath; colorsListView.makeItem = () => new ColorField {showAlpha = false, hdr = false}; colorsListView.bindItem = (v, i) => @@ -285,6 +308,13 @@ public override VisualElement CreateInspectorGUI() var subgraphEntries = HeatmapValuesTarget.Subgraphs; m_SubgraphListView = root.Q(k_SubgraphListName); + // Limit the max number of subgraph entries + TextField subgraphArraySizeField = m_SubgraphListView.Q(className: BaseListView.arraySizeFieldUssClassName); + subgraphArraySizeField?.RegisterCallback((ChangeEvent ev) => + { + LimitTextFieldValue(subgraphArraySizeField, ev, k_MaxSubgraphEntries); + }, TrickleDown.TrickleDown); + var subgraphsSerializedProperty = serializedObject.FindProperty("m_Subgraphs"); ConfigureSubgraphPickerColumn(m_SubgraphListView.columns[k_SubgraphColumnName]); ConfigureCategoryColumn(m_SubgraphListView.columns[k_HeatValueColumnName], subgraphsSerializedProperty, subgraphEntries); From 2a8f7aa747006be8bb8ff6a4a8904319115c2a82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Maetz?= Date: Fri, 24 Apr 2026 22:45:26 +0000 Subject: [PATCH 004/109] Update Terrain Samples (Fix UUM-140720) --- .../Terrain/Materials/CHNOS Array Dither.mat | 6 +- .../Terrain/Materials/CHNOS Hex Array.mat | 6 +- .../Terrain/Materials/CNM Hex Height.mat | 6 +- .../Materials/CNM Procedural Height.mat | 6 +- .../Terrain/Materials/CNM Rotation Height.mat | 6 +- .../Terrain/Materials/CNM Simple Blend.mat | 6 +- .../Materials/CSNOH Auto Material Simple.mat | 10 ++ .../Terrain/Materials/CSNOH Hex Blend.mat | 5 + .../Terrain/Materials/CSNOH Hex Height.mat | 5 + .../Materials/CSNOH Hex Parallax Height.mat | 7 +- .../Materials/CSNOH Parallax Height.mat | 7 +- .../Materials/CSNOH Procedural Height.mat | 5 + .../Materials/CSNOH Rotation Height.mat | 5 + .../Terrain/Materials/CSNOH Simple Blend.mat | 5 + .../Terrain/Materials/CSNOH Simple Height.mat | 5 + .../Scenes/Terrain/GlobalVolumeProfile.asset | 5 +- .../Terrain/TerrainExample_8Layers.asset | Bin 0 -> 190332 bytes .../Terrain/TerrainExample_8Layers.asset.meta | 8 ++ .../Scenes/Terrain/TerrainExample_CSNOH.asset | Bin 0 -> 168124 bytes .../Terrain/TerrainExample_CSNOH.asset.meta | 8 ++ .../Scenes/Terrain/TerrainSample_CSNOH.prefab | 3 + .../Terrain/TerrainSample_CSNOH.prefab.meta | 7 ++ .../Scenes/Terrain/TerrainSamples.prefab | 4 +- .../Scenes/TerrainSamplesDescriptions.json | 20 +++ .../Samples~/Terrain/Scenes/TerrainURP.unity | 4 +- ...M Simple Blend 4PlusLayers URP.shadergraph | 3 + ...ple Blend 4PlusLayers URP.shadergraph.meta | 10 ++ .../CSNOH Auto Material Simple.shadergraph | 4 +- .../Shaders/CSNOH Hex Blend.shadergraph | 4 +- .../Shaders/CSNOH Hex Height.shadergraph | 4 +- .../CSNOH Hex Parallax Height.shadergraph | 4 +- .../Shaders/CSNOH Parallax Height.shadergraph | 4 +- .../CSNOH Procedural Height.shadergraph | 4 +- .../Shaders/CSNOH Rotation Height.shadergraph | 4 +- .../Shaders/CSNOH Simple Blend.shadergraph | 4 +- .../Shaders/CSNOH Simple Height.shadergraph | 4 +- .../Layers/Layer Hex CSNOH.shadersubgraph | 4 +- .../Layer Hex Parallax CSNOH.shadersubgraph | 4 +- .../Layer Parallax CSNOH.shadersubgraph | 4 +- .../Layer Procedural CSNOH.shadersubgraph | 4 +- .../Layer Rotation CSNOH.shadersubgraph | 4 +- .../Layers/Layer Simple CSNOH.shadersubgraph | 4 +- .../Layers/Sample CSNOH.shadersubgraph | 3 + .../Layers/Sample CSNOH.shadersubgraph.meta | 10 ++ .../Terrain/Textures/aerial_beach.meta | 8 ++ .../aerial_beach/aerial_beach.terrainlayer | 23 ++++ .../aerial_beach.terrainlayer.meta | 8 ++ .../Textures/aerial_beach/aerial_beach_c.png | 3 + .../aerial_beach/aerial_beach_c.png.meta | 117 ++++++++++++++++++ .../Textures/aerial_beach/aerial_beach_m.png | 3 + .../aerial_beach/aerial_beach_m.png.meta | 117 ++++++++++++++++++ .../Textures/aerial_beach/aerial_beach_n.png | 3 + .../aerial_beach/aerial_beach_n.png.meta | 117 ++++++++++++++++++ .../Samples~/Terrain/Textures/dry_soil.meta | 8 ++ .../Textures/{ => dry_soil}/dry_soil_CH.png | 0 .../Textures/dry_soil/dry_soil_CH.png.meta | 117 ++++++++++++++++++ .../Textures/{ => dry_soil}/dry_soil_CS.png | 0 .../{ => dry_soil}/dry_soil_CS.png.meta | 0 .../dry_soil/dry_soil_CSNOH.terrainlayer | 23 ++++ .../dry_soil/dry_soil_CSNOH.terrainlayer.meta | 8 ++ .../Textures/{ => dry_soil}/dry_soil_NOH.png | 0 .../{ => dry_soil}/dry_soil_NOH.png.meta | 0 .../Textures/ground_grass_fells_mossy.meta | 8 ++ .../ground_grass_fells_mossy_CH.png | 0 .../ground_grass_fells_mossy_CH.png.meta | 0 .../ground_grass_fells_mossy_CS.png | 0 .../ground_grass_fells_mossy_CS.png.meta | 0 ...round_grass_fells_mossy_CSNOH.terrainlayer | 23 ++++ ..._grass_fells_mossy_CSNOH.terrainlayer.meta | 8 ++ .../ground_grass_fells_mossy_NOH.png | 0 .../ground_grass_fells_mossy_NOH.png.meta | 0 .../Textures/ground_rockgrass_fellsdirty.meta | 8 ++ .../ground_rockgrass_fellsdirty_CH.png | 0 .../ground_rockgrass_fellsdirty_CH.png.meta | 0 .../ground_rockgrass_fellsdirty_CS.png | 0 .../ground_rockgrass_fellsdirty_CS.png.meta | 0 ...nd_rockgrass_fellsdirty_CSNOH.terrainlayer | 23 ++++ ...ckgrass_fellsdirty_CSNOH.terrainlayer.meta | 8 ++ .../ground_rockgrass_fellsdirty_NOH.png | 0 .../ground_rockgrass_fellsdirty_NOH.png.meta | 0 .../Terrain/Textures/mud_cracked_dry.meta | 8 ++ .../mud_cracked_dry.terrainlayer | 23 ++++ .../mud_cracked_dry.terrainlayer.meta | 8 ++ .../mud_cracked_dry/mud_cracked_dry_c.png | 3 + .../mud_cracked_dry_c.png.meta | 117 ++++++++++++++++++ .../mud_cracked_dry/mud_cracked_dry_m.png | 3 + .../mud_cracked_dry_m.png.meta | 117 ++++++++++++++++++ .../mud_cracked_dry/mud_cracked_dry_n.png | 3 + .../mud_cracked_dry_n.png.meta | 117 ++++++++++++++++++ .../Textures/rock_boulder_cracked.meta | 8 ++ .../rock_boulder_cracked.terrainlayer | 23 ++++ .../rock_boulder_cracked.terrainlayer.meta | 8 ++ .../rock_boulder_cracked_c.png | 3 + .../rock_boulder_cracked_c.png.meta | 117 ++++++++++++++++++ .../rock_boulder_cracked_m.png | 3 + .../rock_boulder_cracked_m.png.meta | 117 ++++++++++++++++++ .../rock_boulder_cracked_n.png | 3 + .../rock_boulder_cracked_n.png.meta | 117 ++++++++++++++++++ .../Samples~/Terrain/Textures/snow.meta | 8 ++ .../Terrain/Textures/snow/snow.terrainlayer | 23 ++++ .../Textures/snow/snow.terrainlayer.meta | 8 ++ .../Samples~/Terrain/Textures/snow/snow_c.png | 3 + .../Terrain/Textures/snow/snow_c.png.meta | 117 ++++++++++++++++++ .../Samples~/Terrain/Textures/snow/snow_m.png | 3 + .../Terrain/Textures/snow/snow_m.png.meta | 117 ++++++++++++++++++ .../Samples~/Terrain/Textures/snow/snow_n.png | 3 + .../Terrain/Textures/snow/snow_n.png.meta | 117 ++++++++++++++++++ .../Terrain/Textures/stone_ground.meta | 8 ++ .../{ => stone_ground}/stone_ground_CH.png | 0 .../stone_ground_CH.png.meta | 0 .../stone_ground_CSNOH.terrainlayer | 23 ++++ .../stone_ground_CSNOH.terrainlayer.meta | 8 ++ .../{ => stone_ground}/stone_ground_cs.png | 0 .../stone_ground_cs.png.meta | 0 .../{ => stone_ground}/stone_ground_noh.png | 0 .../stone_ground_noh.png.meta | 0 116 files changed, 2061 insertions(+), 43 deletions(-) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/TerrainExample_8Layers.asset create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/TerrainExample_8Layers.asset.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/TerrainExample_CSNOH.asset create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/TerrainExample_CSNOH.asset.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/TerrainSample_CSNOH.prefab create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/TerrainSample_CSNOH.prefab.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CNM Simple Blend 4PlusLayers URP.shadergraph create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CNM Simple Blend 4PlusLayers URP.shadergraph.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Sample CSNOH.shadersubgraph create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Sample CSNOH.shadersubgraph.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach.terrainlayer create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach.terrainlayer.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_c.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_c.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_m.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_m.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_n.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_n.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => dry_soil}/dry_soil_CH.png (100%) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CH.png.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => dry_soil}/dry_soil_CS.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => dry_soil}/dry_soil_CS.png.meta (100%) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CSNOH.terrainlayer create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CSNOH.terrainlayer.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => dry_soil}/dry_soil_NOH.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => dry_soil}/dry_soil_NOH.png.meta (100%) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_grass_fells_mossy}/ground_grass_fells_mossy_CH.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_grass_fells_mossy}/ground_grass_fells_mossy_CH.png.meta (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_grass_fells_mossy}/ground_grass_fells_mossy_CS.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_grass_fells_mossy}/ground_grass_fells_mossy_CS.png.meta (100%) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CSNOH.terrainlayer create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CSNOH.terrainlayer.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_grass_fells_mossy}/ground_grass_fells_mossy_NOH.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_grass_fells_mossy}/ground_grass_fells_mossy_NOH.png.meta (100%) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_rockgrass_fellsdirty}/ground_rockgrass_fellsdirty_CH.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_rockgrass_fellsdirty}/ground_rockgrass_fellsdirty_CH.png.meta (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_rockgrass_fellsdirty}/ground_rockgrass_fellsdirty_CS.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_rockgrass_fellsdirty}/ground_rockgrass_fellsdirty_CS.png.meta (100%) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CSNOH.terrainlayer create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CSNOH.terrainlayer.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_rockgrass_fellsdirty}/ground_rockgrass_fellsdirty_NOH.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => ground_rockgrass_fellsdirty}/ground_rockgrass_fellsdirty_NOH.png.meta (100%) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry.terrainlayer create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry.terrainlayer.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_c.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_c.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_m.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_m.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_n.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_n.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked.terrainlayer create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked.terrainlayer.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_c.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_c.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_m.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_m.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_n.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_n.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow.terrainlayer create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow.terrainlayer.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_c.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_c.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_m.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_m.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_n.png create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_n.png.meta create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => stone_ground}/stone_ground_CH.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => stone_ground}/stone_ground_CH.png.meta (100%) create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CSNOH.terrainlayer create mode 100644 Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CSNOH.terrainlayer.meta rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => stone_ground}/stone_ground_cs.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => stone_ground}/stone_ground_cs.png.meta (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => stone_ground}/stone_ground_noh.png (100%) rename Packages/com.unity.shadergraph/Samples~/Terrain/Textures/{ => stone_ground}/stone_ground_noh.png.meta (100%) diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CHNOS Array Dither.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CHNOS Array Dither.mat index ba71e6893b5..32f2bd3e4cf 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CHNOS Array Dither.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CHNOS Array Dither.mat @@ -46,7 +46,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _CH1: - m_Texture: {fileID: 2800000, guid: 5177befc12f3f8543828689be98cfb30, type: 3} + m_Texture: {fileID: 2800000, guid: 8ebf9a6dd15b4a84bbe0a0bee2cfbcbe, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _CH2: @@ -61,6 +61,10 @@ Material: m_Texture: {fileID: 2800000, guid: 4821ed7e8d065ef40b509f053993e50e, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CHNOS Hex Array.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CHNOS Hex Array.mat index 5a73060b4b1..a5a7d9dbbd7 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CHNOS Hex Array.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CHNOS Hex Array.mat @@ -46,7 +46,7 @@ Material: m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _CH1: - m_Texture: {fileID: 2800000, guid: 5177befc12f3f8543828689be98cfb30, type: 3} + m_Texture: {fileID: 2800000, guid: 8ebf9a6dd15b4a84bbe0a0bee2cfbcbe, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} - _CH2: @@ -61,6 +61,10 @@ Material: m_Texture: {fileID: 2800000, guid: 4821ed7e8d065ef40b509f053993e50e, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Hex Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Hex Height.mat index 36d8ecfe56f..e8a0c53ca09 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Hex Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Hex Height.mat @@ -61,6 +61,10 @@ Material: m_Texture: {fileID: 2800000, guid: 31627e9dbb81dad4ea2c4341db17299c, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _LayerHexDetail_0870a413e1da4a9aa513846f27c68555_DetailTexture_428711103_Texture2D: m_Texture: {fileID: 2800000, guid: 4c037056fa1a2f440b35be93de341a59, type: 3} m_Scale: {x: 1, y: 1} @@ -213,7 +217,7 @@ Material: - _SupportDecals: 1 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 - - _UV_Scale: 2 + - _UV_Scale: 1 - _UseRotation1: 1 - _UseRotation2: 1 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Procedural Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Procedural Height.mat index 940d176faf9..c72bb54032e 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Procedural Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Procedural Height.mat @@ -77,6 +77,10 @@ Material: m_Texture: {fileID: 2800000, guid: 31627e9dbb81dad4ea2c4341db17299c, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MOHS1: m_Texture: {fileID: 2800000, guid: 32419dbd87911c34db664317090de4e3, type: 3} m_Scale: {x: 1, y: 1} @@ -204,7 +208,7 @@ Material: - _SupportDecals: 1 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 - - _UV_Scale: 2 + - _UV_Scale: 1 - _ZTestDepthEqualForOpaque: 3 - _ZTestGBuffer: 4 - _ZWrite: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Rotation Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Rotation Height.mat index 786866012a0..9110d8ba98c 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Rotation Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Rotation Height.mat @@ -61,6 +61,10 @@ Material: m_Texture: {fileID: 2800000, guid: 31627e9dbb81dad4ea2c4341db17299c, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _LayerRotation_0400b6026d074da6b9d260cde251534a_BlendMask_1487180098_Texture2D: m_Texture: {fileID: 2800000, guid: 24c374271962bb2458ac0674e879eeac, type: 3} m_Scale: {x: 1, y: 1} @@ -229,7 +233,7 @@ Material: - _SupportDecals: 1 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 - - _UV_Scale: 2 + - _UV_Scale: 1 - _ZTestDepthEqualForOpaque: 3 - _ZTestGBuffer: 4 - _ZWrite: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Simple Blend.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Simple Blend.mat index 298e99ac46d..31275f7618c 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Simple Blend.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CNM Simple Blend.mat @@ -77,6 +77,10 @@ Material: m_Texture: {fileID: 2800000, guid: 31627e9dbb81dad4ea2c4341db17299c, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} - _MOHS1: m_Texture: {fileID: 2800000, guid: 32419dbd87911c34db664317090de4e3, type: 3} m_Scale: {x: 1, y: 1} @@ -202,7 +206,7 @@ Material: - _SupportDecals: 1 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 - - _UV_Scale: 2 + - _UV_Scale: 1 - _ZTestDepthEqualForOpaque: 3 - _ZTestGBuffer: 4 - _ZWrite: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Auto Material Simple.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Auto Material Simple.mat index 6d7dad8b5ab..879946dd1b6 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Auto Material Simple.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Auto Material Simple.mat @@ -68,6 +68,10 @@ Material: m_Texture: {fileID: 2800000, guid: c65516a09229f404aa8e9d10995abe59, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -186,6 +190,12 @@ Material: - _SupportDecals: 1 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale_1: 0.43 + - _UV_Scale_2: 0.19 + - _UV_Scale_3: 0.27 + - _UV_Scale_4: 0.27 + - _UV_Scale_Global: 20 + - _UV_Scale_Snow: 1 - _ZTestDepthEqualForOpaque: 3 - _ZTestGBuffer: 4 - _ZWrite: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Blend.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Blend.mat index b4459626f1b..d8aa0b2e52e 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Blend.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Blend.mat @@ -72,6 +72,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -342,6 +346,7 @@ Material: - _Surface: 0 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale: 1 - _UseRotation1: 1 - _UseRotation2: 1 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Height.mat index aa3eff62b76..2f5f9a83d91 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Height.mat @@ -72,6 +72,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -342,6 +346,7 @@ Material: - _Surface: 0 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale: 1 - _UseRotation1: 1 - _UseRotation2: 1 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Parallax Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Parallax Height.mat index e67a684434a..0adfcf92f66 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Parallax Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Hex Parallax Height.mat @@ -12,10 +12,10 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - - _DEPTHOFFSET_ON - _TERRAIN_INSTANCED_PERPIXEL_NORMAL m_InvalidKeywords: - _CONSERVATIVE_DEPTH_OFFSET + - _DEPTHOFFSET_ON - _DISABLE_SSR_TRANSPARENT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 @@ -74,6 +74,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -344,6 +348,7 @@ Material: - _Surface: 0 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale: 1 - _UseRotation1: 0 - _UseRotation2: 0 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Parallax Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Parallax Height.mat index b4ba0095784..bfbd6191792 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Parallax Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Parallax Height.mat @@ -12,10 +12,10 @@ Material: m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 m_ValidKeywords: - - _DEPTHOFFSET_ON - _TERRAIN_INSTANCED_PERPIXEL_NORMAL m_InvalidKeywords: - _CONSERVATIVE_DEPTH_OFFSET + - _DEPTHOFFSET_ON - _DISABLE_SSR_TRANSPARENT m_LightmapFlags: 4 m_EnableInstancingVariants: 1 @@ -74,6 +74,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -344,6 +348,7 @@ Material: - _Surface: 0 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale: 1 - _UseRotation1: 0 - _UseRotation2: 0 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Procedural Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Procedural Height.mat index f59c1014d0f..b78a1ea8970 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Procedural Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Procedural Height.mat @@ -88,6 +88,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -358,6 +362,7 @@ Material: - _Surface: 0 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale: 1 - _UseRotation1: 0 - _UseRotation2: 0 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Rotation Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Rotation Height.mat index b9e487c9df8..e0ddbf23bfc 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Rotation Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Rotation Height.mat @@ -72,6 +72,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -354,6 +358,7 @@ Material: - _Surface: 0 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale: 1 - _UseRotation1: 0 - _UseRotation2: 0 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Simple Blend.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Simple Blend.mat index a511daa3640..b83bc5dd660 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Simple Blend.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Simple Blend.mat @@ -72,6 +72,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -342,6 +346,7 @@ Material: - _Surface: 0 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale: 1 - _UseRotation1: 0 - _UseRotation2: 0 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Simple Height.mat b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Simple Height.mat index 5f4643ddf72..f88f0105eeb 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Simple Height.mat +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Materials/CSNOH Simple Height.mat @@ -88,6 +88,10 @@ Material: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _DefaultWhiteTex: + 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} @@ -358,6 +362,7 @@ Material: - _Surface: 0 - _TransparentWritingMotionVec: 0 - _TransparentZWrite: 0 + - _UV_Scale: 1 - _UseRotation1: 0 - _UseRotation2: 0 - _UseRotation3: 0 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/GlobalVolumeProfile.asset b/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/GlobalVolumeProfile.asset index f70d32e85eb..0aa58dc6a62 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/GlobalVolumeProfile.asset +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/GlobalVolumeProfile.asset @@ -182,7 +182,7 @@ MonoBehaviour: m_Value: 0.5 intensity: m_OverrideState: 1 - m_Value: 1 + m_Value: 0 scatter: m_OverrideState: 0 m_Value: 0.7 @@ -195,6 +195,9 @@ MonoBehaviour: highQualityFiltering: m_OverrideState: 1 m_Value: 0 + filter: + m_OverrideState: 0 + m_Value: 0 downscale: m_OverrideState: 1 m_Value: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/TerrainExample_8Layers.asset b/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/Terrain/TerrainExample_8Layers.asset new file mode 100644 index 0000000000000000000000000000000000000000..ef8c13e7335b1b76287ca36e93659f84bcdb902a GIT binary patch literal 190332 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

W~$IL%LlJx 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 the example shader + + This shader is designed to support terrains with more than 4 layers in the Universal Render Pipeline. + This is done by grouping the layers 4 by 4, premultiplying each layer with its corresponding mask, and adding them together. + They are then rendered in additive passes, stacking each group of 4 over the previous one. + For each new pass, the layer indices are shifted back by 4, and the mask index by 1. + + Texture Packing Type: CNM + Layer Type: Simple + Layer Blend Type: Alpha Premultiplied + Tile Breakup Type: None + Material Mask Type: Painted Splatmap + Texture Samples: 13 per pass of 4 layers + Relative Cost: 0.88 per pass + """ } ] } diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/TerrainURP.unity b/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/TerrainURP.unity index 3b6a08c68b0..97eb359e35f 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/TerrainURP.unity +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Scenes/TerrainURP.unity @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e9c9bd955279a5a4598147f184b13fd2f4c239a3de43f81d637e0822c8afed9d -size 32845 +oid sha256:575699533e4d49b658ffe4f25332523e2f1b95aab214bb40a7971803eab9b3fc +size 42029 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CNM Simple Blend 4PlusLayers URP.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CNM Simple Blend 4PlusLayers URP.shadergraph new file mode 100644 index 00000000000..648f0557af5 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CNM Simple Blend 4PlusLayers URP.shadergraph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:19a389abeb6cac4d585abdd22496fee487513a04e54b8b925ea6be03051d1b25 +size 166592 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CNM Simple Blend 4PlusLayers URP.shadergraph.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CNM Simple Blend 4PlusLayers URP.shadergraph.meta new file mode 100644 index 00000000000..8532ed0a29d --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CNM Simple Blend 4PlusLayers URP.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a54b6fd4f9bd63548acd22ac7afa47bf +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Auto Material Simple.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Auto Material Simple.shadergraph index 105fac47448..aa40bdf6ac5 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Auto Material Simple.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Auto Material Simple.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3d53ae1adf928a55dec246affa1ed62f26e04341c68b41ce0214fe3bd9fb7c66 -size 206408 +oid sha256:20b4f151a6711e59d186b1a1bba5c8ac50c14a286e1b13e1f0482e85c8cf5f29 +size 225835 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Blend.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Blend.shadergraph index 02f4d5285b3..b9728362eeb 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Blend.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Blend.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d2bc4840ca487c1ab23d361ecb171b2d4f9619f751f3449580b1ab5887e0e7f6 -size 227720 +oid sha256:dd6182ca607fec027ba005bbec4f3e9f98d916977ffb9d40fdfe6b3ab031bf72 +size 257169 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Height.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Height.shadergraph index c0f1ba6187f..6fe8d14bf6a 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Height.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Height.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7d40510f0aa0fc758681b28008c7a13cdc7016dc1596e50632f7ec11052dca9e -size 241076 +oid sha256:e76790d33337dbba316d9483db70952c7a80f17e3e130f082c71642e2e9ec590 +size 270541 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Parallax Height.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Parallax Height.shadergraph index 19ac3fd73a2..0118ce14b55 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Parallax Height.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Hex Parallax Height.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:776d4b29e485fda00a664522de50daccaa16ff0e7eab53b19cd8170c9414c46b -size 262723 +oid sha256:156d9a69c6717a30963154c60b75335d80bc8d0ecfa250f5ffdeed0af12b1512 +size 298357 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Parallax Height.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Parallax Height.shadergraph index 5460a66d08a..22e80ccb243 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Parallax Height.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Parallax Height.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:cffb482ee2fd13e12705518023e6924ca2d34e06ddea112c9937ee7d2405666d -size 201065 +oid sha256:436c078cf64e73bab57179383503b2a33fbdc0cfef2265dbda02f31654caf6d0 +size 236423 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Procedural Height.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Procedural Height.shadergraph index 06dd827f434..bfbaf4b0f32 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Procedural Height.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Procedural Height.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b9e678c7025dc348dc80fb85ce62e6990f22d7e2852efe69560a83a10644f53c -size 157601 +oid sha256:48962704e642cb69f6cc35de88a5cd604d9de3fb864e1c2526f5da8b6de9ab89 +size 196115 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Rotation Height.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Rotation Height.shadergraph index 70c79924ba0..597224d606e 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Rotation Height.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Rotation Height.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ace61158423e185b56b3484e6143ba8181a9094f3697bed811d76fdc8239c833 -size 207597 +oid sha256:1d59ddbceecb2f1fda0444adb1957d15701cbfc7d3ec2bdab3ea0f72583ce1f2 +size 236761 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Simple Blend.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Simple Blend.shadergraph index 984a5c40d35..92a4f6441ee 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Simple Blend.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Simple Blend.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:728212d9223f40c4959c772e09bd6bf1c7429ca1cc0353321cecc99fbd2bc53f -size 138025 +oid sha256:665ba6cde90bb480d1048886413b06cd9461df36bc12c78018149a3808dc5694 +size 114312 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Simple Height.shadergraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Simple Height.shadergraph index f7d5d9aff4c..74ead0ec3f4 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Simple Height.shadergraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Shaders/CSNOH Simple Height.shadergraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8b5072ad0b84478bad5611d2ef96d49f176035c2909d3af7f45acfe300b88a63 -size 153477 +oid sha256:a796df26d31905c038cf9c189d50e077593de5c0b1b69dc3c72159dc593073c5 +size 127390 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Hex CSNOH.shadersubgraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Hex CSNOH.shadersubgraph index bd2c163f336..6312c8c6405 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Hex CSNOH.shadersubgraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Hex CSNOH.shadersubgraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:14be56fac4b39c561b9a7886c46895907201ee88da6d5a15bdc38804ae966940 -size 144206 +oid sha256:a9a3a458f752249c50fd7aa4b7b89c27884afde9547a9abcefda03c91a4bd2c1 +size 138371 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Hex Parallax CSNOH.shadersubgraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Hex Parallax CSNOH.shadersubgraph index 7cdf35b2d6e..fe503ad441a 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Hex Parallax CSNOH.shadersubgraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Hex Parallax CSNOH.shadersubgraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa47d1ed6feed9bc1621f745d24651677bba5584ffe3378b0d7330f72282c781 -size 281845 +oid sha256:12eac1235dd22f3c203def0b327f4e85f4a958d51c48d2ba5061cf1e3720c4dc +size 270334 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Parallax CSNOH.shadersubgraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Parallax CSNOH.shadersubgraph index 911744f7bdb..823066c79d6 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Parallax CSNOH.shadersubgraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Parallax CSNOH.shadersubgraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83a67891b8539743103aeffa066b0f9f8d507245e7a0df1048c61e0afa567f9c -size 161540 +oid sha256:ad6b303e203e60df8b697568c1a297f027dac037f65612aaa2809000f071ed2b +size 154831 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Procedural CSNOH.shadersubgraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Procedural CSNOH.shadersubgraph index e0e2bbfb488..d259d398768 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Procedural CSNOH.shadersubgraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Procedural CSNOH.shadersubgraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c277c11d0302dbab0c0bb5a056e4b4cbf78ce7e6f0e83c2f81b94abea137e652 -size 234146 +oid sha256:95be88ed175e57ef61f671bbb298f6735b882c5f74142e5e15277bfdd579cba5 +size 225064 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Rotation CSNOH.shadersubgraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Rotation CSNOH.shadersubgraph index 620d03f21b5..5522bebaa99 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Rotation CSNOH.shadersubgraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Rotation CSNOH.shadersubgraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:079c5a987993472b1edbe275bf50a95255f1cf2218d2b317fd7b08bc4fa76cb5 -size 151257 +oid sha256:ccc03a0ec75412f665dbf809b0495947d8f832f4fd3eb0ce947991bc73bada1e +size 155211 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Simple CSNOH.shadersubgraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Simple CSNOH.shadersubgraph index affe61df4eb..a5350f14d93 100644 --- a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Simple CSNOH.shadersubgraph +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Layer Simple CSNOH.shadersubgraph @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d5f93c6f512e17a1b03c5a8bbc3dcaa383a9fe1aedfc85133ca8a084341b661d -size 72790 +oid sha256:160597d87b7539324269cca5e7fb91bb18bc07b56b3d6c0b87dedfa408300f50 +size 77645 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Sample CSNOH.shadersubgraph b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Sample CSNOH.shadersubgraph new file mode 100644 index 00000000000..9821c801231 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Sample CSNOH.shadersubgraph @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d15034ef37f7b7c265b93bea8c81f7427b609ec394c4ca02aba6254cfd552f2 +size 59525 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Sample CSNOH.shadersubgraph.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Sample CSNOH.shadersubgraph.meta new file mode 100644 index 00000000000..1c723cca1ef --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Subgraphs/Layers/Sample CSNOH.shadersubgraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c1a894fb19736964eb4a67e503e2d669 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 60072b568d64c40a485e0fc55012dc9f, type: 3} diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach.meta new file mode 100644 index 00000000000..3ca92d1f436 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49512ba0c169873478081676c4e5ea27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach.terrainlayer b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach.terrainlayer new file mode 100644 index 00000000000..c734923ee9d --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach.terrainlayer @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: aerial_beach + m_DiffuseTexture: {fileID: 2800000, guid: ab274f92c194b6e44bed38cc56873535, type: 3} + m_NormalMapTexture: {fileID: 2800000, guid: 95c750e209307ae43abe9896769142b3, type: 3} + m_MaskMapTexture: {fileID: 2800000, guid: 9907d4d633752164c8b1c14a2a5ae5ac, type: 3} + m_TileSize: {x: 2, y: 2} + m_TileOffset: {x: 0, y: 0} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_SmoothnessSource: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach.terrainlayer.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach.terrainlayer.meta new file mode 100644 index 00000000000..a467af1527a --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e2af62ad627a61409b77d0c1a020feb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_c.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_c.png new file mode 100644 index 00000000000..961e0562edb --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_c.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a30e238dde67cee2d98b83f9d9faafd6459f0a7f14563520a153b247a19d4d8 +size 1267626 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_c.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_c.png.meta new file mode 100644 index 00000000000..3cecfb0601e --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_c.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: ab274f92c194b6e44bed38cc56873535 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_m.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_m.png new file mode 100644 index 00000000000..65dc28decaf --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_m.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d406b0df03e14770b5bdb8cf3f1f6fda2145bae7b67de87c15a55f4be21b829a +size 1380343 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_m.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_m.png.meta new file mode 100644 index 00000000000..d2b04685242 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_m.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 9907d4d633752164c8b1c14a2a5ae5ac +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_n.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_n.png new file mode 100644 index 00000000000..1d2dc7e834d --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_n.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:697885f5f594d53a2dbd793cd1e3a83ae7cdd479f3e5b4d65fadaf3fc0864cc8 +size 1853416 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_n.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_n.png.meta new file mode 100644 index 00000000000..2b5098e11aa --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/aerial_beach/aerial_beach_n.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 95c750e209307ae43abe9896769142b3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil.meta new file mode 100644 index 00000000000..a33d47a20a5 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 63ad1c84df1000b4fa9a02f13d9a9f24 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_CH.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CH.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_CH.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CH.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CH.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CH.png.meta new file mode 100644 index 00000000000..0e8d68d810b --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CH.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 8ebf9a6dd15b4a84bbe0a0bee2cfbcbe +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_CS.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CS.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_CS.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CS.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_CS.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CS.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_CS.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CS.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CSNOH.terrainlayer b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CSNOH.terrainlayer new file mode 100644 index 00000000000..72254e25053 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CSNOH.terrainlayer @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: dry_soil_CSNOH + m_DiffuseTexture: {fileID: 2800000, guid: 73f09d99de9844849a2549d5044e343b, type: 3} + m_NormalMapTexture: {fileID: 2800000, guid: 14d52c3f3de89214b8e54648e44b5942, type: 3} + m_MaskMapTexture: {fileID: 0} + m_TileSize: {x: 2.3, y: 2.3} + m_TileOffset: {x: 0.37, y: 0.37} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_SmoothnessSource: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CSNOH.terrainlayer.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CSNOH.terrainlayer.meta new file mode 100644 index 00000000000..ba27eccd506 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_CSNOH.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 533d823f9ed80d4459b9dac0f0b1451b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_NOH.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_NOH.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_NOH.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_NOH.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_NOH.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_NOH.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil_NOH.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/dry_soil/dry_soil_NOH.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy.meta new file mode 100644 index 00000000000..a6d39ff3037 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4dfef43450d8fa8459c1dcb8a55de6f9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_CH.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CH.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_CH.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CH.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_CH.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CH.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_CH.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CH.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_CS.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CS.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_CS.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CS.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_CS.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CS.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_CS.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CS.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CSNOH.terrainlayer b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CSNOH.terrainlayer new file mode 100644 index 00000000000..5196bdd85e9 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CSNOH.terrainlayer @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ground_grass_fells_mossy_CSNOH + m_DiffuseTexture: {fileID: 2800000, guid: c65516a09229f404aa8e9d10995abe59, type: 3} + m_NormalMapTexture: {fileID: 2800000, guid: 8ba60db6aeca7b64791839e1d41e34e3, type: 3} + m_MaskMapTexture: {fileID: 0} + m_TileSize: {x: 4.2, y: 4.2} + m_TileOffset: {x: 0.13, y: 0.13} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_SmoothnessSource: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CSNOH.terrainlayer.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CSNOH.terrainlayer.meta new file mode 100644 index 00000000000..3399e059486 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_CSNOH.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd0cf296980dd5f4aa3d5aa75fafae60 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_NOH.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_NOH.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_NOH.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_NOH.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_NOH.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_NOH.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy_NOH.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_grass_fells_mossy/ground_grass_fells_mossy_NOH.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty.meta new file mode 100644 index 00000000000..14352447387 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ed10d55279baa842aeac52350647b41 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_CH.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CH.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_CH.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CH.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_CH.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CH.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_CH.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CH.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_CS.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CS.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_CS.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CS.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_CS.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CS.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_CS.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CS.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CSNOH.terrainlayer b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CSNOH.terrainlayer new file mode 100644 index 00000000000..2bd1f24f2dc --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CSNOH.terrainlayer @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ground_rockgrass_fellsdirty_CSNOH + m_DiffuseTexture: {fileID: 2800000, guid: 740fc49cb84296a49abd14f91c77b889, type: 3} + m_NormalMapTexture: {fileID: 2800000, guid: 998317af6f2d06544b3fa010ad4eeb68, type: 3} + m_MaskMapTexture: {fileID: 0} + m_TileSize: {x: 5.3, y: 5.3} + m_TileOffset: {x: 0.68, y: 0.68} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_SmoothnessSource: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CSNOH.terrainlayer.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CSNOH.terrainlayer.meta new file mode 100644 index 00000000000..0d15966d1c5 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_CSNOH.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55817a241e0eb5b479814bf57bbce64c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_NOH.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_NOH.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_NOH.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_NOH.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_NOH.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_NOH.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty_NOH.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/ground_rockgrass_fellsdirty/ground_rockgrass_fellsdirty_NOH.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry.meta new file mode 100644 index 00000000000..4d1e981ba36 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c112b74fc8aa92e4d91738d4ef54bcc3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry.terrainlayer b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry.terrainlayer new file mode 100644 index 00000000000..92f2da1f3f9 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry.terrainlayer @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: mud_cracked_dry + m_DiffuseTexture: {fileID: 2800000, guid: d47490cc794cd0449909b6f0b4974810, type: 3} + m_NormalMapTexture: {fileID: 2800000, guid: e740ac1af0c0cd543ae4273fc524e32c, type: 3} + m_MaskMapTexture: {fileID: 2800000, guid: 3162908b500cff4449324a10f4dc1251, type: 3} + m_TileSize: {x: 2, y: 2} + m_TileOffset: {x: 0, y: 0} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_SmoothnessSource: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry.terrainlayer.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry.terrainlayer.meta new file mode 100644 index 00000000000..f98fbf596ae --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b0b2d2a883432204d8262fb6d05eeea2 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_c.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_c.png new file mode 100644 index 00000000000..abc536375ab --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_c.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:467a42693b7c2a3fdbd39e0e8a52c2ffdacd18744c7f6fe96e46ef57d08c8dda +size 2137946 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_c.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_c.png.meta new file mode 100644 index 00000000000..05ee8d992df --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_c.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: d47490cc794cd0449909b6f0b4974810 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_m.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_m.png new file mode 100644 index 00000000000..a614d66cfa4 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_m.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef7139d343530f2a572c14605cfb979ed2a8a0f2d925d1c60f2af8bf5a0d1987 +size 2054004 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_m.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_m.png.meta new file mode 100644 index 00000000000..678601deb25 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_m.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 3162908b500cff4449324a10f4dc1251 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_n.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_n.png new file mode 100644 index 00000000000..04d0c71b6e3 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_n.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:949a6e1f9e55a02ee109a77ec4a12d9d2d56282efa8070e388e1f882a39554a6 +size 2446257 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_n.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_n.png.meta new file mode 100644 index 00000000000..a8bed515c70 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/mud_cracked_dry/mud_cracked_dry_n.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: e740ac1af0c0cd543ae4273fc524e32c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked.meta new file mode 100644 index 00000000000..985b2416fd6 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee1e3eaa85c271d49953709a76984563 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked.terrainlayer b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked.terrainlayer new file mode 100644 index 00000000000..6ed9d250bf1 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked.terrainlayer @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: rock_boulder_cracked + m_DiffuseTexture: {fileID: 2800000, guid: 6b570fea4b00da64d8dc94bc2f87023c, type: 3} + m_NormalMapTexture: {fileID: 2800000, guid: 7e8dc38929b81514887174894c69c3bf, type: 3} + m_MaskMapTexture: {fileID: 2800000, guid: 6c1c553611544574ca3b99aefe2a22af, type: 3} + m_TileSize: {x: 2, y: 2} + m_TileOffset: {x: 0, y: 0} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_SmoothnessSource: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked.terrainlayer.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked.terrainlayer.meta new file mode 100644 index 00000000000..58dd3f96a84 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24adb67e8a59e044e9eb20845551570f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_c.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_c.png new file mode 100644 index 00000000000..86d2420a83f --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_c.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70a342a5ebb575822840b9949285203d7c1987dfb793d97b379d1aa140923ef5 +size 2064287 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_c.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_c.png.meta new file mode 100644 index 00000000000..10fb0fc5e7a --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_c.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 6b570fea4b00da64d8dc94bc2f87023c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_m.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_m.png new file mode 100644 index 00000000000..7aaadbde3da --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_m.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40781bbff0dbb160499cca81bdbf776ac42681c332941c5992cb1f5f09f01f92 +size 1397543 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_m.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_m.png.meta new file mode 100644 index 00000000000..8cd897bc23a --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_m.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 6c1c553611544574ca3b99aefe2a22af +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_n.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_n.png new file mode 100644 index 00000000000..d32e02cb180 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_n.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:290f7b00e2f5677c7c5e3550e029cd034c171ddd361f7060d6d974055da54204 +size 2120250 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_n.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_n.png.meta new file mode 100644 index 00000000000..2e58a45b6f4 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/rock_boulder_cracked/rock_boulder_cracked_n.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 7e8dc38929b81514887174894c69c3bf +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow.meta new file mode 100644 index 00000000000..198148b3c0a --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d06936ddfba443a4bb6f7b6632ff3932 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow.terrainlayer b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow.terrainlayer new file mode 100644 index 00000000000..f4a5ff46d10 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow.terrainlayer @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: snow + m_DiffuseTexture: {fileID: 2800000, guid: 435d498d402de224186c00d182d615ed, type: 3} + m_NormalMapTexture: {fileID: 2800000, guid: af5d284601b1a3440bf3dc475cb3d71a, type: 3} + m_MaskMapTexture: {fileID: 2800000, guid: 30706f3fc752b1a4cb37549c80e53cf0, type: 3} + m_TileSize: {x: 2, y: 2} + m_TileOffset: {x: 0, y: 0} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_SmoothnessSource: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow.terrainlayer.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow.terrainlayer.meta new file mode 100644 index 00000000000..2b317733a82 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2835b25c87cc17644b7854a293beac7c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_c.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_c.png new file mode 100644 index 00000000000..b867c2f38a5 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_c.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee88b16789c81886635734f2fd0d79781ea82ebc06ea3da99f3c99f8ccf81e70 +size 1304640 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_c.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_c.png.meta new file mode 100644 index 00000000000..6fdb1a6943c --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_c.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 435d498d402de224186c00d182d615ed +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_m.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_m.png new file mode 100644 index 00000000000..901c176766d --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_m.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33e8348142a37148ef437b737bbc6e0818e8158ea29b5813ed77b649956b6315 +size 1407451 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_m.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_m.png.meta new file mode 100644 index 00000000000..e0822fb0e70 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_m.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 30706f3fc752b1a4cb37549c80e53cf0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_n.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_n.png new file mode 100644 index 00000000000..6de6a2c46fb --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_n.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51eb591aaa7d391d5219f9cf5f8e8e52ceac09e1eec6f38c83b12976865b5ce7 +size 2117991 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_n.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_n.png.meta new file mode 100644 index 00000000000..ba3ad939a07 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/snow/snow_n.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: af5d284601b1a3440bf3dc475cb3d71a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground.meta new file mode 100644 index 00000000000..ffe4bd2d280 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d726b787505ae34e8ae52c40cad8c23 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_CH.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CH.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_CH.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CH.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_CH.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CH.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_CH.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CH.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CSNOH.terrainlayer b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CSNOH.terrainlayer new file mode 100644 index 00000000000..224f587dda4 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CSNOH.terrainlayer @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1953259897 &8574412962073106934 +TerrainLayer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: stone_ground_CSNOH + m_DiffuseTexture: {fileID: 2800000, guid: 8bb31969344e3984793135c9a6f82f46, type: 3} + m_NormalMapTexture: {fileID: 2800000, guid: b90b0f91f3a8c5949a45be39331a07a4, type: 3} + m_MaskMapTexture: {fileID: 0} + m_TileSize: {x: 3.7, y: 3.7} + m_TileOffset: {x: 0.27, y: 0.27} + m_Specular: {r: 0, g: 0, b: 0, a: 0} + m_Metallic: 0 + m_Smoothness: 0 + m_NormalScale: 1 + m_DiffuseRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_DiffuseRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_MaskMapRemapMin: {x: 0, y: 0, z: 0, w: 0} + m_MaskMapRemapMax: {x: 1, y: 1, z: 1, w: 1} + m_SmoothnessSource: 1 diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CSNOH.terrainlayer.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CSNOH.terrainlayer.meta new file mode 100644 index 00000000000..af5664ff894 --- /dev/null +++ b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_CSNOH.terrainlayer.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a9cb0ffb80318e941a87c9f8b0b4f748 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8574412962073106934 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_cs.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_cs.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_cs.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_cs.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_cs.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_cs.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_cs.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_cs.png.meta diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_noh.png b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_noh.png similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_noh.png rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_noh.png diff --git a/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_noh.png.meta b/Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_noh.png.meta similarity index 100% rename from Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground_noh.png.meta rename to Packages/com.unity.shadergraph/Samples~/Terrain/Textures/stone_ground/stone_ground_noh.png.meta From c5f79155af71b29ef5294e90955d6a9c2da470ce Mon Sep 17 00:00:00 2001 From: Christian Sasseville Date: Fri, 24 Apr 2026 22:45:28 +0000 Subject: [PATCH 005/109] [UUM-140899] Disabling Verify_AliveParticleCount_Readback --- .../Tests/Runtime/VFXRuntimeTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXRuntimeTests.cs b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXRuntimeTests.cs index ec81faf2693..8be411da762 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXRuntimeTests.cs +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Tests/Runtime/VFXRuntimeTests.cs @@ -830,6 +830,7 @@ static bool IsUpPlateauDown(List<(int frame, int count)> curve, int eps = 8) } [UnityTest, Description("Cover internal behavior linked to readback of alive particle count")] + [Ignore("Disabled for Instability https://jira.unity3d.com/browse/UUM-140899")] public IEnumerator Verify_AliveParticleCount_Readback([ValueSource(nameof(kVerify_AliveParticleCount_ReadbackCase))] string currentName) { #if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX From ff75796fd1ce416db10269ddebb14e7ac3987523 Mon Sep 17 00:00:00 2001 From: Dom Doorbar Date: Sat, 25 Apr 2026 07:15:39 +0000 Subject: [PATCH 006/109] Exposed serialized m_NumIterationsEnclosingSphere --- .../RenderPipeline/HDRenderPipeline.cs | 2 + .../RenderPipeline/HDRenderPipelineAsset.cs | 2 + .../2327_NumIterationsEnclosingSphere.meta | 8 + .../2327_NumIterationsEnclosingSphere.unity | 3 + ...27_NumIterationsEnclosingSphere.unity.meta | 7 + .../2327_NumIterationsEnclosingSphere.asset | 561 ++++++++++++++++++ ...27_NumIterationsEnclosingSphere.asset.meta | 8 + .../2327_Volume.asset | 60 ++ .../2327_Volume.asset.meta | 8 + .../Cube.mat | 276 +++++++++ .../Cube.mat.meta | 8 + 11 files changed, 943 insertions(+) create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.unity create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.unity.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_NumIterationsEnclosingSphere.asset create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_NumIterationsEnclosingSphere.asset.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_Volume.asset create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_Volume.asset.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/Cube.mat create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/Cube.mat.meta diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs index 9ca1359530c..d6dec796052 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.cs @@ -3105,7 +3105,9 @@ out ScriptableCullingParameters cullingParams frozenCullingParamAvailable = false; } + cullingParams.conservativeEnclosingSphere = currentAsset.m_ShouldUseConservativeEnclosingSphere; + cullingParams.numIterationsEnclosingSphere = currentAsset.m_NumIterationsEnclosingSphere; LightLoopUpdateCullingParameters(ref cullingParams, hdCamera); // If we don't use environment light (like when rendering reflection probes) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineAsset.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineAsset.cs index 2a1216d1dab..d035509d3b5 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineAsset.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipelineAsset.cs @@ -26,6 +26,8 @@ public partial class HDRenderPipelineAsset : RenderPipelineAsset public override string renderPipelineShaderTag => HDRenderPipeline.k_ShaderTagName; diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.meta new file mode 100644 index 00000000000..d014459ab25 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24270524a9514154e832b3c026503ccd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.unity b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.unity new file mode 100644 index 00000000000..0e7606f9b01 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.unity @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:521dfc5064ea0f26a84e415c4d0fc022447ef495a74926b51007e2c4489307e8 +size 156461 diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.unity.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.unity.meta new file mode 100644 index 00000000000..035a033fda8 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5292ce5e9013b3743b620909294d4488 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_NumIterationsEnclosingSphere.asset b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_NumIterationsEnclosingSphere.asset new file mode 100644 index 00000000000..515982cd42e --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_NumIterationsEnclosingSphere.asset @@ -0,0 +1,561 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cf1dab834d4ec34195b920ea7bbf9ec, type: 3} + m_Name: 2327_NumIterationsEnclosingSphere + m_EditorClassIdentifier: Unity.RenderPipelines.HighDefinition.Runtime::UnityEngine.Rendering.HighDefinition.HDRenderPipelineAsset + m_Version: 26 + m_ObsoleteFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 + m_ObsoleteBakedOrCustomReflectionFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 + m_ObsoleteRealtimeReflectionFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 + m_ObsoleteDefaultVolumeProfile: {fileID: 0} + m_ObsoleteDefaultLookDevProfile: {fileID: 0} + m_ObsoleteFrameSettingsMovedToDefaultSettings: + bitDatas: + data1: 0 + data2: 0 + lodBias: 0 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 0 + sssCustomDownsampleSteps: 0 + msaaMode: 0 + materialQuality: 0 + m_ObsoleteBakedOrCustomReflectionFrameSettingsMovedToDefaultSettings: + bitDatas: + data1: 0 + data2: 0 + lodBias: 0 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 0 + sssCustomDownsampleSteps: 0 + msaaMode: 0 + materialQuality: 0 + m_ObsoleteRealtimeReflectionFrameSettingsMovedToDefaultSettings: + bitDatas: + data1: 0 + data2: 0 + lodBias: 0 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 0 + sssCustomDownsampleSteps: 0 + msaaMode: 0 + materialQuality: 0 + m_ObsoleteBeforeTransparentCustomPostProcesses: [] + m_ObsoleteBeforePostProcessCustomPostProcesses: [] + m_ObsoleteAfterPostProcessCustomPostProcesses: [] + m_ObsoleteBeforeTAACustomPostProcesses: [] + m_ObsoleteShaderVariantLogLevel: 0 + m_ObsoleteLensAttenuation: 0 + m_ObsoleteDiffusionProfileSettingsList: [] + m_PrefilterUseLegacyLightmaps: 0 + m_PrefilterUseLightmapBicubicSampling: 0 + m_ShouldUseConservativeEnclosingSphere: 1 + m_NumIterationsEnclosingSphere: 64 + m_RenderPipelineSettings: + supportShadowMask: 1 + supportSSR: 0 + supportSSRTransparent: 0 + supportSSAO: 1 + supportSSGI: 0 + supportSubsurfaceScattering: 1 + subsurfaceScatteringAttenuation: 1 + sssSampleBudget: + m_Values: 140000002800000050000000 + m_SchemaId: + m_Id: With3Levels + sssDownsampleSteps: + m_Values: 000000000000000000000000 + m_SchemaId: + m_Id: With3Levels + supportVolumetrics: 1 + supportVolumetricClouds: 0 + supportLightLayers: 0 + renderingLayerMaskBuffer: 0 + supportWater: 0 + waterSimulationResolution: 128 + supportWaterExclusion: 1 + supportWaterHorizontalDeformation: 0 + supportWaterDecals: 1 + waterDecalAtlasSize: 1024 + maximumWaterDecalCount: 48 + waterScriptInteractionsMode: 0 + waterFullCPUSimulation: 0 + waterCausticsMeshResolution: 256 + supportComputeThickness: 0 + computeThicknessResolution: 1 + computeThicknessLayerMask: + serializedVersion: 2 + m_Bits: 0 + supportDistortion: 1 + supportTransparentBackface: 1 + supportTransparentDepthPrepass: 1 + supportTransparentDepthPostpass: 1 + colorBufferFormat: 74 + depthBufferFormat: 0 + supportCustomPass: 1 + supportVariableRateShading: 1 + customBufferFormat: 8 + supportedLitShaderMode: 2 + planarReflectionResolution: + m_Values: 000100000004000000080000 + m_SchemaId: + m_Id: With3Levels + cubeReflectionResolution: + m_Values: 800000000001000000020000 + m_SchemaId: + m_Id: With3Levels + supportDecals: 1 + supportDecalLayers: 0 + supportSurfaceGradient: 1 + decalNormalBufferHP: 0 + supportHighQualityLineRendering: 0 + highQualityLineRenderingMemoryBudget: 128 + msaaSampleCount: 1 + supportMotionVectors: 1 + supportScreenSpaceLensFlare: 1 + supportDataDrivenLensFlare: 1 + supportDitheringCrossFade: 0 + supportRuntimeAOVAPI: 0 + supportTerrainHole: 0 + lightProbeSystem: 1 + oldLightProbeSystem: 0 + probeVolumeMemoryBudget: 1024 + supportProbeVolumeGPUStreaming: 0 + supportProbeVolumeDiskStreaming: 0 + probeVolumeSHBands: 1 + supportProbeVolumeScenarios: 0 + supportProbeVolumeScenarioBlending: 1 + probeVolumeBlendingMemoryBudget: 128 + supportRayTracing: 0 + supportVFXRayTracing: 0 + supportedRayTracingMode: 3 + lightLoopSettings: + cookieAtlasSize: 2048 + cookieFormat: 74 + cookieAtlasLastValidMip: 0 + cookieTexArraySize: 1 + planarReflectionAtlasSize: 0 + reflectionProbeCacheSize: 0 + reflectionCubemapSize: 0 + maxEnvLightsOnScreen: 0 + reflectionCacheCompressed: 0 + reflectionProbeFormat: 74 + reflectionProbeTexCacheSize: 4096 + reflectionProbeTexLastValidCubeMip: 3 + reflectionProbeTexLastValidPlanarMip: 0 + reflectionProbeDecreaseResToFit: 1 + skyReflectionSize: 256 + skyLightingOverrideLayerMask: + serializedVersion: 2 + m_Bits: 0 + supportFabricConvolution: 0 + maxDirectionalLightsOnScreen: 16 + maxPunctualLightsOnScreen: 512 + maxAreaLightsOnScreen: 64 + maxCubeReflectionOnScreen: 32 + maxPlanarReflectionOnScreen: 8 + maxDecalsOnScreen: 512 + maxLightsPerClusterCell: 8 + maxLocalVolumetricFogSize: 0 + maxLocalVolumetricFogOnScreen: 256 + hdShadowInitParams: + maxShadowRequests: 128 + directionalShadowsDepthBits: 32 + punctualShadowFilteringQuality: 1 + directionalShadowFilteringQuality: 1 + areaShadowFilteringQuality: 0 + punctualLightShadowAtlas: + shadowAtlasResolution: 4096 + shadowAtlasDepthBits: 32 + useDynamicViewportRescale: 1 + areaLightShadowAtlas: + shadowAtlasResolution: 4096 + shadowAtlasDepthBits: 32 + useDynamicViewportRescale: 1 + cachedPunctualLightShadowAtlas: 2048 + cachedAreaLightShadowAtlas: 1024 + allowDirectionalMixedCachedShadows: 0 + shadowResolutionDirectional: + m_Values: 00010000000200000004000000080000 + m_SchemaId: + m_Id: With4Levels + shadowResolutionPunctual: + m_Values: 00010000000200000004000000080000 + m_SchemaId: + m_Id: With4Levels + shadowResolutionArea: + m_Values: 00010000000200000004000000080000 + m_SchemaId: + m_Id: With4Levels + maxDirectionalShadowMapResolution: 2048 + maxPunctualShadowMapResolution: 2048 + maxAreaShadowMapResolution: 2048 + supportScreenSpaceShadows: 0 + supportContactShadows: 1 + maxScreenSpaceShadowSlots: 4 + screenSpaceShadowBufferFormat: 48 + decalSettings: + drawDistance: 1000 + atlasWidth: 4096 + atlasHeight: 4096 + transparentTextureResolution: + m_Values: 000100000002000000040000 + m_SchemaId: + m_Id: With3Levels + perChannelMask: 0 + postProcessSettings: + m_LutSize: 32 + lutFormat: 48 + bufferFormat: 74 + dynamicResolutionSettings: + enabled: 0 + useMipBias: 0 + advancedUpscalersByPriority: + advancedUpscalerNames: + - STP + DLSSPerfQualitySetting: 0 + DLSSInjectionPoint: 0 + TAAUInjectionPoint: 0 + STPInjectionPoint: 0 + defaultInjectionPoint: 2 + DLSSUseOptimalSettings: 1 + DLSSSharpness: 0.5 + DLSSRenderPresetForQuality: 0 + DLSSRenderPresetForBalanced: 0 + DLSSRenderPresetForPerformance: 0 + DLSSRenderPresetForUltraPerformance: 0 + DLSSRenderPresetForDLAA: 0 + FSR2EnableSharpness: 0 + FSR2Sharpness: 0 + FSR2UseOptimalSettings: 0 + FSR2QualitySetting: 0 + FSR2InjectionPoint: 0 + fsrOverrideSharpness: 0 + fsrSharpness: 0.92 + maxPercentage: 100 + minPercentage: 100 + dynResType: 1 + upsampleFilter: 1 + forceResolution: 0 + forcedPercentage: 100 + lowResTransparencyMinimumThreshold: 0 + rayTracingHalfResThreshold: 50 + lowResSSGIMinimumThreshold: 0 + lowResVolumetricCloudsMinimumThreshold: 50 + enableDLSS: 0 + lowresTransparentSettings: + enabled: 1 + checkerboardDepthBuffer: 1 + upsampleType: 1 + xrSettings: + singlePass: 1 + occlusionMesh: 1 + cameraJitter: 0 + allowMotionBlur: 0 + postProcessQualitySettings: + NearBlurSampleCount: 030000000500000008000000 + NearBlurMaxRadius: + - 2 + - 4 + - 7 + FarBlurSampleCount: 04000000070000000e000000 + FarBlurMaxRadius: + - 5 + - 8 + - 13 + DoFResolution: 040000000200000001000000 + DoFHighQualityFiltering: 000101 + DoFPhysicallyBased: 000000 + AdaptiveSamplingWeight: + - 0.5 + - 0.75 + - 2 + LimitManualRangeNearBlur: 000000 + MotionBlurSampleCount: 04000000080000000c000000 + BloomRes: 040000000200000002000000 + BloomHighQualityFiltering: 000101 + BloomHighQualityPrefiltering: 000001 + ChromaticAberrationMaxSamples: 03000000060000000c000000 + lightSettings: + useContactShadow: + m_Values: 000001 + m_SchemaId: + m_Id: With3Levels + maximumLODLevel: + m_Values: 000000000000000000000000 + m_SchemaId: + m_Id: With3Levels + lodBias: + m_Values: + - 1 + - 1 + - 1 + m_SchemaId: + m_Id: With3Levels + lightingQualitySettings: + AOStepCount: 040000000600000010000000 + AOFullRes: 000001 + AOMaximumRadiusPixels: 200000002800000050000000 + AOBilateralUpsample: 000101 + AODirectionCount: 010000000200000004000000 + ContactShadowSampleCount: 060000000a00000010000000 + SSRMaxRaySteps: 100000002000000040000000 + SSGIRaySteps: 200000004000000080000000 + SSGIDenoise: 010101 + SSGIHalfResDenoise: 010000 + SSGIDenoiserRadius: + - 0.75 + - 0.5 + - 0.5 + SSGISecondDenoise: 010101 + RTAORayLength: + - 0.5 + - 3 + - 20 + RTAOSampleCount: 010000000200000008000000 + RTAODenoise: 010101 + RTAODenoiserRadius: + - 0.25 + - 0.5 + - 0.65 + RTGIRayLength: + - 50 + - 50 + - 50 + RTGIFullResolution: 000001 + RTGIRaySteps: 200000003000000040000000 + RTGIDenoise: 010101 + RTGIHalfResDenoise: 010000 + RTGIDenoiserRadius: + - 1 + - 1 + - 1 + RTGISecondDenoise: 010101 + RTRMinSmoothness: + - 0.6 + - 0.4 + - 0 + RTRSmoothnessFadeStart: + - 0.7 + - 0.5 + - 0 + RTRRayLength: + - 50 + - 50 + - 50 + RTRFullResolution: 000001 + RTRRayMaxIterations: 200000003000000040000000 + RTRDenoise: 010101 + RTRDenoiserRadiusDimmer: + - 0.75 + - 0.75 + - 1 + RTRDenoiserAntiFlicker: + - 1 + - 1 + - 1 + Fog_ControlMode: 000000000000000000000000 + Fog_Budget: + - 0.166 + - 0.33 + - 0.666 + Fog_DepthRatio: + - 0.666 + - 0.666 + - 0.5 + gpuResidentDrawerSettings: + mode: 0 + smallMeshScreenPercentage: 0 + enableOcclusionCullingInCameras: 0 + useDepthPrepassForOccluders: 1 + m_ObsoleteLightLayerName0: + m_ObsoleteLightLayerName1: + m_ObsoleteLightLayerName2: + m_ObsoleteLightLayerName3: + m_ObsoleteLightLayerName4: + m_ObsoleteLightLayerName5: + m_ObsoleteLightLayerName6: + m_ObsoleteLightLayerName7: + m_ObsoleteDecalLayerName0: + m_ObsoleteDecalLayerName1: + m_ObsoleteDecalLayerName2: + m_ObsoleteDecalLayerName3: + m_ObsoleteDecalLayerName4: + m_ObsoleteDecalLayerName5: + m_ObsoleteDecalLayerName6: + m_ObsoleteDecalLayerName7: + m_ObsoleteSupportRuntimeDebugDisplay: 0 + allowShaderVariantStripping: 1 + enableSRPBatcher: 1 + availableMaterialQualityLevels: -1 + m_DefaultMaterialQualityLevel: 4 + diffusionProfileSettings: {fileID: 0} + m_VolumeProfile: {fileID: 0} + virtualTexturingSettings: + streamingCpuCacheSizeInMegaBytes: 256 + streamingMipPreloadTexturesPerFrame: 0 + streamingPreloadMipCount: 1 + streamingGpuCacheSettings: + - format: 0 + sizeInMegaBytes: 128 + m_CompositorCustomVolumeComponentsList: + m_InjectionPoint: 1 + m_CustomPostProcessTypesAsString: [] diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_NumIterationsEnclosingSphere.asset.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_NumIterationsEnclosingSphere.asset.meta new file mode 100644 index 00000000000..4ed787010d5 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_NumIterationsEnclosingSphere.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8d4cc62819c59249a4b572b7944a143 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_Volume.asset b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_Volume.asset new file mode 100644 index 00000000000..8512bd9a87c --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_Volume.asset @@ -0,0 +1,60 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-1061804307205530902 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7ddcec8a8eb2d684d833ac8f5d26aebd, type: 3} + m_Name: HDShadowSettings + m_EditorClassIdentifier: + active: 1 + interCascadeBorders: 1 + maxShadowDistance: + m_OverrideState: 1 + m_Value: 200 + directionalTransmissionMultiplier: + m_OverrideState: 0 + m_Value: 1 + cascadeShadowSplitCount: + m_OverrideState: 1 + m_Value: 3 + cascadeShadowSplit0: + m_OverrideState: 1 + m_Value: 0.05 + cascadeShadowSplit1: + m_OverrideState: 1 + m_Value: 0.15 + cascadeShadowSplit2: + m_OverrideState: 0 + m_Value: 0.32000002 + cascadeShadowBorder0: + m_OverrideState: 0 + m_Value: 0 + cascadeShadowBorder1: + m_OverrideState: 0 + m_Value: 0 + cascadeShadowBorder2: + m_OverrideState: 0 + m_Value: 0 + cascadeShadowBorder3: + m_OverrideState: 0 + m_Value: 0.5971643 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: 2327_Volume + m_EditorClassIdentifier: + components: + - {fileID: -1061804307205530902} diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_Volume.asset.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_Volume.asset.meta new file mode 100644 index 00000000000..bd80d98d774 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/2327_Volume.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c787c5a4f80464d47a8ac7e52e747c99 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/Cube.mat b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/Cube.mat new file mode 100644 index 00000000000..2e3578fa3e4 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/Cube.mat @@ -0,0 +1,276 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2314307006900840880 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: da692e001514ec24dbc4cca1949ff7e8, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 13 + hdPluginSubTargetMaterialVersions: + m_Keys: [] + m_Values: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Cube + m_Shader: {fileID: 4800000, guid: 6e4ae4064600d784cac1e41a9e6f2e59, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - _DISABLE_SSR_TRANSPARENT + - _NORMALMAP_TANGENT_SPACE + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2225 + stringTagMap: {} + disabledShaderPasses: + - TransparentDepthPrepass + - TransparentDepthPostpass + - TransparentBackface + - RayTracingPrepass + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AnisotropyMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BentNormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _CoatMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissiveColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _HeightMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescenceThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecularColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SubsurfaceMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TangentMapOS: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ThicknessMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmissionMaskMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TransmittanceColorMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AORemapMax: 1 + - _AORemapMin: 0 + - _ATDistance: 1 + - _AddPrecomputedVelocity: 0 + - _AlbedoAffectEmissive: 0 + - _AlphaCutoff: 0.5 + - _AlphaCutoffEnable: 0 + - _AlphaCutoffPostpass: 0.5 + - _AlphaCutoffPrepass: 0.5 + - _AlphaCutoffShadow: 0.5 + - _AlphaDstBlend: 0 + - _AlphaRemapMax: 1 + - _AlphaRemapMin: 0 + - _AlphaSrcBlend: 1 + - _Anisotropy: 0 + - _BlendMode: 0 + - _CoatMask: 0 + - _CullMode: 2 + - _CullModeForward: 2 + - _Cutoff: 0.5 + - _DepthOffsetEnable: 0 + - _DetailAlbedoScale: 1 + - _DetailNormalScale: 1 + - _DetailSmoothnessScale: 1 + - _DiffusionProfile: 0 + - _DiffusionProfileHash: 0 + - _DisplacementLockObjectScale: 1 + - _DisplacementLockTilingScale: 1 + - _DisplacementMode: 0 + - _DoubleSidedEnable: 0 + - _DoubleSidedGIMode: 0 + - _DoubleSidedNormalMode: 1 + - _DstBlend: 0 + - _EmissiveColorMode: 1 + - _EmissiveExposureWeight: 1 + - _EmissiveIntensity: 1 + - _EmissiveIntensityUnit: 0 + - _EnableBlendModePreserveSpecularLighting: 1 + - _EnableFogOnTransparent: 1 + - _EnableGeometricSpecularAA: 0 + - _EnergyConservingSpecularColor: 1 + - _HeightAmplitude: 0.02 + - _HeightCenter: 0.5 + - _HeightMapParametrization: 0 + - _HeightMax: 1 + - _HeightMin: -1 + - _HeightOffset: 0 + - _HeightPoMAmplitude: 2 + - _HeightTessAmplitude: 2 + - _HeightTessCenter: 0.5 + - _InvTilingScale: 1 + - _Ior: 1.5 + - _IridescenceMask: 1 + - _IridescenceThickness: 1 + - _LinkDetailsWithBase: 1 + - _MaterialID: 1 + - _Metallic: 0 + - _MetallicRemapMax: 1 + - _MetallicRemapMin: 0 + - _NormalMapSpace: 0 + - _NormalScale: 1 + - _ObjectSpaceUVMapping: 0 + - _ObjectSpaceUVMappingEmissive: 0 + - _OpaqueCullMode: 2 + - _PPDLodThreshold: 5 + - _PPDMaxSamples: 15 + - _PPDMinSamples: 5 + - _PPDPrimitiveLength: 1 + - _PPDPrimitiveWidth: 1 + - _RayTracing: 0 + - _ReceivesSSR: 1 + - _ReceivesSSRTransparent: 0 + - _RefractionModel: 0 + - _Smoothness: 0.5 + - _SmoothnessRemapMax: 1 + - _SmoothnessRemapMin: 0 + - _SpecularAAScreenSpaceVariance: 0.1 + - _SpecularAAThreshold: 0.2 + - _SpecularOcclusionMode: 1 + - _SrcBlend: 1 + - _StencilRef: 0 + - _StencilRefDepth: 8 + - _StencilRefGBuffer: 10 + - _StencilRefMV: 40 + - _StencilWriteMask: 6 + - _StencilWriteMaskDepth: 9 + - _StencilWriteMaskGBuffer: 15 + - _StencilWriteMaskMV: 41 + - _SubsurfaceMask: 1 + - _SupportDecals: 1 + - _SurfaceType: 0 + - _TexWorldScale: 1 + - _TexWorldScaleEmissive: 1 + - _Thickness: 1 + - _TransmissionEnable: 1 + - _TransmissionMask: 1 + - _TransparentBackfaceEnable: 0 + - _TransparentCullMode: 2 + - _TransparentDepthPostpassEnable: 0 + - _TransparentDepthPrepassEnable: 0 + - _TransparentSortPriority: 0 + - _TransparentWritingMotionVec: 0 + - _TransparentZWrite: 0 + - _UVBase: 0 + - _UVDetail: 0 + - _UVEmissive: 0 + - _UseEmissiveIntensity: 0 + - _UseShadowThreshold: 0 + - _ZTestDepthEqualForOpaque: 3 + - _ZTestGBuffer: 4 + - _ZTestTransparent: 4 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 0.41585082, g: 0.8396226, b: 0.42451236, a: 1} + - _BaseColorMap_MipInfo: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 0.4158508, g: 0.8396226, b: 0.42451233, a: 1} + - _DiffusionProfileAsset: {r: 0, g: 0, b: 0, a: 0} + - _DoubleSidedConstants: {r: 1, g: 1, b: -1, a: 0} + - _EmissionColor: {r: 1, g: 1, b: 1, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColorLDR: {r: 0, g: 0, b: 0, a: 1} + - _InvPrimScale: {r: 1, g: 1, b: 0, a: 0} + - _IridescenceThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _SpecularColor: {r: 1, g: 1, b: 1, a: 1} + - _ThicknessRemap: {r: 0, g: 1, b: 0, a: 0} + - _TransmittanceColor: {r: 1, g: 1, b: 1, a: 1} + - _UVDetailsMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMask: {r: 1, g: 0, b: 0, a: 0} + - _UVMappingMaskEmissive: {r: 1, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/Cube.mat.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/Cube.mat.meta new file mode 100644 index 00000000000..21b340e71d7 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2327_NumIterationsEnclosingSphere/Cube.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b0adad419720ce4089b0f7376c32f1e +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: From be93918871a719cfd5ed5e6bc373b8ea80f2d9d8 Mon Sep 17 00:00:00 2001 From: Simon Dufour Date: Sat, 25 Apr 2026 07:15:40 +0000 Subject: [PATCH 007/109] Remove RepaintData and Event parameter from Panel.Repaint --- Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs b/Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs index faf6197fdf8..a11aaf6ac5f 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/PreviewManager.cs @@ -1318,7 +1318,7 @@ void RenderPreview(PreviewRenderData renderData, Mesh mesh, Matrix4x4 transform, m_PreviewPanelSettings.ApplyPanelSettings(); var panel = m_PreviewPanelSettings.panel; - panel.Repaint(Event.current); + panel.Repaint(); panel.Render(); } else From 025b7e9fcfc36b91824436b9fbf7c6f8955de9b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toru=20Nayuki=20=EF=BC=88=E5=90=8D=E9=9B=AA=20=E9=80=9A=20?= =?UTF-8?q?-=20=E3=81=AA=E3=82=86=E3=81=8D=20=E3=81=A8=E3=81=8A=E3=82=8B?= =?UTF-8?q?=EF=BC=89?= Date: Mon, 27 Apr 2026 13:48:29 +0000 Subject: [PATCH 008/109] [2D] Support GPU skinning for Sprite Shadow / Unshadow --- ...ape2DProvider_SpriteSkin_PropertyDrawer.cs | 31 -------- ...Provider_SpriteSkin_PropertyDrawer.cs.meta | 2 - .../Runtime/2D/Renderer2DData.cs | 6 ++ .../ShadowShapeProvider2D_Utility.cs | 13 ---- .../Runtime/2D/Shadows/ShadowRendering.cs | 73 +++++++++++++++++-- .../Shaders/2D/Shadow2D-Shadow-Sprite.shader | 15 +++- .../2D/Shadow2D-Unshadow-Sprite.shader | 30 ++++++-- 7 files changed, 107 insertions(+), 63 deletions(-) delete mode 100644 Packages/com.unity.render-pipelines.universal/Editor/2D/Provider2D/ShadowShape2DProvider_SpriteSkin_PropertyDrawer.cs delete mode 100644 Packages/com.unity.render-pipelines.universal/Editor/2D/Provider2D/ShadowShape2DProvider_SpriteSkin_PropertyDrawer.cs.meta diff --git a/Packages/com.unity.render-pipelines.universal/Editor/2D/Provider2D/ShadowShape2DProvider_SpriteSkin_PropertyDrawer.cs b/Packages/com.unity.render-pipelines.universal/Editor/2D/Provider2D/ShadowShape2DProvider_SpriteSkin_PropertyDrawer.cs deleted file mode 100644 index ee0c38592c3..00000000000 --- a/Packages/com.unity.render-pipelines.universal/Editor/2D/Provider2D/ShadowShape2DProvider_SpriteSkin_PropertyDrawer.cs +++ /dev/null @@ -1,31 +0,0 @@ -#if USING_2DANIMATION -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEditor; -using UnityEngine.Rendering.Universal; - -namespace UnityEditor.Rendering.Universal -{ - [CustomPropertyDrawer(typeof(ShadowShape2DProvider_SpriteSkin))] - internal class ShadowShape2DProvider_SpriteSkin_PropertyDrawer : Provider2D_ProperyDrawer - { - public static string k_GPUSkinningError = "Shadow Caster 2D is not compatible with GPU skinning."; - - public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) - { - ShadowShape2DProvider_SpriteSkin provider = property.managedReferenceValue as ShadowShape2DProvider_SpriteSkin; - base.OnGUI(position, property, label); - - if (PlayerSettings.gpuSkinning) - EditorGUILayout.HelpBox(k_GPUSkinningError, MessageType.Error); - } - - public override float GetPropertyHeight(SerializedProperty property, GUIContent label) - { - return base.GetPropertyHeight(property, label); - } - - } -} -#endif diff --git a/Packages/com.unity.render-pipelines.universal/Editor/2D/Provider2D/ShadowShape2DProvider_SpriteSkin_PropertyDrawer.cs.meta b/Packages/com.unity.render-pipelines.universal/Editor/2D/Provider2D/ShadowShape2DProvider_SpriteSkin_PropertyDrawer.cs.meta deleted file mode 100644 index 95e53b08dc7..00000000000 --- a/Packages/com.unity.render-pipelines.universal/Editor/2D/Provider2D/ShadowShape2DProvider_SpriteSkin_PropertyDrawer.cs.meta +++ /dev/null @@ -1,2 +0,0 @@ -fileFormatVersion: 2 -guid: 8ff6b33302abd394d9b73a719ab6dde0 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2DData.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2DData.cs index 63beab007f1..315022366ab 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2DData.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2DData.cs @@ -112,6 +112,8 @@ internal void Dispose() CoreUtils.Destroy(spriteSelfShadowMaterial); CoreUtils.Destroy(spriteUnshadowMaterial); + CoreUtils.Destroy(spriteSelfShadowMaterialSkinned); + CoreUtils.Destroy(spriteUnshadowMaterialSkinned); CoreUtils.Destroy(geometrySelfShadowMaterial); CoreUtils.Destroy(geometryUnshadowMaterial); CoreUtils.Destroy(projectedShadowMaterial); @@ -130,6 +132,8 @@ protected override void OnEnable() spriteSelfShadowMaterial = null; spriteUnshadowMaterial = null; + spriteSelfShadowMaterialSkinned = null; + spriteUnshadowMaterialSkinned = null; projectedShadowMaterial = null; projectedUnshadowMaterial = null; } @@ -138,6 +142,8 @@ protected override void OnEnable() internal Dictionary lightMaterials { get; } = new Dictionary(); internal Material spriteSelfShadowMaterial { get; set; } internal Material spriteUnshadowMaterial { get; set; } + internal Material spriteSelfShadowMaterialSkinned { get; set; } + internal Material spriteUnshadowMaterialSkinned { get; set; } internal Material geometrySelfShadowMaterial { get; set; } internal Material geometryUnshadowMaterial { get; set; } internal Material projectedShadowMaterial { get; set; } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/Providers/ShadowShapeProvider2D_Utility.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/Providers/ShadowShapeProvider2D_Utility.cs index d22dc66dbd8..af9888d2537 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/Providers/ShadowShapeProvider2D_Utility.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/Providers/ShadowShapeProvider2D_Utility.cs @@ -2,10 +2,6 @@ using System.Collections.Generic; using UnityEngine; -#if USING_2DANIMATION -using UnityEngine.U2D.Animation; -#endif - internal static class ShadowShapeProvider2DUtility { static public float GetTrimEdgeFromBounds(Bounds bounds, float trimMultipler) @@ -22,13 +18,4 @@ static public float GetTrimEdgeFromBounds(Bounds bounds, float trimMultipler) return trimEdge; } - static public bool IsUsingGpuDeformation() - { - #if USING_2DANIMATION - return SpriteSkinUtility.IsUsingGpuDeformation(); - #else - return false; - #endif - } - } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/ShadowRendering.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/ShadowRendering.cs index 956720c6362..cd001d88e06 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/ShadowRendering.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Shadows/ShadowRendering.cs @@ -7,6 +7,10 @@ using UnityEngine.U2D; #endif +#if USING_2DANIMATION +using UnityEngine.U2D.Animation; +#endif + #if UNITY_EDITOR using UnityEditor; #endif @@ -126,6 +130,38 @@ private static Material GetSpriteUnshadowMaterial(this Renderer2DData rendererDa return rendererData.spriteUnshadowMaterial; } +#if USING_2DANIMATION + private const string k_SkinnedSpriteKeyword = "SKINNED_SPRITE"; + + private static Material GetSpriteShadowMaterialSkinned(this Renderer2DData rendererData) + { + if (rendererData.spriteSelfShadowMaterialSkinned != null) + return rendererData.spriteSelfShadowMaterialSkinned; + + var baseMaterial = rendererData.GetSpriteShadowMaterial(); + if (baseMaterial == null || !baseMaterial.shader.isSupported) + return null; + + rendererData.spriteSelfShadowMaterialSkinned = new Material(baseMaterial); + rendererData.spriteSelfShadowMaterialSkinned.EnableKeyword(k_SkinnedSpriteKeyword); + return rendererData.spriteSelfShadowMaterialSkinned; + } + + private static Material GetSpriteUnshadowMaterialSkinned(this Renderer2DData rendererData) + { + if (rendererData.spriteUnshadowMaterialSkinned != null) + return rendererData.spriteUnshadowMaterialSkinned; + + var baseMaterial = rendererData.GetSpriteUnshadowMaterial(); + if (baseMaterial == null || !baseMaterial.shader.isSupported) + return null; + + rendererData.spriteUnshadowMaterialSkinned = new Material(baseMaterial); + rendererData.spriteUnshadowMaterialSkinned.EnableKeyword(k_SkinnedSpriteKeyword); + return rendererData.spriteUnshadowMaterialSkinned; + } +#endif + private static Material GetGeometryShadowMaterial(this Renderer2DData rendererData) { rendererData.geometrySelfShadowMaterial = GetProjectedShadowMaterial( @@ -276,6 +312,22 @@ static bool ShadowCasterIsVisible(ShadowCaster2D shadowCaster) #endif } + ///

+ /// Use skinned sprite shadow materials only when this caster uses the SpriteSkin shape provider and + /// GPU deformation is active for that sprite (per ). + /// Materials are created like non-skinned variants; no null check here. + /// + static bool ShouldUseSkinnedSpriteShadowMaterials(ShadowCaster2D shadowCaster, Renderer renderer) + { +#if USING_2DANIMATION + if (shadowCaster.shadowShape2DProvider is not ShadowShape2DProvider_SpriteSkin) + return false; + return renderer is SpriteRenderer spriteRenderer && SpriteSkinUtility.IsGpuDeformationActive(spriteRenderer); +#else + return false; +#endif + } + static Renderer GetRendererFromCaster(ShadowCaster2D shadowCaster, Light2D light, int layerToRender) { Renderer renderer = null; @@ -335,7 +387,7 @@ static int GetRendererSubmeshes(Renderer renderer, ShadowCaster2D shadowCaster2D return numberOfSubmeshes; } - private static void RenderSpriteShadow(UnsafeCommandBuffer cmdBuffer, int layerToRender, Light2D light, List shadowCasters, Material spriteShadowMaterial, Material spriteUnshadowMaterial, Material geometryShadowMaterial, Material geometryUnshadowMaterial, int pass, ShadowTestType shadowTestType) + private static void RenderSpriteShadow(UnsafeCommandBuffer cmdBuffer, int layerToRender, Light2D light, List shadowCasters, Material spriteShadowMaterial, Material spriteUnshadowMaterial, Material geometryShadowMaterial, Material geometryUnshadowMaterial, Material spriteShadowMaterialSkinned, Material spriteUnshadowMaterialSkinned, int pass, ShadowTestType shadowTestType) { //Draw the sprites, either as self shadowing or unshadowing for (var i = 0; i < shadowCasters.Count; i++) @@ -352,18 +404,22 @@ private static void RenderSpriteShadow(UnsafeCommandBuffer cmdBuffer, int layerT if (renderer != null) { + bool useSkinnedMaterials = ShouldUseSkinnedSpriteShadowMaterials(shadowCaster, renderer); + var shadowMat = useSkinnedMaterials ? spriteShadowMaterialSkinned : spriteShadowMaterial; + var unshadowMat = useSkinnedMaterials ? spriteUnshadowMaterialSkinned : spriteUnshadowMaterial; + if (ShadowCasterIsVisible(shadowCaster) && shadowCaster.selfShadows) { int numberOfSubmeshes = GetRendererSubmeshes(renderer, shadowCaster); for (int submeshIndex = 0; submeshIndex < numberOfSubmeshes; submeshIndex++) - cmdBuffer.DrawRenderer(renderer, spriteShadowMaterial, submeshIndex, pass); + cmdBuffer.DrawRenderer(renderer, shadowMat, submeshIndex, pass); } else { int numberOfSubmeshes = GetRendererSubmeshes(renderer, shadowCaster); for (int submeshIndex = 0; submeshIndex < numberOfSubmeshes; submeshIndex++) { - cmdBuffer.DrawRenderer(renderer, spriteUnshadowMaterial, submeshIndex, pass); + cmdBuffer.DrawRenderer(renderer, unshadowMat, submeshIndex, pass); } } @@ -408,6 +464,13 @@ private static void RenderShadows(UnsafeCommandBuffer cmdBuffer, Renderer2DData var projectedUnshadowMaterial = rendererData.GetProjectedUnshadowMaterial(); var spriteShadowMaterial = rendererData.GetSpriteShadowMaterial(); var spriteUnshadowMaterial = rendererData.GetSpriteUnshadowMaterial(); +#if USING_2DANIMATION + var spriteShadowMaterialSkinned = rendererData.GetSpriteShadowMaterialSkinned(); + var spriteUnshadowMaterialSkinned = rendererData.GetSpriteUnshadowMaterialSkinned(); +#else + Material spriteShadowMaterialSkinned = null; + Material spriteUnshadowMaterialSkinned = null; +#endif var geometryShadowMaterial = rendererData.GetGeometryShadowMaterial(); var geometryUnshadowMaterial = rendererData.GetGeometryUnshadowMaterial(); @@ -417,13 +480,13 @@ private static void RenderShadows(UnsafeCommandBuffer cmdBuffer, Renderer2DData var shadowCasters = layer.shadowCasters[group].GetShadowCasters(); // Render self shadowing or non self shadowing - RenderSpriteShadow(cmdBuffer, layer.startLayerID, light, shadowCasters, spriteShadowMaterial, spriteUnshadowMaterial, geometryShadowMaterial, geometryUnshadowMaterial, 0, ShadowTestType.Always); + RenderSpriteShadow(cmdBuffer, layer.startLayerID, light, shadowCasters, spriteShadowMaterial, spriteUnshadowMaterial, geometryShadowMaterial, geometryUnshadowMaterial, spriteShadowMaterialSkinned, spriteUnshadowMaterialSkinned, 0, ShadowTestType.Always); // Draw the projected shadows for the shadow caster group. Only writes the composite stencil bit RenderProjectedShadows(cmdBuffer, layer.startLayerID, light, shadowCasters, projectedShadowMaterial, 0, ShadowTestType.Always); // Draw the projected shadows for the shadow caster group. Only writes the composite stencil bit RenderProjectedShadows(cmdBuffer, layer.startLayerID, light, shadowCasters, projectedShadowMaterial, 1, ShadowTestType.Unshadow); //Render self shadowing or non self shadowing - RenderSpriteShadow(cmdBuffer, layer.startLayerID, light, shadowCasters, spriteShadowMaterial, spriteUnshadowMaterial, geometryShadowMaterial, geometryUnshadowMaterial, 1, ShadowTestType.Unshadow); + RenderSpriteShadow(cmdBuffer, layer.startLayerID, light, shadowCasters, spriteShadowMaterial, spriteUnshadowMaterial, geometryShadowMaterial, geometryUnshadowMaterial, spriteShadowMaterialSkinned, spriteUnshadowMaterialSkinned, 1, ShadowTestType.Unshadow); } } } diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Sprite.shader b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Sprite.shader index 437d29896f5..dc2793cb207 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Sprite.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Shadow-Sprite.shader @@ -27,13 +27,18 @@ Shader "Hidden/Shadow2DShadowSprite" #pragma vertex vert #pragma fragment frag + #pragma multi_compile _ SKINNED_SPRITE + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" struct Attributes { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - float4 color : COLOR; + float3 positionOS : POSITION; + float2 uv : TEXCOORD0; + float4 color : COLOR; + UNITY_SKINNED_VERTEX_INPUTS }; struct Varyings @@ -50,7 +55,9 @@ Shader "Hidden/Shadow2DShadowSprite" Varyings vert (Attributes v) { Varyings o; - o.vertex = TransformObjectToHClip(v.vertex.xyz); + UNITY_SKINNED_VERTEX_COMPUTE(v); + v.positionOS = UnityFlipSprite(v.positionOS, unity_SpriteProps.xy); + o.vertex = TransformObjectToHClip(v.positionOS); o.uv = TRANSFORM_TEX(v.uv, _MainTex); o.color = _Color.a * v.color; return o; diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Unshadow-Sprite.shader b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Unshadow-Sprite.shader index 5cbdeb887f6..8427b6cf6ea 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Unshadow-Sprite.shader +++ b/Packages/com.unity.render-pipelines.universal/Shaders/2D/Shadow2D-Unshadow-Sprite.shader @@ -33,13 +33,18 @@ Shader "Hidden/Shadow2DUnshadowSprite" #pragma vertex vert #pragma fragment frag + #pragma multi_compile _ SKINNED_SPRITE + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" struct Attributes { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - float4 color : COLOR; + float3 positionOS : POSITION; + float2 uv : TEXCOORD0; + float4 color : COLOR; + UNITY_SKINNED_VERTEX_INPUTS }; struct Varyings @@ -57,7 +62,9 @@ Shader "Hidden/Shadow2DUnshadowSprite" Varyings vert(Attributes v) { Varyings o; - o.vertex = TransformObjectToHClip(v.vertex.xyz); + UNITY_SKINNED_VERTEX_COMPUTE(v); + v.positionOS = UnityFlipSprite(v.positionOS, unity_SpriteProps.xy); + o.vertex = TransformObjectToHClip(v.positionOS); o.uv = TRANSFORM_TEX(v.uv, _MainTex); o.color = _Color.a * v.color; return o; @@ -98,13 +105,18 @@ Shader "Hidden/Shadow2DUnshadowSprite" #pragma vertex vert #pragma fragment frag + #pragma multi_compile _ SKINNED_SPRITE + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/Core2D.hlsl" struct Attributes { - float4 vertex : POSITION; - float2 uv : TEXCOORD0; - float4 color : COLOR; + float3 positionOS : POSITION; + float2 uv : TEXCOORD0; + float4 color : COLOR; + UNITY_SKINNED_VERTEX_INPUTS }; struct Varyings @@ -122,7 +134,9 @@ Shader "Hidden/Shadow2DUnshadowSprite" Varyings vert(Attributes v) { Varyings o; - o.vertex = TransformObjectToHClip(v.vertex.xyz); + UNITY_SKINNED_VERTEX_COMPUTE(v); + v.positionOS = UnityFlipSprite(v.positionOS, unity_SpriteProps.xy); + o.vertex = TransformObjectToHClip(v.positionOS); o.uv = TRANSFORM_TEX(v.uv, _MainTex); o.color = _Color.a * v.color; return o; From 92d9ab188dfd7ae28452645bbabaaf8f3f403bd1 Mon Sep 17 00:00:00 2001 From: Olivier Prat Date: Mon, 27 Apr 2026 13:48:47 +0000 Subject: [PATCH 009/109] GFXLIGHT-2245 : Improved flat normal reconstruction for SurfaceCache --- .../FlatNormalResolution.compute | 131 ++++++++++-------- 1 file changed, 77 insertions(+), 54 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/FlatNormalResolution.compute b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/FlatNormalResolution.compute index c863f73d6fd..55a2a83a884 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/FlatNormalResolution.compute +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RendererFeatures/SurfaceCacheGIRendererFeature/FlatNormalResolution.compute @@ -10,13 +10,80 @@ RWTexture2D _ScreenFlatNormals; float4x4 _ClipToWorldTransform; +struct PixelInfo +{ + float2 uvPos; + float depthNDC; +}; + +PixelInfo GetPixelInfo(uint2 pixelPos, float2 rcpScreenSize) +{ + PixelInfo texCoordAndDepth; + texCoordAndDepth.depthNDC = LoadNdcDepth(_ScreenDepths, pixelPos); + texCoordAndDepth.uvPos = PixelPosToUvPos(pixelPos, rcpScreenSize); + return texCoordAndDepth; +} + +struct EdgeInfo +{ + PixelInfo nearPixelInfo; + float extrapolatedDepthNDC; +}; + +EdgeInfo ComputeEdgeInfo(uint2 centerPixelPos, int2 deltaPixelPos, float2 reciprocalScreenSize) +{ + EdgeInfo edgeInfo; + edgeInfo.nearPixelInfo = GetPixelInfo(centerPixelPos + deltaPixelPos, reciprocalScreenSize); + const float farPixelDepthNDC = LoadNdcDepth(_ScreenDepths, centerPixelPos + 2*deltaPixelPos); + // This works for both perspective and orthographic because in perspective projection + // to take into account perspective interpolation, we should interpolate 1/LinearZ and take the reciprocal of that. + // But NDCDepth is already proportional to 1/LinearZ. + // + // To extrapolate the segment [far, near] beyond near with the same spacing as between near and far, we want to + // return near + (near - far) = 2 * near - far. + edgeInfo.extrapolatedDepthNDC = 2 * edgeInfo.nearPixelInfo.depthNDC - farPixelDepthNDC; + return edgeInfo; +} + +float3 GetNeighborWorldPos(uint2 centerPixelPos, float centerDepthNDC, int2 deltaPixelPos, float2 reciprocalScreenSize, inout bool handednessFlip) +{ + // Compute the edge passing through the two neighboring pixels on the positive side + const EdgeInfo edgeInfoPositiveSide = ComputeEdgeInfo(centerPixelPos, deltaPixelPos, reciprocalScreenSize); + + // Compute the edge passing through the two neighboring pixels on the negative side + const EdgeInfo edgeInfoNegativeSide = ComputeEdgeInfo(centerPixelPos, -deltaPixelPos, reciprocalScreenSize); + + PixelInfo neighborPixelInfo; + if (abs(centerDepthNDC - edgeInfoNegativeSide.extrapolatedDepthNDC) < abs(centerDepthNDC - edgeInfoPositiveSide.extrapolatedDepthNDC)) + { + neighborPixelInfo = edgeInfoNegativeSide.nearPixelInfo; + handednessFlip = !handednessFlip; + } + else + { + neighborPixelInfo = edgeInfoPositiveSide.nearPixelInfo; + } + + return ComputeWorldSpacePosition(neighborPixelInfo.uvPos, neighborPixelInfo.depthNDC, _ClipToWorldTransform); +} + [numthreads(8, 8, 1)] void ResolveFlatNormals(uint2 centerPixelPos : SV_DispatchThreadID) { - // This is inspired by https://wickedengine.net/2019/09/improved-normal-reconstruction-from-depth/. - // In addition to the center sample, we take 4 depth samples in a cross around the center. - // Of these 4, we pick the best in the horizontal direction and the best in the vertical direction - // and use these to approximate the triangle surface orientation. + // This is inspired by https://atyuwen.github.io/posts/normal-reconstruction/ + // In addition to the center sample, we take 8 depth samples in a cross around the center. + // 2 + // 3 + // 0 1 x 5 4 + // 7 + // 6 + // Of these 8, we pick the best in the horizontal direction and the best in the vertical direction + // and use these to approximate the triangle surface orientation. By the best, this means picking + // the point for which the extrapolation of the segment they lie on towards the central pixel + // minimizes the difference in depth with that central pixel's depth. + // Note: this technique could be improved for some corner (pun intended as the algorithm sometimes + // doesn't return the correct true triangle normal in some tight corners) cases with some extra + // diagonal extrapolation. uint2 screenSize; _ScreenDepths.GetDimensions(screenSize.x, screenSize.y); @@ -29,60 +96,16 @@ void ResolveFlatNormals(uint2 centerPixelPos : SV_DispatchThreadID) return; const float2 reciprocalScreenSize = rcp(float2(screenSize)); - const float2 centerUvPos = PixelPosToUvPos(centerPixelPos, reciprocalScreenSize); - const float3 centerWorldPos = ComputeWorldSpacePosition(centerUvPos, centerNdcDepth, _ClipToWorldTransform); + const float2 centerUVPos = PixelPosToUvPos(centerPixelPos, reciprocalScreenSize); + const float3 centerWorldPos = ComputeWorldSpacePosition(centerUVPos, centerNdcDepth, _ClipToWorldTransform); bool handednessFlip = false; // Account for handedness and winding order. - float3 ddxPos; - { - const uint2 rightPixelPos = centerPixelPos + int2(1, 0); - const float rightNdcDepth = LoadNdcDepth(_ScreenDepths, rightPixelPos); - const uint2 leftPixelPos = centerPixelPos + int2(-1, 0); - const float leftNdcDepth = LoadNdcDepth(_ScreenDepths, leftPixelPos); - - uint2 horizontalPixelPos; - float horizontalNdcDepth; - if (abs(centerNdcDepth - leftNdcDepth) < abs(centerNdcDepth - rightNdcDepth)) - { - horizontalPixelPos = leftPixelPos; - horizontalNdcDepth = leftNdcDepth; - handednessFlip = !handednessFlip; - } - else - { - horizontalPixelPos = rightPixelPos; - horizontalNdcDepth = rightNdcDepth; - } - const float2 horizontalUvPos = PixelPosToUvPos(horizontalPixelPos, reciprocalScreenSize); - const float3 horizontalWorldPos = ComputeWorldSpacePosition(horizontalUvPos, horizontalNdcDepth, _ClipToWorldTransform); - ddxPos = horizontalWorldPos - centerWorldPos; - } + const float3 horizontalWorldPos = GetNeighborWorldPos(centerPixelPos, centerNdcDepth, int2(1, 0), reciprocalScreenSize, handednessFlip); + const float3 ddxPos = horizontalWorldPos - centerWorldPos; - float3 ddyPos; - { - const uint2 upPixelPos = centerPixelPos + int2(0, 1); - const float upNdcDepth = LoadNdcDepth(_ScreenDepths, upPixelPos); - const uint2 downPixelPos = centerPixelPos + int2(0, -1); - const float downNdcDepth = LoadNdcDepth(_ScreenDepths, downPixelPos); - - uint2 verticalPixelPos; - float verticalNdcDepth; - if (abs(centerNdcDepth - downNdcDepth) < abs(centerNdcDepth - upNdcDepth)) - { - verticalPixelPos = downPixelPos; - verticalNdcDepth = downNdcDepth; - } - else - { - verticalPixelPos = upPixelPos; - verticalNdcDepth = upNdcDepth; - handednessFlip = !handednessFlip; - } - const float2 verticalUvPos = PixelPosToUvPos(verticalPixelPos, reciprocalScreenSize); - const float3 verticalWorldPos = ComputeWorldSpacePosition(verticalUvPos, verticalNdcDepth, _ClipToWorldTransform); - ddyPos = verticalWorldPos - centerWorldPos; - } + const float3 verticalWorldPos = GetNeighborWorldPos(centerPixelPos, centerNdcDepth, -int2(0, 1), reciprocalScreenSize, handednessFlip); + const float3 ddyPos = verticalWorldPos - centerWorldPos; float3 flatNormal = normalize(cross(ddxPos, ddyPos)); if (handednessFlip) From aeb75add6d0ba8d924776d12761fc262ebf9a829 Mon Sep 17 00:00:00 2001 From: Kenny Tan Date: Mon, 27 Apr 2026 13:48:52 +0000 Subject: [PATCH 010/109] [UUM-140770][URP 2D][6000.6] Fix Inspector Preview window showing black sprites --- .../2D/FrameData/Universal2DRenderingData.cs | 3 +++ .../Runtime/2D/Rendergraph/DrawLight2DPass.cs | 12 +++------ .../2D/Rendergraph/DrawRenderer2DPass.cs | 15 ++++------- .../2D/Rendergraph/Renderer2DRendergraph.cs | 26 ++++++++++++++++--- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/FrameData/Universal2DRenderingData.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/FrameData/Universal2DRenderingData.cs index 750c516d466..01799d2af06 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/FrameData/Universal2DRenderingData.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/FrameData/Universal2DRenderingData.cs @@ -8,11 +8,14 @@ internal class Universal2DRenderingData : ContextItem internal int batchCount; + internal bool isLightingActive; + public override void Reset() { renderingData = null; layerBatches = null; batchCount = 0; + isLightingActive = true; } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs index 32e461c06f7..6bd4443041e 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawLight2DPass.cs @@ -183,15 +183,11 @@ internal void Render(RenderGraph graph, ContextContainer frameData, int batchInd { Universal2DResourceData universal2DResourceData = frameData.Get(); UniversalCameraData cameraData = frameData.Get(); - var layerBatch = frameData.Get().layerBatches[batchIndex]; - - DebugHandler debugHandler = GetActiveDebugHandler(cameraData); - var isLightingActive = debugHandler?.IsLightingActive ?? true; + Universal2DRenderingData rendering2DData = frameData.Get(); + var layerBatch = rendering2DData.layerBatches[batchIndex]; -#if UNITY_EDITOR - if (cameraData.isSceneViewCamera && UnityEditor.SceneView.currentDrawingSceneView != null) - isLightingActive &= UnityEditor.SceneView.currentDrawingSceneView.sceneLighting; -#endif + // Check for lighting in scene/prefab/preview camera + var isLightingActive = rendering2DData.isLightingActive; if (!layerBatch.lightStats.useLights || isVolumetric && !layerBatch.lightStats.useVolumetricLights || diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs index ccd9def2553..4439f3d4559 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/DrawRenderer2DPass.cs @@ -90,17 +90,12 @@ public void Render(RenderGraph graph, ContextContainer frameData, int batchIndex UniversalLightData lightData = frameData.Get(); Universal2DResourceData universal2DResourceData = frameData.Get(); CommonResourceData commonResourceData = frameData.Get(); - Renderer2DData rendererData = frameData.Get().renderingData; - var layerBatch = frameData.Get().layerBatches[batchIndex]; - - DebugHandler debugHandler = GetActiveDebugHandler(cameraData); - var isLightingActive = debugHandler?.IsLightingActive ?? true; + Universal2DRenderingData rendering2DData = frameData.Get(); + Renderer2DData rendererData = rendering2DData.renderingData; + var layerBatch = rendering2DData.layerBatches[batchIndex]; -#if UNITY_EDITOR - // Early out for prefabs - if (cameraData.isSceneViewCamera && UnityEditor.SceneView.currentDrawingSceneView != null) - isLightingActive = UnityEditor.SceneView.currentDrawingSceneView.sceneLighting; -#endif + // Check for lighting in scene/prefab/preview camera + var isLightingActive = rendering2DData.isLightingActive; // Preset global light textures for first batch if (batchIndex == 0) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/Renderer2DRendergraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/Renderer2DRendergraph.cs index e37221e072e..99adf24e41d 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/Renderer2DRendergraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Rendergraph/Renderer2DRendergraph.cs @@ -363,11 +363,13 @@ public override void SetupCullingParameters(ref ScriptableCullingParameters cull void InitializeLayerBatches() { Universal2DResourceData resourceData = frameData.Get(); - var renderingData = frameData.Get().renderingData; - ref var layerBatches = ref frameData.Get().layerBatches; + UniversalCameraData cameraData = frameData.Get(); + Universal2DRenderingData renderData = frameData.Get(); + ref var layerBatches = ref renderData.layerBatches; - layerBatches = LayerUtility.CalculateBatches(renderingData, out var batchCount); - frameData.Get().batchCount = batchCount; + layerBatches = LayerUtility.CalculateBatches(renderData.renderingData, out var batchCount); + renderData.batchCount = batchCount; + renderData.isLightingActive = IsSceneViewOrPreviewLightingActive(cameraData); // Initialize textures dependent on batch size if (resourceData.normalsTexture.Length != batchCount) @@ -1108,5 +1110,21 @@ internal static bool supportsMRT { get => !IsGLESDevice(); } + + static internal bool IsSceneViewOrPreviewLightingActive(UniversalCameraData cameraData) + { + DebugHandler debugHandler = ScriptableRenderPass.GetActiveDebugHandler(cameraData); + var isLightingActive = debugHandler?.IsLightingActive ?? true; + +#if UNITY_EDITOR + if (cameraData.isSceneViewCamera && UnityEditor.SceneView.currentDrawingSceneView != null) + isLightingActive &= UnityEditor.SceneView.currentDrawingSceneView.sceneLighting; + + if (cameraData.isPreviewCamera && cameraData.camera.name == "Preview Scene Camera") + isLightingActive = false; +#endif + + return isLightingActive; + } } } From dd89c280bbaeaae9048edc5a532a522f06cbcb67 Mon Sep 17 00:00:00 2001 From: Karl Jones Date: Mon, 27 Apr 2026 17:49:08 +0000 Subject: [PATCH 011/109] [content automatically redacted] touching PlatformDependent folder --- .../Editor/Drawing/Views/IdentifierField.cs | 5 ----- .../Editor/Drawing/Views/ResizableElement.cs | 4 ---- .../GraphView/BoundsRecorder/VFXBoundsRecorderField.cs | 4 ---- .../Editor/GraphView/BoundsRecorder/VFXBoundsSelector.cs | 4 ---- .../Editor/GraphView/VFXComponentBoard.cs | 4 ---- .../Editor/Utils/VFXContextBorder.cs | 4 ---- 6 files changed, 25 deletions(-) diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/IdentifierField.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/IdentifierField.cs index 8a64ca6a421..f598c756c49 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Views/IdentifierField.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/IdentifierField.cs @@ -17,11 +17,6 @@ public partial class IdentifierField : TextValueField { IdentifierInput tsInput => (IdentifierInput)textInputBase; - [Obsolete("UxmlFactory is deprecated and will be removed. Use UxmlElementAttribute instead.", false)] - public new class UxmlFactory : UxmlFactory { } - [Obsolete("UxmlTraits is deprecated and will be removed. Use UxmlElementAttribute instead.", false)] - public new class UxmlTraits : TextValueFieldTraits { } - protected override string ValueToString(string v) { return v; diff --git a/Packages/com.unity.shadergraph/Editor/Drawing/Views/ResizableElement.cs b/Packages/com.unity.shadergraph/Editor/Drawing/Views/ResizableElement.cs index 23e59532534..7ea8968abf3 100644 --- a/Packages/com.unity.shadergraph/Editor/Drawing/Views/ResizableElement.cs +++ b/Packages/com.unity.shadergraph/Editor/Drawing/Views/ResizableElement.cs @@ -5,10 +5,6 @@ namespace UnityEditor.ShaderGraph.Drawing { - [System.Obsolete("ResizableElementFactory is deprecated and will be removed. Use UxmlElementAttribute instead.", false)] - class ResizableElementFactory : UxmlFactory - { } - [UxmlElement] partial class ResizableElement : VisualElement { diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/BoundsRecorder/VFXBoundsRecorderField.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/BoundsRecorder/VFXBoundsRecorderField.cs index b1132f70d70..2f04155ff0f 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/BoundsRecorder/VFXBoundsRecorderField.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/BoundsRecorder/VFXBoundsRecorderField.cs @@ -30,10 +30,6 @@ public string text private bool m_Selected = false; - [System.Obsolete("VFXBoundsRecorderFieldUIFactory is deprecated and will be removed. Use UxmlElementAttribute instead.", false)] - public class VFXBoundsRecorderFieldUIFactory : UxmlFactory - { } - IVisualElementScheduledItem m_UpdateItem; private VFXContextUI m_TiedContext; diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/BoundsRecorder/VFXBoundsSelector.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/BoundsRecorder/VFXBoundsSelector.cs index 1646c584d30..ee92d545385 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/BoundsRecorder/VFXBoundsSelector.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/BoundsRecorder/VFXBoundsSelector.cs @@ -8,10 +8,6 @@ namespace UnityEditor.VFX.UI [UxmlElement] partial class VFXBoundsSelector : VisualElement, ISelection { - [Obsolete("VFXBoundsSelectorFactory is deprecated and will be removed. Use UxmlElementAttribute instead.", false)] - class VFXBoundsSelectorFactory : UxmlFactory - { } - public VFXBoundsSelector() { selection = new List(); diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXComponentBoard.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXComponentBoard.cs index 683a9f36314..80122f692a9 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXComponentBoard.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXComponentBoard.cs @@ -794,10 +794,6 @@ public void OnResized() } } - [System.Obsolete("VFXComponentBoardEventUIFactory is deprecated and will be removed. Use UxmlElementAttribute instead.", false)] - class VFXComponentBoardEventUIFactory : UxmlFactory - { } - [UxmlElement] partial class VFXComponentBoardEventUI : VisualElement { diff --git a/Packages/com.unity.visualeffectgraph/Editor/Utils/VFXContextBorder.cs b/Packages/com.unity.visualeffectgraph/Editor/Utils/VFXContextBorder.cs index 12ededf8920..173392cada3 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Utils/VFXContextBorder.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Utils/VFXContextBorder.cs @@ -8,10 +8,6 @@ namespace UnityEditor.VFX.UI { - [System.Obsolete("VFXContextBorderFactory is deprecated and will be removed. Use UxmlElementAttribute instead.", false)] - class VFXContextBorderFactory : UxmlFactory - { } - [UxmlElement] partial class VFXContextBorder : ImmediateModeElement, IDisposable { From 213327aa3b5736cb9dfbc707691a46956227f119 Mon Sep 17 00:00:00 2001 From: Kirill Titov Date: Tue, 28 Apr 2026 00:15:32 +0000 Subject: [PATCH 012/109] Fixed Cancel behavior for ObjectSelector With Confirmation --- .../Editor/InternalBridge/AssemblyInfo.cs | 1 + .../Editor/InternalBridge/ObjectSelector.cs | 7 + ...aultVolumeProfileSettingsPropertyDrawer.cs | 142 ++++++++++++++++++ .../Editor/Volume/VolumeProfileUtils.cs | 3 +- ...aultVolumeProfileSettingsPropertyDrawer.cs | 73 +-------- .../HDRPDefaultVolumeProfileSetting.cs | 8 +- ...aultVolumeProfileSettingsPropertyDrawer.cs | 77 +--------- ...ty.RenderPipelines.Universal.Editor.asmdef | 3 +- 8 files changed, 165 insertions(+), 149 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/InternalBridge/AssemblyInfo.cs b/Packages/com.unity.render-pipelines.core/Editor/InternalBridge/AssemblyInfo.cs index 8ea160f1dec..0a04494f984 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/InternalBridge/AssemblyInfo.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/InternalBridge/AssemblyInfo.cs @@ -2,3 +2,4 @@ [assembly: InternalsVisibleTo("Unity.RenderPipelines.Core.Editor")] [assembly: InternalsVisibleTo("Unity.RenderPipelines.HighDefinition.Editor")] +[assembly: InternalsVisibleTo("Unity.RenderPipelines.Universal.Editor")] diff --git a/Packages/com.unity.render-pipelines.core/Editor/InternalBridge/ObjectSelector.cs b/Packages/com.unity.render-pipelines.core/Editor/InternalBridge/ObjectSelector.cs index 8c398439214..ea3b96a5f2b 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/InternalBridge/ObjectSelector.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/InternalBridge/ObjectSelector.cs @@ -10,5 +10,12 @@ public static void Show(UnityEngine.Object obj, Type requiredType, UnityEngine.O { UnityEditor.ObjectSelector.get.Show(obj, requiredType, objectBeingEdited, allowSceneObjects, allowedEntityIds, onObjectSelectorClosed, onObjectSelectedUpdated, showNoneItem); } + + public static void SetVisualSelection(EntityId entityId) + { + UnityEditor.ObjectSelector.get.SetVisualSelection(entityId); + } + + public static bool isVisible => UnityEditor.ObjectSelector.isVisible; } } diff --git a/Packages/com.unity.render-pipelines.core/Editor/Settings/PropertyDrawers/DefaultVolumeProfileSettingsPropertyDrawer.cs b/Packages/com.unity.render-pipelines.core/Editor/Settings/PropertyDrawers/DefaultVolumeProfileSettingsPropertyDrawer.cs index 3e1a845611b..4704543a9ac 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Settings/PropertyDrawers/DefaultVolumeProfileSettingsPropertyDrawer.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Settings/PropertyDrawers/DefaultVolumeProfileSettingsPropertyDrawer.cs @@ -1,7 +1,9 @@ using System; +using UnityEditor.UIElements; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.UIElements; +using Object = UnityEngine.Object; namespace UnityEditor.Rendering { @@ -17,6 +19,7 @@ public abstract partial class DefaultVolumeProfileSettingsPropertyDrawer : Prope static DefaultVolumeProfileEditor s_DefaultVolumeProfileEditor; VisualElement m_Root; + ObjectField m_ObjectField; /// SerializedObject representing the settings object protected SerializedObject m_SettingsSerializedObject; @@ -31,6 +34,9 @@ public abstract partial class DefaultVolumeProfileSettingsPropertyDrawer : Prope /// Info box message protected abstract GUIContent volumeInfoBoxLabel { get; } + /// Label and tooltip used for the Default Volume Profile asset field. + protected abstract GUIContent defaultVolumeProfileAssetLabel { get; } + /// /// CreatePropertyGUI implementation. /// @@ -107,6 +113,142 @@ protected void DestroyDefaultVolumeProfileEditor() s_DefaultVolumeProfileSerializedProperty = null; } + /// + /// Show modal dialog to confirm update of selected volume if needed and apply new volume profile. + /// + /// Object Field used to display Default Volume profile + /// New Volume profile + /// Previous volume profile + /// Optionally provided default volume profile to extract default values + /// Render Pipeline type + void ShowGlobalDefaultVolumeDialog(ObjectField field, Object newValue, + Object previousValue, IDefaultVolumeProfileSettings defaultVolumeProfileSettings = null) + where TRenderPipeline : RenderPipeline + { + bool confirmed = VolumeProfileUtils.UpdateGlobalDefaultVolumeProfileWithConfirmation(newValue as VolumeProfile, defaultVolumeProfileSettings?.volumeProfile); + if (confirmed) + { + UpdateDefaultVolumeSerializedPropertyAndRecreate(field, newValue); + } + else + { + m_VolumeProfileSerializedProperty.objectReferenceValue = previousValue; + m_VolumeProfileSerializedProperty.serializedObject.ApplyModifiedProperties(); + field.SetValueWithoutNotify(previousValue); + // Update the ObjectSelector's visual selection if it's still open + if (previousValue != null && ObjectSelector.isVisible) + ObjectSelector.SetVisualSelection(previousValue.GetEntityId()); + } + } + + /// + /// Update serialized property for Default Volume profile and recreate related Editors + /// + /// Object Field used to display Default Volume profile + /// New Volume profile + void UpdateDefaultVolumeSerializedPropertyAndRecreate(ObjectField field, Object newValue) + { + m_VolumeProfileSerializedProperty.objectReferenceValue = newValue; + m_VolumeProfileSerializedProperty.serializedObject.ApplyModifiedProperties(); + field.SetValueWithoutNotify(newValue); + DestroyDefaultVolumeProfileEditor(); + CreateDefaultVolumeProfileEditor(); + } + + /// + /// Draw ObjectField for Default Volume. + /// + /// Default value source if available + /// Render Pipeline type for Default Volume + /// Default Volume settings container type + /// New Object Field + protected VisualElement DrawDefaultVolumeObjectField(TDefaultVolumeSettings defaultVolumeProfileSettings = null) + where TRenderPipeline: RenderPipeline + where TDefaultVolumeSettings : class, IDefaultVolumeProfileSettings + { + VisualElement profileLine = new(); + var toggle = new Toggle(); + toggle.AddToClassList(Foldout.toggleUssClassName); + var checkmark = toggle.Q(className: Toggle.checkmarkUssClassName); + checkmark.AddToClassList(Foldout.checkmarkUssClassName); + m_ObjectField = new ObjectField(defaultVolumeProfileAssetLabel.text) + { + tooltip = defaultVolumeProfileAssetLabel.tooltip, + objectType = typeof(VolumeProfile), + value = m_VolumeProfileSerializedProperty.objectReferenceValue as VolumeProfile, + style = + { + flexShrink = 1, + } + }; + m_ObjectField.AddToClassList("unity-base-field__aligned"); //Align with other BaseField + m_ObjectField.Q