From 2e86277301505a3965c0800e91a379eb26b4f04e Mon Sep 17 00:00:00 2001 From: Gregory Mitrano Date: Fri, 1 Nov 2024 14:54:22 +0000 Subject: [PATCH 01/85] [RG] Render Graph Disable Pass Merging Debug Setting This change adds a new debug setting to render graph that allows users to disable pass merging if desired. This allows them to either diagnose issues caused by pass merging, or to isolate performance changes due to pass merging. Off: ![image](https://media.github.cds.internal.unity3d.com/user/4435/files/a93a40ea-37f6-4d95-84f6-3f9e340c795b) On: ![image](https://media.github.cds.internal.unity3d.com/user/4435/files/a4bc9bc2-6431-4116-93bc-0d34a10f0338) --- .../RenderGraph/Compiler/NativePassCompiler.cs | 13 ++++++++----- .../Runtime/RenderGraph/Compiler/PassesData.cs | 2 ++ .../RenderGraph/Debug/RenderGraphDebugParams.cs | 10 ++++++++++ .../Runtime/RenderGraph/RenderGraph.Compiler.cs | 2 +- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs index 57bc3c19b51..ff62aaf14c9 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs @@ -14,7 +14,8 @@ internal struct RenderGraphInputInfo public RenderGraphResourceRegistry m_ResourcesForDebugOnly; public List m_RenderPasses; public string debugName; - public bool disableCulling; + public bool disablePassCulling; + public bool disablePassMerging; } internal RenderGraphInputInfo graph; @@ -59,7 +60,7 @@ void Cleanup() } } - public bool Initialize(RenderGraphResourceRegistry resources, List renderPasses, bool disableCulling, string debugName, bool useCompilationCaching, int graphHash, int frameIndex) + public bool Initialize(RenderGraphResourceRegistry resources, List renderPasses, RenderGraphDebugParams debugParams, string debugName, bool useCompilationCaching, int graphHash, int frameIndex) { bool cached = false; if (!useCompilationCaching) @@ -69,7 +70,8 @@ public bool Initialize(RenderGraphResourceRegistry resources, List disablePassCulling = value }, new DebugUI.BoolField + { + nameAndTooltip = Strings.DisablePassMerging, + getter = () => disablePassMerging, + setter = value => disablePassMerging = value + }, + new DebugUI.BoolField { nameAndTooltip = Strings.ImmediateMode, getter = () => immediateMode, @@ -144,6 +153,7 @@ public bool AreAnySettingsActive return clearRenderTargetsAtCreation || clearRenderTargetsAtRelease || disablePassCulling || + disablePassMerging || immediateMode || enableLogging; } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.Compiler.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.Compiler.cs index 6fac60ecafd..9a49da1624d 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.Compiler.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.Compiler.cs @@ -15,7 +15,7 @@ internal NativePassCompiler CompileNativeRenderGraph(int graphHash) if (nativeCompiler == null) nativeCompiler = new NativePassCompiler(m_CompilationCache); - bool compilationIsCached = nativeCompiler.Initialize(m_Resources, m_RenderPasses, m_DebugParameters.disablePassCulling, name, m_EnableCompilationCaching, graphHash, m_ExecutionCount); + bool compilationIsCached = nativeCompiler.Initialize(m_Resources, m_RenderPasses, m_DebugParameters, name, m_EnableCompilationCaching, graphHash, m_ExecutionCount); if (!compilationIsCached) nativeCompiler.Compile(m_Resources); From 60a179016f96b5f4280296bc87b1614095a61cf6 Mon Sep 17 00:00:00 2001 From: Satish Chandra Dhanyamraju Date: Fri, 1 Nov 2024 14:54:26 +0000 Subject: [PATCH 02/85] Fix for glclientwaitsync errors in powervr devices Issue : https://jira.unity3d.com/browse/UUM-35986 We have identified that certain GPU drivers (specifically, Power VR drivers in this case) delay sending commands to the hardware until a specific threshold is met The issue at hand arises because glClientWaitSync() is being called before the previous commands have been dispatched to the hardware. To address this, we propose inserting a call to glFlush() before invoking glClientWaitSync() to ensure that the queued commands are sent to the hardware, avoiding the error described. This PR also reverts the changes done for https://jira.unity3d.com/browse/UUM-59572 --- .../Runtime/Passes/AdditionalLightsShadowCasterPass.cs | 6 ------ .../Runtime/Passes/MainLightShadowCasterPass.cs | 5 ----- 2 files changed, 11 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs index e2ea0124db6..1f9940bca35 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs @@ -636,12 +636,6 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera if (!m_EmptyShadowmapNeedsClear) { - // UUM-63146 - glClientWaitSync: Expected application to have kicked everything until job: 96089 (possibly by calling glFlush)" are thrown in the Android Player on some devices with PowerVR Rogue GE8320 - // Resetting of target would clean up the color attachment buffers and depth attachment buffers, which inturn is preventing the leak in the said platform. This is likely a symptomatic fix, but is solving the problem for now. - - if (Application.platform == RuntimePlatform.Android && PlatformAutoDetect.isRunningOnPowerVRGPU) - ResetTarget(); - return; } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs index 1ff4cb64c77..9a277381f54 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs @@ -202,11 +202,6 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera if (!m_EmptyShadowmapNeedsClear) { - // UUM-63146 - glClientWaitSync: Expected application to have kicked everything until job: 96089 (possibly by calling glFlush)" are thrown in the Android Player on some devices with PowerVR Rogue GE8320 - // Resetting of target would clean up the color attachment buffers and depth attachment buffers, which inturn is preventing the leak in the said platform. This is likely a symptomatic fix, but is solving the problem for now. - if (Application.platform == RuntimePlatform.Android && PlatformAutoDetect.isRunningOnPowerVRGPU) - ResetTarget(); - return; } From cad34f9aa0dd9f96f3f74bfbbd852f89e4ee0b4a Mon Sep 17 00:00:00 2001 From: Brian Elgaard Bennett Date: Fri, 1 Nov 2024 14:54:32 +0000 Subject: [PATCH 03/85] Enable URP reflection probe tests The purpose of this PR is to ensure that we explicitly test reflection probes. This is done by re-enabling disabled tests which exercise the possible paths to reflection probe baking. With this PR the tests have been moved to the LightBaker test suite. --- .../Lighting_ReflectionProbeBaking.meta | 8 - .../ReflectionProbeBake.unity | 406 ---------- .../ReflectionProbeBake.unity.meta | 7 - .../contents.meta | 8 - .../contents/blue_emissive.mat | 136 ---- .../contents/blue_emissive.mat.meta | 8 - .../contents/green_emissive.mat | 136 ---- .../contents/green_emissive.mat.meta | 8 - .../contents/grey.mat | 135 ---- .../contents/grey.mat.meta | 8 - .../contents/pod.prefab | 745 ------------------ .../contents/pod.prefab.meta | 7 - .../contents/red_emissive.mat | 136 ---- .../contents/red_emissive.mat.meta | 8 - .../contents/sphere.mat | 135 ---- .../contents/sphere.mat.meta | 8 - .../settings.meta | 8 - .../settings/Auto-Progressive.lighting | 63 -- .../settings/Auto-Progressive.lighting.meta | 8 - .../settings/Auto-nonProgressive.lighting | 63 -- .../Auto-nonProgressive.lighting.meta | 8 - .../settings/nonAuto-Progressive.lighting | 63 -- .../nonAuto-Progressive.lighting.meta | 8 - .../settings/nonAuto-nonProgressive.lighting | 63 -- .../nonAuto-nonProgressive.lighting.meta | 8 - .../Assets/Test/Editor/LightBaker.meta | 8 - .../Test/Editor/ReflectionProbeTests.cs | 153 ---- .../Test/Editor/ReflectionProbeTests.cs.meta | 11 - .../Assets/Test/LightBaker/Tests.asmdef | 6 +- 29 files changed, 4 insertions(+), 2365 deletions(-) delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/blue_emissive.mat delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/blue_emissive.mat.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/green_emissive.mat delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/green_emissive.mat.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/grey.mat delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/grey.mat.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/pod.prefab delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/pod.prefab.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/red_emissive.mat delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/red_emissive.mat.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/sphere.mat delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/sphere.mat.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-Progressive.lighting delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-Progressive.lighting.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-nonProgressive.lighting delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-nonProgressive.lighting.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-Progressive.lighting delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-Progressive.lighting.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-nonProgressive.lighting delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-nonProgressive.lighting.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/LightBaker.meta delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/ReflectionProbeTests.cs delete mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/ReflectionProbeTests.cs.meta diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking.meta deleted file mode 100644 index 394dcc49351..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 56025fa4f03396e4c9af3da741ad94dd -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity deleted file mode 100644 index 8740b1a94e5..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity +++ /dev/null @@ -1,406 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!29 &1 -OcclusionCullingSettings: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_OcclusionBakeSettings: - smallestOccluder: 5 - smallestHole: 0.25 - backfaceThreshold: 100 - m_SceneGUID: 00000000000000000000000000000000 - m_OcclusionCullingData: {fileID: 0} ---- !u!104 &2 -RenderSettings: - m_ObjectHideFlags: 0 - serializedVersion: 9 - m_Fog: 1 - m_FogColor: {r: 0.65080994, g: 0.666729, b: 0.7075472, a: 1} - m_FogMode: 3 - m_FogDensity: 0.05 - m_LinearFogStart: 0 - m_LinearFogEnd: 300 - m_AmbientSkyColor: {r: 0, g: 0, b: 0, a: 1} - m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} - m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} - m_AmbientIntensity: 1 - m_AmbientMode: 3 - m_SubtractiveShadowColor: {r: 0.13296545, g: 0.19145328, b: 0.33962262, a: 1} - m_SkyboxMaterial: {fileID: 0} - m_HaloStrength: 0.5 - m_FlareStrength: 1 - m_FlareFadeSpeed: 3 - m_HaloTexture: {fileID: 0} - m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} - m_DefaultReflectionMode: 0 - m_DefaultReflectionResolution: 128 - m_ReflectionBounces: 1 - m_ReflectionIntensity: 1 - m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} - m_UseRadianceAmbientProbe: 0 ---- !u!157 &3 -LightmapSettings: - m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 - m_GISettings: - serializedVersion: 2 - m_BounceScale: 1 - m_IndirectOutputScale: 1 - m_AlbedoBoost: 1 - m_EnvironmentLightingMode: 1 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_LightmapEditorSettings: - serializedVersion: 12 - m_Resolution: 2 - m_BakeResolution: 32 - m_AtlasSize: 512 - m_AO: 1 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0.3 - m_ExtractAmbientOcclusion: 0 - m_Padding: 2 - m_LightmapParameters: {fileID: 0} - m_LightmapsBakeMode: 0 - m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 - m_ReflectionCompression: 2 - m_MixedBakeMode: 1 - m_BakeBackend: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 32 - m_PVRSampleCount: 256 - m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 256 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 - m_PVRCulling: 1 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.548 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 - m_LightingDataAsset: {fileID: 112000000, guid: cf2322904827d2d47aeefeb12e0f0889, - type: 2} - m_LightingSettings: {fileID: 4890085278179872738, guid: 8ea49e83785bd634e82a21f077c4b373, - type: 2} ---- !u!196 &4 -NavMeshSettings: - serializedVersion: 2 - m_ObjectHideFlags: 0 - m_BuildSettings: - serializedVersion: 2 - agentTypeID: 0 - agentRadius: 0.5 - agentHeight: 2 - agentSlope: 45 - agentClimb: 0.4 - ledgeDropHeight: 0 - maxJumpAcrossDistance: 0 - minRegionArea: 2 - manualCellSize: 0 - cellSize: 0.16666667 - manualTileSize: 0 - tileSize: 256 - accuratePlacement: 0 - maxJobWorkers: 0 - preserveTilesOutsideBounds: 0 - debug: - m_Flags: 0 - m_NavMeshData: {fileID: 0} ---- !u!1 &50327881 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 50327884} - - component: {fileID: 50327883} - - component: {fileID: 50327882} - m_Layer: 0 - m_Name: EventSystem - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &50327882 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 50327881} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 ---- !u!114 &50327883 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 50327881} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_FirstSelected: {fileID: 0} - m_sendNavigationEvents: 1 - m_DragThreshold: 10 ---- !u!4 &50327884 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 50327881} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1001 &1391707039 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 322997711459325300, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_Name - value: pod - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalPosition.x - value: -0.23239788 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalPosition.y - value: 4.5245867 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalPosition.z - value: 6.388121 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 322997711459325303, guid: b4affea085b2d674e956f7e919ccbd95, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: b4affea085b2d674e956f7e919ccbd95, type: 3} ---- !u!1 &1687258581 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1687258585} - - component: {fileID: 1687258584} - - component: {fileID: 1687258582} - - component: {fileID: 1687258587} - - component: {fileID: 1687258586} - m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!81 &1687258582 -AudioListener: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1687258581} - m_Enabled: 1 ---- !u!20 &1687258584 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1687258581} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 2 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} - m_projectionMatrixMode: 1 - m_GateFitMode: 2 - m_FOVAxisMode: 0 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 73 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 64 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &1687258585 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1687258581} - m_LocalRotation: {x: 0, y: 1, z: 0, w: 0} - m_LocalPosition: {x: 0, y: 1.2, z: 0.82} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} ---- !u!114 &1687258586 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1687258581} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} - m_Name: - m_EditorClassIdentifier: - m_RenderShadows: 1 - m_RequiresDepthTextureOption: 2 - m_RequiresOpaqueTextureOption: 2 - m_CameraType: 0 - m_Cameras: [] - m_RendererIndex: -1 - m_VolumeLayerMask: - serializedVersion: 2 - m_Bits: 1 - m_VolumeTrigger: {fileID: 0} - m_RenderPostProcessing: 1 - m_Antialiasing: 1 - m_AntialiasingQuality: 2 - m_StopNaN: 1 - m_Dithering: 0 - m_ClearDepth: 1 - m_AllowXRRendering: 1 - m_RequiresDepthTexture: 0 - m_RequiresColorTexture: 0 - m_Version: 2 ---- !u!114 &1687258587 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1687258581} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 73231aa468d81ea49bc3d914080de185, type: 3} - m_Name: - m_EditorClassIdentifier: - ImageComparisonSettings: - TargetWidth: 1024 - TargetHeight: 512 - PerPixelCorrectnessThreshold: 0.001 - PerPixelGammaThreshold: 0.003921569 - PerPixelAlphaThreshold: 0.003921569 - AverageCorrectnessThreshold: 0.005 - IncorrectPixelsThreshold: 0.0000038146973 - UseHDR: 0 - UseBackBuffer: 0 - ImageResolution: 0 - ActiveImageTests: 1 - ActivePixelTests: 7 - WaitFrames: 0 - XRCompatible: 1 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity.meta deleted file mode 100644 index 595d4b7b667..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: 96bc24fbb0abb6a4a814effb32d6f3bc -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents.meta deleted file mode 100644 index 97585201335..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: dca1b4376029caa4fbe8771941029293 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/blue_emissive.mat b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/blue_emissive.mat deleted file mode 100644 index 661571c74cc..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/blue_emissive.mat +++ /dev/null @@ -1,136 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: blue_emissive - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _EMISSION - - _SPECULAR_SETUP - m_InvalidKeywords: [] - m_LightmapFlags: 2 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2000 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.005 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _WorkflowMode: 0 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0.19607843, g: 0.18039216, b: 1.8117647, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] ---- !u!114 &8571754693488421837 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 9 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/blue_emissive.mat.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/blue_emissive.mat.meta deleted file mode 100644 index 638211f9832..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/blue_emissive.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: bb6779946994eb44988fca5bb565ce20 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/green_emissive.mat b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/green_emissive.mat deleted file mode 100644 index e0f050dce11..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/green_emissive.mat +++ /dev/null @@ -1,136 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: green_emissive - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _EMISSION - - _SPECULAR_SETUP - m_InvalidKeywords: [] - m_LightmapFlags: 2 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2000 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.005 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _WorkflowMode: 0 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0.4, g: 1.8666667, b: 0.16470589, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] ---- !u!114 &8571754693488421837 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 9 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/green_emissive.mat.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/green_emissive.mat.meta deleted file mode 100644 index 1f3de3df9dd..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/green_emissive.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8a253fcc04ae1b6469e7161f47f955d6 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/grey.mat b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/grey.mat deleted file mode 100644 index b3d0d197ec8..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/grey.mat +++ /dev/null @@ -1,135 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: grey - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _SPECULAR_SETUP - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2000 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.005 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _WorkflowMode: 0 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] ---- !u!114 &2772354106088880095 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 9 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/grey.mat.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/grey.mat.meta deleted file mode 100644 index 6e13dc94c48..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/grey.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7e82f78daf3f83c4098a1c53682ea06f -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/pod.prefab b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/pod.prefab deleted file mode 100644 index 83d8c4743ad..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/pod.prefab +++ /dev/null @@ -1,745 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!1 &322997711215918417 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997711215918413} - - component: {fileID: 322997711215918418} - - component: {fileID: 322997711215918419} - - component: {fileID: 322997711215918416} - m_Layer: 0 - m_Name: Blue Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 65 - m_IsActive: 1 ---- !u!4 &322997711215918413 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711215918417} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1.7676021, y: -3.5245867, z: -3.3881211} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 322997711459325303} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &322997711215918418 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711215918417} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &322997711215918419 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711215918417} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: bb6779946994eb44988fca5bb565ce20, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!65 &322997711215918416 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711215918417} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &322997711453106748 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997711453106750} - - component: {fileID: 322997711453106751} - m_Layer: 0 - m_Name: Ref probe 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &322997711453106750 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711453106748} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 322997712441748894} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!215 &322997711453106751 -ReflectionProbe: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711453106748} - m_Enabled: 1 - serializedVersion: 2 - m_Type: 0 - m_Mode: 0 - m_RefreshMode: 0 - m_TimeSlicingMode: 0 - m_Resolution: 128 - m_UpdateFrequency: 0 - m_BoxSize: {x: 10, y: 10, z: 10} - m_BoxOffset: {x: 0, y: 0, z: 0} - m_NearClip: 0.3 - m_FarClip: 1000 - m_ShadowDistance: 100 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_IntensityMultiplier: 1 - m_BlendDistance: 1 - m_HDR: 1 - m_BoxProjection: 0 - m_RenderDynamicObjects: 0 - m_UseOcclusionCulling: 1 - m_Importance: 1 - m_CustomBakedTexture: {fileID: 0} ---- !u!1 &322997711459325300 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997711459325303} - m_Layer: 0 - m_Name: pod - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &322997711459325303 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711459325300} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: -0.23239788, y: 4.5245867, z: 6.388121} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 322997712315667203} - - {fileID: 322997712702543215} - - {fileID: 322997711215918413} - - {fileID: 322997711914190698} - - {fileID: 322997712441748894} - - {fileID: 322997712010339515} - m_Father: {fileID: 0} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &322997711914190702 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997711914190698} - - component: {fileID: 322997711914190699} - - component: {fileID: 322997711914190696} - - component: {fileID: 322997711914190697} - m_Layer: 0 - m_Name: Green Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 65 - m_IsActive: 1 ---- !u!4 &322997711914190698 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711914190702} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 2.2323978, y: -3.5245867, z: -3.3881211} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 322997711459325303} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &322997711914190699 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711914190702} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &322997711914190696 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711914190702} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 8a253fcc04ae1b6469e7161f47f955d6, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!65 &322997711914190697 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997711914190702} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &322997712010339519 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997712010339515} - - component: {fileID: 322997712010339512} - - component: {fileID: 322997712010339513} - - component: {fileID: 322997712010339518} - m_Layer: 6 - m_Name: Sphere (1) - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &322997712010339515 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712010339519} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.7323979, y: -3.3245866, z: -6.538121} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 322997712186781820} - m_Father: {fileID: 322997711459325303} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &322997712010339512 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712010339519} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &322997712010339513 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712010339519} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: e9525c38d4e543847a27f2ac6db6ae80, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!135 &322997712010339518 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712010339519} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &322997712186781821 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997712186781820} - - component: {fileID: 322997712186781823} - m_Layer: 0 - m_Name: Ref probe 1 - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &322997712186781820 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712186781821} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 322997712010339515} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!215 &322997712186781823 -ReflectionProbe: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712186781821} - m_Enabled: 1 - serializedVersion: 2 - m_Type: 0 - m_Mode: 0 - m_RefreshMode: 0 - m_TimeSlicingMode: 0 - m_Resolution: 128 - m_UpdateFrequency: 0 - m_BoxSize: {x: 10, y: 10, z: 10} - m_BoxOffset: {x: 0, y: 0, z: 0} - m_NearClip: 0.3 - m_FarClip: 1000 - m_ShadowDistance: 100 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0} - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_IntensityMultiplier: 1 - m_BlendDistance: 1 - m_HDR: 1 - m_BoxProjection: 0 - m_RenderDynamicObjects: 0 - m_UseOcclusionCulling: 1 - m_Importance: 1 - m_CustomBakedTexture: {fileID: 0} ---- !u!1 &322997712315667207 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997712315667203} - - component: {fileID: 322997712315667200} - - component: {fileID: 322997712315667201} - - component: {fileID: 322997712315667206} - m_Layer: 0 - m_Name: Plane - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 65 - m_IsActive: 1 ---- !u!4 &322997712315667203 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712315667207} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.23239788, y: -4.5245867, z: -6.388121} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 322997711459325303} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &322997712315667200 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712315667207} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &322997712315667201 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712315667207} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 7e82f78daf3f83c4098a1c53682ea06f, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!64 &322997712315667206 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712315667207} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 4 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &322997712441748962 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997712441748894} - - component: {fileID: 322997712441748895} - - component: {fileID: 322997712441748892} - - component: {fileID: 322997712441748893} - m_Layer: 6 - m_Name: Sphere - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &322997712441748894 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712441748962} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.26760212, y: -3.3245866, z: -6.538121} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 322997711453106750} - m_Father: {fileID: 322997711459325303} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &322997712441748895 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712441748962} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &322997712441748892 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712441748962} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: e9525c38d4e543847a27f2ac6db6ae80, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!135 &322997712441748893 -SphereCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712441748962} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Radius: 0.5 - m_Center: {x: 0, y: 0, z: 0} ---- !u!1 &322997712702543219 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 322997712702543215} - - component: {fileID: 322997712702543212} - - component: {fileID: 322997712702543213} - - component: {fileID: 322997712702543218} - m_Layer: 0 - m_Name: Red Cube - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 65 - m_IsActive: 1 ---- !u!4 &322997712702543215 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712702543219} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.23239788, y: -3.5245867, z: -3.3881211} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 322997711459325303} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!33 &322997712702543212 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712702543219} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &322997712702543213 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712702543219} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_StaticShadowCaster: 0 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RayTracingMode: 2 - m_RayTraceProcedural: 0 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: a0927f345c301464faaa5faeb3d90e42, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_ReceiveGI: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 1 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 - m_AdditionalVertexStreams: {fileID: 0} ---- !u!65 &322997712702543218 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 322997712702543219} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 1} - m_Center: {x: 0, y: 0, z: 0} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/pod.prefab.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/pod.prefab.meta deleted file mode 100644 index b9026de5d7c..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/pod.prefab.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: b4affea085b2d674e956f7e919ccbd95 -PrefabImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/red_emissive.mat b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/red_emissive.mat deleted file mode 100644 index 3609cc7d564..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/red_emissive.mat +++ /dev/null @@ -1,136 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: red_emissive - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _EMISSION - - _SPECULAR_SETUP - m_InvalidKeywords: [] - m_LightmapFlags: 2 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2000 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.005 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 0 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _WorkflowMode: 0 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 1.8509803, g: 0.16474694, b: 0.16474694, a: 1} - - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} - m_BuildTextureStacks: [] ---- !u!114 &8571754693488421837 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 9 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/red_emissive.mat.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/red_emissive.mat.meta deleted file mode 100644 index e29af322d32..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/red_emissive.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: a0927f345c301464faaa5faeb3d90e42 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/sphere.mat b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/sphere.mat deleted file mode 100644 index 1f8bfc05a6d..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/sphere.mat +++ /dev/null @@ -1,135 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!114 &-3236364715094663323 -MonoBehaviour: - m_ObjectHideFlags: 11 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 0} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 9 ---- !u!21 &2100000 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: sphere - m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - _SPECULAR_SETUP - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: 2000 - stringTagMap: - RenderType: Opaque - disabledShaderPasses: - - MOTIONVECTORS - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _BaseMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _BumpMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailAlbedoMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailMask: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DetailNormalMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _EmissionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MetallicGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _OcclusionMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ParallaxMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _SpecGlossMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_Lightmaps: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_LightmapsInd: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - unity_ShadowMasks: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _AlphaClip: 0 - - _AlphaToMask: 0 - - _Blend: 0 - - _BlendModePreserveSpecular: 1 - - _BumpScale: 1 - - _ClearCoatMask: 0 - - _ClearCoatSmoothness: 0 - - _Cull: 2 - - _Cutoff: 0.5 - - _DetailAlbedoMapScale: 1 - - _DetailNormalMapScale: 1 - - _DstBlend: 0 - - _DstBlendAlpha: 0 - - _EnvironmentReflections: 1 - - _GlossMapScale: 0 - - _Glossiness: 0 - - _GlossyReflections: 0 - - _Metallic: 0 - - _OcclusionStrength: 1 - - _Parallax: 0.005 - - _QueueOffset: 0 - - _ReceiveShadows: 1 - - _Smoothness: 1 - - _SmoothnessTextureChannel: 0 - - _SpecularHighlights: 1 - - _SrcBlend: 1 - - _SrcBlendAlpha: 1 - - _Surface: 0 - - _WorkflowMode: 0 - - _ZWrite: 1 - m_Colors: - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - - _SpecColor: {r: 1, g: 1, b: 1, a: 1} - m_BuildTextureStacks: [] diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/sphere.mat.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/sphere.mat.meta deleted file mode 100644 index 464353e7d35..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/contents/sphere.mat.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: e9525c38d4e543847a27f2ac6db6ae80 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings.meta deleted file mode 100644 index 99a6674b288..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: c50e63497ab07be44a980db33267bf58 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-Progressive.lighting b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-Progressive.lighting deleted file mode 100644 index 05d20b0e55a..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-Progressive.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Auto-Progressive - serializedVersion: 3 - m_GIWorkflowMode: 1 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_RealtimeEnvironmentLighting: 0 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 1 - m_LightmapMaxSize: 512 - m_BakeResolution: 16 - m_Padding: 2 - m_TextureCompression: 0 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0.3 - m_ExtractAO: 0 - m_MixedBakeMode: 0 - m_LightmapsBakeMode: 0 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 1 - m_PVRSampleCount: 32 - m_PVREnvironmentSampleCount: 8 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 1 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.548 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-Progressive.lighting.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-Progressive.lighting.meta deleted file mode 100644 index 81193e9522e..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-Progressive.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 6758f43d358f04141a500d35a765108c -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-nonProgressive.lighting b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-nonProgressive.lighting deleted file mode 100644 index 194681c9d3c..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-nonProgressive.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: Auto-nonProgressive - serializedVersion: 3 - m_GIWorkflowMode: 1 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_RealtimeEnvironmentLighting: 0 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 1 - m_LightmapMaxSize: 512 - m_BakeResolution: 16 - m_Padding: 2 - m_TextureCompression: 0 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0.3 - m_ExtractAO: 0 - m_MixedBakeMode: 0 - m_LightmapsBakeMode: 0 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 - m_PVRCulling: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 1 - m_PVRSampleCount: 32 - m_PVREnvironmentSampleCount: 8 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 1 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.548 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-nonProgressive.lighting.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-nonProgressive.lighting.meta deleted file mode 100644 index ca6d8181bab..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/Auto-nonProgressive.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: fb3fda1d12567f24389d03be0e3b97d1 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-Progressive.lighting b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-Progressive.lighting deleted file mode 100644 index 0488e2e598f..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-Progressive.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: nonAuto-Progressive - serializedVersion: 3 - m_GIWorkflowMode: 1 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_RealtimeEnvironmentLighting: 0 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 1 - m_LightmapMaxSize: 512 - m_BakeResolution: 16 - m_Padding: 2 - m_TextureCompression: 0 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0.3 - m_ExtractAO: 0 - m_MixedBakeMode: 0 - m_LightmapsBakeMode: 0 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 - m_PVRCulling: 1 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 1 - m_PVRSampleCount: 32 - m_PVREnvironmentSampleCount: 8 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 1 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.548 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-Progressive.lighting.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-Progressive.lighting.meta deleted file mode 100644 index 8ddc05b74dd..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-Progressive.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 477cc4148fad3449482a3bc3178594e2 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-nonProgressive.lighting b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-nonProgressive.lighting deleted file mode 100644 index 7fd9bbb05de..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-nonProgressive.lighting +++ /dev/null @@ -1,63 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!850595691 &4890085278179872738 -LightingSettings: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: nonAuto-nonProgressive - serializedVersion: 3 - m_GIWorkflowMode: 1 - m_EnableBakedLightmaps: 1 - m_EnableRealtimeLightmaps: 0 - m_RealtimeEnvironmentLighting: 0 - m_BounceScale: 1 - m_AlbedoBoost: 1 - m_IndirectOutputScale: 1 - m_UsingShadowmask: 0 - m_BakeBackend: 1 - m_LightmapMaxSize: 512 - m_BakeResolution: 16 - m_Padding: 2 - m_TextureCompression: 0 - m_AO: 0 - m_AOMaxDistance: 1 - m_CompAOExponent: 1 - m_CompAOExponentDirect: 0.3 - m_ExtractAO: 0 - m_MixedBakeMode: 0 - m_LightmapsBakeMode: 0 - m_FilterMode: 1 - m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_RealtimeResolution: 2 - m_ForceWhiteAlbedo: 0 - m_ForceUpdates: 0 - m_FinalGather: 0 - m_FinalGatherRayCount: 256 - m_FinalGatherFiltering: 1 - m_PVRCulling: 0 - m_PVRSampling: 1 - m_PVRDirectSampleCount: 1 - m_PVRSampleCount: 32 - m_PVREnvironmentSampleCount: 8 - m_PVREnvironmentReferencePointCount: 2048 - m_LightProbeSampleCountMultiplier: 4 - m_PVRBounces: 2 - m_PVRMinBounces: 1 - m_PVREnvironmentMIS: 0 - m_PVRFilteringMode: 0 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 - m_PVRFilterTypeDirect: 0 - m_PVRFilterTypeIndirect: 0 - m_PVRFilterTypeAO: 0 - m_PVRFilteringGaussRadiusDirect: 1 - m_PVRFilteringGaussRadiusIndirect: 5 - m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousPositionSigmaDirect: 0.548 - m_PVRFilteringAtrousPositionSigmaIndirect: 2 - m_PVRFilteringAtrousPositionSigmaAO: 1 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-nonProgressive.lighting.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-nonProgressive.lighting.meta deleted file mode 100644 index c2f5c94c0eb..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings/nonAuto-nonProgressive.lighting.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 8ea49e83785bd634e82a21f077c4b373 -NativeFormatImporter: - externalObjects: {} - mainObjectFileID: 0 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/LightBaker.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/LightBaker.meta deleted file mode 100644 index 0088da70797..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/LightBaker.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 7d4af2980ccb34c42ad025adf329cbbb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/ReflectionProbeTests.cs b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/ReflectionProbeTests.cs deleted file mode 100644 index c3c813fac88..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/ReflectionProbeTests.cs +++ /dev/null @@ -1,153 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using NUnit.Framework; -using UnityEngine.TestTools.Graphics; -using UnityEditor.SceneManagement; -using UnityEditor; - -public class Editmode_ParametricReflectionProbeTests -{ - private readonly string sceneOutputPath = "Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake"; - private readonly string sceneFileName = "Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/ReflectionProbeBake.unity"; - private readonly string[] foldersToLookIn = { "Assets/EditModeTestAssets/Lighting_ReflectionProbeBaking/settings" }; - - public enum BakeAPI - { - Bake = 0, - BakeAll, - BakeSingle - } - - [UnityEngine.Scripting.Preserve] - private static object[] GetReflectionProbeTestCases() - { - object[] testCaseArray = new object[6]; - for (int i = 0; i < testCaseArray.Length; ++i) - { - string settings = "nonAuto-Progressive"; - BakeAPI bakeAPI = BakeAPI.Bake; - - switch (i) - { - case 0: - settings = "nonAuto-Progressive"; - bakeAPI = BakeAPI.Bake; - break; - case 1: - settings = "nonAuto-nonProgressive"; - bakeAPI = BakeAPI.Bake; - break; - case 2: - settings = "nonAuto-Progressive"; - bakeAPI = BakeAPI.BakeAll; - break; - case 3: - settings = "nonAuto-nonProgressive"; - bakeAPI = BakeAPI.BakeAll; - break; - case 4: - settings = "nonAuto-Progressive"; - bakeAPI = BakeAPI.BakeSingle; - break; - case 5: - settings = "nonAuto-nonProgressive"; - bakeAPI = BakeAPI.BakeSingle; - break; - } - testCaseArray[i] = new object[] { settings, bakeAPI }; - } - return testCaseArray; - } - - [TestCaseSource("GetReflectionProbeTestCases")] - [Ignore("This test is unstable. It will be fixed with this PR: https://github.cds.internal.unity3d.com/unity/unity/pull/16390")] - public void RefProbeAPI(string settings, BakeAPI bakeAPI) - { - EditorSceneManager.OpenScene(sceneFileName, OpenSceneMode.Single); - - // Bake with a lighting settings asset. - string[] settingsAssets = AssetDatabase.FindAssets(settings + " t:lightingsettings", foldersToLookIn); - Debug.Log("Found " + settingsAssets.Length + " matching lighting settings assets in " + foldersToLookIn[0]); - Assert.That(settingsAssets.Length, Is.EqualTo(1)); - string lsaPath = AssetDatabase.GUIDToAssetPath(settingsAssets[0]); - Debug.Log("Loading " + lsaPath); - LightingSettings lightingSettings = (LightingSettings)AssetDatabase.LoadAssetAtPath(lsaPath, typeof(LightingSettings)); - Lightmapping.lightingSettings = lightingSettings; - string fileName = System.IO.Path.GetFileNameWithoutExtension(lsaPath); - Assert.That(fileName, Is.EqualTo(settings)); - Lightmapping.Clear(); - // The disk cache needs clearing between runs because we are only changing the API and not necessarily the settings. - // Changing the API use to bake the probe is assumed to not affect the result so the reflection probe is fetched from the disk cache. - // To detect that everything works as intended the cached reflection probe needs to be cleared. - Lightmapping.ClearDiskCache(); - Debug.Log("Baking " + fileName); - bool result = true; - switch (bakeAPI) - { - case BakeAPI.Bake: - result = Lightmapping.Bake(); - break; - case BakeAPI.BakeAll: - { - var probe = Object.FindAnyObjectByType(); - Assert.That(probe, !Is.EqualTo(null), "Couldn't find ReflectionProbe"); - Debug.Log("Found reflection probe: " + probe.name); - - var oldEnabledValue = probe.enabled; - probe.enabled = false; - result = Lightmapping.Bake(); - probe.enabled = oldEnabledValue; - result &= LightmappingExt.BakeAllReflectionProbesSnapshots(); - } - break; - case BakeAPI.BakeSingle: - { - var probe = Object.FindAnyObjectByType(); - Assert.That(probe, !Is.EqualTo(null), "Couldn't find ReflectionProbe"); - Debug.Log("Found reflection probe: " + probe.name); - - var oldEnabledValue = probe.enabled; - probe.enabled = false; - result = Lightmapping.Bake(); - probe.enabled = oldEnabledValue; - result &= LightmappingExt.BakeReflectionProbeSnapshot(probe); - } - break; - } - Assert.That(result, Is.True); - - // Get Test settings. - var graphicsTestSettingsCustom = Object.FindAnyObjectByType(); - Assert.That(graphicsTestSettingsCustom, !Is.EqualTo(null), "Couldn't find GraphicsTestSettingsCustom"); - - // Load reference image. - var referenceImagePath = System.IO.Path.Combine("Assets/ReferenceImages", string.Format("{0}/{1}/{2}/{3}/{4}", - UseGraphicsTestCasesAttribute.ColorSpace, - UseGraphicsTestCasesAttribute.Platform, - UseGraphicsTestCasesAttribute.GraphicsDevice, - UseGraphicsTestCasesAttribute.LoadedXRDevice, - "RefProbeAPI_" + settings + "-" + bakeAPI.ToString() + "_.png")); - - Debug.Log("referenceImagePath " + referenceImagePath); - var referenceImage = AssetDatabase.LoadAssetAtPath(referenceImagePath); - - // Compare screenshots. - GraphicsTestCase testCase = new GraphicsTestCase(settings, referenceImage); - var cameras = GameObject.FindGameObjectsWithTag("MainCamera").Select(x => x.GetComponent()); - ImageAssert.AreEqual(testCase.ReferenceImage, cameras.Where(x => x != null), graphicsTestSettingsCustom.ImageComparisonSettings, testCase.ReferenceImagePathLog); - UnityEditor.TestTools.Graphics.ResultsUtility.ExtractImagesFromTestProperties(TestContext.CurrentContext.Test); - } - - [OneTimeTearDown] - public void Cleanup() - { - // Remove all lightmaps. - System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(sceneOutputPath); - foreach (System.IO.FileInfo file in di.GetFiles()) - file.Delete(); - foreach (System.IO.DirectoryInfo dir in di.GetDirectories()) - dir.Delete(true); - System.IO.Directory.Delete(sceneOutputPath); - } -} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/ReflectionProbeTests.cs.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/ReflectionProbeTests.cs.meta deleted file mode 100644 index 0cdc3713aec..00000000000 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/Editor/ReflectionProbeTests.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 5b8a3ac418c50a74e8f140a1d57934ff -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/LightBaker/Tests.asmdef b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/LightBaker/Tests.asmdef index 0b75647f14c..df8c7d66b26 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/LightBaker/Tests.asmdef +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Assets/Test/LightBaker/Tests.asmdef @@ -5,7 +5,9 @@ "UnityEngine.TestRunner", "UnityEditor.TestRunner", "UnityEditor.TestTools.Graphics", - "UnityEngine.TestTools.Graphics" + "UnityEngine.TestTools.Graphics", + "UniversalEditorTests", + "UniversalGraphicsTests" ], "includePlatforms": [ "Editor" @@ -22,4 +24,4 @@ ], "versionDefines": [], "noEngineReferences": false -} \ No newline at end of file +} From 34c9fc8ab1cee3f59c57d7805337be96f0461a16 Mon Sep 17 00:00:00 2001 From: Pema Malling Date: Sat, 2 Nov 2024 00:45:20 +0000 Subject: [PATCH 04/85] Fix APV assets missing from .unitypackage exports Jira: https://jira.unity3d.com/browse/UUM-79581 More context in https://github.cds.internal.unity3d.com/unity/unity/pull/53633 This PR fixes a bug that prevents lighting data associated with APV from being included when you export a unitypackage with a baking set or scene using APV. APV currently has 2 paths for getting lighting data into the built player: Via StreamingAssets, or via regular asset references. The asset references are intentionally left `null` until it is time to build the player, then conditionally populated based on which path we are using. In https://github.cds.internal.unity3d.com/unity/unity/pull/53633 I added a similar path for bundle builds, which were not working properly. Now a new issue has popped up - since the asset references are not always populated in editor, unitypackage exports can't find them, as they rely on asset references to find asset dependencies. In this PR, I am scrapping the existing approach and inverting the logic: Now we _always_ populate the asset references, and only conditionally temporarily clear them when we want to build a player using the StreamingAssets path. This should be a lot more robust, and will prevent us from having to add new special cases every time a new unforeseen consequence of having these "pseudo-dependent" assets pops up. To handle scenes that were baked before this change, I added an upgrade path that populates the asset references in old baking sets when they are loaded. --- .../ProbeVolume/ProbeVolumeBuildProcessor.cs | 119 +++++++----------- .../ProbeVolume/ProbeVolumeBakingSet.cs | 25 +++- .../ProbeVolume/ProbeVolumeStreamableAsset.cs | 14 ++- 3 files changed, 84 insertions(+), 74 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeBuildProcessor.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeBuildProcessor.cs index 65fbc5026a8..7e751855587 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeBuildProcessor.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeBuildProcessor.cs @@ -4,11 +4,10 @@ using UnityEditor.Build.Reporting; using UnityEngine; using UnityEngine.Rendering; -using UnityEngine.SceneManagement; namespace UnityEditor.Rendering { - class ProbeVolumeBuildProcessor : BuildPlayerProcessor, IProcessSceneWithReport + class ProbeVolumeBuildProcessor : BuildPlayerProcessor, IPostprocessBuildWithReport { const string kTempAPVStreamingAssetsPath = "TempAPVStreamingAssets"; @@ -18,15 +17,27 @@ string GetTempAPVStreamingAssetsPath() return Path.Combine(libraryPath, kTempAPVStreamingAssetsPath); } - void PrepareStreamableAsset(ProbeVolumeStreamableAsset asset, string basePath, bool useStreamingAsset) + // Include an asset in the build. The mechanism for doing so depends on whether we are using StreamingAssets path. + static void IncludeStreamableAsset(ProbeVolumeStreamableAsset asset, string basePath, bool useStreamingAsset) { - asset.UpdateAssetReference(useStreamingAsset); - if (useStreamingAsset) + { + asset.ClearAssetReferenceForBuild(); CopyStreamableAsset(asset, basePath); + } + else + { + asset.EnsureAssetLoaded(); + } + } + + // Ensure that an asset is not included in the build. + static void StripStreambleAsset(ProbeVolumeStreamableAsset asset) + { + asset.ClearAssetReferenceForBuild(); } - void CopyStreamableAsset(ProbeVolumeStreamableAsset asset, string basePath) + static void CopyStreamableAsset(ProbeVolumeStreamableAsset asset, string basePath) { var assetPath = asset.GetAssetPath(); if (!File.Exists(assetPath)) @@ -60,6 +71,9 @@ void GetProbeVolumeProjectSettings(BuildTarget target, out bool supportProbeVolu } } + // Keep track of which assets we touched during the build, so we can restore them after the build. + private static HashSet s_BakingSetsProcessedLastBuild = new(); + public override void PrepareForBuild(BuildPlayerContext buildPlayerContext) { GetProbeVolumeProjectSettings(buildPlayerContext.BuildPlayerOptions.target, out bool supportProbeVolume, out var maxSHBands); @@ -89,8 +103,7 @@ public override void PrepareForBuild(BuildPlayerContext buildPlayerContext) Directory.CreateDirectory(tempStreamingAssetsPath); - HashSet processedBakingSets = new HashSet(); - + s_BakingSetsProcessedLastBuild.Clear(); foreach (var scene in buildPlayerContext.BuildPlayerOptions.scenes) { var sceneGUID = AssetDatabase.AssetPathToGUID(scene); @@ -98,7 +111,7 @@ public override void PrepareForBuild(BuildPlayerContext buildPlayerContext) if (bakingSet != null) { // Already processed (different scenes can belong to the same baking set). - if (processedBakingSets.Contains(bakingSet)) + if (s_BakingSetsProcessedLastBuild.Contains(bakingSet)) continue; if (!bakingSet.cellSharedDataAsset.IsValid()) // Not baked @@ -111,89 +124,53 @@ public override void PrepareForBuild(BuildPlayerContext buildPlayerContext) bool useStreamingAsset = !GraphicsSettings.GetRenderPipelineSettings().probeVolumeDisableStreamingAssets; - PrepareStreamableAsset(bakingSet.cellSharedDataAsset, basePath, useStreamingAsset); - PrepareStreamableAsset(bakingSet.cellBricksDataAsset, basePath, useStreamingAsset); + IncludeStreamableAsset(bakingSet.cellSharedDataAsset, basePath, useStreamingAsset); + IncludeStreamableAsset(bakingSet.cellBricksDataAsset, basePath, useStreamingAsset); // For now we always strip support data in build as it's mostly unsupported. // Later we'll need a proper option to strip it or not. bool stripSupportData = true; - if (!stripSupportData) - PrepareStreamableAsset(bakingSet.cellSupportDataAsset, basePath, useStreamingAsset); + if (stripSupportData) + StripStreambleAsset(bakingSet.cellSupportDataAsset); + else + IncludeStreamableAsset(bakingSet.cellSupportDataAsset, basePath, useStreamingAsset); foreach (var scenario in bakingSet.scenarios) { - PrepareStreamableAsset(scenario.Value.cellDataAsset, basePath, useStreamingAsset); + IncludeStreamableAsset(scenario.Value.cellDataAsset, basePath, useStreamingAsset); if (maxSHBands == ProbeVolumeSHBands.SphericalHarmonicsL2) - PrepareStreamableAsset(scenario.Value.cellOptionalDataAsset, basePath, useStreamingAsset); - PrepareStreamableAsset(scenario.Value.cellProbeOcclusionDataAsset, basePath, useStreamingAsset); + IncludeStreamableAsset(scenario.Value.cellOptionalDataAsset, basePath, useStreamingAsset); + else + StripStreambleAsset(scenario.Value.cellOptionalDataAsset); + IncludeStreamableAsset(scenario.Value.cellProbeOcclusionDataAsset, basePath, useStreamingAsset); } - processedBakingSets.Add(bakingSet); + s_BakingSetsProcessedLastBuild.Add(bakingSet); } } buildPlayerContext.AddAdditionalPathToStreamingAssets(tempStreamingAssetsPath, AdaptiveProbeVolumes.kAPVStreamingAssetsPath); } - private static bool IsBundleBuild(BuildReport report, bool isPlaying) - { - // We are entering playmode, so not building a bundle. - if (isPlaying) - return false; - - // Addressable builds do not provide a BuildReport. Because the Addressables package - // only supports AssetBundle builds, we infer that this is not a player build. - if (report == null) - return true; - - return report.summary.buildType == BuildType.AssetBundle; - } - - // This codepath handles the case of building asset bundles, i.e. not a full player build. It updates the references - // to individual data assets in the baking sets for each scene, such that the assets are included in the bundle. - public override int callbackOrder => 1; - public void OnProcessScene(Scene scene, BuildReport report) + public void OnPostprocessBuild(BuildReport report) { - // Only run for bundle builds. - if (!IsBundleBuild(report, Application.isPlaying)) - return; - - // Only run when APV is enabled. - GetProbeVolumeProjectSettings(EditorUserBuildSettings.activeBuildTarget, out bool supportProbeVolume, out var maxSHBands); - if (!supportProbeVolume) - return; - - // Reload the map from scene to baking set if we couldn't find the specific baking set. - if (ProbeVolumeBakingSet.sceneToBakingSet == null || ProbeVolumeBakingSet.sceneToBakingSet.Count == 0) - ProbeVolumeBakingSet.SyncBakingSets(); - - // Get the baking set for the scene. - var bakingSet = ProbeVolumeBakingSet.GetBakingSetForScene(scene.GetGUID()); - if (bakingSet == null || !bakingSet.cellSharedDataAsset.IsValid()) + if (s_BakingSetsProcessedLastBuild == null || s_BakingSetsProcessedLastBuild.Count == 0) return; - bool useStreamingAsset = !GraphicsSettings.GetRenderPipelineSettings().probeVolumeDisableStreamingAssets; - if (useStreamingAsset) + // Go over each asset reference we touched during the last build, make sure asset references are intact. + foreach (var bakingSet in s_BakingSetsProcessedLastBuild) { - Debug.LogWarning( - "Attempted to build an Asset Bundle containing Adaptive Probe Volume data, but streaming assets are enabled. This is unsupported. " + - "To use Adaptive Probe Volumes with Asset Bundles, please check 'Probe Volume Disable Streaming Assets' under Graphics Settings."); + bakingSet.cellBricksDataAsset.EnsureAssetLoaded(); + bakingSet.cellSharedDataAsset.EnsureAssetLoaded(); + bakingSet.cellSupportDataAsset.EnsureAssetLoaded(); + foreach (var scenario in bakingSet.scenarios) + { + scenario.Value.cellDataAsset.EnsureAssetLoaded(); + scenario.Value.cellOptionalDataAsset.EnsureAssetLoaded(); + scenario.Value.cellProbeOcclusionDataAsset.EnsureAssetLoaded(); + } } - // Update all the asset references. - bakingSet.cellSharedDataAsset.UpdateAssetReference(useStreamingAsset); - bakingSet.cellBricksDataAsset.UpdateAssetReference(useStreamingAsset); - - bool stripSupportData = true; - if (!stripSupportData) - bakingSet.cellSupportDataAsset.UpdateAssetReference(false); - - foreach (var scenario in bakingSet.scenarios) - { - scenario.Value.cellDataAsset.UpdateAssetReference(useStreamingAsset); - if (maxSHBands == ProbeVolumeSHBands.SphericalHarmonicsL2) - scenario.Value.cellOptionalDataAsset.UpdateAssetReference(useStreamingAsset); - scenario.Value.cellProbeOcclusionDataAsset.UpdateAssetReference(useStreamingAsset); - } + s_BakingSetsProcessedLastBuild.Clear(); } } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs index d6d9a6d0c48..17e19c83793 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeBakingSet.cs @@ -31,7 +31,8 @@ public sealed partial class ProbeVolumeBakingSet : ScriptableObject, ISerializat internal enum Version { Initial, - RemoveProbeVolumeSceneData + RemoveProbeVolumeSceneData, + AssetsAlwaysReferenced, } [Serializable] @@ -345,6 +346,28 @@ internal void Migrate() #endif } + // Upgrade baking sets from before we always stored asset references. + if (version < Version.AssetsAlwaysReferenced && ProbeReferenceVolume.instance.isInitialized) + { +#if UNITY_EDITOR + cellBricksDataAsset.EnsureAssetLoaded(); + cellSharedDataAsset.EnsureAssetLoaded(); + cellSupportDataAsset.EnsureAssetLoaded(); + foreach (var scenario in scenarios) + { + scenario.Value.cellDataAsset.EnsureAssetLoaded(); + scenario.Value.cellOptionalDataAsset.EnsureAssetLoaded(); + scenario.Value.cellProbeOcclusionDataAsset.EnsureAssetLoaded(); + } + + version = Version.AssetsAlwaysReferenced; + + // Save immediately since these references must be written to disk for certain functionality + // to work, such as exporting a .unitypackage. Changing in memory is not enough. + UnityEditor.EditorUtility.SetDirty(this); + UnityEditor.AssetDatabase.SaveAssetIfDirty(this); +#endif + } #pragma warning restore 618 } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeStreamableAsset.cs b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeStreamableAsset.cs index 4f60b151350..e3806ed3f96 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeStreamableAsset.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolumeStreamableAsset.cs @@ -43,6 +43,9 @@ public ProbeVolumeStreamableAsset(string apvStreamingAssetsPath, SerializedDicti m_StreamableCellDescs = cellDescs; m_ElementSize = elementSize; m_StreamableAssetPath = Path.Combine(Path.Combine(apvStreamingAssetsPath, bakingSetGUID), m_AssetGUID + ".bytes"); +#if UNITY_EDITOR + EnsureAssetLoaded(); +#endif } internal void RefreshAssetPath() @@ -89,9 +92,16 @@ public void RenameAsset(string newName) m_FinalAssetPath = ""; } - public void UpdateAssetReference(bool useStreamingAsset) + // Ensures that the asset is referenced via Unity's serialization layer. + public void EnsureAssetLoaded() + { + m_Asset = AssetDatabase.LoadAssetAtPath(GetAssetPath()); + } + + // Temporarily clear the asset reference. Used to prevent serialization of the asset when we are using the StreamingAssets codepath. + public void ClearAssetReferenceForBuild() { - m_Asset = useStreamingAsset ? null : AssetDatabase.LoadAssetAtPath(GetAssetPath()); + m_Asset = null; } #endif From 63896eacbdc3777f2d0d53a002f5c15b96259cdf Mon Sep 17 00:00:00 2001 From: Gregory Mitrano Date: Sat, 2 Nov 2024 07:49:57 +0000 Subject: [PATCH 05/85] Remove Unnecessary RandomWrite Requirement in STP Shaders This requirement is now redundant as the compiler has been updated to automatically insert this requirement for compute shaders. Removing it eliminates some warnings that are now popping up due to the redundancy. --- .../Runtime/STP/StpPreTaa.compute | 7 ------- .../Runtime/STP/StpSetup.compute | 7 ------- .../Runtime/STP/StpTaa.compute | 7 ------- 3 files changed, 21 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/STP/StpPreTaa.compute b/Packages/com.unity.render-pipelines.core/Runtime/STP/StpPreTaa.compute index 9cdd13b7817..5c89ff78bfc 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/STP/StpPreTaa.compute +++ b/Packages/com.unity.render-pipelines.core/Runtime/STP/StpPreTaa.compute @@ -9,13 +9,6 @@ #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch glcore -// TODO: Remove explicit randomwrite shader requirement -// -// The randomwrite requirement isn't automatically included in compute shaders even though they cannot work without it. -// We must explicitly require it here to avoid breaking code that checks against the SHADER_AVAILABLE_RANDOMWRITE define. -// This code should be removed when the underlying compiler code is updated to implicitly require randomwrite in compute shaders. -#pragma require randomwrite - #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" diff --git a/Packages/com.unity.render-pipelines.core/Runtime/STP/StpSetup.compute b/Packages/com.unity.render-pipelines.core/Runtime/STP/StpSetup.compute index e64b916626f..4d98f8bb130 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/STP/StpSetup.compute +++ b/Packages/com.unity.render-pipelines.core/Runtime/STP/StpSetup.compute @@ -16,13 +16,6 @@ #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch glcore -// TODO: Remove explicit randomwrite shader requirement -// -// The randomwrite requirement isn't automatically included in compute shaders even though they cannot work without it. -// We must explicitly require it here to avoid breaking code that checks against the SHADER_AVAILABLE_RANDOMWRITE define. -// This code should be removed when the underlying compiler code is updated to implicitly require randomwrite in compute shaders. -#pragma require randomwrite - #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" diff --git a/Packages/com.unity.render-pipelines.core/Runtime/STP/StpTaa.compute b/Packages/com.unity.render-pipelines.core/Runtime/STP/StpTaa.compute index feab80e85d1..c9904044acc 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/STP/StpTaa.compute +++ b/Packages/com.unity.render-pipelines.core/Runtime/STP/StpTaa.compute @@ -9,13 +9,6 @@ #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch glcore -// TODO: Remove explicit randomwrite shader requirement -// -// The randomwrite requirement isn't automatically included in compute shaders even though they cannot work without it. -// We must explicitly require it here to avoid breaking code that checks against the SHADER_AVAILABLE_RANDOMWRITE define. -// This code should be removed when the underlying compiler code is updated to implicitly require randomwrite in compute shaders. -#pragma require randomwrite - #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" From 0a2e150ef913a6c4c3a74b2168391e9204600875 Mon Sep 17 00:00:00 2001 From: Venkatesh Subramania Pillai Date: Mon, 4 Nov 2024 14:20:29 +0000 Subject: [PATCH 06/85] [2d] Fix (Case UUM-85335) 2D Renderer Breaks When Animating Material Property with MaterialPropertyBlock. Fix (Case UUM-85335) 2D Renderer Breaks When Animating Material Property with MaterialPropertyBlock. --- ...SpriteRenderer_MaterialPropertyBlock.unity | 339 +++++- .../079_3.anim | 329 ++++++ .../079_3.anim.meta | 8 + .../079_3.controller | 72 ++ .../079_3.controller.meta | 8 + .../079_3.shadergraph | 991 ++++++++++++++++++ .../079_3.shadergraph.meta | 10 + 7 files changed, 1756 insertions(+), 1 deletion(-) create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.anim create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.anim.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.controller create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.controller.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.shadergraph create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.shadergraph.meta diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock.unity index 1364ded7b2f..93ac4fc58a5 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock.unity @@ -42,7 +42,8 @@ RenderSettings: --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -279,6 +280,228 @@ SpriteRenderer: m_WasSpriteAssigned: 1 m_MaskInteraction: 0 m_SpriteSortPoint: 0 +--- !u!1 &531099789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 531099792} + - component: {fileID: 531099791} + - component: {fileID: 531099790} + m_Layer: 0 + m_Name: 2 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!95 &531099790 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531099789} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 1e11a0ae7c0fbff46b9e3c8dd8a6bfc3, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!212 &531099791 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531099789} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: c487184ab7950b841be0596d53699471, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: -4382557323903935050, guid: 4cc20fc9be0c84e15b7b0361be6891c3, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &531099792 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 531099789} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 15.18, y: 1.49, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &538241649 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 538241652} + - component: {fileID: 538241651} + - component: {fileID: 538241650} + m_Layer: 0 + m_Name: 1 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!95 &538241650 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538241649} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 1e11a0ae7c0fbff46b9e3c8dd8a6bfc3, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!212 &538241651 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538241649} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: c487184ab7950b841be0596d53699471, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: -8106261720723004764, guid: 4cc20fc9be0c84e15b7b0361be6891c3, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &538241652 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 538241649} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 14.84, y: -4.52, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &698518680 GameObject: m_ObjectHideFlags: 0 @@ -502,6 +725,117 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 1a8131248c4fb4df798f9edf6b28b443, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &1875571547 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1875571550} + - component: {fileID: 1875571549} + - component: {fileID: 1875571548} + m_Layer: 0 + m_Name: 3 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!95 &1875571548 +Animator: + serializedVersion: 7 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875571547} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: 1e11a0ae7c0fbff46b9e3c8dd8a6bfc3, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_StabilizeFeet: 0 + m_AnimatePhysics: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorStateOnDisable: 0 + m_WriteDefaultValuesOnDisable: 0 +--- !u!212 &1875571549 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875571547} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: c487184ab7950b841be0596d53699471, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 8992281584329750373, guid: 4cc20fc9be0c84e15b7b0361be6891c3, + type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!4 &1875571550 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1875571547} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 19.53, y: -1.35, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1929885604 GameObject: m_ObjectHideFlags: 0 @@ -940,3 +1274,6 @@ SceneRoots: m_Roots: - {fileID: 2103671727} - {fileID: 242479212} + - {fileID: 538241652} + - {fileID: 531099792} + - {fileID: 1875571550} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.anim b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.anim new file mode 100644 index 00000000000..f1e7b60b06d --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.anim @@ -0,0 +1,329 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 079_3 + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41666666 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AddColor.r + path: + classID: 212 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41666666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AddColor.g + path: + classID: 212 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41666666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AddColor.b + path: + classID: 212 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41666666 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AddColor.a + path: + classID: 212 + script: {fileID: 0} + flags: 0 + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 1140649264 + script: {fileID: 0} + typeID: 212 + customType: 22 + isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 1409084720 + script: {fileID: 0} + typeID: 212 + customType: 22 + isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 1677520176 + script: {fileID: 0} + typeID: 212 + customType: 22 + isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + - serializedVersion: 2 + path: 0 + attribute: 1945955632 + script: {fileID: 0} + typeID: 212 + customType: 22 + isPPtrCurve: 0 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.41666666 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41666666 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AddColor.r + path: + classID: 212 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41666666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AddColor.g + path: + classID: 212 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41666666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AddColor.b + path: + classID: 212 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.41666666 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: material._AddColor.a + path: + classID: 212 + script: {fileID: 0} + flags: 0 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.anim.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.anim.meta new file mode 100644 index 00000000000..d050ddfdae1 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6c0bfa7d90ced2746b93c70286dee733 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.controller b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.controller new file mode 100644 index 00000000000..a03ca586d99 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.controller @@ -0,0 +1,72 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!91 &9100000 +AnimatorController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 079_3 + serializedVersion: 5 + m_AnimatorParameters: [] + m_AnimatorLayers: + - serializedVersion: 5 + m_Name: Base Layer + m_StateMachine: {fileID: 2442475822505601261} + m_Mask: {fileID: 0} + m_Motions: [] + m_Behaviours: [] + m_BlendingMode: 0 + m_SyncedLayerIndex: -1 + m_DefaultWeight: 0 + m_IKPass: 0 + m_SyncedLayerAffectsTiming: 0 + m_Controller: {fileID: 9100000} +--- !u!1102 &1281871504871705322 +AnimatorState: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: New Animation + m_Speed: 1 + m_CycleOffset: 0 + m_Transitions: [] + m_StateMachineBehaviours: [] + m_Position: {x: 50, y: 50, z: 0} + m_IKOnFeet: 0 + m_WriteDefaultValues: 1 + m_Mirror: 0 + m_SpeedParameterActive: 0 + m_MirrorParameterActive: 0 + m_CycleOffsetParameterActive: 0 + m_TimeParameterActive: 0 + m_Motion: {fileID: 7400000, guid: 6c0bfa7d90ced2746b93c70286dee733, type: 2} + m_Tag: + m_SpeedParameter: + m_MirrorParameter: + m_CycleOffsetParameter: + m_TimeParameter: +--- !u!1107 &2442475822505601261 +AnimatorStateMachine: + serializedVersion: 6 + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Base Layer + m_ChildStates: + - serializedVersion: 1 + m_State: {fileID: 1281871504871705322} + m_Position: {x: 260, y: 70, z: 0} + m_ChildStateMachines: [] + m_AnyStateTransitions: [] + m_EntryTransitions: [] + m_StateMachineTransitions: {} + m_StateMachineBehaviours: [] + m_AnyStatePosition: {x: 50, y: 20, z: 0} + m_EntryPosition: {x: 50, y: 120, z: 0} + m_ExitPosition: {x: 540, y: 70, z: 0} + m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} + m_DefaultState: {fileID: 1281871504871705322} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.controller.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.controller.meta new file mode 100644 index 00000000000..50bd9d6f2e4 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e11a0ae7c0fbff46b9e3c8dd8a6bfc3 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 9100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.shadergraph b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.shadergraph new file mode 100644 index 00000000000..df98007e576 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.shadergraph @@ -0,0 +1,991 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "9e6fbd129b424f49b18cea3bc8129904", + "m_Properties": [ + { + "m_Id": "0278985b26a64d498aaa7ff36d82f21e" + }, + { + "m_Id": "8469cb2ead97453baf196f0f75ba55d0" + } + ], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "bd157df78c1a4052b119e1467cc9033c" + } + ], + "m_Nodes": [ + { + "m_Id": "0e44eeec53d94373a906c0c06cb5a675" + }, + { + "m_Id": "6f06521e380a443f8ba4317ab0f62a0b" + }, + { + "m_Id": "db6db8c7c8214b03bb7c341555adf363" + }, + { + "m_Id": "f4ea6379351142a99007c1b2980ab5da" + }, + { + "m_Id": "a42035050ec244da8c775eab33e3d4eb" + }, + { + "m_Id": "cb0b48ea60434ae1bb1329121f27cafd" + }, + { + "m_Id": "69f1e8c33bdd489bafd3cb8d01f138c3" + }, + { + "m_Id": "42ee13e4088943878497b96b6879ae66" + }, + { + "m_Id": "113199d1f567426dbafe9326ea86cf5f" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "113199d1f567426dbafe9326ea86cf5f" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f4ea6379351142a99007c1b2980ab5da" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "42ee13e4088943878497b96b6879ae66" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "113199d1f567426dbafe9326ea86cf5f" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "69f1e8c33bdd489bafd3cb8d01f138c3" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "113199d1f567426dbafe9326ea86cf5f" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "69f1e8c33bdd489bafd3cb8d01f138c3" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a42035050ec244da8c775eab33e3d4eb" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "cb0b48ea60434ae1bb1329121f27cafd" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "69f1e8c33bdd489bafd3cb8d01f138c3" + }, + "m_SlotId": 1 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 0.0, + "y": 0.0 + }, + "m_Blocks": [ + { + "m_Id": "0e44eeec53d94373a906c0c06cb5a675" + }, + { + "m_Id": "6f06521e380a443f8ba4317ab0f62a0b" + }, + { + "m_Id": "db6db8c7c8214b03bb7c341555adf363" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 0.0, + "y": 200.0 + }, + "m_Blocks": [ + { + "m_Id": "f4ea6379351142a99007c1b2980ab5da" + }, + { + "m_Id": "a42035050ec244da8c775eab33e3d4eb" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "056e095f34824aa2b66130e6d1e785e4" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "0023f596500c4795a3b58c5c4e3374de", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "0278985b26a64d498aaa7ff36d82f21e", + "m_Guid": { + "m_GuidSerialized": "b5db1c79-5848-441f-95b7-3a500a7fb4a3" + }, + "m_Name": "_MainTex", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "_MainTex", + "m_DefaultReferenceName": "_MainTex", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "", + "m_Guid": "" + }, + "isMainTexture": false, + "useTilingAndOffset": false, + "useTexelSize": false, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "056e095f34824aa2b66130e6d1e785e4", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "5be1424b117344039b68c05ca998494c" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": false, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_DisableTint": false, + "m_AdditionalMotionVectorMode": 0, + "m_AlembicMotionVectors": false, + "m_SupportsLODCrossFade": false, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "0e44eeec53d94373a906c0c06cb5a675", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "25c89ed1b2b643e2ba1225736b8b126a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "112b64bd97ae408aa68074a39764ab59", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.AddNode", + "m_ObjectId": "113199d1f567426dbafe9326ea86cf5f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Add", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -388.15447998046877, + "y": 249.84552001953126, + "width": 208.0, + "height": 302.0 + } + }, + "m_Slots": [ + { + "m_Id": "b87e006d5a8346a387219197021e229a" + }, + { + "m_Id": "4db5c6b6368e4d36b30d70f5fcc8a0cf" + }, + { + "m_Id": "6426d34e3f4341efa009ec973f3cecff" + } + ], + "synonyms": [ + "addition", + "sum", + "plus" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "25c89ed1b2b643e2ba1225736b8b126a", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "28e3790b14ea4ba4bbf72b0d7fff430f", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "42ee13e4088943878497b96b6879ae66", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -654.0, + "y": 270.0, + "width": 126.0, + "height": 34.000030517578128 + } + }, + "m_Slots": [ + { + "m_Id": "d8968c1f1f5448dda015f9ca72e8542c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "8469cb2ead97453baf196f0f75ba55d0" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "4db5c6b6368e4d36b30d70f5fcc8a0cf", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "52dd6f5b9efd418d8101fcea17440983", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalSpriteUnlitSubTarget", + "m_ObjectId": "5be1424b117344039b68c05ca998494c" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "6426d34e3f4341efa009ec973f3cecff", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "69f1e8c33bdd489bafd3cb8d01f138c3", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -468.00006103515627, + "y": -80.00001525878906, + "width": 183.0, + "height": 251.0000457763672 + } + }, + "m_Slots": [ + { + "m_Id": "112b64bd97ae408aa68074a39764ab59" + }, + { + "m_Id": "7f10351e23494bb98b6c0b7461946b29" + }, + { + "m_Id": "aa2209906b9a4e899ea016db15027c31" + }, + { + "m_Id": "dd01cca1dd3b443da8a7fdae1d202316" + }, + { + "m_Id": "28e3790b14ea4ba4bbf72b0d7fff430f" + }, + { + "m_Id": "0023f596500c4795a3b58c5c4e3374de" + }, + { + "m_Id": "52dd6f5b9efd418d8101fcea17440983" + }, + { + "m_Id": "d70aa1b6466d4153bcfc2d4bbba8c882" + } + ], + "synonyms": [ + "tex2d" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0, + "m_EnableGlobalMipBias": true, + "m_MipSamplingMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "6f06521e380a443f8ba4317ab0f62a0b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "8742a006671640b5b105bf120d0be81d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "71622970c1e4447bbfdb3c7c41beedf0", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "76f1dd2ffce94dbf8eb1134f7bd36f1e", + "m_Id": 0, + "m_DisplayName": "_MainTex", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7f10351e23494bb98b6c0b7461946b29", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "8469cb2ead97453baf196f0f75ba55d0", + "m_Guid": { + "m_GuidSerialized": "357233c2-0561-43a5-8008-59326f9bf419" + }, + "m_Name": "_AddColor", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "_AddColor", + "m_DefaultReferenceName": "_AddColor", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "isMainColor": false, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "8742a006671640b5b105bf120d0be81d", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "a42035050ec244da8c775eab33e3d4eb", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "e7e9a6a5135a4df48dd25bcfd80a893a" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "aa2209906b9a4e899ea016db15027c31", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "b5d430b8683d452cb8793495dd2aff16", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "b87e006d5a8346a387219197021e229a", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "bd157df78c1a4052b119e1467cc9033c", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "0278985b26a64d498aaa7ff36d82f21e" + }, + { + "m_Id": "8469cb2ead97453baf196f0f75ba55d0" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "cb0b48ea60434ae1bb1329121f27cafd", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -654.0000610351563, + "y": -54.00000762939453, + "width": 132.0, + "height": 33.99999237060547 + } + }, + "m_Slots": [ + { + "m_Id": "76f1dd2ffce94dbf8eb1134f7bd36f1e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "0278985b26a64d498aaa7ff36d82f21e" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "d70aa1b6466d4153bcfc2d4bbba8c882", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "d8968c1f1f5448dda015f9ca72e8542c", + "m_Id": 0, + "m_DisplayName": "_AddColor", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "db6db8c7c8214b03bb7c341555adf363", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "b5d430b8683d452cb8793495dd2aff16" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "dd01cca1dd3b443da8a7fdae1d202316", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e7e9a6a5135a4df48dd25bcfd80a893a", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "f4ea6379351142a99007c1b2980ab5da", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "71622970c1e4447bbfdb3c7c41beedf0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.shadergraph.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.shadergraph.meta new file mode 100644 index 00000000000..ce514fc60fd --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/079_SpriteRenderer_MaterialPropertyBlock/079_3.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c487184ab7950b841be0596d53699471 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} From 7ac77d67dfc4ae3c8c1206a61a3aa7980e410982 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Leli=C3=A8vre?= Date: Mon, 4 Nov 2024 20:28:48 +0000 Subject: [PATCH 07/85] Fix SSS Bleeding Finish work started by Adrien here: https://github.cds.internal.unity3d.com/unity/unity/pull/48279 Before: Pre scatter: ![image](https://media.github.cds.internal.unity3d.com/user/745/files/602d8815-55a7-4173-b99d-c93ccf58f452) Pre-Post scatter: ![image](https://media.github.cds.internal.unity3d.com/user/745/files/591dd9b0-d156-4539-8b30-31e74d6faeab) After: ![image](https://media.github.cds.internal.unity3d.com/user/745/files/618a2dcd-817b-4768-8469-9c06110f0df3) The blue area on the material has an SSS mask of 0, so they shouldn't contribute to the SSS of the image. Also added a new option for the occlusion of SSS materials when they are close to non-SSS ones: In this scene the two squares are default material (non-SSS) and the background is SSS with a large diffusion radius Before: ![image](https://media.github.cds.internal.unity3d.com/user/745/files/c7889167-1dfc-4c64-ad82-70ebcf91de1e) After: ![image](https://media.github.cds.internal.unity3d.com/user/745/files/e43ffc1f-4cd2-40c9-b4b6-547d95442d2c) https://media.github.cds.internal.unity3d.com/user/745/files/ea42a1c4-c93f-4c91-abb9-694a7de7a775 Blender Cycles rendering: ![image](https://media.github.cds.internal.unity3d.com/user/745/files/f7e7f12e-dc4b-4b58-a64d-14e537b1e13a) --- ...iffusive-surfaces-subsurface-scattering.md | 18 ++++ .../DiffusionProfileSettingsEditor.cs | 2 + .../SerializedDiffusionProfileSettings.cs | 2 + .../Lit/ShaderGraph/ShaderPass.template.hlsl | 1 + .../RenderPipeline/HDRenderPipelineUI.Skin.cs | 1 + .../RenderPipeline/HDRenderPipelineUI.cs | 3 + .../SerializedRenderPipelineSettings.cs | 6 +- .../DiffusionProfileSettings.cs | 18 ++++ .../Material/LayeredLit/LayeredLitData.hlsl | 3 +- .../Runtime/Material/Lit/Lit.hlsl | 10 +- .../Material/Lit/LitDataIndividualLayer.hlsl | 3 +- .../CombineLighting.shader | 8 +- .../SubsurfaceScattering.compute | 95 ++++++++++++++++--- .../SubsurfaceScattering.hlsl | 14 ++- .../HDRenderPipeline.SubsurfaceScattering.cs | 43 ++++++++- .../RenderPipeline/HDStringConstants.cs | 1 + .../Settings/RenderPipelineSettings.cs | 3 + .../ShaderLibrary/ShaderVariablesGlobal.cs | 2 + .../ShaderVariablesGlobal.cs.hlsl | 1 + .../Editor/HDAnalyticsTests_Defaults.txt | 1 + 20 files changed, 208 insertions(+), 27 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/skin-and-diffusive-surfaces-subsurface-scattering.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/skin-and-diffusive-surfaces-subsurface-scattering.md index 4f1c395f8ee..8782d61bcdf 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/skin-and-diffusive-surfaces-subsurface-scattering.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/skin-and-diffusive-surfaces-subsurface-scattering.md @@ -22,6 +22,24 @@ For HDRP to detect it, you must add it to the **Diffusion Profile List** of the Refer to [Diffusion Profile reference](diffusion-profile-reference.md) for more information. +### Subsurface border attenuation + +HDRP includes support for an approximation of occlusion in Subsurface Scattering (SSS), referred to as **Border Attenuation**. When enabled, **Border Attenuation** darkens the Subsurface Scattering effect near the borders of an object. A border is defined as an area where the material transitions to another material without Subsurface Scattering or to a material with a different diffusion profile. + +To enable **Border Attenuation**, in the HDRP asset go in the Material Section, under the Subsurface scattering toggle, enable **Support Border Attenuation**. + +#### Use cases + +Border Attenuation is particularly useful when working with diffusion profiles that have a large radius. It enhances detail in the light simulation, making it especially beneficial for rendering complex surfaces like eyes, which typically present challenges for Subsurface Scattering. + +#### Performances + +Enabling Border Attenuation incurs a minor performance cost on the GPU. This cost scales linearly with the number of samples used in the Subsurface Scattering process. + +#### Border Attenuation Color + +When border attenuation is enabled, a new option is available in the diffusion profile allowing you to specify the color for samples that hit the border. This simulates the effect of light being transmitted from one surface to another through Subsurface Scattering. It only affects Subsurface Scattering when two materials with different diffusion profiles are adjacent to each other. + ## Add subsurface scattering to a Material To add subsurface scattering to a Material: diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/DiffusionProfile/DiffusionProfileSettingsEditor.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/DiffusionProfile/DiffusionProfileSettingsEditor.cs index f5f9a9a156b..06891343528 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/DiffusionProfile/DiffusionProfileSettingsEditor.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/DiffusionProfile/DiffusionProfileSettingsEditor.cs @@ -160,6 +160,8 @@ void DrawSSS() DualSliderWithFields(Styles.smoothnessMultipliers, m_SerializedDiffusionProfileSettings.smoothnessMultipliers, 0.0f, 2.0f); EditorGUILayout.PropertyField(m_SerializedDiffusionProfileSettings.lobeMix); EditorGUILayout.PropertyField(m_SerializedDiffusionProfileSettings.diffusePower); + if (HDRenderPipeline.currentAsset == null || HDRenderPipeline.currentAsset.currentPlatformRenderPipelineSettings.subsurfaceScatteringAttenuation) + EditorGUILayout.PropertyField(m_SerializedDiffusionProfileSettings.borderAttenuationColor); } EditorGUILayout.Space(); diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/DiffusionProfile/SerializedDiffusionProfileSettings.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/DiffusionProfile/SerializedDiffusionProfileSettings.cs index 0313664532d..9bb5c5027b2 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/DiffusionProfile/SerializedDiffusionProfileSettings.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/DiffusionProfile/SerializedDiffusionProfileSettings.cs @@ -18,6 +18,7 @@ internal sealed class SerializedDiffusionProfileSettings : IDisposable internal SerializedProperty smoothnessMultipliers; internal SerializedProperty lobeMix; internal SerializedProperty diffusePower; + internal SerializedProperty borderAttenuationColor; internal SerializedProperty transmissionMode; internal SerializedProperty thicknessRemap; internal SerializedProperty worldScale; @@ -47,6 +48,7 @@ internal SerializedDiffusionProfileSettings(DiffusionProfileSettings settings, smoothnessMultipliers = rp.Find(x => x.smoothnessMultipliers); lobeMix = rp.Find(x => x.lobeMix); diffusePower = rp.Find(x => x.diffuseShadingPower); + borderAttenuationColor = rp.Find(x => x.borderAttenuationColor); transmissionMode = rp.Find(x => x.transmissionMode); thicknessRemap = rp.Find(x => x.thicknessRemap); worldScale = rp.Find(x => x.worldScale); diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/ShaderPass.template.hlsl b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/ShaderPass.template.hlsl index cbd72ac752e..c9a5e99713d 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/ShaderPass.template.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Lit/ShaderGraph/ShaderPass.template.hlsl @@ -50,6 +50,7 @@ void BuildSurfaceData(FragInputs fragInputs, inout SurfaceDescription surfaceDes // These static material feature allow compile time optimization surfaceData.materialFeatures = MATERIALFEATUREFLAGS_LIT_STANDARD; #ifdef _MATERIAL_FEATURE_SUBSURFACE_SCATTERING + if (surfaceData.subsurfaceMask > 0) surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_SUBSURFACE_SCATTERING; #endif diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs index 082b96aee28..8cd14bc5cfd 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.Skin.cs @@ -155,6 +155,7 @@ public class Styles public static readonly GUIContent supportSSGIContent = EditorGUIUtility.TrTextContent("Screen Space Global Illumination", "When enabled, HDRP allocates memory for processing screen space global illumination (SSGI). This allows you to use SSGI in your Unity Project."); public static readonly GUIContent renderingLayerMaskBuffer = EditorGUIUtility.TrTextContent("Rendering Layer Mask Buffer", "When enabled, HDRP writes Rendering Layer Mask of Renderers to a buffer target that can be sampled in a shader in order to create fullscreen effects.\nThis comes with a performance and a memory cost."); public static readonly GUIContent supportedSSSContent = EditorGUIUtility.TrTextContent("Subsurface Scattering", "When enabled, HDRP allocates memory for processing subsurface scattering (SSS). This allows you to use SSS in your Unity Project."); + public static readonly GUIContent subsurfaceScatteringBorderAttenuation = EditorGUIUtility.TrTextContent("Support Border Attenuation", "When enabled, the subsurface scattering takes into account the occlusion of near objects with no subsurface-scattering or a different diffusion profile."); public static readonly GUIContent sssSampleBudget = EditorGUIUtility.TrTextContent("Sample Budget", "Maximum number of samples the Subsurface Scattering algorithm is allowed to take."); public static readonly GUIContent sssDownsampleSteps = EditorGUIUtility.TrTextContent("Downsample Level", "The number of downsample steps done to the source irradance textrure before it is used by the Subsurface Scattering algorithm. Higher value will improve performance, but might lower quality."); public static readonly GUIContent supportVolumetricFogContent = EditorGUIUtility.TrTextContent("Volumetric Fog", "When enabled, HDRP allocates Shader variants and memory for volumetric effects. This allows you to use volumetric lighting and fog in your Unity Project."); diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs index 01ec774ecd4..0305f9ae22e 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/HDRenderPipelineUI.cs @@ -1385,6 +1385,9 @@ static void Drawer_SectionMaterialUnsorted(SerializedHDRenderPipelineAsset seria || !serialized.renderPipelineSettings.supportSubsurfaceScattering.boolValue)) { ++EditorGUI.indentLevel; + + EditorGUILayout.PropertyField(serialized.renderPipelineSettings.subsurfaceScatteringBorderAttenuation, Styles.subsurfaceScatteringBorderAttenuation); + serialized.renderPipelineSettings.sssSampleBudget.ValueGUI(Styles.sssSampleBudget); EditorGUI.BeginChangeCheck(); diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedRenderPipelineSettings.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedRenderPipelineSettings.cs index bf9aaae6f76..3430661bc37 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedRenderPipelineSettings.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/RenderPipeline/Settings/SerializedRenderPipelineSettings.cs @@ -24,6 +24,7 @@ class SerializedRenderPipelineSettings public SerializedProperty supportSSAO; public SerializedProperty supportSSGI; public SerializedProperty supportSubsurfaceScattering; + public SerializedProperty subsurfaceScatteringBorderAttenuation; public SerializedScalableSetting sssSampleBudget; public SerializedScalableSetting sssDownsampleSteps; [FormerlySerializedAs("supportVolumetric")] @@ -82,7 +83,7 @@ class SerializedRenderPipelineSettings public SerializedProperty supportScreenSpaceLensFlare; public SerializedProperty supportDataDrivenLensFlare; - + public SerializedGlobalLightLoopSettings lightLoopSettings; public SerializedHDShadowInitParameters hdShadowInitParams; public SerializedGlobalDecalSettings decalSettings; @@ -116,6 +117,7 @@ public SerializedRenderPipelineSettings(SerializedProperty root) supportSSAO = root.Find((RenderPipelineSettings s) => s.supportSSAO); supportSSGI = root.Find((RenderPipelineSettings s) => s.supportSSGI); supportSubsurfaceScattering = root.Find((RenderPipelineSettings s) => s.supportSubsurfaceScattering); + subsurfaceScatteringBorderAttenuation = root.Find((RenderPipelineSettings s) => s.subsurfaceScatteringAttenuation); sssSampleBudget = new SerializedScalableSetting(root.Find((RenderPipelineSettings s) => s.sssSampleBudget)); sssDownsampleSteps = new SerializedScalableSetting(root.Find((RenderPipelineSettings s) => s.sssDownsampleSteps)); supportVolumetrics = root.Find((RenderPipelineSettings s) => s.supportVolumetrics); @@ -179,7 +181,7 @@ public SerializedRenderPipelineSettings(SerializedProperty root) lowresTransparentSettings = new SerializedLowResTransparencySettings(root.Find((RenderPipelineSettings s) => s.lowresTransparentSettings)); xrSettings = new SerializedXRSettings(root.Find((RenderPipelineSettings s) => s.xrSettings)); postProcessQualitySettings = new SerializedPostProcessingQualitySettings(root.Find((RenderPipelineSettings s) => s.postProcessQualitySettings)); - + supportScreenSpaceLensFlare = root.Find((RenderPipelineSettings s) => s.supportScreenSpaceLensFlare); supportDataDrivenLensFlare = root.Find((RenderPipelineSettings s) => s.supportDataDrivenLensFlare); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/DiffusionProfile/DiffusionProfileSettings.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/DiffusionProfile/DiffusionProfileSettings.cs index c9e63dabda7..564ea5a0960 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/DiffusionProfile/DiffusionProfileSettings.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/DiffusionProfile/DiffusionProfileSettings.cs @@ -64,6 +64,9 @@ public enum TransmissionMode : uint public float lobeMix; [Range(1.0f, 3.0f), Tooltip("Exponent on the cosine component of the diffuse lobe.\nHelps to simulate surfaces with strong subsurface scattering.")] public float diffuseShadingPower; + [ColorUsage(false, false)] + [Tooltip("The color used when a subsurface scattering sample encounters a border. A border is defined by a material not having the same diffusion profile.")] + public Color borderAttenuationColor; public TransmissionMode transmissionMode; public Vector2 thicknessRemap; // X = min, Y = max (in millimeters) public float worldScale; // Size of the world unit in meters @@ -95,6 +98,7 @@ public void ResetToDefault() thicknessRemap = new Vector2(0f, 5f); worldScale = 1f; ior = 1.4f; // Typical value for skin specular reflectance + borderAttenuationColor = Color.black; } internal void Validate() @@ -228,6 +232,7 @@ public bool Equals(DiffusionProfile other) transmissionTint == other.transmissionTint && texturingMode == other.texturingMode && transmissionMode == other.transmissionMode && + borderAttenuationColor == other.borderAttenuationColor && thicknessRemap == other.thicknessRemap && worldScale == other.worldScale && ior == other.ior; @@ -249,6 +254,7 @@ public partial class DiffusionProfileSettings : ScriptableObject [NonSerialized] internal Vector4 transmissionTintAndFresnel0; // RGB = color, A = fresnel0 [NonSerialized] internal Vector4 disabledTransmissionTintAndFresnel0; // RGB = black, A = fresnel0 - For debug to remove the transmission [NonSerialized] internal Vector4 dualLobeAndDiffusePower; // R = Smoothness A, G = Smoothness B, B = Lobe Mix, A = Diffuse Power - 1 (to have 0 as neutral value) + [NonSerialized] internal Vector4 borderAttenuationColorMultiplier; // RGB = color, A = not used [NonSerialized] internal int updateCount; /// @@ -335,6 +341,17 @@ public Color transmissionTint set { profile.transmissionTint = value; profile.Validate(); UpdateCache(); } } + /// + /// Color used when the diffusion profile samples encounters a different diffusion profile index. + /// Setting this color to black have the same effect as occluding the subsurface scattering. + /// This property only works if the "Support Border Attenuation" property is enabled in the HDRP asset. + /// + public Color borderAttenuationColor + { + get => profile.borderAttenuationColor; + set { profile.borderAttenuationColor = value; profile.Validate(); UpdateCache(); } + } + void OnEnable() { if (profile == null) @@ -387,6 +404,7 @@ internal void UpdateCache() disabledTransmissionTintAndFresnel0 = new Vector4(0.0f, 0.0f, 0.0f, fresnel0); float smoothnessB = profile.lobeMix == 0.0f ? 1.0f : profile.smoothnessMultipliers.y; // this helps shader determine if dual lobe is active dualLobeAndDiffusePower = new Vector4(profile.smoothnessMultipliers.x, smoothnessB, profile.lobeMix, profile.diffuseShadingPower - 1.0f); + borderAttenuationColorMultiplier = profile.borderAttenuationColor; updateCount++; } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/LayeredLit/LayeredLitData.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/LayeredLit/LayeredLitData.hlsl index a0c055f3ca9..ccf39a8e4e4 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/LayeredLit/LayeredLitData.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/LayeredLit/LayeredLitData.hlsl @@ -783,7 +783,8 @@ void GetSurfaceAndBuiltinData(FragInputs input, float3 V, inout PositionInputs p surfaceData.materialFeatures = MATERIALFEATUREFLAGS_LIT_STANDARD; #ifdef _MATERIAL_FEATURE_SUBSURFACE_SCATTERING - surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_SUBSURFACE_SCATTERING; + if (surfaceData.subsurfaceMask > 0) + surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_SUBSURFACE_SCATTERING; #endif #ifdef _MATERIAL_FEATURE_TRANSMISSION surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_TRANSMISSION; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/Lit.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/Lit.hlsl index 305b47e6e3f..fb73c092f7a 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/Lit.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/Lit.hlsl @@ -585,6 +585,10 @@ void EncodeIntoGBuffer( SurfaceData surfaceData float encodedSpecularOcclusion = surfaceData.specularOcclusion; #endif + // Remove SSS in case the mask is 0 + if (surfaceData.subsurfaceMask == 0) + surfaceData.materialFeatures &= ~(MATERIALFEATUREFLAGS_LIT_SUBSURFACE_SCATTERING); + // Ensure that surfaceData.coatMask is 0 if the feature is not enabled // Warning: overriden by Translucent if using a transmission tint float coatMask = HasFlag(surfaceData.materialFeatures, MATERIALFEATUREFLAGS_LIT_CLEAR_COAT) ? surfaceData.coatMask : 0.0; @@ -909,13 +913,7 @@ uint DecodeFromGBuffer(uint2 positionSS, uint tileFeatureFlags, out BSDFData bsd SSSData sssData; float transmissionMask; - #ifdef DEBUG_DISPLAY - // Note that we don't use sssData.subsurfaceMask here. But it is still assign so we can have - // the information in the material debug view. UnpackFloatInt8bit(inGBuffer0.a, 16, sssData.subsurfaceMask, sssData.diffusionProfileIndex); - #else - sssData.subsurfaceMask = 0.0f; // Initialize to prevent compiler error, but value is never used - #endif // We read profile from G-Buffer 2 so the compiler can optimize away the read from the G-Buffer 0 to the very end (in PostEvaluateBSDF) // When using translucency, we exchange diffusion profile and coat mask diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/LitDataIndividualLayer.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/LitDataIndividualLayer.hlsl index 40d31a37686..8fda2e5454f 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/LitDataIndividualLayer.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Lit/LitDataIndividualLayer.hlsl @@ -290,7 +290,8 @@ float ADD_IDX(GetSurfaceData)(FragInputs input, LayerTexCoord layerTexCoord, out surfaceData.materialFeatures = MATERIALFEATUREFLAGS_LIT_STANDARD; #ifdef _MATERIAL_FEATURE_SUBSURFACE_SCATTERING - surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_SUBSURFACE_SCATTERING; + if (surfaceData.subsurfaceMask > 0) + surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_SUBSURFACE_SCATTERING; #endif #ifdef _MATERIAL_FEATURE_TRANSMISSION surfaceData.materialFeatures |= MATERIALFEATUREFLAGS_LIT_TRANSMISSION; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/CombineLighting.shader b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/CombineLighting.shader index 795922a763e..b2ae0f27954 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/CombineLighting.shader +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/CombineLighting.shader @@ -64,7 +64,9 @@ Shader "Hidden/HDRP/CombineLighting" float4 Frag(Varyings input) : SV_Target { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); - return LOAD_TEXTURE2D_X(_IrradianceSource, input.positionCS.xy); + float3 color = LOAD_TEXTURE2D_X(_IrradianceSource, input.positionCS.xy).rgb; + // avoid to additive blend the alpha which tends to make it above 1 and cause issues in later passes. + return float4(color, 0); } ENDHLSL } @@ -88,7 +90,9 @@ Shader "Hidden/HDRP/CombineLighting" float4 Frag(Varyings input) : SV_Target { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); - return LOAD_TEXTURE2D_X(_IrradianceSource, input.positionCS.xy) * GetCurrentExposureMultiplier(); + float3 color = LOAD_TEXTURE2D_X(_IrradianceSource, input.positionCS.xy).rgb * GetCurrentExposureMultiplier(); + // avoid to additive blend the alpha which tends to make it above 1 and cause issues in later passes. + return float4(color, 0); } ENDHLSL } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/SubsurfaceScattering.compute b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/SubsurfaceScattering.compute index 54c7aaf7439..fb712f0dcde 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/SubsurfaceScattering.compute +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/SubsurfaceScattering.compute @@ -8,9 +8,11 @@ #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch #pragma kernel SubsurfaceScattering +#pragma kernel PackDiffusionProfile PACK_DIFFUSION_PROFILE #pragma multi_compile _ ENABLE_MSAA #pragma multi_compile _ USE_DOWNSAMPLE +#pragma multi_compile _ USE_SSS_OCCLUSION // TODO: use sharp load hoisting on PS4. @@ -71,6 +73,12 @@ StructuredBuffer _CoarseStencilBuffer; RW_TEXTURE2D_X(float4, _CameraColorTexture); // Target texture #endif +#ifdef PACK_DIFFUSION_PROFILE + RW_TEXTURE2D_X(uint, _DiffusionProfileIndexTexture); +#else + TYPED_TEXTURE2D_X(uint, _DiffusionProfileIndexTexture); +#endif + //-------------------------------------------------------------------------------------------------- // Implementation //-------------------------------------------------------------------------------------------------- @@ -187,9 +195,31 @@ struct DebugInfo #endif }; +bool SameProfiles(uint sampleProfileIndex, uint currentProfileIndex) +{ +#ifdef USE_SSS_OCCLUSION + return sampleProfileIndex == currentProfileIndex; +#endif + return true; +} + +int GetDiffusionProfileIndexAtPosition(int2 position) +{ + uint p = LOAD_TEXTURE2D_X_LOD(_DiffusionProfileIndexTexture, uint2(position.x >> 1, position.y), 0); + int sampleProfileIndex; + + if ((position.x & 1) == 0) + sampleProfileIndex = p & 0xF; + else + sampleProfileIndex = p >> 4; + + return sampleProfileIndex; +} + void EvaluateSample(uint i, uint n, int2 pixelCoord, int2 cacheOffset, float3 S, float d, float3 centerPosVS, float mmPerUnit, float pixelsPerMm, - float phase, float3 tangentX, float3 tangentY, float4x4 projMatrix, float linearDepth, inout DebugInfo debugInfo, + float phase, float3 tangentX, float3 tangentY, float4x4 projMatrix, float linearDepth, + int currentProfileIndex, float3 borderAttenuationColor, inout DebugInfo debugInfo, inout float3 totalIrradiance, inout float3 totalWeight) { // The sample count is loop-invariant. @@ -234,17 +264,33 @@ void EvaluateSample(uint i, uint n, int2 pixelCoord, int2 cacheOffset, float4 textureSample = LoadSample(position, cacheOffset); float3 irradiance = textureSample.rgb; + // Compute bilateral weighting. + float viewZ = textureSample.a; + float relZ = viewZ - linearDepth; + float3 weight = ComputeBilateralWeight(xy2, relZ, mmPerUnit, S, rcpPdf); + + // For the SSS Occlusion, we take in account all the samples as weight + // This is required if we want darkening on zones where less samples are available due to masking. + #if USE_SSS_OCCLUSION + totalWeight += weight; + #endif + // Check the results of the stencil test. if (TestLightingForSSS(irradiance)) { - // Apply bilateral weighting. - float viewZ = textureSample.a; - float relZ = viewZ - linearDepth; - float3 weight = ComputeBilateralWeight(xy2, relZ, mmPerUnit, S, rcpPdf); - - // Note: if the texture sample if off-screen, (z = 0) -> (viewZ = far) -> (weight ≈ 0). - totalIrradiance += weight * irradiance; - totalWeight += weight; + int sampleProfileIndex = GetDiffusionProfileIndexAtPosition(position); + if (SameProfiles(sampleProfileIndex, currentProfileIndex)) + { + // Note: if the texture sample if off-screen, (z = 0) -> (viewZ = far) -> (weight ≈ 0). + totalIrradiance += weight * irradiance; + #if !USE_SSS_OCCLUSION + totalWeight += weight; + #endif + } + else + { + totalIrradiance += weight * irradiance * borderAttenuationColor; + } } else { @@ -302,6 +348,7 @@ void EvaluateSss(uint2 pixelCoord, CacheInfo cacheInfo, CenterInfo centerInfo, i float distScale = sssData.subsurfaceMask; float3 S = _ShapeParamsAndMaxScatterDists[profileIndex].rgb; float d = _ShapeParamsAndMaxScatterDists[profileIndex].a; + float3 borderAttenuationColor = _BorderAttenuationColor[profileIndex].rgb; float metersPerUnit = _WorldScalesAndFilterRadiiAndThicknessRemaps[profileIndex].x; float filterRadius = _WorldScalesAndFilterRadiiAndThicknessRemaps[profileIndex].y; // In millimeters @@ -393,8 +440,8 @@ void EvaluateSss(uint2 pixelCoord, CacheInfo cacheInfo, CenterInfo centerInfo, i // Integrate over the image or tangent plane in the view space. EvaluateSample(i, n, pixelCoord, cacheInfo.cacheOffset, S, d, centerPosVS, mmPerUnit, pixelsPerMm, - phase, tangentX, tangentY, projMatrix, linearDepth, debugInfo, - totalIrradiance, totalWeight); + phase, tangentX, tangentY, projMatrix, linearDepth, profileIndex, + borderAttenuationColor, debugInfo, totalIrradiance, totalWeight); } // Total weight is 0 for color channels without scattering. @@ -459,7 +506,9 @@ void SubsurfaceScattering(uint3 groupId : SV_GroupID, bool passedStencilTest = TestLightingForSSS(centerInfo.irradiance); // Save some bandwidth by only loading depth values for SSS pixels. +#if !USE_SSS_OCCLUSION // When Occlusion is enabled we need all the samples in the cache to be valid. if (passedStencilTest) +#endif { centerInfo.depth = LOAD_TEXTURE2D_X(_DepthTexture, pixelCoord).r; } @@ -559,3 +608,27 @@ void SubsurfaceScattering(uint3 groupId : SV_GroupID, StoreResult(pixelCoord, irradiance); } + +#ifdef PACK_DIFFUSION_PROFILE +[numthreads(8, 8, 1)] +void PackDiffusionProfile(uint3 groupId : SV_GroupID, + uint groupThreadId : SV_GroupThreadID, + uint3 dispatchThreadId : SV_DispatchThreadID) +{ + + UNITY_XR_ASSIGN_VIEW_INDEX(dispatchThreadId.z); + uint2 pixelCoord0 = uint2(dispatchThreadId.x * 2, dispatchThreadId.y); + uint2 pixelCoord1 = pixelCoord0 + uint2(1, 0); + uint packedProfiles = 0; + + // The result of the stencil test allows us to statically determine the material type (SSS). + SSSData sssData; + DECODE_FROM_SSSBUFFER(pixelCoord0, sssData); + packedProfiles |= sssData.diffusionProfileIndex & 0xF; + + DECODE_FROM_SSSBUFFER(pixelCoord1, sssData); + packedProfiles |= (sssData.diffusionProfileIndex & 0xF) << 4; + + _DiffusionProfileIndexTexture[COORD_TEXTURE2D_X(dispatchThreadId.xy)] = packedProfiles; +} +#endif diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/SubsurfaceScattering.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/SubsurfaceScattering.hlsl index 72f9b6cec40..c40f147f4bc 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/SubsurfaceScattering.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SubsurfaceScattering/SubsurfaceScattering.hlsl @@ -174,7 +174,8 @@ void FillMaterialSSS(uint diffusionProfileIndex, float subsurfaceMask, inout BSD bsdfData.diffusionProfileIndex = diffusionProfileIndex; bsdfData.fresnel0 = _TransmissionTintsAndFresnel0[diffusionProfileIndex].a; bsdfData.subsurfaceMask = subsurfaceMask; - bsdfData.materialFeatures |= MATERIALFEATUREFLAGS_SSS_OUTPUT_SPLIT_LIGHTING; + if (subsurfaceMask != 0) + bsdfData.materialFeatures |= MATERIALFEATUREFLAGS_SSS_OUTPUT_SPLIT_LIGHTING; bsdfData.materialFeatures |= GetSubsurfaceScatteringTexturingMode(diffusionProfileIndex) << MATERIALFEATUREFLAGS_SSS_TEXTURING_MODE_OFFSET; } @@ -186,8 +187,15 @@ bool ShouldOutputSplitLighting(BSDFData bsdfData) float3 GetModifiedDiffuseColorForSSS(BSDFData bsdfData) { // Subsurface scattering mode - uint texturingMode = (bsdfData.materialFeatures >> MATERIALFEATUREFLAGS_SSS_TEXTURING_MODE_OFFSET) & 3; - return ApplySubsurfaceScatteringTexturingMode(texturingMode, bsdfData.diffuseColor); + if (bsdfData.subsurfaceMask != 0) + { + uint texturingMode = (bsdfData.materialFeatures >> MATERIALFEATUREFLAGS_SSS_TEXTURING_MODE_OFFSET) & 3; + return ApplySubsurfaceScatteringTexturingMode(texturingMode, bsdfData.diffuseColor); + } + else + { + return bsdfData.diffuseColor; + } } bool GetDualLobeParameters(uint diffusionProfileIndex, out float multiplierA, out float multiplierB, out float lobeMix) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.SubsurfaceScattering.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.SubsurfaceScattering.cs index c23c8b10c20..81d881bd977 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.SubsurfaceScattering.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDRenderPipeline.SubsurfaceScattering.cs @@ -9,6 +9,7 @@ public partial class HDRenderPipeline ComputeShader m_SubsurfaceScatteringCS; ComputeShader m_SubsurfaceScatteringDownsampleCS; int m_SubsurfaceScatteringKernel; + int m_PackDiffusionProfileKernel; int m_SubsurfaceScatteringKernelMSAA; int m_SubsurfaceScatteringDownsampleKernel; Material m_CombineLightingPass; @@ -23,6 +24,7 @@ public partial class HDRenderPipeline Vector4[] m_SSSDisabledTransmissionTintsAndFresnel0; Vector4[] m_SSSWorldScalesAndFilterRadiiAndThicknessRemaps; Vector4[] m_SSSDualLobeAndDiffusePower; + Vector4[] m_SSSBorderAttenuationColor; uint[] m_SSSDiffusionProfileHashes; int[] m_SSSDiffusionProfileUpdate; DiffusionProfileSettings[] m_SSSSetDiffusionProfiles; @@ -37,6 +39,7 @@ void InitializeSubsurfaceScattering() string kernelName = "SubsurfaceScattering"; m_SubsurfaceScatteringCS = runtimeShaders.subsurfaceScatteringCS; m_SubsurfaceScatteringKernel = m_SubsurfaceScatteringCS.FindKernel(kernelName); + m_PackDiffusionProfileKernel = m_SubsurfaceScatteringCS.FindKernel("PackDiffusionProfile"); m_SubsurfaceScatteringDownsampleCS = runtimeShaders.subsurfaceScatteringDownsampleCS; m_SubsurfaceScatteringDownsampleKernel = m_SubsurfaceScatteringDownsampleCS.FindKernel("Downsample"); @@ -57,6 +60,7 @@ void InitializeSubsurfaceScattering() m_SSSDisabledTransmissionTintsAndFresnel0 = new Vector4[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT]; m_SSSWorldScalesAndFilterRadiiAndThicknessRemaps = new Vector4[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT]; m_SSSDualLobeAndDiffusePower = new Vector4[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT]; + m_SSSBorderAttenuationColor = new Vector4[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT]; m_SSSDiffusionProfileHashes = new uint[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT]; m_SSSDiffusionProfileUpdate = new int[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT]; m_SSSSetDiffusionProfiles = new DiffusionProfileSettings[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT]; @@ -109,6 +113,7 @@ void SetDiffusionProfileAtIndex(DiffusionProfileSettings settings, int index) m_SSSDisabledTransmissionTintsAndFresnel0[index] = settings.disabledTransmissionTintAndFresnel0; m_SSSWorldScalesAndFilterRadiiAndThicknessRemaps[index] = settings.worldScaleAndFilterRadiusAndThicknessRemap; m_SSSDualLobeAndDiffusePower[index] = settings.dualLobeAndDiffusePower; + m_SSSBorderAttenuationColor[index] = settings.borderAttenuationColor; m_SSSDiffusionProfileHashes[index] = settings.profile.hash; // Erase previous value (This need to be done here individually as in the SSS editor we edit individual component) @@ -141,6 +146,7 @@ unsafe void UpdateShaderVariablesGlobalSubsurface(ref ShaderVariablesGlobal cb, cb._TransmissionTintsAndFresnel0[i * 4 + c] = hdCamera.frameSettings.IsEnabled(FrameSettingsField.Transmission) ? m_SSSTransmissionTintsAndFresnel0[i][c] : m_SSSDisabledTransmissionTintsAndFresnel0[i][c]; cb._WorldScalesAndFilterRadiiAndThicknessRemaps[i * 4 + c] = m_SSSWorldScalesAndFilterRadiiAndThicknessRemaps[i][c]; cb._DualLobeAndDiffusePower[i * 4 + c] = m_SSSDualLobeAndDiffusePower[i][c]; + cb._BorderAttenuationColor[i * 4 + c] = m_SSSBorderAttenuationColor[i][c]; } cb._DiffusionProfileHashTable[i * 4] = m_SSSDiffusionProfileHashes[i]; @@ -194,6 +200,7 @@ class SubsurfaceScaterringPassData public ComputeShader subsurfaceScatteringCS; public ComputeShader subsurfaceScatteringDownsampleCS; public int subsurfaceScatteringCSKernel; + public int packDiffusionProfileKernel; public int subsurfaceScatteringDownsampleCSKernel; public int sampleBudget; public int downsampleSteps; @@ -203,6 +210,8 @@ class SubsurfaceScaterringPassData public int numTilesX; public int numTilesY; public int numTilesZ; + public bool useOcclusion; + public Vector2 viewportSize; public TextureHandle colorBuffer; public TextureHandle diffuseBuffer; @@ -211,6 +220,7 @@ class SubsurfaceScaterringPassData public TextureHandle cameraFilteringBuffer; public TextureHandle downsampleBuffer; public TextureHandle sssBuffer; + public TextureHandle diffusionProfileIndex; public BufferHandle coarseStencilBuffer; } @@ -223,10 +233,14 @@ TextureHandle RenderSubsurfaceScatteringScreenSpace(RenderGraph renderGraph, HDC using (var builder = renderGraph.AddRenderPass("Subsurface Scattering", out var passData, ProfilingSampler.Get(HDProfileId.SubsurfaceScattering))) { + passData.useOcclusion = currentAsset.currentPlatformRenderPipelineSettings.subsurfaceScatteringAttenuation; + CoreUtils.SetKeyword(m_SubsurfaceScatteringCS, "ENABLE_MSAA", hdCamera.msaaEnabled); + CoreUtils.SetKeyword(m_SubsurfaceScatteringCS, "USE_SSS_OCCLUSION", passData.useOcclusion); passData.subsurfaceScatteringCS = m_SubsurfaceScatteringCS; passData.subsurfaceScatteringCSKernel = m_SubsurfaceScatteringKernel; + passData.packDiffusionProfileKernel = m_PackDiffusionProfileKernel; passData.subsurfaceScatteringDownsampleCS = m_SubsurfaceScatteringDownsampleCS; passData.subsurfaceScatteringDownsampleCSKernel = m_SubsurfaceScatteringDownsampleKernel; passData.needTemporaryBuffer = NeedTemporarySubsurfaceBuffer() || hdCamera.msaaEnabled; @@ -245,6 +259,18 @@ TextureHandle RenderSubsurfaceScatteringScreenSpace(RenderGraph renderGraph, HDC passData.sssBuffer = builder.ReadTexture(lightingBuffers.sssBuffer); passData.coarseStencilBuffer = builder.ReadBuffer(prepassOutput.coarseStencilBuffer); + if (passData.useOcclusion) + { + passData.diffusionProfileIndex = builder.CreateTransientTexture(new TextureDesc(new Vector2(0.5f, 1f), true, true) + { + colorFormat = GraphicsFormat.R8_UInt, + enableRandomWrite = true, + clearBuffer = false, + name = "Packed Diffusion Profile Index", + }); + passData.viewportSize = hdCamera.screenSize; + } + if (passData.downsampleSteps > 0) { float scale = 1.0f / (1u << passData.downsampleSteps); @@ -253,7 +279,6 @@ TextureHandle RenderSubsurfaceScatteringScreenSpace(RenderGraph renderGraph, HDC { format = GraphicsFormat.B10G11R11_UFloatPack32, enableRandomWrite = true, clearBuffer = true, clearColor = Color.clear, name = "SSSDownsampled" }); } - if (passData.needTemporaryBuffer) { passData.cameraFilteringBuffer = builder.CreateTransientTexture( @@ -298,6 +323,22 @@ TextureHandle RenderSubsurfaceScatteringScreenSpace(RenderGraph renderGraph, HDC ctx.cmd.SetComputeBufferParam(data.subsurfaceScatteringCS, data.subsurfaceScatteringCSKernel, HDShaderIDs._CoarseStencilBuffer, data.coarseStencilBuffer); + // When occlusion is enabled, we pack the 2 diffusion profile indices into a single 8bit texel to improve the bandwidth when fetching the buffer. + // We couldn't pack this data into the lighting buffer because of the MSAA resolve and the precision loss. + if (data.useOcclusion) + { + ctx.cmd.SetComputeTextureParam(data.subsurfaceScatteringCS, data.packDiffusionProfileKernel, HDShaderIDs._DiffusionProfileIndexTexture, data.diffusionProfileIndex); + ctx.cmd.SetComputeTextureParam(data.subsurfaceScatteringCS, data.packDiffusionProfileKernel, HDShaderIDs._SSSBufferTexture, data.sssBuffer); + int xGroupCount = HDUtils.DivRoundUp(Mathf.CeilToInt(data.viewportSize.x / 2.0f), 8); + ctx.cmd.DispatchCompute(data.subsurfaceScatteringCS, data.packDiffusionProfileKernel, xGroupCount, HDUtils.DivRoundUp((int)data.viewportSize.y, 8), data.numTilesZ); + + ctx.cmd.SetComputeTextureParam(data.subsurfaceScatteringCS, data.subsurfaceScatteringCSKernel, HDShaderIDs._DiffusionProfileIndexTexture, data.diffusionProfileIndex); + } + else + { + ctx.cmd.SetComputeTextureParam(data.subsurfaceScatteringCS, data.subsurfaceScatteringCSKernel, HDShaderIDs._DiffusionProfileIndexTexture, TextureXR.GetBlackTexture()); + } + if (data.needTemporaryBuffer) { ctx.cmd.SetComputeTextureParam(data.subsurfaceScatteringCS, data.subsurfaceScatteringCSKernel, HDShaderIDs._CameraFilteringBuffer, data.cameraFilteringBuffer); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDStringConstants.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDStringConstants.cs index c381bdf61e6..4af62aaf16d 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDStringConstants.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/HDStringConstants.cs @@ -442,6 +442,7 @@ static class HDShaderIDs public static readonly int _VolumetricMaterialFalloffMode = Shader.PropertyToID("_VolumetricMaterialFalloffMode"); public static readonly int _SSSBufferTexture = Shader.PropertyToID("_SSSBufferTexture"); + public static readonly int _DiffusionProfileIndexTexture = Shader.PropertyToID("_DiffusionProfileIndexTexture"); public static readonly int _NormalBufferTexture = Shader.PropertyToID("_NormalBufferTexture"); public static readonly int _NormalBufferRW = Shader.PropertyToID("_NormalBufferRW"); public static readonly int _RaytracePrepassBufferTexture = Shader.PropertyToID("_RaytracePrepassBufferTexture"); diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Settings/RenderPipelineSettings.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Settings/RenderPipelineSettings.cs index 7cb3549a287..c4b3cd52cba 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Settings/RenderPipelineSettings.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/Settings/RenderPipelineSettings.cs @@ -103,6 +103,7 @@ internal static RenderPipelineSettings NewDefault() supportShadowMask = true, supportSSAO = true, supportSubsurfaceScattering = true, + subsurfaceScatteringAttenuation = true, sssSampleBudget = new IntScalableSetting(new[] { (int)DefaultSssSampleBudgetForQualityLevel.Low, (int)DefaultSssSampleBudgetForQualityLevel.Medium, (int)DefaultSssSampleBudgetForQualityLevel.High }, ScalableSettingSchemaId.With3Levels), @@ -249,6 +250,8 @@ public ReflectionProbeResolutionScalableSetting(CubeReflectionResolution[] value // [ShaderKeywordFilter.RemoveIf(true, keywordNames: "OUTPUT_SPLIT_LIGHTING")] #endif public bool supportSubsurfaceScattering; + /// Enable SubSurface-Scattering occlusion computation. Enabling this makes the SSS slightly more expensive but add great details to occluded zones with SSS materials. + public bool subsurfaceScatteringAttenuation; /// Sample budget for the Subsurface Scattering algorithm. public IntScalableSetting sssSampleBudget; /// Downsample input texture for the Subsurface Scattering algorithm. diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs index 4477ece5b4c..0efb213d50f 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs @@ -258,6 +258,8 @@ unsafe struct ShaderVariablesGlobal public fixed float _WorldScalesAndFilterRadiiAndThicknessRemaps[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT * 4]; // X = meters per world unit, Y = filter radius (in mm), Z = remap start, W = end - start [HLSLArray(DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT, typeof(Vector4))] public fixed float _DualLobeAndDiffusePower[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT * 4]; // RGB = dual lobe, A = diffuse power + [HLSLArray(DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT, typeof(Vector4))] + public fixed float _BorderAttenuationColor[DiffusionProfileConstants.DIFFUSION_PROFILE_COUNT * 4]; // RGB = dual lobe, A = diffuse power // Because of constant buffer limitation, arrays can only hold 4 components elements (otherwise we get alignment issues) // We could pack the 16 values inside 4 uint4 but then the generated code is inefficient and generates a lots of swizzle operations instead of a single load. // That's why we have 16 uint and only use the first component of each element. diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl index e598df55b1e..dad5dfaa792 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderVariablesGlobal.cs.hlsl @@ -152,6 +152,7 @@ GLOBAL_CBUFFER_START(ShaderVariablesGlobal, b0) float4 _TransmissionTintsAndFresnel0[16]; float4 _WorldScalesAndFilterRadiiAndThicknessRemaps[16]; float4 _DualLobeAndDiffusePower[16]; + float4 _BorderAttenuationColor[16]; uint4 _DiffusionProfileHashTable[16]; uint _EnableSubsurfaceScattering; uint _TexturingModeFlags; diff --git a/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/HDAnalyticsTests_Defaults.txt b/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/HDAnalyticsTests_Defaults.txt index dc9a14034b4..5a424c8cc43 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/HDAnalyticsTests_Defaults.txt +++ b/Packages/com.unity.render-pipelines.high-definition/Tests/Editor/HDAnalyticsTests_Defaults.txt @@ -4,6 +4,7 @@ {"supportSSAO":"True"}, {"supportSSGI":"False"}, {"supportSubsurfaceScattering":"True"}, +{"subsurfaceScatteringAttenuation":"True"}, {"sssSampleBudget.m_Values":"[20,40,80]"}, {"sssSampleBudget.m_SchemaId.m_Id":"With3Levels"}, {"sssDownsampleSteps.m_Values":"[0,0,0]"}, From 9fe5f5bee8e91d3194151f58f8373c6cc78b7d08 Mon Sep 17 00:00:00 2001 From: Chris Ting Date: Mon, 4 Nov 2024 20:29:16 +0000 Subject: [PATCH 08/85] [WebGPU] Test Updates and Bugfixes https://jira.unity3d.com/browse/PLATGRAPH-3929 One of the big fixes in this PR is to make sure to submit any command encoders before uploading data to the same texture, otherwise there would be data race issues and the texture ends up looking incorrect on the GPU. https://jira.unity3d.com/browse/PLATGRAPH-3930 A few other BiRP bugs popped up when fixing our webgpu backend, turns out we previously had black temp template images and never fixed a BiRP graphics tests bugs. Here is a list of bugs also fixed in this PR: - BiRP test 877 fixed to use `RWTexture2D` instead of `RWTexture2D` since the texture that is bound uses a 16 bit format - Implemented `CreateStencilViewForPlatform` and `DestroyStencilViewForPlatform`. This lets us have stencil only views of depth render surfaces in webgpu, and fixes test 873 - Added additional checks for the `S8_UINT` format as a depth stencil attachment, as webgpu is strict on what settings are enabled (ie load/store ops) when using a stencil only format (test 891) - Fallback to point samplers instead of linear samplers for mip map generation when generating mip maps of a texture that has an unfilterable texture format (test 506) - fix tests that use mip maps for the render texture and limit the mip limit to 1. The Web platform graphics apis, unlike other graphics apis, do not allow color attachment texture views and depth stencil attachment views bound to the render pipeline to have different sizes, so binding a non 1st level mip causes validation errors. (tests 764 506) - fix texture copy logic to use blitting instead of a `copyTexturetoTexture` command when the source dimensions of a texture are smaller the block size of a compressed texture (test 434) - add a WGSL parser that updates reflection info correctly for depth texture sampling usage. --- .../ProbeVolume/DynamicGI/DynamicGISkyOcclusion.urtshader | 2 +- .../Editor/Lighting/ProbeVolume/ProbeVolumeCellDilation.compute | 2 +- .../Editor/Lighting/ProbeVolume/ProbeVolumeSubdivide.compute | 2 +- .../ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/DynamicGI/DynamicGISkyOcclusion.urtshader b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/DynamicGI/DynamicGISkyOcclusion.urtshader index 7460bf116cc..13b0330dd00 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/DynamicGI/DynamicGISkyOcclusion.urtshader +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/DynamicGI/DynamicGISkyOcclusion.urtshader @@ -1,4 +1,4 @@ -#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal +#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal webgpu #define UNIFIED_RT_GROUP_SIZE_X 64 #define UNIFIED_RT_GROUP_SIZE_Y 1 diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeCellDilation.compute b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeCellDilation.compute index eb87df797ce..04dd0fa3d1f 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeCellDilation.compute +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeCellDilation.compute @@ -1,6 +1,6 @@ #pragma kernel DilateCell -#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch +#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch webgpu #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonLighting.hlsl" diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeSubdivide.compute b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeSubdivide.compute index ba7e4d63718..2b7fb853aee 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeSubdivide.compute +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeSubdivide.compute @@ -6,7 +6,7 @@ #pragma kernel VoxelizeProbeVolumeData #pragma kernel Subdivide -#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch +#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch webgpu // #pragma enable_d3d11_debug_symbols diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader index 45f7011a9fc..879857d256c 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader @@ -1,4 +1,4 @@ -#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal +#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal webgpu #define UNIFIED_RT_GROUP_SIZE_X 64 #define UNIFIED_RT_GROUP_SIZE_Y 1 From 18d83c0006f169eed4a0b2ef757d165c2594319e Mon Sep 17 00:00:00 2001 From: Kenny Tan Date: Mon, 4 Nov 2024 20:29:53 +0000 Subject: [PATCH 09/85] [6000.1][UUM-83013][UUM-83351] Fix active buffers for overlay in Rendergraph2D Fix UUM-83013 and UUM-83351 --- .../Runtime/2D/Passes/Render2DLightingPass.cs | 14 +- .../2D/Rendergraph/Renderer2DRendergraph.cs | 3 + ...003_PixelPerfect_StretchFill_RetroAA.unity | 103 +-- ...erfect_StretchFill_UpscaleRT_RetroAA.unity | 103 +-- ...y_Composite_Ortho_NonSelf_vs_NonSelf.unity | 530 ++++++++-------- ...ency_Composite_Ortho_Self_vs_NonSelf.unity | 596 +++++++++++------- ...parency_Composite_Ortho_Self_vs_Self.unity | 452 ++++++++++--- .../058_2D_Lights_Shadow_Blending.unity | 334 +++++----- .../059_2D_Volumetric_Shadergraph.unity | 2 +- .../Test/Runtime/TilemapRenderer2DTests.cs | 2 + 10 files changed, 1286 insertions(+), 853 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Render2DLightingPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Render2DLightingPass.cs index 05664a160a9..c47a23d25d1 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Render2DLightingPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Passes/Render2DLightingPass.cs @@ -240,7 +240,7 @@ private int DrawLayerBatches( CoreUtils.SetRenderTarget(cmd, colorAttachmentHandle, RenderBufferLoadAction.Load, initialStoreAction, depthAttachmentHandle, RenderBufferLoadAction.Load, initialStoreAction, - ClearFlag.None, Color.clear); + GetCameraClearFlag(renderingData.cameraData), Color.clear); for (var i = startIndex; i < startIndex + batchesDrawn; i++) { @@ -415,7 +415,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData CoreUtils.SetRenderTarget(cmd, colorAttachmentHandle, RenderBufferLoadAction.Load, storeAction, depthAttachmentHandle, RenderBufferLoadAction.Load, storeAction, - ClearFlag.None, Color.clear); + GetCameraClearFlag(renderingData.cameraData), Color.clear); cmd.SetGlobalColor(k_RendererColorID, Color.white); @@ -457,6 +457,16 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData RenderingUtils.DrawRendererListObjectsWithError(CommandBufferHelpers.GetRasterCommandBuffer(renderingData.commandBuffer), ref objectsWithErrorRendererList); } + ClearFlag GetCameraClearFlag(CameraData cameraData) + { + if (Application.platform != RuntimePlatform.OSXEditor && + (cameraData.camera.clearFlags == CameraClearFlags.Skybox || + cameraData.camera.clearFlags == CameraClearFlags.Nothing)) + return ClearFlag.Color; + + return ClearFlag.None; + } + Renderer2DData IRenderPass2D.rendererData { get { return m_Renderer2DData; } 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 d0a7d8adfc3..ef441086035 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 @@ -359,6 +359,9 @@ void CreateResources(RenderGraph renderGraph) m_CreateColorTexture = baseRenderer.m_CreateColorTexture; m_CreateDepthTexture = baseRenderer.m_CreateDepthTexture; + + commonResourceData.activeColorID = m_CreateColorTexture ? ActiveID.Camera : ActiveID.BackBuffer; + commonResourceData.activeDepthID = m_CreateDepthTexture ? ActiveID.Camera : ActiveID.BackBuffer; } ImportResourceSummary importSummary = GetImportResourceSummary(renderGraph, cameraData); diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/003_PixelPerfect_StretchFill_RetroAA.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/003_PixelPerfect_StretchFill_RetroAA.unity index 5d3579a4258..f5aa05cf5f7 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/003_PixelPerfect_StretchFill_RetroAA.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/003_PixelPerfect_StretchFill_RetroAA.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -104,7 +100,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -174,9 +170,20 @@ MonoBehaviour: m_Dithering: 0 m_ClearDepth: 1 m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 --- !u!81 &961739751 AudioListener: m_ObjectHideFlags: 0 @@ -194,19 +201,27 @@ Camera: m_GameObject: {fileID: 961739749} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 1 + m_ClearFlags: 2 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 - x: 0 + x: 0.21875001 y: 0 - width: 1 + width: 0.5625 height: 1 near clip plane: 0.3 far clip plane: 1000 @@ -235,13 +250,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 961739749} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &961739754 MonoBehaviour: @@ -282,18 +297,24 @@ MonoBehaviour: ImageComparisonSettings: TargetWidth: 512 TargetHeight: 512 + TargetMSAASamples: 1 PerPixelCorrectnessThreshold: 0.001 PerPixelGammaThreshold: 0.003921569 PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 AverageCorrectnessThreshold: 0.005 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 ImageResolution: 0 ActiveImageTests: 1 - ActivePixelTests: 7 + ActivePixelTests: -1 WaitFrames: 0 XRCompatible: 0 + gpuDrivenCompatible: 1 + CheckMemoryAllocation: 1 + renderBackendCompatibility: 2 + SetBackBufferResolution: 0 --- !u!1 &1470306988 GameObject: m_ObjectHideFlags: 0 @@ -323,55 +344,29 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 + m_ComponentVersion: 2 m_LightType: 4 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_LightVolumeIntensity: 1 - m_LightVolumeIntensityEnabled: 0 + m_LightVolumeEnabled: 0 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} m_DeprecatedPointLightCookieSprite: {fileID: 0} m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_OverlapOperation: 0 m_NormalMapDistance: 3 m_NormalMapQuality: 2 m_UseNormalMap: 0 - m_ShadowIntensityEnabled: 0 + m_ShadowsEnabled: 0 m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0 + m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} @@ -396,13 +391,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1470306988} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.56460124, y: 1.5452448, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1750852056 GameObject: @@ -438,6 +433,9 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: @@ -480,11 +478,18 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1750852056} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: -0.38268343, w: 0.92387956} m_LocalPosition: {x: 0.212, y: 1.127, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -45} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 961739753} + - {fileID: 1750852058} + - {fileID: 1470306990} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/003_PixelPerfect_StretchFill_UpscaleRT_RetroAA.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/003_PixelPerfect_StretchFill_UpscaleRT_RetroAA.unity index 8ef19036f4f..942252eebf6 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/003_PixelPerfect_StretchFill_UpscaleRT_RetroAA.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/003_PixelPerfect_StretchFill_UpscaleRT_RetroAA.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -104,7 +100,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -174,9 +170,20 @@ MonoBehaviour: m_Dithering: 0 m_ClearDepth: 1 m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 --- !u!81 &961739751 AudioListener: m_ObjectHideFlags: 0 @@ -194,19 +201,27 @@ Camera: m_GameObject: {fileID: 961739749} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 1 + m_ClearFlags: 2 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 - x: 0 + x: 0.21875001 y: 0 - width: 1 + width: 0.5625 height: 1 near clip plane: 0.3 far clip plane: 1000 @@ -235,13 +250,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 961739749} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &961739754 MonoBehaviour: @@ -282,18 +297,24 @@ MonoBehaviour: ImageComparisonSettings: TargetWidth: 512 TargetHeight: 512 + TargetMSAASamples: 1 PerPixelCorrectnessThreshold: 0.001 PerPixelGammaThreshold: 0.003921569 PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 AverageCorrectnessThreshold: 0.005 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 ImageResolution: 0 ActiveImageTests: 1 - ActivePixelTests: 7 + ActivePixelTests: -1 WaitFrames: 0 XRCompatible: 0 + gpuDrivenCompatible: 1 + CheckMemoryAllocation: 1 + renderBackendCompatibility: 2 + SetBackBufferResolution: 0 --- !u!1 &1470306988 GameObject: m_ObjectHideFlags: 0 @@ -323,55 +344,29 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 + m_ComponentVersion: 2 m_LightType: 4 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_LightVolumeIntensity: 1 - m_LightVolumeIntensityEnabled: 0 + m_LightVolumeEnabled: 0 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} m_DeprecatedPointLightCookieSprite: {fileID: 0} m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_OverlapOperation: 0 m_NormalMapDistance: 3 m_NormalMapQuality: 2 m_UseNormalMap: 0 - m_ShadowIntensityEnabled: 0 + m_ShadowsEnabled: 0 m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0 + m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} @@ -396,13 +391,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1470306988} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.56460124, y: 1.5452448, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1750852056 GameObject: @@ -438,6 +433,9 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -480,11 +478,18 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1750852056} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: -0.38268343, w: 0.92387956} m_LocalPosition: {x: 0.212, y: 1.127, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: -45} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 961739753} + - {fileID: 1750852058} + - {fileID: 1470306990} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_NonSelf_vs_NonSelf.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_NonSelf_vs_NonSelf.unity index 5806aac6b87..492ad325f6c 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_NonSelf_vs_NonSelf.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_NonSelf_vs_NonSelf.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -104,7 +100,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +113,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -130,7 +126,7 @@ Mesh: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: - serializedVersion: 10 + serializedVersion: 11 m_SubMeshes: - serializedVersion: 2 firstByte: 0 @@ -277,32 +273,33 @@ Mesh: m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} m_Extent: {x: 0.43698502, y: 0.44869, z: 0} m_MeshUsageFlags: 0 + m_CookingOptions: 30 m_BakedConvexCollisionMesh: m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 m_MeshOptimizationFlags: 1 m_StreamData: serializedVersion: 2 offset: 0 size: 0 path: ---- !u!43 &385708499 +--- !u!43 &216402615 Mesh: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: - serializedVersion: 10 + serializedVersion: 11 m_SubMeshes: - serializedVersion: 2 firstByte: 0 - indexCount: 162 + indexCount: 126 topology: 0 baseVertex: 0 firstVertex: 0 - vertexCount: 56 + vertexCount: 70 localAABB: m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} m_Extent: {x: 0.43698502, y: 0.44869, z: 0} @@ -319,13 +316,13 @@ Mesh: m_Data: m_MeshCompression: 0 m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 0000010002000000030001000400030000000500030004000500060003000700060005000700080006000900080007000a00080009000a000b0008000c000b000a000d000b000c000d000e000b000f000e000d000f0010000e00110010000f001100120010001300120011001300140012001500140013001600140015001600170014001600180017001900180016001a001800190018001a001b0002001c00000000001d00040001001e00020003001f0001000600200003000400210005000500220007000800230006000700240009000b0025000800090026000a000a0027000c000e0028000b000c0029000d000d002a000f0010002b000e000f002c00110012002d00100011002e00130014002f0012001300300015001700310014001500320016001600330019001800340017001b0035001800190036001a001a0037001b00 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 1 + m_IndexBuffer: 0d0000000e0000000f0000000f000000000000000d000000000000001200000013000000130000000100000000000000010000001600000017000000170000000200000001000000020000001a0000001b0000001b0000000300000002000000030000001e0000001f0000001f0000000400000003000000040000002200000023000000230000000500000004000000050000002600000027000000270000000600000005000000060000002a0000002b0000002b0000000700000006000000070000002e0000002f0000002f0000000800000007000000080000003200000033000000330000000900000008000000090000003600000037000000370000000a000000090000000a0000003a0000003b0000003b0000000b0000000a0000000b0000003e0000003f0000003f0000000c0000000b0000000c0000004200000043000000430000000d0000000c0000000d0000001000000011000000000000001400000015000000010000001800000019000000020000001c0000001d000000030000002000000021000000040000002400000025000000050000002800000029000000060000002c0000002d0000000700000030000000310000000800000034000000350000000900000038000000390000000a0000003c0000003d0000000b00000040000000410000000c0000004400000045000000 m_VertexData: serializedVersion: 3 - m_VertexCount: 56 + m_VertexCount: 70 m_Channels: - stream: 0 offset: 0 @@ -340,9 +337,9 @@ Mesh: format: 0 dimension: 4 - stream: 0 - offset: 28 + offset: 0 format: 0 - dimension: 4 + dimension: 0 - stream: 0 offset: 0 format: 0 @@ -383,8 +380,8 @@ Mesh: offset: 0 format: 0 dimension: 0 - m_DataSize: 2464 - _typelessdata: 988dda3eb1d98bbd00000000ed057e3fbb05febd0000008000000080c88be03ed2b1cf3c688fd43eebcf25be608cde3e3fbcd33d000000003bae7f3f4a8c4c3d0000008000000080f88cdc3e05c6393ec88be03ed2b1cf3cc88be03ed2b1cf3c000000003bae7f3f4b8c4c3d0000008000000080c88be03ed2b1cf3cc88be03ed2b1cf3cf88cdc3e05c6393e00000000a4ce573f06b5093f0000008000000080f88cdc3e05c6393ef88cdc3e05c6393e688fd43eebcf25be00000000ed057e3fbc05febd0000008000000080688fd43eebcf25be688fd43eebcf25be2453c43e14066fbe0000000014046a3fea94cfbe0000008000000080688fd43eebcf25bee016b43e1f1e9cbeac59ba3ed77b923e00000000a6ce573f06b5093f00000080000000806026983eac14c83ef88cdc3e05c6393ee016b43e1f1e9cbe0000000014046a3fe894cfbe0000008000000080e016b43e1f1e9cbee016b43e1f1e9cbe6026983eac14c83e00000000a224563ef1567a3f00000080000000806026983eac14c83e6026983eac14c83e9c648a3ef670b3be0000000028f3f93ef76b5fbf0000008000000080e016b43e1f1e9cbeb064413ecdc3cabeb064413ecdc3cabe0000000028f3f93ef76b5fbf0000008000000080b064413ecdc3cabeb064413ecdc3cabea8fb043e2666da3e000000009724563ef1567a3f0000008000000080c05519bd9fb7ec3e6026983eac14c83e4003c33dcac0d4be000000006fd9503e759e7abf0000008000000080b064413ecdc3cabe0048cf3ac6bddebe0048cf3ac6bddebe000000005cd9503e769e7abf00000080000000800048cf3ac6bddebe0048cf3ac6bddebec05519bd9fb7ec3e00000000af36b0be4d5c703f0000008000000080c05519bd9fb7ec3ec05519bd9fb7ec3e0089bcbd30c0d6be00000000275828be50847cbf00000000000000800048cf3ac6bddebe90273ebe99c2cebe10c0febdd165dc3e00000000af36b0be4d5c703f0000008000000080a06a58be0314cc3ec05519bd9fb7ec3e90273ebe99c2cebe000000003d5828be50847cbf000000000000008090273ebe99c2cebe90273ebe99c2cebea06a58be0314cc3e00000000ed3924bfb061443f0000008000000080a06a58be0314cc3ea06a58be0314cc3ec09781be5c70b5be00000000716d17bf59694ebf000000000000008090273ebe99c2cebeb81ba4be201e9cbe4c949bbeb076a43e00000000eb3924bfb261443f000000800000008048f3cabebcb2793ea06a58be0314cc3eb81ba4be201e9cbe000000006c6d17bf5c694ebf0000000000000080b81ba4be201e9cbeb81ba4be201e9cbe7884c1be510d57be00000000da025bbf658d04bf0000000000000080b81ba4be201e9cbe38eddebec4bcebbd48f3cabebcb2793e0000000076037cbf2502343e000000800000008048f3cabebcb2793e48f3cabebcb2793e40f0d4be7bd4093e0000000076037cbf2502343e000000800000008038eddebed2b1cf3c48f3cabebcb2793e38eddebec4bcebbd00000000da025bbf658d04bf000000000000008038eddebec4bcebbd38eddebec4bcebbd38eddebe50d037bd00000000000080bf00000080000000800000008038eddebec4bcebbd38eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf00000080000000800000008038eddebed2b1cf3c38eddebed2b1cf3cc88be03ed2b1cf3c00000000ed057e3fbb05febd0000008000000080c88be03ed2b1cf3cc88be03ed2b1cf3c988dda3eb1d98bbd00000000ed057e3fbc05febd0000008000000080c88be03ed2b1cf3c688fd43eebcf25be608cde3e3fbcd33d000000003bae7f3f4b8c4c3d0000008000000080f88cdc3e05c6393ec88be03ed2b1cf3cf88cdc3e05c6393e000000003bae7f3f4a8c4c3d0000008000000080f88cdc3e05c6393ef88cdc3e05c6393eac59ba3ed77b923e00000000a4ce573f06b5093f00000080000000806026983eac14c83ef88cdc3e05c6393e688fd43eebcf25be0000000014046a3fea94cfbe0000008000000080688fd43eebcf25be688fd43eebcf25be2453c43e14066fbe0000000014046a3fe894cfbe0000008000000080688fd43eebcf25bee016b43e1f1e9cbe6026983eac14c83e00000000a6ce573f06b5093f00000080000000806026983eac14c83e6026983eac14c83ee016b43e1f1e9cbe0000000028f3f93ef76b5fbf0000008000000080e016b43e1f1e9cbee016b43e1f1e9cbea8fb043e2666da3e00000000a224563ef1567a3f0000008000000080c05519bd9fb7ec3e6026983eac14c83e9c648a3ef670b3be0000000028f3f93ef76b5fbf0000008000000080e016b43e1f1e9cbeb064413ecdc3cabeb064413ecdc3cabe000000006fd9503e759e7abf0000008000000080b064413ecdc3cabeb064413ecdc3cabec05519bd9fb7ec3e000000009724563ef1567a3f0000008000000080c05519bd9fb7ec3ec05519bd9fb7ec3e4003c33dcac0d4be000000005cd9503e769e7abf0000008000000080b064413ecdc3cabe0048cf3ac6bddebe0048cf3ac6bddebe00000000275828be50847cbf00000000000000800048cf3ac6bddebe0048cf3ac6bddebe10c0febdd165dc3e00000000af36b0be4d5c703f0000008000000080a06a58be0314cc3ec05519bd9fb7ec3e0089bcbd30c0d6be000000003d5828be50847cbf00000000000000800048cf3ac6bddebe90273ebe99c2cebea06a58be0314cc3e00000000af36b0be4d5c703f0000008000000080a06a58be0314cc3ea06a58be0314cc3e90273ebe99c2cebe00000000716d17bf59694ebf000000000000008090273ebe99c2cebe90273ebe99c2cebe4c949bbeb076a43e00000000ed3924bfb061443f000000800000008048f3cabebcb2793ea06a58be0314cc3ec09781be5c70b5be000000006c6d17bf5c694ebf000000000000008090273ebe99c2cebeb81ba4be201e9cbe48f3cabebcb2793e00000000eb3924bfb261443f000000800000008048f3cabebcb2793e48f3cabebcb2793eb81ba4be201e9cbe00000000da025bbf658d04bf0000000000000080b81ba4be201e9cbeb81ba4be201e9cbe7884c1be510d57be00000000da025bbf658d04bf0000000000000080b81ba4be201e9cbe38eddebec4bcebbd40f0d4be7bd4093e0000000076037cbf2502343e000000800000008038eddebed2b1cf3c48f3cabebcb2793e38eddebed2b1cf3c0000000076037cbf2502343e000000800000008038eddebed2b1cf3c38eddebed2b1cf3c38eddebec4bcebbd00000000000080bf00000080000000800000008038eddebec4bcebbd38eddebec4bcebbd38eddebe50d037bd00000000000080bf00000080000000800000008038eddebec4bcebbd38eddebed2b1cf3c + m_DataSize: 1960 + _typelessdata: b81ba4be201e9cbe00000000000080bf0000000038eddebec4bcebbd38eddebec4bcebbd00000000000080bf0000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf0000000048f3cabebcb2793e48f3cabebcb2793e00000000000080bf00000000a06a58be0314cc3ea06a58be0314cc3e00000000000080bf00000000c05519bd9fb7ec3ec05519bd9fb7ec3e00000000000080bf000000006026983eac14c83e6026983eac14c83e00000000000080bf00000000f88cdc3e05c6393ef88cdc3e05c6393e00000000000080bf00000000c88be03ed2b1cf3cc88be03ed2b1cf3c00000000000080bf00000000688fd43eebcf25be688fd43eebcf25be00000000000080bf00000000e016b43e1f1e9cbee016b43e1f1e9cbe00000000000080bf00000000b064413ecdc3cabeb064413ecdc3cabe00000000000080bf000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000080bf0000000090273ebe99c2cebe90273ebe99c2cebe00000000000080bf00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe000000000000803f00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000404000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe000000000000803f0000000038eddebec4bcebbdb81ba4be201e9cbe00000000000040400000000038eddebec4bcebbd38eddebec4bcebbd00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000803f0000000038eddebed2b1cf3c38eddebec4bcebbd00000000000040400000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c000000000000803f0000000048f3cabebcb2793e38eddebed2b1cf3c00000000000040400000000048f3cabebcb2793e48f3cabebcb2793e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e000000000000803f00000000a06a58be0314cc3e48f3cabebcb2793e000000000000404000000000a06a58be0314cc3ea06a58be0314cc3e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e000000000000803f00000000c05519bd9fb7ec3ea06a58be0314cc3e000000000000404000000000c05519bd9fb7ec3ec05519bd9fb7ec3e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000803f000000006026983eac14c83ec05519bd9fb7ec3e0000000000004040000000006026983eac14c83e6026983eac14c83e000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000803f00000000f88cdc3e05c6393e6026983eac14c83e000000000000404000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000803f00000000c88be03ed2b1cf3cf88cdc3e05c6393e000000000000404000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000803f00000000688fd43eebcf25bec88be03ed2b1cf3c000000000000404000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000803f00000000e016b43e1f1e9cbe688fd43eebcf25be000000000000404000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000803f00000000b064413ecdc3cabee016b43e1f1e9cbe000000000000404000000000b064413ecdc3cabeb064413ecdc3cabe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000803f000000000048cf3ac6bddebeb064413ecdc3cabe0000000000004040000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000803f0000000090273ebe99c2cebe0048cf3ac6bddebe00000000000040400000000090273ebe99c2cebe m_CompressedMesh: m_Vertices: m_NumItems: 0 @@ -438,13 +435,14 @@ Mesh: m_BitSize: 0 m_UVInfo: 0 m_LocalAABB: - m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} - m_Extent: {x: 0.43698502, y: 0.44869, z: 0} + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} m_MeshUsageFlags: 0 + m_CookingOptions: 30 m_BakedConvexCollisionMesh: m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 m_MeshOptimizationFlags: 1 m_StreamData: serializedVersion: 2 @@ -480,55 +478,29 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 + m_ComponentVersion: 2 m_LightType: 3 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_LightVolumeIntensity: 1 - m_LightVolumeIntensityEnabled: 0 + m_LightVolumeEnabled: 0 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} m_DeprecatedPointLightCookieSprite: {fileID: 0} m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_OverlapOperation: 0 m_NormalMapDistance: 3 m_NormalMapQuality: 2 m_UseNormalMap: 0 - m_ShadowIntensityEnabled: 1 + m_ShadowsEnabled: 1 m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0 + m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} @@ -553,13 +525,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 499197015} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0.78703064, w: 0.6169139} m_LocalPosition: {x: 1.35, y: 1.4, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!43 &607164483 Mesh: @@ -568,7 +540,7 @@ Mesh: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: - serializedVersion: 10 + serializedVersion: 11 m_SubMeshes: - serializedVersion: 2 firstByte: 0 @@ -715,10 +687,11 @@ Mesh: m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} m_Extent: {x: 0.43698502, y: 0.44869, z: 0} m_MeshUsageFlags: 0 + m_CookingOptions: 30 m_BakedConvexCollisionMesh: m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 m_MeshOptimizationFlags: 1 m_StreamData: serializedVersion: 2 @@ -730,6 +703,7 @@ PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1619819624} m_Modifications: - target: {fileID: 1934610351754246572, guid: 22c34938417d65940a6438698334a9cf, @@ -843,6 +817,9 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 22c34938417d65940a6438698334a9cf, type: 3} --- !u!4 &732611868 stripped Transform: @@ -884,6 +861,9 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -927,19 +907,20 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202039385} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 20, y: 20, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1247943557 PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: + serializedVersion: 3 m_TransformParent: {fileID: 1619819624} m_Modifications: - target: {fileID: 1934610351754246572, guid: 22c34938417d65940a6438698334a9cf, @@ -1053,6 +1034,9 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 22c34938417d65940a6438698334a9cf, type: 3} --- !u!4 &1247943558 stripped Transform: @@ -1060,170 +1044,6 @@ Transform: type: 3} m_PrefabInstance: {fileID: 1247943557} m_PrefabAsset: {fileID: 0} ---- !u!43 &1371977170 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - serializedVersion: 10 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 162 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 56 - localAABB: - m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} - m_Extent: {x: 0.43698502, y: 0.44869, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 0000010002000000030001000400030000000500030004000500060003000700060005000700080006000900080007000a00080009000a000b0008000c000b000a000d000b000c000d000e000b000f000e000d000f0010000e00110010000f001100120010001300120011001300140012001500140013001600140015001600170014001600180017001900180016001a001800190018001a001b0002001c00000000001d00040001001e00020003001f0001000600200003000400210005000500220007000800230006000700240009000b0025000800090026000a000a0027000c000e0028000b000c0029000d000d002a000f0010002b000e000f002c00110012002d00100011002e00130014002f0012001300300015001700310014001500320016001600330019001800340017001b0035001800190036001a001a0037001b00 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 56 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 12 - format: 0 - dimension: 4 - - stream: 0 - offset: 28 - format: 0 - dimension: 4 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 2464 - _typelessdata: 988dda3eb1d98bbd00000000ed057e3fbb05febd0000008000000080c88be03ed2b1cf3c688fd43eebcf25be608cde3e3fbcd33d000000003bae7f3f4a8c4c3d0000008000000080f88cdc3e05c6393ec88be03ed2b1cf3cc88be03ed2b1cf3c000000003bae7f3f4b8c4c3d0000008000000080c88be03ed2b1cf3cc88be03ed2b1cf3cf88cdc3e05c6393e00000000a4ce573f06b5093f0000008000000080f88cdc3e05c6393ef88cdc3e05c6393e688fd43eebcf25be00000000ed057e3fbc05febd0000008000000080688fd43eebcf25be688fd43eebcf25be2453c43e14066fbe0000000014046a3fea94cfbe0000008000000080688fd43eebcf25bee016b43e1f1e9cbeac59ba3ed77b923e00000000a6ce573f06b5093f00000080000000806026983eac14c83ef88cdc3e05c6393ee016b43e1f1e9cbe0000000014046a3fe894cfbe0000008000000080e016b43e1f1e9cbee016b43e1f1e9cbe6026983eac14c83e00000000a224563ef1567a3f00000080000000806026983eac14c83e6026983eac14c83e9c648a3ef670b3be0000000028f3f93ef76b5fbf0000008000000080e016b43e1f1e9cbeb064413ecdc3cabeb064413ecdc3cabe0000000028f3f93ef76b5fbf0000008000000080b064413ecdc3cabeb064413ecdc3cabea8fb043e2666da3e000000009724563ef1567a3f0000008000000080c05519bd9fb7ec3e6026983eac14c83e4003c33dcac0d4be000000006fd9503e759e7abf0000008000000080b064413ecdc3cabe0048cf3ac6bddebe0048cf3ac6bddebe000000005cd9503e769e7abf00000080000000800048cf3ac6bddebe0048cf3ac6bddebec05519bd9fb7ec3e00000000af36b0be4d5c703f0000008000000080c05519bd9fb7ec3ec05519bd9fb7ec3e0089bcbd30c0d6be00000000275828be50847cbf00000000000000800048cf3ac6bddebe90273ebe99c2cebe10c0febdd165dc3e00000000af36b0be4d5c703f0000008000000080a06a58be0314cc3ec05519bd9fb7ec3e90273ebe99c2cebe000000003d5828be50847cbf000000000000008090273ebe99c2cebe90273ebe99c2cebea06a58be0314cc3e00000000ed3924bfb061443f0000008000000080a06a58be0314cc3ea06a58be0314cc3ec09781be5c70b5be00000000716d17bf59694ebf000000000000008090273ebe99c2cebeb81ba4be201e9cbe4c949bbeb076a43e00000000eb3924bfb261443f000000800000008048f3cabebcb2793ea06a58be0314cc3eb81ba4be201e9cbe000000006c6d17bf5c694ebf0000000000000080b81ba4be201e9cbeb81ba4be201e9cbe7884c1be510d57be00000000da025bbf658d04bf0000000000000080b81ba4be201e9cbe38eddebec4bcebbd48f3cabebcb2793e0000000076037cbf2502343e000000800000008048f3cabebcb2793e48f3cabebcb2793e40f0d4be7bd4093e0000000076037cbf2502343e000000800000008038eddebed2b1cf3c48f3cabebcb2793e38eddebec4bcebbd00000000da025bbf658d04bf000000000000008038eddebec4bcebbd38eddebec4bcebbd38eddebe50d037bd00000000000080bf00000080000000800000008038eddebec4bcebbd38eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf00000080000000800000008038eddebed2b1cf3c38eddebed2b1cf3cc88be03ed2b1cf3c00000000ed057e3fbb05febd0000008000000080c88be03ed2b1cf3cc88be03ed2b1cf3c988dda3eb1d98bbd00000000ed057e3fbc05febd0000008000000080c88be03ed2b1cf3c688fd43eebcf25be608cde3e3fbcd33d000000003bae7f3f4b8c4c3d0000008000000080f88cdc3e05c6393ec88be03ed2b1cf3cf88cdc3e05c6393e000000003bae7f3f4a8c4c3d0000008000000080f88cdc3e05c6393ef88cdc3e05c6393eac59ba3ed77b923e00000000a4ce573f06b5093f00000080000000806026983eac14c83ef88cdc3e05c6393e688fd43eebcf25be0000000014046a3fea94cfbe0000008000000080688fd43eebcf25be688fd43eebcf25be2453c43e14066fbe0000000014046a3fe894cfbe0000008000000080688fd43eebcf25bee016b43e1f1e9cbe6026983eac14c83e00000000a6ce573f06b5093f00000080000000806026983eac14c83e6026983eac14c83ee016b43e1f1e9cbe0000000028f3f93ef76b5fbf0000008000000080e016b43e1f1e9cbee016b43e1f1e9cbea8fb043e2666da3e00000000a224563ef1567a3f0000008000000080c05519bd9fb7ec3e6026983eac14c83e9c648a3ef670b3be0000000028f3f93ef76b5fbf0000008000000080e016b43e1f1e9cbeb064413ecdc3cabeb064413ecdc3cabe000000006fd9503e759e7abf0000008000000080b064413ecdc3cabeb064413ecdc3cabec05519bd9fb7ec3e000000009724563ef1567a3f0000008000000080c05519bd9fb7ec3ec05519bd9fb7ec3e4003c33dcac0d4be000000005cd9503e769e7abf0000008000000080b064413ecdc3cabe0048cf3ac6bddebe0048cf3ac6bddebe00000000275828be50847cbf00000000000000800048cf3ac6bddebe0048cf3ac6bddebe10c0febdd165dc3e00000000af36b0be4d5c703f0000008000000080a06a58be0314cc3ec05519bd9fb7ec3e0089bcbd30c0d6be000000003d5828be50847cbf00000000000000800048cf3ac6bddebe90273ebe99c2cebea06a58be0314cc3e00000000af36b0be4d5c703f0000008000000080a06a58be0314cc3ea06a58be0314cc3e90273ebe99c2cebe00000000716d17bf59694ebf000000000000008090273ebe99c2cebe90273ebe99c2cebe4c949bbeb076a43e00000000ed3924bfb061443f000000800000008048f3cabebcb2793ea06a58be0314cc3ec09781be5c70b5be000000006c6d17bf5c694ebf000000000000008090273ebe99c2cebeb81ba4be201e9cbe48f3cabebcb2793e00000000eb3924bfb261443f000000800000008048f3cabebcb2793e48f3cabebcb2793eb81ba4be201e9cbe00000000da025bbf658d04bf0000000000000080b81ba4be201e9cbeb81ba4be201e9cbe7884c1be510d57be00000000da025bbf658d04bf0000000000000080b81ba4be201e9cbe38eddebec4bcebbd40f0d4be7bd4093e0000000076037cbf2502343e000000800000008038eddebed2b1cf3c48f3cabebcb2793e38eddebed2b1cf3c0000000076037cbf2502343e000000800000008038eddebed2b1cf3c38eddebed2b1cf3c38eddebec4bcebbd00000000000080bf00000080000000800000008038eddebec4bcebbd38eddebec4bcebbd38eddebe50d037bd00000000000080bf00000080000000800000008038eddebec4bcebbd38eddebed2b1cf3c - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} - m_Extent: {x: 0.43698502, y: 0.44869, z: 0} - m_MeshUsageFlags: 0 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &1619819622 GameObject: m_ObjectHideFlags: 0 @@ -1254,6 +1074,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_ShadowGroup: 0 + m_Priority: 0 --- !u!4 &1619819624 Transform: m_ObjectHideFlags: 0 @@ -1261,6 +1082,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1619819622} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.59230703, y: -0.54234225, z: -0.19256367} m_LocalScale: {x: 1, y: 1, z: 1} @@ -1269,7 +1091,6 @@ Transform: - {fileID: 1247943558} - {fileID: 732611868} m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1627763796 GameObject: @@ -1321,9 +1142,20 @@ MonoBehaviour: m_Dithering: 0 m_ClearDepth: 1 m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 --- !u!81 &1627763798 AudioListener: m_ObjectHideFlags: 0 @@ -1341,14 +1173,22 @@ Camera: m_GameObject: {fileID: 1627763796} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 1 + m_ClearFlags: 2 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1382,13 +1222,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1627763796} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 3.16, y: -0.57, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1627763801 MonoBehaviour: @@ -1405,18 +1245,24 @@ MonoBehaviour: ImageComparisonSettings: TargetWidth: 512 TargetHeight: 256 + TargetMSAASamples: 1 PerPixelCorrectnessThreshold: 0.001 PerPixelGammaThreshold: 0.003921569 PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 AverageCorrectnessThreshold: 0.005 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 ImageResolution: 0 ActiveImageTests: 1 - ActivePixelTests: 7 + ActivePixelTests: -1 WaitFrames: 0 XRCompatible: 0 + gpuDrivenCompatible: 1 + CheckMemoryAllocation: 1 + renderBackendCompatibility: 2 + SetBackBufferResolution: 0 --- !u!1 &1771418502 GameObject: m_ObjectHideFlags: 0 @@ -1446,55 +1292,29 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 073797afb82c5a1438f328866b10b3f0, type: 3} m_Name: m_EditorClassIdentifier: - m_ComponentVersion: 1 + m_ComponentVersion: 2 m_LightType: 3 m_BlendStyleIndex: 0 m_FalloffIntensity: 0.5 m_Color: {r: 1, g: 1, b: 1, a: 1} m_Intensity: 1 m_LightVolumeIntensity: 1 - m_LightVolumeIntensityEnabled: 0 + m_LightVolumeEnabled: 0 m_ApplyToSortingLayers: 00000000 m_LightCookieSprite: {fileID: 0} m_DeprecatedPointLightCookieSprite: {fileID: 0} m_LightOrder: 0 + m_AlphaBlendOnOverlap: 0 m_OverlapOperation: 0 m_NormalMapDistance: 3 m_NormalMapQuality: 2 m_UseNormalMap: 0 - m_ShadowIntensityEnabled: 1 + m_ShadowsEnabled: 1 m_ShadowIntensity: 0.75 + m_ShadowSoftness: 0 + m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} @@ -1519,11 +1339,185 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771418502} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0.78703064, w: 0.6169139} m_LocalPosition: {x: -1.35, y: 1.4, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!43 &2071816698 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 126 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 70 + localAABB: + m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} + m_Extent: {x: 0.43698502, y: 0.44869, z: 0} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 1 + m_IndexBuffer: 0d0000000e0000000f0000000f000000000000000d000000000000001200000013000000130000000100000000000000010000001600000017000000170000000200000001000000020000001a0000001b0000001b0000000300000002000000030000001e0000001f0000001f0000000400000003000000040000002200000023000000230000000500000004000000050000002600000027000000270000000600000005000000060000002a0000002b0000002b0000000700000006000000070000002e0000002f0000002f0000000800000007000000080000003200000033000000330000000900000008000000090000003600000037000000370000000a000000090000000a0000003a0000003b0000003b0000000b0000000a0000000b0000003e0000003f0000003f0000000c0000000b0000000c0000004200000043000000430000000d0000000c0000000d0000001000000011000000000000001400000015000000010000001800000019000000020000001c0000001d000000030000002000000021000000040000002400000025000000050000002800000029000000060000002c0000002d0000000700000030000000310000000800000034000000350000000900000038000000390000000a0000003c0000003d0000000b00000040000000410000000c0000004400000045000000 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 70 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 1960 + _typelessdata: b81ba4be201e9cbe00000000000080bf0000000038eddebec4bcebbd38eddebec4bcebbd00000000000080bf0000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf0000000048f3cabebcb2793e48f3cabebcb2793e00000000000080bf00000000a06a58be0314cc3ea06a58be0314cc3e00000000000080bf00000000c05519bd9fb7ec3ec05519bd9fb7ec3e00000000000080bf000000006026983eac14c83e6026983eac14c83e00000000000080bf00000000f88cdc3e05c6393ef88cdc3e05c6393e00000000000080bf00000000c88be03ed2b1cf3cc88be03ed2b1cf3c00000000000080bf00000000688fd43eebcf25be688fd43eebcf25be00000000000080bf00000000e016b43e1f1e9cbee016b43e1f1e9cbe00000000000080bf00000000b064413ecdc3cabeb064413ecdc3cabe00000000000080bf000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000080bf0000000090273ebe99c2cebe90273ebe99c2cebe00000000000080bf00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe000000000000803f00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000404000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe000000000000803f0000000038eddebec4bcebbdb81ba4be201e9cbe00000000000040400000000038eddebec4bcebbd38eddebec4bcebbd00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000803f0000000038eddebed2b1cf3c38eddebec4bcebbd00000000000040400000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c000000000000803f0000000048f3cabebcb2793e38eddebed2b1cf3c00000000000040400000000048f3cabebcb2793e48f3cabebcb2793e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e000000000000803f00000000a06a58be0314cc3e48f3cabebcb2793e000000000000404000000000a06a58be0314cc3ea06a58be0314cc3e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e000000000000803f00000000c05519bd9fb7ec3ea06a58be0314cc3e000000000000404000000000c05519bd9fb7ec3ec05519bd9fb7ec3e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000803f000000006026983eac14c83ec05519bd9fb7ec3e0000000000004040000000006026983eac14c83e6026983eac14c83e000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000803f00000000f88cdc3e05c6393e6026983eac14c83e000000000000404000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000803f00000000c88be03ed2b1cf3cf88cdc3e05c6393e000000000000404000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000803f00000000688fd43eebcf25bec88be03ed2b1cf3c000000000000404000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000803f00000000e016b43e1f1e9cbe688fd43eebcf25be000000000000404000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000803f00000000b064413ecdc3cabee016b43e1f1e9cbe000000000000404000000000b064413ecdc3cabeb064413ecdc3cabe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000803f000000000048cf3ac6bddebeb064413ecdc3cabe0000000000004040000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000803f0000000090273ebe99c2cebe0048cf3ac6bddebe00000000000040400000000090273ebe99c2cebe + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1627763800} + - {fileID: 1202039387} + - {fileID: 499197017} + - {fileID: 1771418504} + - {fileID: 1619819624} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_Self_vs_NonSelf.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_Self_vs_NonSelf.unity index bef30e75245..1f03e719089 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_Self_vs_NonSelf.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_Self_vs_NonSelf.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -120,6 +119,171 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!43 &383499 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 126 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 70 + localAABB: + m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} + m_Extent: {x: 0.43698502, y: 0.44869, z: 0} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 1 + m_IndexBuffer: 0d0000000e0000000f0000000f000000000000000d000000000000001200000013000000130000000100000000000000010000001600000017000000170000000200000001000000020000001a0000001b0000001b0000000300000002000000030000001e0000001f0000001f0000000400000003000000040000002200000023000000230000000500000004000000050000002600000027000000270000000600000005000000060000002a0000002b0000002b0000000700000006000000070000002e0000002f0000002f0000000800000007000000080000003200000033000000330000000900000008000000090000003600000037000000370000000a000000090000000a0000003a0000003b0000003b0000000b0000000a0000000b0000003e0000003f0000003f0000000c0000000b0000000c0000004200000043000000430000000d0000000c0000000d0000001000000011000000000000001400000015000000010000001800000019000000020000001c0000001d000000030000002000000021000000040000002400000025000000050000002800000029000000060000002c0000002d0000000700000030000000310000000800000034000000350000000900000038000000390000000a0000003c0000003d0000000b00000040000000410000000c0000004400000045000000 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 70 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 1960 + _typelessdata: b81ba4be201e9cbe00000000000080bf0000000038eddebec4bcebbd38eddebec4bcebbd00000000000080bf0000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf0000000048f3cabebcb2793e48f3cabebcb2793e00000000000080bf00000000a06a58be0314cc3ea06a58be0314cc3e00000000000080bf00000000c05519bd9fb7ec3ec05519bd9fb7ec3e00000000000080bf000000006026983eac14c83e6026983eac14c83e00000000000080bf00000000f88cdc3e05c6393ef88cdc3e05c6393e00000000000080bf00000000c88be03ed2b1cf3cc88be03ed2b1cf3c00000000000080bf00000000688fd43eebcf25be688fd43eebcf25be00000000000080bf00000000e016b43e1f1e9cbee016b43e1f1e9cbe00000000000080bf00000000b064413ecdc3cabeb064413ecdc3cabe00000000000080bf000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000080bf0000000090273ebe99c2cebe90273ebe99c2cebe00000000000080bf00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe000000000000803f00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000404000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe000000000000803f0000000038eddebec4bcebbdb81ba4be201e9cbe00000000000040400000000038eddebec4bcebbd38eddebec4bcebbd00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000803f0000000038eddebed2b1cf3c38eddebec4bcebbd00000000000040400000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c000000000000803f0000000048f3cabebcb2793e38eddebed2b1cf3c00000000000040400000000048f3cabebcb2793e48f3cabebcb2793e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e000000000000803f00000000a06a58be0314cc3e48f3cabebcb2793e000000000000404000000000a06a58be0314cc3ea06a58be0314cc3e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e000000000000803f00000000c05519bd9fb7ec3ea06a58be0314cc3e000000000000404000000000c05519bd9fb7ec3ec05519bd9fb7ec3e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000803f000000006026983eac14c83ec05519bd9fb7ec3e0000000000004040000000006026983eac14c83e6026983eac14c83e000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000803f00000000f88cdc3e05c6393e6026983eac14c83e000000000000404000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000803f00000000c88be03ed2b1cf3cf88cdc3e05c6393e000000000000404000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000803f00000000688fd43eebcf25bec88be03ed2b1cf3c000000000000404000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000803f00000000e016b43e1f1e9cbe688fd43eebcf25be000000000000404000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000803f00000000b064413ecdc3cabee016b43e1f1e9cbe000000000000404000000000b064413ecdc3cabeb064413ecdc3cabe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000803f000000000048cf3ac6bddebeb064413ecdc3cabe0000000000004040000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000803f0000000090273ebe99c2cebe0048cf3ac6bddebe00000000000040400000000090273ebe99c2cebe + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: --- !u!43 &4729381 Mesh: m_ObjectHideFlags: 0 @@ -337,35 +501,6 @@ MonoBehaviour: m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0.421875, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0.421875, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0.421875, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0.421875, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0.421875, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0.421875, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0.421875, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0.421875, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0.421875, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} @@ -390,14 +525,179 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 499197015} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0.78703064, w: 0.6169139} m_LocalPosition: {x: 1.35, y: 1.4, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!43 &551014725 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 126 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 70 + localAABB: + m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} + m_Extent: {x: 0.43698502, y: 0.44869, z: 0} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 1 + m_IndexBuffer: 0d0000000e0000000f0000000f000000000000000d000000000000001200000013000000130000000100000000000000010000001600000017000000170000000200000001000000020000001a0000001b0000001b0000000300000002000000030000001e0000001f0000001f0000000400000003000000040000002200000023000000230000000500000004000000050000002600000027000000270000000600000005000000060000002a0000002b0000002b0000000700000006000000070000002e0000002f0000002f0000000800000007000000080000003200000033000000330000000900000008000000090000003600000037000000370000000a000000090000000a0000003a0000003b0000003b0000000b0000000a0000000b0000003e0000003f0000003f0000000c0000000b0000000c0000004200000043000000430000000d0000000c0000000d0000001000000011000000000000001400000015000000010000001800000019000000020000001c0000001d000000030000002000000021000000040000002400000025000000050000002800000029000000060000002c0000002d0000000700000030000000310000000800000034000000350000000900000038000000390000000a0000003c0000003d0000000b00000040000000410000000c0000004400000045000000 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 70 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 1960 + _typelessdata: b81ba4be201e9cbe00000000000080bf0000000038eddebec4bcebbd38eddebec4bcebbd00000000000080bf0000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf0000000048f3cabebcb2793e48f3cabebcb2793e00000000000080bf00000000a06a58be0314cc3ea06a58be0314cc3e00000000000080bf00000000c05519bd9fb7ec3ec05519bd9fb7ec3e00000000000080bf000000006026983eac14c83e6026983eac14c83e00000000000080bf00000000f88cdc3e05c6393ef88cdc3e05c6393e00000000000080bf00000000c88be03ed2b1cf3cc88be03ed2b1cf3c00000000000080bf00000000688fd43eebcf25be688fd43eebcf25be00000000000080bf00000000e016b43e1f1e9cbee016b43e1f1e9cbe00000000000080bf00000000b064413ecdc3cabeb064413ecdc3cabe00000000000080bf000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000080bf0000000090273ebe99c2cebe90273ebe99c2cebe00000000000080bf00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe000000000000803f00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000404000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe000000000000803f0000000038eddebec4bcebbdb81ba4be201e9cbe00000000000040400000000038eddebec4bcebbd38eddebec4bcebbd00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000803f0000000038eddebed2b1cf3c38eddebec4bcebbd00000000000040400000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c000000000000803f0000000048f3cabebcb2793e38eddebed2b1cf3c00000000000040400000000048f3cabebcb2793e48f3cabebcb2793e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e000000000000803f00000000a06a58be0314cc3e48f3cabebcb2793e000000000000404000000000a06a58be0314cc3ea06a58be0314cc3e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e000000000000803f00000000c05519bd9fb7ec3ea06a58be0314cc3e000000000000404000000000c05519bd9fb7ec3ec05519bd9fb7ec3e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000803f000000006026983eac14c83ec05519bd9fb7ec3e0000000000004040000000006026983eac14c83e6026983eac14c83e000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000803f00000000f88cdc3e05c6393e6026983eac14c83e000000000000404000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000803f00000000c88be03ed2b1cf3cf88cdc3e05c6393e000000000000404000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000803f00000000688fd43eebcf25bec88be03ed2b1cf3c000000000000404000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000803f00000000e016b43e1f1e9cbe688fd43eebcf25be000000000000404000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000803f00000000b064413ecdc3cabee016b43e1f1e9cbe000000000000404000000000b064413ecdc3cabeb064413ecdc3cabe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000803f000000000048cf3ac6bddebeb064413ecdc3cabe0000000000004040000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000803f0000000090273ebe99c2cebe0048cf3ac6bddebe00000000000040400000000090273ebe99c2cebe + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: --- !u!43 &607164483 Mesh: m_ObjectHideFlags: 0 @@ -893,6 +1193,7 @@ SpriteRenderer: m_RayTraceProcedural: 0 m_RayTracingAccelStructBuildFlagsOverride: 0 m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -936,13 +1237,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202039385} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 20, y: 20, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1247943557 PrefabInstance: @@ -1156,6 +1457,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1619819622} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.59230703, y: -0.54234225, z: -0.19256367} m_LocalScale: {x: 1, y: 1, z: 1} @@ -1164,7 +1466,6 @@ Transform: - {fileID: 1247943558} - {fileID: 732611868} m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1627763796 GameObject: @@ -1224,12 +1525,12 @@ MonoBehaviour: m_RequiresColorTexture: 0 m_Version: 2 m_TaaSettings: - quality: 3 - frameInfluence: 0.1 - jitterScale: 1 - mipBias: 0 - varianceClampScale: 0.9 - contrastAdaptiveSharpening: 0 + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 --- !u!81 &1627763798 AudioListener: m_ObjectHideFlags: 0 @@ -1247,7 +1548,7 @@ Camera: m_GameObject: {fileID: 1627763796} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 1 + m_ClearFlags: 2 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 @@ -1296,13 +1597,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1627763796} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 3.16, y: -0.57, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1627763801 MonoBehaviour: @@ -1330,10 +1631,12 @@ MonoBehaviour: UseBackBuffer: 0 ImageResolution: 0 ActiveImageTests: 1 - ActivePixelTests: 7 + ActivePixelTests: -1 WaitFrames: 0 XRCompatible: 0 + gpuDrivenCompatible: 1 CheckMemoryAllocation: 1 + renderBackendCompatibility: 2 SetBackBufferResolution: 0 --- !u!1 &1771418502 GameObject: @@ -1387,35 +1690,6 @@ MonoBehaviour: m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0.4375, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0.4375, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0.4375, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0.4375, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0.4375, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0.4375, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0.4375, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0.4375, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0.4375, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} @@ -1440,176 +1714,20 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771418502} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0.78703064, w: 0.6169139} m_LocalPosition: {x: -1.35, y: 1.4, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!43 &2138349559 -Mesh: +--- !u!1660057539 &9223372036854775807 +SceneRoots: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 126 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 70 - localAABB: - m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} - m_Extent: {x: 0.43698502, y: 0.44869, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 0 - m_KeepIndices: 0 - m_IndexFormat: 1 - m_IndexBuffer: 0d0000000e0000000f0000000f000000000000000d000000000000001200000013000000130000000100000000000000010000001600000017000000170000000200000001000000020000001a0000001b0000001b0000000300000002000000030000001e0000001f0000001f0000000400000003000000040000002200000023000000230000000500000004000000050000002600000027000000270000000600000005000000060000002a0000002b0000002b0000000700000006000000070000002e0000002f0000002f0000000800000007000000080000003200000033000000330000000900000008000000090000003600000037000000370000000a000000090000000a0000003a0000003b0000003b0000000b0000000a0000000b0000003e0000003f0000003f0000000c0000000b0000000c0000004200000043000000430000000d0000000c0000000d0000001000000011000000000000001400000015000000010000001800000019000000020000001c0000001d000000030000002000000021000000040000002400000025000000050000002800000029000000060000002c0000002d0000000700000030000000310000000800000034000000350000000900000038000000390000000a0000003c0000003d0000000b00000040000000410000000c0000004400000045000000 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 70 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 12 - format: 0 - dimension: 4 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 1960 - _typelessdata: b81ba4be201e9cbe00000000000080bf0000000038eddebec4bcebbd38eddebec4bcebbd00000000000080bf0000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf0000000048f3cabebcb2793e48f3cabebcb2793e00000000000080bf00000000a06a58be0314cc3ea06a58be0314cc3e00000000000080bf00000000c05519bd9fb7ec3ec05519bd9fb7ec3e00000000000080bf000000006026983eac14c83e6026983eac14c83e00000000000080bf00000000f88cdc3e05c6393ef88cdc3e05c6393e00000000000080bf00000000c88be03ed2b1cf3cc88be03ed2b1cf3c00000000000080bf00000000688fd43eebcf25be688fd43eebcf25be00000000000080bf00000000e016b43e1f1e9cbee016b43e1f1e9cbe00000000000080bf00000000b064413ecdc3cabeb064413ecdc3cabe00000000000080bf000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000080bf0000000090273ebe99c2cebe90273ebe99c2cebe00000000000080bf00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe000000000000803f00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000404000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe000000000000803f0000000038eddebec4bcebbdb81ba4be201e9cbe00000000000040400000000038eddebec4bcebbd38eddebec4bcebbd00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000803f0000000038eddebed2b1cf3c38eddebec4bcebbd00000000000040400000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c000000000000803f0000000048f3cabebcb2793e38eddebed2b1cf3c00000000000040400000000048f3cabebcb2793e48f3cabebcb2793e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e000000000000803f00000000a06a58be0314cc3e48f3cabebcb2793e000000000000404000000000a06a58be0314cc3ea06a58be0314cc3e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e000000000000803f00000000c05519bd9fb7ec3ea06a58be0314cc3e000000000000404000000000c05519bd9fb7ec3ec05519bd9fb7ec3e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000803f000000006026983eac14c83ec05519bd9fb7ec3e0000000000004040000000006026983eac14c83e6026983eac14c83e000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000803f00000000f88cdc3e05c6393e6026983eac14c83e000000000000404000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000803f00000000c88be03ed2b1cf3cf88cdc3e05c6393e000000000000404000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000803f00000000688fd43eebcf25bec88be03ed2b1cf3c000000000000404000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000803f00000000e016b43e1f1e9cbe688fd43eebcf25be000000000000404000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000803f00000000b064413ecdc3cabee016b43e1f1e9cbe000000000000404000000000b064413ecdc3cabeb064413ecdc3cabe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000803f000000000048cf3ac6bddebeb064413ecdc3cabe0000000000004040000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000803f0000000090273ebe99c2cebe0048cf3ac6bddebe00000000000040400000000090273ebe99c2cebe - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: + m_Roots: + - {fileID: 1627763800} + - {fileID: 1202039387} + - {fileID: 499197017} + - {fileID: 1771418504} + - {fileID: 1619819624} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_Self_vs_Self.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_Self_vs_Self.unity index 01a1c703c69..528aac0f513 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_Self_vs_Self.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/008_Shadows_Transparency_Composite_Ortho_Self_vs_Self.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -280,8 +276,8 @@ Mesh: m_CookingOptions: 30 m_BakedConvexCollisionMesh: m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 m_MeshOptimizationFlags: 1 m_StreamData: serializedVersion: 2 @@ -337,37 +333,9 @@ MonoBehaviour: m_ShadowsEnabled: 1 m_ShadowIntensity: 0.75 m_ShadowSoftness: 0 + m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} @@ -392,14 +360,179 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 499197015} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0.78703064, w: 0.6169139} m_LocalPosition: {x: 1.35, y: 1.4, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!43 &538067337 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 126 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 70 + localAABB: + m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} + m_Extent: {x: 0.43698502, y: 0.44869, z: 0} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 1 + m_IndexBuffer: 0d0000000e0000000f0000000f000000000000000d000000000000001200000013000000130000000100000000000000010000001600000017000000170000000200000001000000020000001a0000001b0000001b0000000300000002000000030000001e0000001f0000001f0000000400000003000000040000002200000023000000230000000500000004000000050000002600000027000000270000000600000005000000060000002a0000002b0000002b0000000700000006000000070000002e0000002f0000002f0000000800000007000000080000003200000033000000330000000900000008000000090000003600000037000000370000000a000000090000000a0000003a0000003b0000003b0000000b0000000a0000000b0000003e0000003f0000003f0000000c0000000b0000000c0000004200000043000000430000000d0000000c0000000d0000001000000011000000000000001400000015000000010000001800000019000000020000001c0000001d000000030000002000000021000000040000002400000025000000050000002800000029000000060000002c0000002d0000000700000030000000310000000800000034000000350000000900000038000000390000000a0000003c0000003d0000000b00000040000000410000000c0000004400000045000000 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 70 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 1960 + _typelessdata: b81ba4be201e9cbe00000000000080bf0000000038eddebec4bcebbd38eddebec4bcebbd00000000000080bf0000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf0000000048f3cabebcb2793e48f3cabebcb2793e00000000000080bf00000000a06a58be0314cc3ea06a58be0314cc3e00000000000080bf00000000c05519bd9fb7ec3ec05519bd9fb7ec3e00000000000080bf000000006026983eac14c83e6026983eac14c83e00000000000080bf00000000f88cdc3e05c6393ef88cdc3e05c6393e00000000000080bf00000000c88be03ed2b1cf3cc88be03ed2b1cf3c00000000000080bf00000000688fd43eebcf25be688fd43eebcf25be00000000000080bf00000000e016b43e1f1e9cbee016b43e1f1e9cbe00000000000080bf00000000b064413ecdc3cabeb064413ecdc3cabe00000000000080bf000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000080bf0000000090273ebe99c2cebe90273ebe99c2cebe00000000000080bf00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe000000000000803f00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000404000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe000000000000803f0000000038eddebec4bcebbdb81ba4be201e9cbe00000000000040400000000038eddebec4bcebbd38eddebec4bcebbd00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000803f0000000038eddebed2b1cf3c38eddebec4bcebbd00000000000040400000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c000000000000803f0000000048f3cabebcb2793e38eddebed2b1cf3c00000000000040400000000048f3cabebcb2793e48f3cabebcb2793e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e000000000000803f00000000a06a58be0314cc3e48f3cabebcb2793e000000000000404000000000a06a58be0314cc3ea06a58be0314cc3e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e000000000000803f00000000c05519bd9fb7ec3ea06a58be0314cc3e000000000000404000000000c05519bd9fb7ec3ec05519bd9fb7ec3e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000803f000000006026983eac14c83ec05519bd9fb7ec3e0000000000004040000000006026983eac14c83e6026983eac14c83e000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000803f00000000f88cdc3e05c6393e6026983eac14c83e000000000000404000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000803f00000000c88be03ed2b1cf3cf88cdc3e05c6393e000000000000404000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000803f00000000688fd43eebcf25bec88be03ed2b1cf3c000000000000404000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000803f00000000e016b43e1f1e9cbe688fd43eebcf25be000000000000404000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000803f00000000b064413ecdc3cabee016b43e1f1e9cbe000000000000404000000000b064413ecdc3cabeb064413ecdc3cabe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000803f000000000048cf3ac6bddebeb064413ecdc3cabe0000000000004040000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000803f0000000090273ebe99c2cebe0048cf3ac6bddebe00000000000040400000000090273ebe99c2cebe + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: --- !u!43 &607164483 Mesh: m_ObjectHideFlags: 0 @@ -557,8 +690,8 @@ Mesh: m_CookingOptions: 30 m_BakedConvexCollisionMesh: m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 m_MeshOptimizationFlags: 1 m_StreamData: serializedVersion: 2 @@ -733,6 +866,9 @@ SpriteRenderer: m_ReflectionProbeUsage: 1 m_RayTracingMode: 0 m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -776,13 +912,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1202039385} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 20, y: 20, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1247943557 PrefabInstance: @@ -958,6 +1094,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_ShadowGroup: 0 + m_Priority: 0 --- !u!4 &1619819624 Transform: m_ObjectHideFlags: 0 @@ -965,6 +1102,7 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1619819622} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0.59230703, y: -0.54234225, z: -0.19256367} m_LocalScale: {x: 1, y: 1, z: 1} @@ -973,7 +1111,6 @@ Transform: - {fileID: 1247943558} - {fileID: 732611868} m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1627763796 GameObject: @@ -1025,12 +1162,20 @@ MonoBehaviour: m_Dithering: 0 m_ClearDepth: 1 m_AllowXRRendering: 1 + m_AllowHDROutput: 1 m_UseScreenCoordOverride: 0 m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} m_RequiresDepthTexture: 0 m_RequiresColorTexture: 0 m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 --- !u!81 &1627763798 AudioListener: m_ObjectHideFlags: 0 @@ -1048,7 +1193,7 @@ Camera: m_GameObject: {fileID: 1627763796} m_Enabled: 1 serializedVersion: 2 - m_ClearFlags: 1 + m_ClearFlags: 2 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} m_projectionMatrixMode: 1 m_GateFitMode: 2 @@ -1097,13 +1242,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1627763796} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 3.16, y: -0.57, z: -10} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &1627763801 MonoBehaviour: @@ -1120,19 +1265,189 @@ MonoBehaviour: ImageComparisonSettings: TargetWidth: 512 TargetHeight: 256 + TargetMSAASamples: 1 PerPixelCorrectnessThreshold: 0.001 PerPixelGammaThreshold: 0.003921569 PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 AverageCorrectnessThreshold: 0.005 IncorrectPixelsThreshold: 0.0000038146973 UseHDR: 0 UseBackBuffer: 0 ImageResolution: 0 ActiveImageTests: 1 - ActivePixelTests: 7 + ActivePixelTests: -1 WaitFrames: 0 XRCompatible: 0 + gpuDrivenCompatible: 1 CheckMemoryAllocation: 1 + renderBackendCompatibility: 2 + SetBackBufferResolution: 0 +--- !u!43 &1682309902 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 126 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 70 + localAABB: + m_Center: {x: 0.0015814304, y: 0.013648406, z: 0} + m_Extent: {x: 0.43698502, y: 0.44869, z: 0} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 0 + m_KeepIndices: 0 + m_IndexFormat: 1 + m_IndexBuffer: 0d0000000e0000000f0000000f000000000000000d000000000000001200000013000000130000000100000000000000010000001600000017000000170000000200000001000000020000001a0000001b0000001b0000000300000002000000030000001e0000001f0000001f0000000400000003000000040000002200000023000000230000000500000004000000050000002600000027000000270000000600000005000000060000002a0000002b0000002b0000000700000006000000070000002e0000002f0000002f0000000800000007000000080000003200000033000000330000000900000008000000090000003600000037000000370000000a000000090000000a0000003a0000003b0000003b0000000b0000000a0000000b0000003e0000003f0000003f0000000c0000000b0000000c0000004200000043000000430000000d0000000c0000000d0000001000000011000000000000001400000015000000010000001800000019000000020000001c0000001d000000030000002000000021000000040000002400000025000000050000002800000029000000060000002c0000002d0000000700000030000000310000000800000034000000350000000900000038000000390000000a0000003c0000003d0000000b00000040000000410000000c0000004400000045000000 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 70 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 1960 + _typelessdata: b81ba4be201e9cbe00000000000080bf0000000038eddebec4bcebbd38eddebec4bcebbd00000000000080bf0000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000080bf0000000048f3cabebcb2793e48f3cabebcb2793e00000000000080bf00000000a06a58be0314cc3ea06a58be0314cc3e00000000000080bf00000000c05519bd9fb7ec3ec05519bd9fb7ec3e00000000000080bf000000006026983eac14c83e6026983eac14c83e00000000000080bf00000000f88cdc3e05c6393ef88cdc3e05c6393e00000000000080bf00000000c88be03ed2b1cf3cc88be03ed2b1cf3c00000000000080bf00000000688fd43eebcf25be688fd43eebcf25be00000000000080bf00000000e016b43e1f1e9cbee016b43e1f1e9cbe00000000000080bf00000000b064413ecdc3cabeb064413ecdc3cabe00000000000080bf000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000080bf0000000090273ebe99c2cebe90273ebe99c2cebe00000000000080bf00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe000000000000803f00000000b81ba4be201e9cbe90273ebe99c2cebe000000000000404000000000b81ba4be201e9cbeb81ba4be201e9cbe00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000000000000000b81ba4be201e9cbeb81ba4be201e9cbe000000000000803f0000000038eddebec4bcebbdb81ba4be201e9cbe00000000000040400000000038eddebec4bcebbd38eddebec4bcebbd00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000038eddebec4bcebbd38eddebec4bcebbd000000000000803f0000000038eddebed2b1cf3c38eddebec4bcebbd00000000000040400000000038eddebed2b1cf3c38eddebed2b1cf3c00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e00000000000000000000000038eddebed2b1cf3c38eddebed2b1cf3c000000000000803f0000000048f3cabebcb2793e38eddebed2b1cf3c00000000000040400000000048f3cabebcb2793e48f3cabebcb2793e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e00000000000000000000000048f3cabebcb2793e48f3cabebcb2793e000000000000803f00000000a06a58be0314cc3e48f3cabebcb2793e000000000000404000000000a06a58be0314cc3ea06a58be0314cc3e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000000000000000a06a58be0314cc3ea06a58be0314cc3e000000000000803f00000000c05519bd9fb7ec3ea06a58be0314cc3e000000000000404000000000c05519bd9fb7ec3ec05519bd9fb7ec3e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000000000000000c05519bd9fb7ec3ec05519bd9fb7ec3e000000000000803f000000006026983eac14c83ec05519bd9fb7ec3e0000000000004040000000006026983eac14c83e6026983eac14c83e000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e0000000000000000000000006026983eac14c83e6026983eac14c83e000000000000803f00000000f88cdc3e05c6393e6026983eac14c83e000000000000404000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000f88cdc3e05c6393ef88cdc3e05c6393e000000000000803f00000000c88be03ed2b1cf3cf88cdc3e05c6393e000000000000404000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000c88be03ed2b1cf3cc88be03ed2b1cf3c000000000000803f00000000688fd43eebcf25bec88be03ed2b1cf3c000000000000404000000000688fd43eebcf25be688fd43eebcf25be000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000688fd43eebcf25be688fd43eebcf25be000000000000803f00000000e016b43e1f1e9cbe688fd43eebcf25be000000000000404000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000000000000000e016b43e1f1e9cbee016b43e1f1e9cbe000000000000803f00000000b064413ecdc3cabee016b43e1f1e9cbe000000000000404000000000b064413ecdc3cabeb064413ecdc3cabe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000000000000000b064413ecdc3cabeb064413ecdc3cabe000000000000803f000000000048cf3ac6bddebeb064413ecdc3cabe0000000000004040000000000048cf3ac6bddebe0048cf3ac6bddebe00000000000000000000000090273ebe99c2cebe90273ebe99c2cebe0000000000000000000000000048cf3ac6bddebe0048cf3ac6bddebe000000000000803f0000000090273ebe99c2cebe0048cf3ac6bddebe00000000000040400000000090273ebe99c2cebe + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: --- !u!43 &1682336713 Mesh: m_ObjectHideFlags: 0 @@ -1290,8 +1605,8 @@ Mesh: m_CookingOptions: 30 m_BakedConvexCollisionMesh: m_BakedTriangleCollisionMesh: - m_MeshMetrics[0]: 1 - m_MeshMetrics[1]: 1 + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 m_MeshOptimizationFlags: 1 m_StreamData: serializedVersion: 2 @@ -1347,37 +1662,9 @@ MonoBehaviour: m_ShadowsEnabled: 1 m_ShadowIntensity: 0.75 m_ShadowSoftness: 0 + m_ShadowSoftnessFalloffIntensity: 0.5 m_ShadowVolumeIntensityEnabled: 0 m_ShadowVolumeIntensity: 0.75 - m_Vertices: - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: -0.70710677, g: 0.70710677, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.9985302, y: 0.9985302, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: -0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: -0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0.70710665, g: -0.7071069, b: 0, a: 0} - uv: {x: 0, y: 0} - - position: {x: 0.99853003, y: -0.9985304, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - - position: {x: 0, y: 0, z: 0} - color: {r: 0, g: 0, b: 0, a: 1} - uv: {x: 0, y: 0} - m_Triangles: 030001000800020000000100030002000100050003000800040002000300050004000300070005000800060004000500070006000500010007000800000006000700010000000700 m_LocalBounds: m_Center: {x: 0, y: -0.00000011920929, z: 0} m_Extent: {x: 0.9985302, y: 0.99853027, z: 0} @@ -1402,11 +1689,20 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1771418502} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0.78703064, w: 0.6169139} m_LocalPosition: {x: -1.35, y: 1.4, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1627763800} + - {fileID: 1202039387} + - {fileID: 499197017} + - {fileID: 1771418504} + - {fileID: 1619819624} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/058_2D_Lights_Shadow_Blending.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/058_2D_Lights_Shadow_Blending.unity index d2c38629497..96ebe9fa78d 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/058_2D_Lights_Shadow_Blending.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/058_2D_Lights_Shadow_Blending.unity @@ -119,171 +119,6 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!43 &120144311 -Mesh: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: - serializedVersion: 11 - m_SubMeshes: - - serializedVersion: 2 - firstByte: 0 - indexCount: 207 - topology: 0 - baseVertex: 0 - firstVertex: 0 - vertexCount: 115 - localAABB: - m_Center: {x: 0.019996643, y: -0.0049972534, z: 0} - m_Extent: {x: 0.5499954, y: 0.29499054, z: 0} - m_Shapes: - vertices: [] - shapes: [] - channels: [] - fullWeights: [] - m_BindPose: [] - m_BoneNameHashes: - m_RootBoneNameHash: 0 - m_BonesAABB: [] - m_VariableBoneCountWeights: - m_Data: - m_MeshCompression: 0 - m_IsReadable: 1 - m_KeepVertices: 1 - m_KeepIndices: 1 - m_IndexFormat: 0 - m_IndexBuffer: 00001700180018000100000001001b001c001c000200010002001f00200020000300020003002300240024000400030004002700280028000500040005002b002c002c000600050006002f00300030000700060007003300340034000800070008003700380038000900080009003b003c003c000a0009000a003f00400040000b000a000b004300440044000c000b000c004700480048000d000c000d004b004c004c000e000d000e004f00500050000f000e000f0053005400540010000f0010005700580058001100100011005b005c005c001200110012005f00600060001300120013006300640064001400130014006700680068001500140015006b006c006c001600150016006f007000700000001600000019001a0001001d001e00020021002200030025002600040029002a0005002d002e00060031003200070035003600080039003a0009003d003e000a00410042000b00450046000c0049004a000d004d004e000e00510052000f0055005600100059005a0011005d005e00120061006200130065006600140069006a0015006d006e00160071007200 - m_VertexData: - serializedVersion: 3 - m_VertexCount: 115 - m_Channels: - - stream: 0 - offset: 0 - format: 0 - dimension: 3 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 12 - format: 0 - dimension: 4 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - - stream: 0 - offset: 0 - format: 0 - dimension: 0 - m_DataSize: 3220 - _typelessdata: 00c8ca3e00c094be00000000000080bf0000000000dcf93e003453be00dcf93e003453be00000000000080bf000000000091053f0008d7bd0091053f0008d7bd00000000000080bf0000000000070d3f00704e3d00070d3f00704e3d00000000000080bf0000000000eb113f00c0323e00eb113f00c0323e00000000000080bf0000000000eb113f003c3f3e00eb113f003c3f3e00000000000080bf0000000000e50c3f00f0453e00e50c3f00f0453e00000000000080bf0000000000910c3f0068463e00910c3f0068463e00000000000080bf000000000004993e007a943e0004993e007a943e00000000000080bf000000000010183d007a943e0010183d007a943e00000000000080bf0000000000b06cbe00a8663e00b06cbe00a8663e00000000000080bf0000000000109ebe00241f3e00109ebe00241f3e00000000000080bf00000000003eb3be00d02a3d003eb3be00d02a3d00000000000080bf00000000001cc3be00c0a33c001cc3be00c0a33c00000000000080bf000000000052f4be00c0a33c0052f4be00c0a33c00000000000080bf0000000000ae07bf00c0dcbc00ae07bf00c0dcbc00000000000080bf0000000000ae07bf00a064bd00ae07bf00a064bd00000000000080bf00000000000803bf00b0bcbd000803bf00b0bcbd00000000000080bf000000000090cbbe005841be0090cbbe005841be00000000000080bf00000000007c95be008472be007c95be008472be00000000000080bf00000000006692be003c76be006692be003c76be00000000000080bf00000000007056be009899be007056be009899be00000000000080bf0000000000c02fbc009899be00c02fbc009899be00000000000080bf0000000000c8ca3e00c094be00c8ca3e00c094be00000000000000000000000000dcf93e003453be00dcf93e003453be00000000000000000000000000c8ca3e00c094be00c8ca3e00c094be000000000000803f0000000000dcf93e003453be00c8ca3e00c094be00000000000040400000000000dcf93e003453be00dcf93e003453be0000000000000000000000000091053f0008d7bd0091053f0008d7bd00000000000000000000000000dcf93e003453be00dcf93e003453be000000000000803f000000000091053f0008d7bd00dcf93e003453be0000000000004040000000000091053f0008d7bd0091053f0008d7bd00000000000000000000000000070d3f00704e3d00070d3f00704e3d0000000000000000000000000091053f0008d7bd0091053f0008d7bd000000000000803f0000000000070d3f00704e3d0091053f0008d7bd00000000000040400000000000070d3f00704e3d00070d3f00704e3d00000000000000000000000000eb113f00c0323e00eb113f00c0323e00000000000000000000000000070d3f00704e3d00070d3f00704e3d000000000000803f0000000000eb113f00c0323e00070d3f00704e3d00000000000040400000000000eb113f00c0323e00eb113f00c0323e00000000000000000000000000eb113f003c3f3e00eb113f003c3f3e00000000000000000000000000eb113f00c0323e00eb113f00c0323e000000000000803f0000000000eb113f003c3f3e00eb113f00c0323e00000000000040400000000000eb113f003c3f3e00eb113f003c3f3e00000000000000000000000000e50c3f00f0453e00e50c3f00f0453e00000000000000000000000000eb113f003c3f3e00eb113f003c3f3e000000000000803f0000000000e50c3f00f0453e00eb113f003c3f3e00000000000040400000000000e50c3f00f0453e00e50c3f00f0453e00000000000000000000000000910c3f0068463e00910c3f0068463e00000000000000000000000000e50c3f00f0453e00e50c3f00f0453e000000000000803f0000000000910c3f0068463e00e50c3f00f0453e00000000000040400000000000910c3f0068463e00910c3f0068463e0000000000000000000000000004993e007a943e0004993e007a943e00000000000000000000000000910c3f0068463e00910c3f0068463e000000000000803f000000000004993e007a943e00910c3f0068463e0000000000004040000000000004993e007a943e0004993e007a943e0000000000000000000000000010183d007a943e0010183d007a943e0000000000000000000000000004993e007a943e0004993e007a943e000000000000803f000000000010183d007a943e0004993e007a943e0000000000004040000000000010183d007a943e0010183d007a943e00000000000000000000000000b06cbe00a8663e00b06cbe00a8663e0000000000000000000000000010183d007a943e0010183d007a943e000000000000803f0000000000b06cbe00a8663e0010183d007a943e00000000000040400000000000b06cbe00a8663e00b06cbe00a8663e00000000000000000000000000109ebe00241f3e00109ebe00241f3e00000000000000000000000000b06cbe00a8663e00b06cbe00a8663e000000000000803f0000000000109ebe00241f3e00b06cbe00a8663e00000000000040400000000000109ebe00241f3e00109ebe00241f3e000000000000000000000000003eb3be00d02a3d003eb3be00d02a3d00000000000000000000000000109ebe00241f3e00109ebe00241f3e000000000000803f00000000003eb3be00d02a3d00109ebe00241f3e000000000000404000000000003eb3be00d02a3d003eb3be00d02a3d000000000000000000000000001cc3be00c0a33c001cc3be00c0a33c000000000000000000000000003eb3be00d02a3d003eb3be00d02a3d000000000000803f00000000001cc3be00c0a33c003eb3be00d02a3d000000000000404000000000001cc3be00c0a33c001cc3be00c0a33c0000000000000000000000000052f4be00c0a33c0052f4be00c0a33c000000000000000000000000001cc3be00c0a33c001cc3be00c0a33c000000000000803f000000000052f4be00c0a33c001cc3be00c0a33c0000000000004040000000000052f4be00c0a33c0052f4be00c0a33c00000000000000000000000000ae07bf00c0dcbc00ae07bf00c0dcbc0000000000000000000000000052f4be00c0a33c0052f4be00c0a33c000000000000803f0000000000ae07bf00c0dcbc0052f4be00c0a33c00000000000040400000000000ae07bf00c0dcbc00ae07bf00c0dcbc00000000000000000000000000ae07bf00a064bd00ae07bf00a064bd00000000000000000000000000ae07bf00c0dcbc00ae07bf00c0dcbc000000000000803f0000000000ae07bf00a064bd00ae07bf00c0dcbc00000000000040400000000000ae07bf00a064bd00ae07bf00a064bd000000000000000000000000000803bf00b0bcbd000803bf00b0bcbd00000000000000000000000000ae07bf00a064bd00ae07bf00a064bd000000000000803f00000000000803bf00b0bcbd00ae07bf00a064bd000000000000404000000000000803bf00b0bcbd000803bf00b0bcbd0000000000000000000000000090cbbe005841be0090cbbe005841be000000000000000000000000000803bf00b0bcbd000803bf00b0bcbd000000000000803f000000000090cbbe005841be000803bf00b0bcbd0000000000004040000000000090cbbe005841be0090cbbe005841be000000000000000000000000007c95be008472be007c95be008472be0000000000000000000000000090cbbe005841be0090cbbe005841be000000000000803f00000000007c95be008472be0090cbbe005841be000000000000404000000000007c95be008472be007c95be008472be000000000000000000000000006692be003c76be006692be003c76be000000000000000000000000007c95be008472be007c95be008472be000000000000803f00000000006692be003c76be007c95be008472be000000000000404000000000006692be003c76be006692be003c76be000000000000000000000000007056be009899be007056be009899be000000000000000000000000006692be003c76be006692be003c76be000000000000803f00000000007056be009899be006692be003c76be000000000000404000000000007056be009899be007056be009899be00000000000000000000000000c02fbc009899be00c02fbc009899be000000000000000000000000007056be009899be007056be009899be000000000000803f0000000000c02fbc009899be007056be009899be00000000000040400000000000c02fbc009899be00c02fbc009899be00000000000000000000000000c8ca3e00c094be00c8ca3e00c094be00000000000000000000000000c02fbc009899be00c02fbc009899be000000000000803f0000000000c8ca3e00c094be00c02fbc009899be00000000000040400000000000c8ca3e00c094be - m_CompressedMesh: - m_Vertices: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_UV: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Normals: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Tangents: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_Weights: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_NormalSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_TangentSigns: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_FloatColors: - m_NumItems: 0 - m_Range: 0 - m_Start: 0 - m_Data: - m_BitSize: 0 - m_BoneIndices: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_Triangles: - m_NumItems: 0 - m_Data: - m_BitSize: 0 - m_UVInfo: 0 - m_LocalAABB: - m_Center: {x: 0, y: 0, z: 0} - m_Extent: {x: 0, y: 0, z: 0} - m_MeshUsageFlags: 0 - m_CookingOptions: 30 - m_BakedConvexCollisionMesh: - m_BakedTriangleCollisionMesh: - 'm_MeshMetrics[0]': 1 - 'm_MeshMetrics[1]': 1 - m_MeshOptimizationFlags: 1 - m_StreamData: - serializedVersion: 2 - offset: 0 - size: 0 - path: --- !u!1 &396455328 GameObject: m_ObjectHideFlags: 0 @@ -794,11 +629,176 @@ MonoBehaviour: ActiveImageTests: 1 ActivePixelTests: 7 WaitFrames: 0 - XRCompatible: 1 + XRCompatible: 0 gpuDrivenCompatible: 1 CheckMemoryAllocation: 1 renderBackendCompatibility: 2 SetBackBufferResolution: 0 +--- !u!43 &1817151187 +Mesh: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 11 + m_SubMeshes: + - serializedVersion: 2 + firstByte: 0 + indexCount: 207 + topology: 0 + baseVertex: 0 + firstVertex: 0 + vertexCount: 115 + localAABB: + m_Center: {x: 0.019996643, y: -0.0049972534, z: 0} + m_Extent: {x: 0.5499954, y: 0.29499054, z: 0} + m_Shapes: + vertices: [] + shapes: [] + channels: [] + fullWeights: [] + m_BindPose: [] + m_BoneNameHashes: + m_RootBoneNameHash: 0 + m_BonesAABB: [] + m_VariableBoneCountWeights: + m_Data: + m_MeshCompression: 0 + m_IsReadable: 1 + m_KeepVertices: 1 + m_KeepIndices: 1 + m_IndexFormat: 0 + m_IndexBuffer: 00001700180018000100000001001b001c001c000200010002001f00200020000300020003002300240024000400030004002700280028000500040005002b002c002c000600050006002f00300030000700060007003300340034000800070008003700380038000900080009003b003c003c000a0009000a003f00400040000b000a000b004300440044000c000b000c004700480048000d000c000d004b004c004c000e000d000e004f00500050000f000e000f0053005400540010000f0010005700580058001100100011005b005c005c001200110012005f00600060001300120013006300640064001400130014006700680068001500140015006b006c006c001600150016006f007000700000001600000019001a0001001d001e00020021002200030025002600040029002a0005002d002e00060031003200070035003600080039003a0009003d003e000a00410042000b00450046000c0049004a000d004d004e000e00510052000f0055005600100059005a0011005d005e00120061006200130065006600140069006a0015006d006e00160071007200 + m_VertexData: + serializedVersion: 3 + m_VertexCount: 115 + m_Channels: + - stream: 0 + offset: 0 + format: 0 + dimension: 3 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 12 + format: 0 + dimension: 4 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + - stream: 0 + offset: 0 + format: 0 + dimension: 0 + m_DataSize: 3220 + _typelessdata: 00c8ca3e00c094be00000000000080bf0000000000dcf93e003453be00dcf93e003453be00000000000080bf000000000091053f0008d7bd0091053f0008d7bd00000000000080bf0000000000070d3f00704e3d00070d3f00704e3d00000000000080bf0000000000eb113f00c0323e00eb113f00c0323e00000000000080bf0000000000eb113f003c3f3e00eb113f003c3f3e00000000000080bf0000000000e50c3f00f0453e00e50c3f00f0453e00000000000080bf0000000000910c3f0068463e00910c3f0068463e00000000000080bf000000000004993e007a943e0004993e007a943e00000000000080bf000000000010183d007a943e0010183d007a943e00000000000080bf0000000000b06cbe00a8663e00b06cbe00a8663e00000000000080bf0000000000109ebe00241f3e00109ebe00241f3e00000000000080bf00000000003eb3be00d02a3d003eb3be00d02a3d00000000000080bf00000000001cc3be00c0a33c001cc3be00c0a33c00000000000080bf000000000052f4be00c0a33c0052f4be00c0a33c00000000000080bf0000000000ae07bf00c0dcbc00ae07bf00c0dcbc00000000000080bf0000000000ae07bf00a064bd00ae07bf00a064bd00000000000080bf00000000000803bf00b0bcbd000803bf00b0bcbd00000000000080bf000000000090cbbe005841be0090cbbe005841be00000000000080bf00000000007c95be008472be007c95be008472be00000000000080bf00000000006692be003c76be006692be003c76be00000000000080bf00000000007056be009899be007056be009899be00000000000080bf0000000000c02fbc009899be00c02fbc009899be00000000000080bf0000000000c8ca3e00c094be00c8ca3e00c094be00000000000000000000000000dcf93e003453be00dcf93e003453be00000000000000000000000000c8ca3e00c094be00c8ca3e00c094be000000000000803f0000000000dcf93e003453be00c8ca3e00c094be00000000000040400000000000dcf93e003453be00dcf93e003453be0000000000000000000000000091053f0008d7bd0091053f0008d7bd00000000000000000000000000dcf93e003453be00dcf93e003453be000000000000803f000000000091053f0008d7bd00dcf93e003453be0000000000004040000000000091053f0008d7bd0091053f0008d7bd00000000000000000000000000070d3f00704e3d00070d3f00704e3d0000000000000000000000000091053f0008d7bd0091053f0008d7bd000000000000803f0000000000070d3f00704e3d0091053f0008d7bd00000000000040400000000000070d3f00704e3d00070d3f00704e3d00000000000000000000000000eb113f00c0323e00eb113f00c0323e00000000000000000000000000070d3f00704e3d00070d3f00704e3d000000000000803f0000000000eb113f00c0323e00070d3f00704e3d00000000000040400000000000eb113f00c0323e00eb113f00c0323e00000000000000000000000000eb113f003c3f3e00eb113f003c3f3e00000000000000000000000000eb113f00c0323e00eb113f00c0323e000000000000803f0000000000eb113f003c3f3e00eb113f00c0323e00000000000040400000000000eb113f003c3f3e00eb113f003c3f3e00000000000000000000000000e50c3f00f0453e00e50c3f00f0453e00000000000000000000000000eb113f003c3f3e00eb113f003c3f3e000000000000803f0000000000e50c3f00f0453e00eb113f003c3f3e00000000000040400000000000e50c3f00f0453e00e50c3f00f0453e00000000000000000000000000910c3f0068463e00910c3f0068463e00000000000000000000000000e50c3f00f0453e00e50c3f00f0453e000000000000803f0000000000910c3f0068463e00e50c3f00f0453e00000000000040400000000000910c3f0068463e00910c3f0068463e0000000000000000000000000004993e007a943e0004993e007a943e00000000000000000000000000910c3f0068463e00910c3f0068463e000000000000803f000000000004993e007a943e00910c3f0068463e0000000000004040000000000004993e007a943e0004993e007a943e0000000000000000000000000010183d007a943e0010183d007a943e0000000000000000000000000004993e007a943e0004993e007a943e000000000000803f000000000010183d007a943e0004993e007a943e0000000000004040000000000010183d007a943e0010183d007a943e00000000000000000000000000b06cbe00a8663e00b06cbe00a8663e0000000000000000000000000010183d007a943e0010183d007a943e000000000000803f0000000000b06cbe00a8663e0010183d007a943e00000000000040400000000000b06cbe00a8663e00b06cbe00a8663e00000000000000000000000000109ebe00241f3e00109ebe00241f3e00000000000000000000000000b06cbe00a8663e00b06cbe00a8663e000000000000803f0000000000109ebe00241f3e00b06cbe00a8663e00000000000040400000000000109ebe00241f3e00109ebe00241f3e000000000000000000000000003eb3be00d02a3d003eb3be00d02a3d00000000000000000000000000109ebe00241f3e00109ebe00241f3e000000000000803f00000000003eb3be00d02a3d00109ebe00241f3e000000000000404000000000003eb3be00d02a3d003eb3be00d02a3d000000000000000000000000001cc3be00c0a33c001cc3be00c0a33c000000000000000000000000003eb3be00d02a3d003eb3be00d02a3d000000000000803f00000000001cc3be00c0a33c003eb3be00d02a3d000000000000404000000000001cc3be00c0a33c001cc3be00c0a33c0000000000000000000000000052f4be00c0a33c0052f4be00c0a33c000000000000000000000000001cc3be00c0a33c001cc3be00c0a33c000000000000803f000000000052f4be00c0a33c001cc3be00c0a33c0000000000004040000000000052f4be00c0a33c0052f4be00c0a33c00000000000000000000000000ae07bf00c0dcbc00ae07bf00c0dcbc0000000000000000000000000052f4be00c0a33c0052f4be00c0a33c000000000000803f0000000000ae07bf00c0dcbc0052f4be00c0a33c00000000000040400000000000ae07bf00c0dcbc00ae07bf00c0dcbc00000000000000000000000000ae07bf00a064bd00ae07bf00a064bd00000000000000000000000000ae07bf00c0dcbc00ae07bf00c0dcbc000000000000803f0000000000ae07bf00a064bd00ae07bf00c0dcbc00000000000040400000000000ae07bf00a064bd00ae07bf00a064bd000000000000000000000000000803bf00b0bcbd000803bf00b0bcbd00000000000000000000000000ae07bf00a064bd00ae07bf00a064bd000000000000803f00000000000803bf00b0bcbd00ae07bf00a064bd000000000000404000000000000803bf00b0bcbd000803bf00b0bcbd0000000000000000000000000090cbbe005841be0090cbbe005841be000000000000000000000000000803bf00b0bcbd000803bf00b0bcbd000000000000803f000000000090cbbe005841be000803bf00b0bcbd0000000000004040000000000090cbbe005841be0090cbbe005841be000000000000000000000000007c95be008472be007c95be008472be0000000000000000000000000090cbbe005841be0090cbbe005841be000000000000803f00000000007c95be008472be0090cbbe005841be000000000000404000000000007c95be008472be007c95be008472be000000000000000000000000006692be003c76be006692be003c76be000000000000000000000000007c95be008472be007c95be008472be000000000000803f00000000006692be003c76be007c95be008472be000000000000404000000000006692be003c76be006692be003c76be000000000000000000000000007056be009899be007056be009899be000000000000000000000000006692be003c76be006692be003c76be000000000000803f00000000007056be009899be006692be003c76be000000000000404000000000007056be009899be007056be009899be00000000000000000000000000c02fbc009899be00c02fbc009899be000000000000000000000000007056be009899be007056be009899be000000000000803f0000000000c02fbc009899be007056be009899be00000000000040400000000000c02fbc009899be00c02fbc009899be00000000000000000000000000c8ca3e00c094be00c8ca3e00c094be00000000000000000000000000c02fbc009899be00c02fbc009899be000000000000803f0000000000c8ca3e00c094be00c02fbc009899be00000000000040400000000000c8ca3e00c094be + m_CompressedMesh: + m_Vertices: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_UV: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Normals: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Tangents: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_Weights: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_NormalSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_TangentSigns: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_FloatColors: + m_NumItems: 0 + m_Range: 0 + m_Start: 0 + m_Data: + m_BitSize: 0 + m_BoneIndices: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_Triangles: + m_NumItems: 0 + m_Data: + m_BitSize: 0 + m_UVInfo: 0 + m_LocalAABB: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_MeshUsageFlags: 0 + m_CookingOptions: 30 + m_BakedConvexCollisionMesh: + m_BakedTriangleCollisionMesh: + 'm_MeshMetrics[0]': 1 + 'm_MeshMetrics[1]': 1 + m_MeshOptimizationFlags: 1 + m_StreamData: + serializedVersion: 2 + offset: 0 + size: 0 + path: --- !u!1 &2061982128 GameObject: m_ObjectHideFlags: 0 @@ -850,7 +850,7 @@ MonoBehaviour: rid: 5281774012714450944 m_ShadowCastingSource: 2 m_ShadowMesh: - m_Mesh: {fileID: 120144311} + m_Mesh: {fileID: 1817151187} m_LocalBounds: m_Center: {x: 0.019996643, y: -0.0049972534, z: 0} m_Extent: {x: 0.5499954, y: 0.29499054, z: 0} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/059_2D_Volumetric_Shadergraph.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/059_2D_Volumetric_Shadergraph.unity index 9f0c4a19fda..17481605ee2 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/059_2D_Volumetric_Shadergraph.unity +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Scenes/059_2D_Volumetric_Shadergraph.unity @@ -625,7 +625,7 @@ MonoBehaviour: ActiveImageTests: 1 ActivePixelTests: 7 WaitFrames: 10 - XRCompatible: 1 + XRCompatible: 0 gpuDrivenCompatible: 1 CheckMemoryAllocation: 1 renderBackendCompatibility: 2 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Test/Runtime/TilemapRenderer2DTests.cs b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Test/Runtime/TilemapRenderer2DTests.cs index 005c241534c..02cff50b389 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Test/Runtime/TilemapRenderer2DTests.cs +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Assets/Test/Runtime/TilemapRenderer2DTests.cs @@ -36,6 +36,8 @@ public void OneTimeSetup() m_BaseCameraData = m_BaseObj.AddComponent(); m_BaseCamera.allowHDR = false; + m_BaseCamera.clearFlags = CameraClearFlags.SolidColor; + m_BaseCameraData.camera.clearFlags = CameraClearFlags.SolidColor; m_BaseCameraData.SetRenderer(2); // 2D Renderer. See the list of Renderers in CommonAssets/UniversalRPAsset. m_BaseCameraData.renderType = CameraRenderType.Base; m_BaseCameraData.renderPostProcessing = false; From 0188827d17023f7501dd7cf128e7bdaa2ac720ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Slysz?= Date: Mon, 4 Nov 2024 20:30:17 +0000 Subject: [PATCH 10/85] [URP][Volume] Fix GUID collision of default volume profile between template and package Fix [UUM-86039](https://jira.unity3d.com/browse/UUM-86039) where a GUID conflict between template URP asset and URP package. GUID was regenerated with template and urp package content in mind. --- .../Editor/Volume/DefaultVolumeProfile.asset.meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Volume/DefaultVolumeProfile.asset.meta b/Packages/com.unity.render-pipelines.universal/Editor/Volume/DefaultVolumeProfile.asset.meta index 53b314adfa7..2b7243deeee 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/Volume/DefaultVolumeProfile.asset.meta +++ b/Packages/com.unity.render-pipelines.universal/Editor/Volume/DefaultVolumeProfile.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ab09877e2e707104187f6f83e2f62510 +guid: eda47df5b85f4f249abf7abd73db2cb2 NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 From 45783a75a3d6f8fd9680bca1bfaa96f5c2ecffab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvar=20=C3=96rn=20Unn=C3=BE=C3=B3rsson?= Date: Tue, 5 Nov 2024 20:26:37 +0000 Subject: [PATCH 11/85] [6.1][URP] Foundation Project test fixes This PR does the following: * Updates numerous reference images as many had incorrect settings (Read/Write, Generate Mipmaps, Compression) * Updates a reference image for motion vector test 210 on one platform * Updates two reference images in URP_GI that gets two jobs passing * Disables the Gizmo test on OpenGL * Adds missing .meta files for files that have been added in the past --- .../Assets/Test/Editor/GizmoRenderingTests.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/Editor/GizmoRenderingTests.cs b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/Editor/GizmoRenderingTests.cs index 7b0652181af..c3af800d5ff 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/Editor/GizmoRenderingTests.cs +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/Editor/GizmoRenderingTests.cs @@ -7,6 +7,7 @@ using UnityEditor.SceneManagement; using UnityEditor.TestTools.Graphics; using UnityEngine; +using UnityEngine.Rendering; using UnityEngine.TestTools; using UnityEngine.TestTools.Graphics; @@ -18,6 +19,10 @@ public class GizmoRenderingTests [Test, Category("Graphics"), CodeBasedGraphicsTest(referenceImagePath, "Assets/ActualImages")] public async Task GizmoRenderingWorks() { + // Failing on OpenGL + if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.OpenGLCore) + return; + const string scenePath = "Assets/Scenes/CodeBasedTests/GizmoRendering.unity"; const int numFramesToWarmup = 4; From 0f7d0fc035633f4808e1218db616091314f16db1 Mon Sep 17 00:00:00 2001 From: Julien Amsellem Date: Wed, 6 Nov 2024 05:26:58 +0000 Subject: [PATCH 12/85] [VFX] Custom attribute with same name as built-in attribute sanitize issue Jira: UUM-83849 When a VFX asset from 2022.3 or previous version is imported, and that this VFX asset uses a custom attribute with the same name as a built-in attribute, the sanitization does not work as expected. How to reproduce: - Import the attached [package](https://jira.unity3d.com/secure/attachment/1557681/Custom%20Attribute%20Upgradability.unitypackage) to 6000.x version - Open Smoke1 VFX - Observe that there are custom attributes of 'Seed' and 'Seed_1" and error message in the console --- .../Controllers/VFXParameterController.cs | 5 +- .../Models/Deprecated/GetCustomAttribute.cs | 4 + .../Models/Deprecated/SetCustomAttribute.cs | 4 + .../Editor/Models/VFXAttributesManager.cs | 36 +- .../Editor/Models/VFXGraph.cs | 2 +- .../Editor/Tests/Repro_UUM_83849.vfx_ | 3246 +++++++++++++++++ .../Editor/Tests/Repro_UUM_83849.vfx_.meta | 7 + .../Editor/Tests/VFXAttributeTests.cs | 24 + 8 files changed, 3317 insertions(+), 11 deletions(-) create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_ create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_.meta diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/Controllers/VFXParameterController.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/Controllers/VFXParameterController.cs index 3b8a60b5e95..d0fe3cdeb30 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/Controllers/VFXParameterController.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/Controllers/VFXParameterController.cs @@ -562,7 +562,7 @@ public void SetMemberValue(string memberPath, object value) } } - public static string MakeNameUnique(string name, HashSet allNames, bool allowSpace = true) + public static string MakeNameUnique(string name, HashSet allNames, bool allowSpace = true, List rejectedCandidateNames = null) { if (string.IsNullOrEmpty(name)) { @@ -575,7 +575,7 @@ public static string MakeNameUnique(string name, HashSet allNames, bool } string candidateMainPart = null; int cpt = 0; - while (allNames.Contains(candidateName)) + while (allNames.Contains(candidateName, StringComparer.OrdinalIgnoreCase)) { if (candidateMainPart == null) { @@ -601,6 +601,7 @@ public static string MakeNameUnique(string name, HashSet allNames, bool candidateName = allowSpace ? $"{candidateMainPart} {cpt}" : $"{candidateMainPart}_{cpt}"; + rejectedCandidateNames?.Add(candidateName); } return candidateName; diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Deprecated/GetCustomAttribute.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Deprecated/GetCustomAttribute.cs index 6e25bcb05e5..2b0e629c26a 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Deprecated/GetCustomAttribute.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Deprecated/GetCustomAttribute.cs @@ -34,6 +34,10 @@ public override void Sanitize(int version) { GetGraph().TryAddCustomAttribute(attribute, CustomAttributeUtility.GetValueType(AttributeType), string.Empty, false, out var vfxAttribute); var vfxAttributeParameter = ScriptableObject.CreateInstance(); + if (attribute != vfxAttribute.name) + { + Debug.Log($"[Sanitize] Get Custom Attribute {attribute} has been renamed into {vfxAttribute.name}"); + } vfxAttributeParameter.attribute = vfxAttribute.name; vfxAttributeParameter.location = location; vfxAttributeParameter.ResyncSlots(true); diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Deprecated/SetCustomAttribute.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Deprecated/SetCustomAttribute.cs index b5277812bee..a09702e8534 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Deprecated/SetCustomAttribute.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Deprecated/SetCustomAttribute.cs @@ -99,6 +99,10 @@ public override void Sanitize(int version) { GetGraph().TryAddCustomAttribute(attribute, CustomAttributeUtility.GetValueType(AttributeType), string.Empty, false, out var vfxAttribute); var setAttribute = ScriptableObject.CreateInstance(); + if (attribute != vfxAttribute.name) + { + Debug.Log($"[Sanitize] Set Custom Attribute: {attribute} has been renamed into {vfxAttribute.name}"); + } setAttribute.attribute = vfxAttribute.name; setAttribute.Composition = Composition; setAttribute.Random = Random; diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/VFXAttributesManager.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/VFXAttributesManager.cs index 7e166535c7c..40364469192 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/VFXAttributesManager.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/VFXAttributesManager.cs @@ -403,17 +403,12 @@ public bool TryRegisterCustomAttribute(string name, CustomAttributeUtility.Signa { name = MakeValidName(name); - if (TryFind(name, out var existingAttribute)) + if (TryFindExistingAttributeOrCreate(name, CustomAttributeUtility.GetValueType(type), out newAttribute)) { - if (existingAttribute.type == CustomAttributeUtility.GetValueType(type)) - { - newAttribute = existingAttribute; - return false; - } - name = FindUniqueName(name); + return false; } - newAttribute = new VFXAttribute(name, CustomAttributeUtility.GetValueType(type), description); + newAttribute.description = description; m_CustomAttributes.Add(newAttribute); return true; } @@ -474,6 +469,31 @@ public string FindUniqueName(string name) } + private bool TryFindExistingAttributeOrCreate(string name, VFXValueType type, out VFXAttribute attribute) + { + if (TryFind(name, out attribute)) + { + if (attribute.type == type) + { + return true; + } + + var existingNames = new HashSet(GetAllNamesOrCombination(true, true, true, true)); + var rejectedCandidateNames = new List(); + name = VFXParameterController.MakeNameUnique(name, existingNames, false, rejectedCandidateNames); + foreach (var candidateName in rejectedCandidateNames) + { + if (TryFind(candidateName, out attribute) && attribute.type == type) + { + return true; + } + } + } + + attribute = new VFXAttribute(name, type, null); + return false; + } + private string MakeValidName(string name) { return CustomAttributeUtility.IsShaderCompilableName(name) diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/VFXGraph.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/VFXGraph.cs index b820462d49e..6a8a7b6071c 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/VFXGraph.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/VFXGraph.cs @@ -702,7 +702,7 @@ public VFXAttribute DuplicateCustomAttribute(string attributeName) { var newAttribute = m_AttributesManager.Duplicate(attributeName); var currentIndex = m_CustomAttributes.FindIndex(x => x.attributeName == attributeName); - var order = currentIndex >= 0 ? currentIndex + 1 : -1; + var order = currentIndex >= 0 ? currentIndex + 1 : m_CustomAttributes.Count; if (TryAddCustomAttribute(newAttribute.name, newAttribute.type, newAttribute.description, false, out var attribute)) { SetCustomAttributeOrder(attribute.name, order); diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_ new file mode 100644 index 00000000000..d4ff4a51881 --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_ @@ -0,0 +1,3246 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &114023846229194376 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 73a13919d81fb7444849bae8b5c812a2, type: 3} + m_Name: VFXBasicSpawner + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614566} + - {fileID: 8926484042661614569} + m_UIPosition: {x: 708, y: -253} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: Spawn + m_Data: {fileID: 8926484042661614555} + m_InputFlowSlot: + - link: [] + - link: [] + m_OutputFlowSlot: + - link: + - context: {fileID: 114946465509916290} + slotIndex: 0 + loopDuration: 0 + loopCount: 0 + delayBeforeLoop: 0 + delayAfterLoop: 0 +--- !u!114 &114307113894698210 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 1b605c022ee79394a8a776c0869b3f9a, type: 3} + m_Name: VFXSlot + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 114986932069951040} + - {fileID: 114963171269329408} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 114946465509916290} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"center":{"x":0.0,"y":0.0,"z":0.0},"size":{"x":2.0,"y":2.0,"z":2.0}}' + m_Space: 0 + m_Property: + name: bounds + m_serializedType: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &114340500867371532 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: d01270efd3285ea4a9d6c555cb0a8027, type: 3} + m_Name: VFXUI + m_EditorClassIdentifier: + groupInfos: [] + stickyNoteInfos: [] + categories: [] + uiBounds: + serializedVersion: 2 + x: 139 + y: -253 + width: 993 + height: 2164 +--- !u!114 &114350483966674976 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 7d4c867f6b72b714dbb5fd1780afe208, type: 3} + m_Name: Smoke1 + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 114023846229194376} + - {fileID: 114946465509916290} + - {fileID: 114780028408030698} + - {fileID: 8926484042661614560} + - {fileID: 8926484042661614594} + - {fileID: 8926484042661614596} + - {fileID: 8926484042661614637} + - {fileID: 8926484042661614642} + - {fileID: 8926484042661614672} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_UIInfos: {fileID: 114340500867371532} + m_ParameterInfo: [] + m_ImportDependencies: [] + m_GraphVersion: 12 + m_ResourceVersion: 1 + m_SubgraphDependencies: [] + m_CategoryPath: +--- !u!114 &114380859405582094 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: VFXSlotFloat + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114963171269329408} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &114428730288789306 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: d78581a96eae8bf4398c282eb0b098bd, type: 3} + m_Name: VFXDataParticle + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: + m_Owners: + - {fileID: 114946465509916290} + - {fileID: 114780028408030698} + - {fileID: 8926484042661614560} + dataType: 0 + capacity: 30 + stripCapacity: 16 + particlePerStripCount: 16 + needsComputeBounds: 0 + boundsMode: 1 + m_Space: 0 +--- !u!114 &114512514798047786 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: VFXSlotFloat + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114963171269329408} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &114538391275492396 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: VFXSlotFloat + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114986932069951040} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &114739294351936256 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: VFXSlotFloat + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114986932069951040} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &114780028408030698 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 2dc095764ededfa4bb32fa602511ea4b, type: 3} + m_Name: VFXBasicUpdate + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 708, y: 1076} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: + m_Data: {fileID: 114428730288789306} + m_InputFlowSlot: + - link: + - context: {fileID: 114946465509916290} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614560} + slotIndex: 0 + integration: 0 + angularIntegration: 0 + ageParticles: 1 + reapParticles: 1 + skipZeroDeltaUpdate: 0 +--- !u!114 &114920711487922656 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: VFXSlotFloat + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114963171269329408} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &114935892456706286 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: VFXSlotFloat + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114986932069951040} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &114946465509916290 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 9dfea48843f53fc438eabc12a3a30abc, type: 3} + m_Name: VFXBasicInitialize + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614553} + - {fileID: 8926484042661614558} + - {fileID: 8926484042661614605} + - {fileID: 8926484042661614632} + - {fileID: 8926484042661614661} + m_UIPosition: {x: 708, y: 355} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 114307113894698210} + m_OutputSlots: [] + m_Label: + m_Data: {fileID: 114428730288789306} + m_InputFlowSlot: + - link: + - context: {fileID: 114023846229194376} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 114780028408030698} + slotIndex: 0 +--- !u!114 &114963171269329408 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: VFXSlotFloat3 + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114307113894698210} + m_Children: + - {fileID: 114512514798047786} + - {fileID: 114920711487922656} + - {fileID: 114380859405582094} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: size + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &114986932069951040 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: VFXSlotFloat3 + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114307113894698210} + m_Children: + - {fileID: 114739294351936256} + - {fileID: 114935892456706286} + - {fileID: 114538391275492396} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 114307113894698210} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: center + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!2058629511 &8926484042661614527 +VisualEffectResource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Smoke1 + m_Graph: {fileID: 114350483966674976} + m_Infos: + m_RendererSettings: + motionVectorGenerationMode: 0 + shadowCastingMode: 0 + receiveShadows: 0 + reflectionProbeUsage: 0 + lightProbeUsage: 0 + m_CullingFlags: 3 + m_UpdateMode: 0 + m_PreWarmDeltaTime: 0.05 + m_PreWarmStepCount: 0 + m_InitialEventName: OnPlay + m_InstancingMode: -1 + m_InstancingCapacity: 64 +--- !u!114 &8926484042661614553 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114946465509916290} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614554} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614711} + attribute: size + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614554} + m_MasterData: + m_Owner: {fileID: 8926484042661614553} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: 2147483647 + m_Property: + name: Size + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614555 +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: f68759077adc0b143b6e1c101e82065e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: + m_Owners: + - {fileID: 114023846229194376} +--- !u!114 &8926484042661614558 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114946465509916290} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614559} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614712} + attribute: lifetime + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614559 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614559} + m_MasterData: + m_Owner: {fileID: 8926484042661614558} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 3 + m_Space: 2147483647 + m_Property: + name: Lifetime + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614560 +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: e837ba02e1cb47d4394b6c186d164156, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614719} + - {fileID: 8926484042661614577} + - {fileID: 8926484042661614589} + m_UIPosition: {x: 708, y: 1307} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614561} + - {fileID: 8926484042661614562} + - {fileID: 8926484042661614718} + m_OutputSlots: [] + m_Label: + m_Data: {fileID: 114428730288789306} + m_InputFlowSlot: + - link: + - context: {fileID: 114780028408030698} + slotIndex: 0 + m_OutputFlowSlot: + - link: [] + blendMode: 0 + cullMode: 3 + zWriteMode: 0 + zTestMode: 0 + useAlphaClipping: 0 + generateMotionVector: 0 + excludeFromTUAndAA: 0 + sortingPriority: 0 + m_SubOutputs: + - {fileID: 8926484042661614565} + colorMapping: 0 + uvMode: 0 + flipbookLayout: 0 + useSoftParticle: 0 + vfxSystemSortPriority: 0 + sort: 0 + sortMode: 0 + revertSorting: 0 + indirectDraw: 0 + computeCulling: 0 + frustumCulling: 0 + castShadows: 0 + useExposureWeight: 0 + needsOwnSort: 0 + shaderGraph: {fileID: 0} + materialSettings: + m_PropertyNames: + - _QueueOffset + - _QueueControl + m_PropertyValues: + - 0 + - 0 + MeshCount: 1 + lod: 0 +--- !u!114 &8926484042661614561 +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: b47b8679b468b7347a00cdd50589bc9f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614561} + m_MasterData: + m_Owner: {fileID: 8926484042661614560} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Mesh, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":10210,"guid":"0000000000000000e000000000000000","type":0}}' + m_Space: 2147483647 + m_Property: + name: mesh + m_serializedType: + m_SerializableType: UnityEngine.Mesh, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614562 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614562} + m_MasterData: + m_Owner: {fileID: 8926484042661614560} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 4294967295 + m_Space: 2147483647 + m_Property: + name: subMeshMask + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614565 +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: 081ffb0090424ba4cb05370a42ead6b9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + opaqueRenderQueue: 0 + transparentRenderQueue: 1 +--- !u!114 &8926484042661614566 +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: 5e382412bb691334bb79457a6c127924, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114023846229194376} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614567} + - {fileID: 8926484042661614568} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614709} + repeat: 0 + spawnMode: 0 + delayMode: 0 +--- !u!114 &8926484042661614567 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614567} + m_MasterData: + m_Owner: {fileID: 8926484042661614566} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: 2147483647 + m_Property: + name: Count + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614568 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614568} + m_MasterData: + m_Owner: {fileID: 8926484042661614566} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: 2147483647 + m_Property: + name: Delay + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614569 +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: 5e382412bb691334bb79457a6c127924, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114023846229194376} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614570} + - {fileID: 8926484042661614571} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614710} + repeat: 1 + spawnMode: 0 + delayMode: 0 +--- !u!114 &8926484042661614570 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614570} + m_MasterData: + m_Owner: {fileID: 8926484042661614569} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: 2147483647 + m_Property: + name: Count + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614571 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614571} + m_MasterData: + m_Owner: {fileID: 8926484042661614569} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0.85 + m_Space: 2147483647 + m_Property: + name: Delay + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614577 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614560} + m_Children: [] + m_UIPosition: {x: 0, y: 2} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614578} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614716} + attribute: position + Composition: 1 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614578 +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: 5265657162cc1a241bba03a3b0476d99, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614579} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614578} + m_MasterData: + m_Owner: {fileID: 8926484042661614577} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"position":{"x":0.0,"y":0.05000000074505806,"z":0.0}}' + m_Space: 0 + m_Property: + name: Position + m_serializedType: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614579 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614578} + m_Children: + - {fileID: 8926484042661614580} + - {fileID: 8926484042661614581} + - {fileID: 8926484042661614582} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614578} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: position + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614580 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614579} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614578} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614581 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614579} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614578} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614579} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614578} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614589 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614560} + m_Children: [] + m_UIPosition: {x: 0, y: 77} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614590} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614717} + attribute: scale + Composition: 2 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614590 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614591} + - {fileID: 8926484042661614592} + - {fileID: 8926484042661614593} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614590} + m_MasterData: + m_Owner: {fileID: 8926484042661614589} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":1.0,"y":1.0,"z":1.0}' + m_Space: 2147483647 + m_Property: + name: Scale + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614591 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614590} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614590} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614599} +--- !u!114 &8926484042661614592 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614590} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614590} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614593 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614590} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614590} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614599} +--- !u!114 &8926484042661614594 +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: ba941214d319b454f90d5480e85886f2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 139, y: 1751} + m_UICollapsed: 0 + m_UISuperCollapsed: 1 + m_InputSlots: [] + m_OutputSlots: + - {fileID: 8926484042661614595} +--- !u!114 &8926484042661614595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614595} + m_MasterData: + m_Owner: {fileID: 8926484042661614594} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: 2147483647 + m_Property: + name: t + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661614598} +--- !u!114 &8926484042661614596 +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: f8bcc906a6d398c46b18826714448709, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 405, y: 1751} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614597} + - {fileID: 8926484042661614598} + m_OutputSlots: + - {fileID: 8926484042661614599} +--- !u!114 &8926484042661614597 +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: c117b74c5c58db542bffe25c78fe92db, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614597} + m_MasterData: + m_Owner: {fileID: 8926484042661614596} + m_Value: + m_Type: + m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"frames":[{"time":0.0,"value":0.0,"inTangent":4.913595676422119,"outTangent":4.913595676422119,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false},{"time":1.0,"value":2.0,"inTangent":0.0,"outTangent":0.0,"tangentMode":0,"leftTangentMode":0,"rightTangentMode":0,"broken":false}],"preWrapMode":8,"postWrapMode":8,"version":1}' + m_Space: 2147483647 + m_Property: + name: curve + m_serializedType: + m_SerializableType: UnityEngine.AnimationCurve, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614598 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614598} + m_MasterData: + m_Owner: {fileID: 8926484042661614596} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: 2147483647 + m_Property: + name: time + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614595} +--- !u!114 &8926484042661614599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614599} + m_MasterData: + m_Owner: {fileID: 8926484042661614596} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: 2147483647 + m_Property: + name: s + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661614591} + - {fileID: 8926484042661614593} +--- !u!114 &8926484042661614605 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114946465509916290} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614606} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614713} + attribute: scale + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614607} + - {fileID: 8926484042661614608} + - {fileID: 8926484042661614609} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614606} + m_MasterData: + m_Owner: {fileID: 8926484042661614605} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":1.0,"y":0.4000000059604645,"z":1.0}' + m_Space: 2147483647 + m_Property: + name: Scale + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614606} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614606} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614606} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614606} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614606} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614606} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614632 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114946465509916290} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614633} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614714} + attribute: color + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614634} + - {fileID: 8926484042661614635} + - {fileID: 8926484042661614636} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614633} + m_MasterData: + m_Owner: {fileID: 8926484042661614632} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":1.0,"y":1.0,"z":1.0}' + m_Space: 2147483647 + m_Property: + name: Color + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614647} +--- !u!114 &8926484042661614634 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614633} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614633} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614633} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614633} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614633} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614633} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614637 +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: c42128e17c583714a909b4997c80c916, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 284, y: 811} + m_UICollapsed: 0 + m_UISuperCollapsed: 1 + m_InputSlots: + - {fileID: 8926484042661614638} + - {fileID: 8926484042661614639} + - {fileID: 8926484042661614640} + m_OutputSlots: + - {fileID: 8926484042661614641} + seed: 0 + constant: 1 +--- !u!114 &8926484042661614638 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614638} + m_MasterData: + m_Owner: {fileID: 8926484042661614637} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: 2147483647 + m_Property: + name: min + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614639 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614639} + m_MasterData: + m_Owner: {fileID: 8926484042661614637} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: 2147483647 + m_Property: + name: max + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614640 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614640} + m_MasterData: + m_Owner: {fileID: 8926484042661614637} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 96 + m_Space: 2147483647 + m_Property: + name: seed + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614641} + m_MasterData: + m_Owner: {fileID: 8926484042661614637} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: 2147483647 + m_Property: + name: r + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661614644} +--- !u!114 &8926484042661614642 +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: 997b3d8a71b0cd441b68e9a8d00dc6c4, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 501, y: 811} + m_UICollapsed: 0 + m_UISuperCollapsed: 1 + m_InputSlots: + - {fileID: 8926484042661614643} + m_OutputSlots: + - {fileID: 8926484042661614647} +--- !u!114 &8926484042661614643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614644} + - {fileID: 8926484042661614645} + - {fileID: 8926484042661614646} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614643} + m_MasterData: + m_Owner: {fileID: 8926484042661614642} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":1.0,"y":1.0,"z":1.0}' + m_Space: 2147483647 + m_Property: + name: HSV + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614643} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614643} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614641} +--- !u!114 &8926484042661614645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614643} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614643} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614646 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614643} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614643} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614647 +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: c499060cea9bbb24b8d723eafa343303, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614648} + - {fileID: 8926484042661614649} + - {fileID: 8926484042661614650} + - {fileID: 8926484042661614651} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614647} + m_MasterData: + m_Owner: {fileID: 8926484042661614642} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector4, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":0.0,"y":0.0,"z":0.0,"w":0.0}' + m_Space: 2147483647 + m_Property: + name: RGB + m_serializedType: + m_SerializableType: UnityEngine.Vector4, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661614633} +--- !u!114 &8926484042661614648 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614647} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614647} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: [] +--- !u!114 &8926484042661614649 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614647} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614647} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: [] +--- !u!114 &8926484042661614650 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614647} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614647} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: [] +--- !u!114 &8926484042661614651 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614647} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614647} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: w + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: [] +--- !u!114 &8926484042661614661 +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: 5c286b53e648ef840b8153892fdbe169, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114946465509916290} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614749} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614715} + attribute: Seed + Composition: 0 + Random: 0 + AttributeType: 1 +--- !u!114 &8926484042661614672 +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: 87cb5bd24541ed041b011b1ffa05dae5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 444, y: 1511} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: + - {fileID: 8926484042661614675} + attribute: Seed + location: 0 + AttributeType: 1 +--- !u!114 &8926484042661614675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b2b751071c7fc14f9fa503163991826, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614676} + - {fileID: 8926484042661614677} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614675} + m_MasterData: + m_Owner: {fileID: 8926484042661614672} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: Seed + m_serializedType: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661614743} +--- !u!114 &8926484042661614676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614675} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614675} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: [] +--- !u!114 &8926484042661614677 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614675} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614675} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: [] +--- !u!114 &8926484042661614709 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614709} + m_MasterData: + m_Owner: {fileID: 8926484042661614566} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614710 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614710} + m_MasterData: + m_Owner: {fileID: 8926484042661614569} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614711 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614711} + m_MasterData: + m_Owner: {fileID: 8926484042661614553} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614712 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614712} + m_MasterData: + m_Owner: {fileID: 8926484042661614558} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614713 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614713} + m_MasterData: + m_Owner: {fileID: 8926484042661614605} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614714 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614714} + m_MasterData: + m_Owner: {fileID: 8926484042661614632} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614715 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614715} + m_MasterData: + m_Owner: {fileID: 8926484042661614661} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614716 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614716} + m_MasterData: + m_Owner: {fileID: 8926484042661614577} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614717 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614717} + m_MasterData: + m_Owner: {fileID: 8926484042661614589} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614718 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614718} + m_MasterData: + m_Owner: {fileID: 8926484042661614560} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + m_Space: 2147483647 + m_Property: + name: mainTexture + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614719 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614560} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614743} + - {fileID: 8926484042661614746} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614728} + attribute: scale + Composition: 1 + Source: 0 + Random: 2 + channels: 4 +--- !u!114 &8926484042661614728 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614728} + m_MasterData: + m_Owner: {fileID: 8926484042661614719} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: 2147483647 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614743 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b2b751071c7fc14f9fa503163991826, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614744} + - {fileID: 8926484042661614745} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614743} + m_MasterData: + m_Owner: {fileID: 8926484042661614719} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":1.0,"y":1.0}' + m_Space: 2147483647 + m_Property: + name: A + m_serializedType: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614675} +--- !u!114 &8926484042661614744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614743} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614743} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614745 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614743} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614743} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614746 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b2b751071c7fc14f9fa503163991826, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614747} + - {fileID: 8926484042661614748} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614746} + m_MasterData: + m_Owner: {fileID: 8926484042661614719} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":1.0,"y":1.0}' + m_Space: 2147483647 + m_Property: + name: B + m_serializedType: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614747 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614746} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614746} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614746} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614746} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b2b751071c7fc14f9fa503163991826, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614750} + - {fileID: 8926484042661614751} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614749} + m_MasterData: + m_Owner: {fileID: 8926484042661614661} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":-100.0,"y":-100.0}' + m_Space: 2147483647 + m_Property: + name: _Seed + m_serializedType: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614750 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614749} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614749} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614751 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614749} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614749} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: 2147483647 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_.meta b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_.meta new file mode 100644 index 00000000000..0eb136300d4 --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e1f7a776e42f7ba40bc3e3911924c38c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXAttributeTests.cs b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXAttributeTests.cs index a588eb8dd34..2cb2f6bdc91 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXAttributeTests.cs +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXAttributeTests.cs @@ -222,6 +222,30 @@ public string GetCustomAttribute_Name_Validation(string name) return CheckCustomAttributeName(name); } + [Test, Description("Cover regression UUM_83849")] + public void Sanitize_Custom_Attribute_With_Same_Name_As_BuiltIn() + { + var kSourceAsset = "Assets/AllTests/Editor/Tests/Repro_UUM_83849.vfx_"; + var graph = VFXTestCommon.CopyTemporaryGraph(kSourceAsset); + Assert.IsNotNull(graph); + + var initialize = graph.GetGraph().children.OfType().Single(); + Assert.IsNotNull(initialize); + + Assert.AreEqual(5u, initialize.children.Count()); + Assert.AreEqual(5u, initialize.children.OfType().Count()); + var sizeExpected = (string)initialize.children.First().GetSetting("attribute").value; + var customExpected = (string)initialize.children.Last().GetSetting("attribute").value; + Assert.AreEqual(VFXAttribute.Size.name, sizeExpected); + Assert.AreEqual("Seed_1", customExpected); + + var customAttribute = graph.customAttributes.SingleOrDefault(o => o.attributeName == customExpected); + Assert.IsNotNull(customAttribute); + + var getAttributeOp = graph.GetGraph().children.OfType().Single(); + Assert.AreEqual("Seed_1", getAttributeOp.attribute); + } + private string CheckCustomAttributeName(string name) where T : VFXModel { var graph = VFXTestCommon.MakeTemporaryGraph(); From 78b3cd42c92e01049405d45aea20a08782509c0d Mon Sep 17 00:00:00 2001 From: Layla Arab Date: Wed, 6 Nov 2024 05:28:10 +0000 Subject: [PATCH 13/85] Prevent eviction of light with preserveCachedShadow from cachedShadowManager Jira: https://jira.unity3d.com/browse/UUM-83766 When preserveCachedShadow is set to true on an HDAdditionalLightData, it shouldn't be evicted from the cachedShadowManager. This PR adds a missing check for this in RefreshCachedShadow(). --- .../Runtime/Lighting/Light/HDAdditionalLightData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs index f61e54ba8ce..2342bb73623 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Light/HDAdditionalLightData.cs @@ -3347,7 +3347,7 @@ internal void UpdateAllLightValues(bool fromTimeLine) internal void RefreshCachedShadow() { bool wentThroughCachedShadowSystem = lightIdxForCachedShadows >= 0; - if (wentThroughCachedShadowSystem) + if (!preserveCachedShadow && wentThroughCachedShadowSystem) HDShadowManager.cachedShadowManager.EvictLight(this, legacyLight.type); RegisterCachedShadowLightOptional(); From 44be70b5778d41d6a00dfc056ea34c7d1c17c1d9 Mon Sep 17 00:00:00 2001 From: Ludovic Theobald Date: Thu, 7 Nov 2024 02:05:22 +0000 Subject: [PATCH 14/85] [VFX] Compilation Optimisation - Speed-up string building JIRA : https://jira.unity3d.com/browse/VFXG-441 This PR improves the VFX asset compilation time, by changing the way we generate the shaders. Instead of using our old ReplaceMultiline that was slow and allocation-heavy, we recursively collect all the snippets required to build the shader and then perform a series of StringBuilder.Append. I also tried to lower the amount of Regexes we use, as they are often significantly more expensive than parsing the patterns manually. Changing the string building algorithm forced me to modify the templates slightly because the order of declaration and usage of some VFX-macros were not compatible. Performance comparison on 14_PositionBlock.vfx : Before : ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/ba0495db-7501-4ce9-8093-5662355e9bae) ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/8a587e66-60e3-47ac-9de0-44ed3092569f) After : ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/05cbdd70-b7bd-4a2b-8263-082e0039b5ba) ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/f223dd2a-fa51-4a57-9223-cd3c3a31fc33) --- .../Templates/Mesh/PassDepthOrMV.template | 2 +- .../Templates/Mesh/PassForward.template | 3 +- .../PlanarPrimitive/PassDepthOrMV.template | 2 +- .../PlanarPrimitive/PassForward.template | 3 +- .../VFXPassDepthCommonFragmentLit.template | 117 ++++++ ...FXPassDepthCommonFragmentLit.template.meta | 3 + .../VFXGraph/Shaders/VFXLitVaryings.template | 1 + .../VFXGraph/Shaders/VFXPasses.template | 135 +------ .../Shaders/VFXSixWayIncludes.template | 6 + .../Shaders/VFXSixWayIncludes.template.meta | 3 + .../Shaders/VFXVertexProbeSampling.template | 10 - .../Runtime/VFXGraph/Shaders/VFXLit.hlsl | 2 +- .../ParticleMeshesLit/PassDepthOrMV.template | 8 +- .../ParticleMeshesLit/PassForward.template | 2 +- .../PassDepthOrMV.template | 10 +- .../PassForward.template | 2 +- .../VFXPassDepthCommonFragmentLit.template | 101 +++++ ...FXPassDepthCommonFragmentLit.template.meta | 3 + .../VFXGraph/Shaders/VFXPasses.template | 116 ------ .../Editor/Compiler/VFXCodeGenerator.cs | 342 +++++----------- .../Editor/Compiler/VFXGraphCompiledData.cs | 3 +- .../Editor/Compiler/VFXShaderSnippets.cs | 373 ++++++++++++++++++ .../Editor/Compiler/VFXShaderSnippets.cs.meta | 3 + .../Blocks/Implementations/VFXBlockUtility.cs | 40 -- .../ShaderGraph/VFXOldShaderGraphHelpers.cs | 61 ++- .../VFXShaderGraphParticleOutput.cs | 2 +- .../Editor/ShaderGraph/VFXSubTarget.cs | 12 +- .../ParticleHexahedron/PassDepthOrMV.template | 4 +- .../ParticleLines/PassDepthOrMV.template | 2 +- .../ParticleLinesSW/PassDepthOrMV.template | 2 +- .../ParticleMeshes/PassDepthOrMV.template | 2 +- .../PassDepthOrMV.template | 2 +- .../ParticlePoints/PassDepthOrMV.template | 2 +- .../Shaders/SixWay/SixWayVaryings.template | 91 +++-- .../Shaders/VFXOutputUpdate.template | 3 +- .../Shaders/VFXParticleCommon.template | 119 +----- .../Shaders/VFXParticleHeader.template | 1 + .../VFXPassDepthCommonFragmentUnlit.template | 105 +++++ ...PassDepthCommonFragmentUnlit.template.meta | 3 + .../Shaders/VFXUpdate.template | 3 +- .../Shaders/VFXVolumetricFogUpdate.template | 1 + .../Editor/Tests/VFXShaderGenerationTests.cs | 10 +- 42 files changed, 952 insertions(+), 763 deletions(-) create mode 100644 Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template create mode 100644 Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template.meta create mode 100644 Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXSixWayIncludes.template create mode 100644 Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXSixWayIncludes.template.meta create mode 100644 Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template create mode 100644 Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template.meta create mode 100644 Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderSnippets.cs create mode 100644 Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderSnippets.cs.meta create mode 100644 Packages/com.unity.visualeffectgraph/Shaders/VFXPassDepthCommonFragmentUnlit.template create mode 100644 Packages/com.unity.visualeffectgraph/Shaders/VFXPassDepthCommonFragmentUnlit.template.meta diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/Mesh/PassDepthOrMV.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/Mesh/PassDepthOrMV.template index d99129094b0..b003e52fb7d 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/Mesh/PassDepthOrMV.template +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/Mesh/PassDepthOrMV.template @@ -99,4 +99,4 @@ ${VFXHDRPLitFillVaryings} ${VFXEnd} ${VFXInclude("Shaders/ParticleMeshes/Pass.template")} -${VFXPassDepthCommonFragmentLit} +${VFXIncludeRP("Templates/VFXPassDepthCommonFragmentLit.template")} diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/Mesh/PassForward.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/Mesh/PassForward.template index b63ab12d534..f10abbe1b74 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/Mesh/PassForward.template +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/Mesh/PassForward.template @@ -20,10 +20,9 @@ Pass #pragma multi_compile_fragment _ PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 #endif #pragma multi_compile _ DEBUG_DISPLAY - //#pragma enable_d3d11_debug_symbols ${VFXIncludeRP("VFXLitVaryings.template")} - ${VFXIncludeRP("VFXVertexProbeSampling.template"),VFX_MATERIAL_TYPE_SIX_WAY_SMOKE} + ${VFXIncludeRP("VFXSixWayIncludes.template"),VFX_MATERIAL_TYPE_SIX_WAY_SMOKE} struct ps_input { float4 pos : SV_POSITION; diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/PlanarPrimitive/PassDepthOrMV.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/PlanarPrimitive/PassDepthOrMV.template index ef88ff7eb83..8f5181313c5 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/PlanarPrimitive/PassDepthOrMV.template +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/PlanarPrimitive/PassDepthOrMV.template @@ -102,4 +102,4 @@ ${VFXHDRPLitFillVaryings} ${VFXEnd} ${VFXInclude("Shaders/ParticlePlanarPrimitives/Pass.template")} -${VFXPassDepthCommonFragmentLit} +${VFXIncludeRP("Templates/VFXPassDepthCommonFragmentLit.template")} diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/PlanarPrimitive/PassForward.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/PlanarPrimitive/PassForward.template index 184fa7c1dde..565d670870e 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/PlanarPrimitive/PassForward.template +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/PlanarPrimitive/PassForward.template @@ -21,10 +21,9 @@ Pass #pragma multi_compile_fragment _ PROBE_VOLUMES_L1 PROBE_VOLUMES_L2 #endif #pragma multi_compile _ DEBUG_DISPLAY - //#pragma enable_d3d11_debug_symbols ${VFXIncludeRP("VFXLitVaryings.template")} - ${VFXIncludeRP("VFXVertexProbeSampling.template"),VFX_MATERIAL_TYPE_SIX_WAY_SMOKE} + ${VFXIncludeRP("VFXSixWayIncludes.template"),VFX_MATERIAL_TYPE_SIX_WAY_SMOKE} struct ps_input { diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template new file mode 100644 index 00000000000..bc8a47a3adf --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template @@ -0,0 +1,117 @@ +#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR +${VFXPassVelocityDefine} +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW +${VFXPassShadowDefine} +#else +${VFXPassDepthDefine} +#endif +${VFXIncludeRP("VFXLit.template")} + +${SHADERGRAPH_PIXEL_CODE_DEPTHONLY} + +#if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION +int _ObjectId; +int _PassValue; +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING +float4 _SelectionID; +#endif + +#pragma fragment frag +void frag(ps_input i +#if USE_DOUBLE_SIDED + , bool frontFace : SV_IsFrontFace +#endif +#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR + #ifdef WRITE_MSAA_DEPTH + // We need the depth color as SV_Target0 for alpha to coverage + , out float4 outDepthColor : SV_Target0 + , out float4 outMotionVector : SV_Target1 + #ifdef WRITE_NORMAL_BUFFER + , out float4 outNormalBuffer : SV_Target2 + #endif + #else + // When no MSAA, the motion vector is always the first buffer + , out float4 outMotionVector : SV_Target0 + #ifdef WRITE_NORMAL_BUFFER + , out float4 outNormalBuffer : SV_Target1 + #endif + #endif +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL + #ifdef WRITE_MSAA_DEPTH + // We need the depth color as SV_Target0 for alpha to coverage + , out float4 outDepthColor : SV_Target0 + #ifdef WRITE_NORMAL_BUFFER + , out float4 outNormalBuffer : SV_Target1 + #endif + #elif defined(WRITE_NORMAL_BUFFER) + , out float4 outNormalBuffer : SV_Target0 + #endif +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION || VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING + , out float4 outColor : SV_Target0 +#endif +) +{ + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + VFXTransformPSInputs(i); + ${VFXComputeNormalWS} + + #ifdef VFX_SHADERGRAPH + ${VFXAdditionalInterpolantsPreparation} + ${SHADERGRAPH_PIXEL_CALL_DEPTHONLY} + float alpha = OUTSG.${SHADERGRAPH_PARAM_ALPHA}; + #else + + float alpha = VFXGetFragmentColor(i).a; + + #if HDRP_USE_BASE_COLOR_MAP_ALPHA + alpha *= VFXGetTextureColor(VFX_SAMPLER(baseColorMap),i).a; + #endif + #if VFX_MATERIAL_TYPE_SIX_WAY_SMOKE + #ifndef VFX_VARYING_NORMAL + const VFXUVData uvData = GetUVData(i); + #endif + alpha *= SampleTexture(VFX_SAMPLER(positiveAxesLightmap),uvData).a; + #if VFX_SIX_WAY_USE_ALPHA_REMAP + alpha = SampleCurve(i.VFX_VARYING_ALPHA_REMAP, alpha); + #endif + #endif + #endif + VFXClipFragmentColor(alpha,i); + + #ifdef WRITE_NORMAL_BUFFER + #ifndef VFX_SHADERGRAPH + VFXComputePixelOutputToNormalBuffer(i,normalWS,uvData,outNormalBuffer); + #else + #if HAS_SHADERGRAPH_PARAM_NORMAL + float3 n = OUTSG.Normal_8; + normalWS = mul(n,tbn); + #endif + SurfaceData surface = (SurfaceData)0; + surface.normalWS = normalWS; + EncodeIntoNormalBuffer(ConvertSurfaceDataToNormalData(surface), outNormalBuffer); + #endif + #endif + + #ifdef WRITE_MSAA_DEPTH + outDepthColor = i.VFX_VARYING_POSCS.z; + #if VFX_USE_ALPHA_TO_MASK + outDepthColor.a = alpha; + #endif + #endif + + #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR + ${VFXComputeOutputMotionVector} + outMotionVector = encodedMotionVector; + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION + // We use depth prepass for scene selection in the editor, this code allow to output the outline correctly + outColor = float4(_ObjectId, _PassValue, 1.0, 1.0); + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING + outColor = _SelectionID; + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL + //void + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW + //void + #else + #error VFX_PASSDEPTH undefined + #endif +} diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template.meta b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template.meta new file mode 100644 index 00000000000..54c62fd312a --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 897583fdf4fd456992f4162e0c64ceb2 +timeCreated: 1720611237 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXLitVaryings.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXLitVaryings.template index 93f1da5dce7..6ee83352b64 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXLitVaryings.template +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXLitVaryings.template @@ -1,6 +1,7 @@ #define HDRP_NEEDS_UVS (HDRP_USE_BASE_COLOR_MAP || HDRP_USE_MASK_MAP || USE_NORMAL_MAP || HDRP_USE_EMISSIVE_MAP) #define HDRP_USE_EMISSIVE (HDRP_USE_EMISSIVE_MAP || HDRP_USE_EMISSIVE_COLOR || HDRP_USE_ADDITIONAL_EMISSIVE_COLOR) +${VFXIncludeRP("VFXVertexProbeSampling.template"), VFX_MATERIAL_TYPE_SIX_WAY_SMOKE} ${VFXInclude("Shaders/SixWay/SixWayVaryings.template"), VFX_MATERIAL_TYPE_SIX_WAY_SMOKE} ${VFXBegin:VFXHDRPLitVaryingsMacros} diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXPasses.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXPasses.template index 1ce02c7d304..e88ce588060 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXPasses.template +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXPasses.template @@ -22,139 +22,6 @@ ${VFXBegin:VFXPassDepthAdditionalPragma}#pragma multi_compile _ WRITE_MSAA_DEPTH ${VFXBegin:VFXPassForwardAdditionalPragma}#pragma multi_compile _ DEBUG_DISPLAY${VFXEnd} ${VFXBegin:VFXPassVelocityAdditionalPragma}#pragma multi_compile _ WRITE_MSAA_DEPTH${VFXEnd} -${VFXBegin:VFXShaderGraphFunctionsInclude} -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Packing.hlsl" -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/EntityLighting.hlsl" -#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/BuiltinGIUtilities.hlsl" -#ifndef SHADERPASS -#error Shaderpass should be defined at this stage. -#endif -#include "Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderGraphFunctions.hlsl" -${VFXEnd} - -${VFXBegin:VFXPassDepthCommonFragmentLit} -#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR -${VFXPassVelocityDefine} -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW -${VFXPassShadowDefine} -#else -${VFXPassDepthDefine} -#endif -${VFXIncludeRP("VFXLit.template")} - -${SHADERGRAPH_PIXEL_CODE_DEPTHONLY} - -#if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION -int _ObjectId; -int _PassValue; -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING -float4 _SelectionID; -#endif - -#pragma fragment frag -void frag(ps_input i -#if USE_DOUBLE_SIDED - , bool frontFace : SV_IsFrontFace -#endif -#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR - #ifdef WRITE_MSAA_DEPTH - // We need the depth color as SV_Target0 for alpha to coverage - , out float4 outDepthColor : SV_Target0 - , out float4 outMotionVector : SV_Target1 - #ifdef WRITE_NORMAL_BUFFER - , out float4 outNormalBuffer : SV_Target2 - #endif - #else - // When no MSAA, the motion vector is always the first buffer - , out float4 outMotionVector : SV_Target0 - #ifdef WRITE_NORMAL_BUFFER - , out float4 outNormalBuffer : SV_Target1 - #endif - #endif -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL - #ifdef WRITE_MSAA_DEPTH - // We need the depth color as SV_Target0 for alpha to coverage - , out float4 outDepthColor : SV_Target0 - #ifdef WRITE_NORMAL_BUFFER - , out float4 outNormalBuffer : SV_Target1 - #endif - #elif defined(WRITE_NORMAL_BUFFER) - , out float4 outNormalBuffer : SV_Target0 - #endif -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION || VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING - , out float4 outColor : SV_Target0 -#endif -) -{ - UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); - VFXTransformPSInputs(i); - ${VFXComputeNormalWS} - - #ifdef VFX_SHADERGRAPH - ${VFXAdditionalInterpolantsPreparation} - ${SHADERGRAPH_PIXEL_CALL_DEPTHONLY} - float alpha = OUTSG.${SHADERGRAPH_PARAM_ALPHA}; - #else - - float alpha = VFXGetFragmentColor(i).a; - - #if HDRP_USE_BASE_COLOR_MAP_ALPHA - alpha *= VFXGetTextureColor(VFX_SAMPLER(baseColorMap),i).a; - #endif - #if VFX_MATERIAL_TYPE_SIX_WAY_SMOKE - #ifndef VFX_VARYING_NORMAL - const VFXUVData uvData = GetUVData(i); - #endif - alpha *= SampleTexture(VFX_SAMPLER(positiveAxesLightmap),uvData).a; - #if VFX_SIX_WAY_USE_ALPHA_REMAP - alpha = SampleCurve(i.VFX_VARYING_ALPHA_REMAP, alpha); - #endif - #endif - #endif - VFXClipFragmentColor(alpha,i); - - #ifdef WRITE_NORMAL_BUFFER - #ifndef VFX_SHADERGRAPH - VFXComputePixelOutputToNormalBuffer(i,normalWS,uvData,outNormalBuffer); - #else - #if HAS_SHADERGRAPH_PARAM_NORMAL - float3 n = OUTSG.Normal_8; - normalWS = mul(n,tbn); - #endif - SurfaceData surface = (SurfaceData)0; - surface.normalWS = normalWS; - EncodeIntoNormalBuffer(ConvertSurfaceDataToNormalData(surface), outNormalBuffer); - #endif - #endif - - #ifdef WRITE_MSAA_DEPTH - outDepthColor = i.VFX_VARYING_POSCS.z; - #if VFX_USE_ALPHA_TO_MASK - outDepthColor.a = alpha; - #endif - #endif - - #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR - ${VFXComputeOutputMotionVector} - outMotionVector = encodedMotionVector; - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION - // We use depth prepass for scene selection in the editor, this code allow to output the outline correctly - outColor = float4(_ObjectId, _PassValue, 1.0, 1.0); - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING - outColor = _SelectionID; - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL - //void - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW - //void - #else - #error VFX_PASSDEPTH undefined - #endif -} -${VFXEnd} - ${VFXBegin:VFXPassFullScreenDebugCommonVertex} #if !defined(SHADER_API_METAL) if (_DebugFullScreenMode == FULLSCREENDEBUGMODE_VERTEX_DENSITY) @@ -174,7 +41,7 @@ ${VFXBegin:VFXPassFullScreenDebugCommonFragment} UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); VFXTransformPSInputs(i); VFX_FRAG_SETUP_INSTANCE_ID(i); - + #ifdef PLATFORM_SUPPORTS_PRIMITIVE_ID_IN_PIXEL_SHADER if (_DebugFullScreenMode == FULLSCREENDEBUGMODE_QUAD_OVERDRAW) { diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXSixWayIncludes.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXSixWayIncludes.template new file mode 100644 index 00000000000..c0168dcaf0a --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXSixWayIncludes.template @@ -0,0 +1,6 @@ +#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Material.hlsl" +#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Lighting.hlsl" +#define HAS_LIGHTLOOP +#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoopDef.hlsl" +#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SixWayLit/SixWaySmokeLit.hlsl" +#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.hlsl" diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXSixWayIncludes.template.meta b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXSixWayIncludes.template.meta new file mode 100644 index 00000000000..8b356853aa1 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXSixWayIncludes.template.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c85765940feb499eb9a99878c4c7eea6 +timeCreated: 1720611358 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXVertexProbeSampling.template b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXVertexProbeSampling.template index ef731b899e7..677c8516037 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXVertexProbeSampling.template +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Shaders/VFXVertexProbeSampling.template @@ -26,13 +26,3 @@ float4 inTangent = o.VFX_VARYING_TANGENT; o.VFX_VARYING_BAKE_DIFFUSE_LIGHTING[2]); #endif ${VFXEnd} - - -#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Material.hlsl" -#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/Lighting.hlsl" -#define HAS_LIGHTLOOP -#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoopDef.hlsl" -#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/SixWayLit/SixWaySmokeLit.hlsl" -#include "Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.hlsl" - - diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXLit.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXLit.hlsl index 899d9b455b2..6a0b8b93bff 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXLit.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/VFXGraph/Shaders/VFXLit.hlsl @@ -12,7 +12,7 @@ #endif #if defined(VFX_MATERIAL_TYPE_SIX_WAY_SMOKE) && (SHADERPASS == SHADERPASS_FORWARD) -//Do nothing. In Six-way lighting forward pass, these includes are required earlier, defined in VFXVertexProbeSampling.template +//Do nothing. In Six-way lighting forward pass, these includes are required earlier, defined in VFXSixWayIncludes.template #else #include "Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Material.hlsl" diff --git a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticleMeshesLit/PassDepthOrMV.template b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticleMeshesLit/PassDepthOrMV.template index 1e4094316dd..055317597b5 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticleMeshesLit/PassDepthOrMV.template +++ b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticleMeshesLit/PassDepthOrMV.template @@ -21,7 +21,7 @@ #endif struct ps_input -{ +{ float4 pos : SV_POSITION; #if USE_FLIPBOOK_INTERPOLATION float4 uv : TEXCOORD0; @@ -30,7 +30,7 @@ struct ps_input float3 uv : TEXCOORD0; #else float2 uv : TEXCOORD0; - #endif + #endif #endif #if VFX_SHADERGRAPH_HAS_UV1 float4 uv1 : COLOR2; @@ -72,7 +72,7 @@ struct ps_input #endif ${VFXAdditionalInterpolantsDeclaration} - + UNITY_VERTEX_OUTPUT_STEREO VFX_VERTEX_OUTPUT_INSTANCE_INDEX }; @@ -107,4 +107,4 @@ ${VFXURPLitFillVaryings} ${VFXEnd} ${VFXInclude("Shaders/ParticleMeshes/Pass.template")} -${VFXPassDepthCommonFragmentURPLit} +${VFXIncludeRP("Templates/VFXPassDepthCommonFragmentLit.template")} diff --git a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticleMeshesLit/PassForward.template b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticleMeshesLit/PassForward.template index 03ef2bd77a0..2e54ba4721f 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticleMeshesLit/PassForward.template +++ b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticleMeshesLit/PassForward.template @@ -10,8 +10,8 @@ Pass ${VFXPassForwardLitAdditionalPragma} ${VFXURPForwardDefines} - ${VFXIncludeRP("VFXLitVaryings.template")} ${VFXIncludeRP("VFXVertexProbeSampling.template"),VFX_MATERIAL_TYPE_SIX_WAY_SMOKE} + ${VFXIncludeRP("VFXLitVaryings.template")} struct ps_input { diff --git a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticlePlanarPrimitivesLit/PassDepthOrMV.template b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticlePlanarPrimitivesLit/PassDepthOrMV.template index 8c5b057804a..66e4b931b66 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticlePlanarPrimitivesLit/PassDepthOrMV.template +++ b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticlePlanarPrimitivesLit/PassDepthOrMV.template @@ -31,7 +31,7 @@ struct ps_input #if USE_FLIPBOOK_ARRAY_LAYOUT float3 uv : TEXCOORD0; #else - float2 uv : TEXCOORD0; + float2 uv : TEXCOORD0; #endif #endif #if USE_ALPHA_TEST || USE_FLIPBOOK_INTERPOLATION || VFX_USE_ALPHA_CURRENT @@ -41,13 +41,13 @@ struct ps_input // w: smoothness VFX_OPTIONAL_INTERPOLATION float4 builtInInterpolants : TEXCOORD1; #endif - + #if USE_FLIPBOOK_MOTIONVECTORS // x: motion vector scale u // y: motion vector scale v VFX_OPTIONAL_INTERPOLATION float2 builtInInterpolants2 : TEXCOORD2; #endif - + #if NEEDS_NORMAL float4 normal : TEXCOORD3; // normal scale is stored in w #endif @@ -64,7 +64,7 @@ struct ps_input #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR VFX_DECLARE_MOTION_VECTORS_STORAGE(7,8) #endif - + ${VFXAdditionalInterpolantsDeclaration} UNITY_VERTEX_OUTPUT_STEREO @@ -105,4 +105,4 @@ ${VFXURPLitFillVaryings} ${VFXEnd} ${VFXInclude("Shaders/ParticlePlanarPrimitives/Pass.template")} -${VFXPassDepthCommonFragmentURPLit} +${VFXIncludeRP("Templates/VFXPassDepthCommonFragmentLit.template")} diff --git a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticlePlanarPrimitivesLit/PassForward.template b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticlePlanarPrimitivesLit/PassForward.template index 964622ecadd..c1d75991b31 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticlePlanarPrimitivesLit/PassForward.template +++ b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/ParticlePlanarPrimitivesLit/PassForward.template @@ -10,8 +10,8 @@ Pass ${VFXPassForwardLitAdditionalPragma} ${VFXURPForwardDefines} - ${VFXIncludeRP("VFXLitVaryings.template")} ${VFXIncludeRP("VFXVertexProbeSampling.template"),VFX_MATERIAL_TYPE_SIX_WAY_SMOKE} + ${VFXIncludeRP("VFXLitVaryings.template")} struct ps_input { diff --git a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template new file mode 100644 index 00000000000..8c9fcca1e1d --- /dev/null +++ b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template @@ -0,0 +1,101 @@ +#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR +${VFXPassVelocityDefine} +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW +${VFXPassShadowDefine} +#else +${VFXPassDepthDefine} +#endif +${VFXIncludeRP("VFXLit.template")} + +#if defined(WRITE_NORMAL_BUFFER) +${SHADERGRAPH_PIXEL_CODE_DEPTHNORMALS} +#else +${SHADERGRAPH_PIXEL_CODE_DEPTHONLY} +#endif + +#if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION +int _ObjectId; +int _PassValue; +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING +float4 _SelectionID; +#endif + +#pragma fragment frag +void frag(ps_input i +#if USE_DOUBLE_SIDED + , bool frontFace : SV_IsFrontFace +#endif +#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR + , out float4 outMotionVector : SV_Target0 +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL + #if defined(WRITE_NORMAL_BUFFER) + , out float4 outNormalBuffer : SV_Target0 + , out float4 outDepthColor : SV_Target1 + #else + , out float4 outDepthColor : SV_Target0 + #endif +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION || VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING + , out float4 outColor : SV_Target0 +#endif +) +{ + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + VFXTransformPSInputs(i); + ${VFXComputeNormalWS} + + #ifdef VFX_SHADERGRAPH + ${VFXAdditionalInterpolantsPreparation} + + #if defined(WRITE_NORMAL_BUFFER) + ${SHADERGRAPH_PIXEL_CALL_DEPTHNORMALS} + #else + ${SHADERGRAPH_PIXEL_CALL_DEPTHONLY} + #endif + + float alpha = OUTSG.${SHADERGRAPH_PARAM_ALPHA}; + #else + + float alpha = VFXGetFragmentColor(i).a; + #if URP_USE_BASE_COLOR_MAP_ALPHA + alpha *= VFXGetTextureColor(VFX_SAMPLER(baseColorMap),i).a; + #endif + + #if VFX_MATERIAL_TYPE_SIX_WAY_SMOKE + #ifndef VFX_VARYING_NORMAL + const VFXUVData uvData = GetUVData(i); + #endif + alpha *= SampleTexture(VFX_SAMPLER(positiveAxesLightmap),uvData).a; + #if defined(VFX_VARYING_ALPHA_REMAP) + alpha = SampleCurve(i.VFX_VARYING_ALPHA_REMAP, alpha); + #endif + #endif + #endif + + VFXClipFragmentColor(alpha,i); + + #if defined(WRITE_NORMAL_BUFFER) + #ifdef VFX_SHADERGRAPH + #if HAS_SHADERGRAPH_PARAM_NORMALTS + float3 n = OUTSG.${SHADERGRAPH_PARAM_NORMALTS}; + normalWS = mul(n,tbn); + #endif + #endif + VFXComputePixelOutputToNormalBuffer(i, normalWS, GetUVData(i), outNormalBuffer); + #endif + + #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR + ${VFXComputeOutputMotionVector} + outMotionVector = encodedMotionVector; + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION + // We use depth prepass for scene selection in the editor, this code allow to output the outline correctly + outColor = float4(_ObjectId, _PassValue, 1.0, 1.0); + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING + outColor = _SelectionID; + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL + outDepthColor = float4(i.VFX_VARYING_POSCS.z, 0,0,0); + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW + //void + #else + #error VFX_PASSDEPTH undefined + #endif +} diff --git a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template.meta b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template.meta new file mode 100644 index 00000000000..3c0a5d4f7d4 --- /dev/null +++ b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/Templates/VFXPassDepthCommonFragmentLit.template.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5e151e0faedc4a8ea681032f3bd79061 +timeCreated: 1720611629 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template index 1ec30694f28..0410d1f7640 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template +++ b/Packages/com.unity.render-pipelines.universal/Editor/VFXGraph/Shaders/VFXPasses.template @@ -56,122 +56,6 @@ ${VFXBegin:VFXPassGBufferAdditionalPragma} #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" ${VFXEnd} -${VFXBegin:VFXShaderGraphFunctionsInclude} -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Packing.hlsl" -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/EntityLighting.hlsl" -#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" -#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" -#include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" -#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl" -${VFXEnd} - - -${VFXBegin:VFXPassDepthCommonFragmentURPLit} -#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR -${VFXPassVelocityDefine} -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW -${VFXPassShadowDefine} -#else -${VFXPassDepthDefine} -#endif -${VFXIncludeRP("VFXLit.template")} - -#if defined(WRITE_NORMAL_BUFFER) -${SHADERGRAPH_PIXEL_CODE_DEPTHNORMALS} -#else -${SHADERGRAPH_PIXEL_CODE_DEPTHONLY} -#endif - -#if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION -int _ObjectId; -int _PassValue; -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING -float4 _SelectionID; -#endif - -#pragma fragment frag -void frag(ps_input i -#if USE_DOUBLE_SIDED - , bool frontFace : SV_IsFrontFace -#endif -#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR - , out float4 outMotionVector : SV_Target0 -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL - #if defined(WRITE_NORMAL_BUFFER) - , out float4 outNormalBuffer : SV_Target0 - , out float4 outDepthColor : SV_Target1 - #else - , out float4 outDepthColor : SV_Target0 - #endif -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION || VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING - , out float4 outColor : SV_Target0 -#endif -) -{ - UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); - VFXTransformPSInputs(i); - ${VFXComputeNormalWS} - - #ifdef VFX_SHADERGRAPH - ${VFXAdditionalInterpolantsPreparation} - - #if defined(WRITE_NORMAL_BUFFER) - ${SHADERGRAPH_PIXEL_CALL_DEPTHNORMALS} - #else - ${SHADERGRAPH_PIXEL_CALL_DEPTHONLY} - #endif - - float alpha = OUTSG.${SHADERGRAPH_PARAM_ALPHA}; - #else - - float alpha = VFXGetFragmentColor(i).a; - #if URP_USE_BASE_COLOR_MAP_ALPHA - alpha *= VFXGetTextureColor(VFX_SAMPLER(baseColorMap),i).a; - #endif - - #if VFX_MATERIAL_TYPE_SIX_WAY_SMOKE - #ifndef VFX_VARYING_NORMAL - const VFXUVData uvData = GetUVData(i); - #endif - alpha *= SampleTexture(VFX_SAMPLER(positiveAxesLightmap),uvData).a; - #if defined(VFX_VARYING_ALPHA_REMAP) - alpha = SampleCurve(i.VFX_VARYING_ALPHA_REMAP, alpha); - #endif - #endif - #endif - - VFXClipFragmentColor(alpha,i); - - #if defined(WRITE_NORMAL_BUFFER) - #ifdef VFX_SHADERGRAPH - #if HAS_SHADERGRAPH_PARAM_NORMALTS - float3 n = OUTSG.${SHADERGRAPH_PARAM_NORMALTS}; - normalWS = mul(n,tbn); - #endif - #endif - VFXComputePixelOutputToNormalBuffer(i, normalWS, GetUVData(i), outNormalBuffer); - #endif - - #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR - ${VFXComputeOutputMotionVector} - outMotionVector = encodedMotionVector; - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION - // We use depth prepass for scene selection in the editor, this code allow to output the outline correctly - outColor = float4(_ObjectId, _PassValue, 1.0, 1.0); - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING - outColor = _SelectionID; - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL - outDepthColor = float4(i.VFX_VARYING_POSCS.z, 0,0,0); - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW - //void - #else - #error VFX_PASSDEPTH undefined - #endif -} -${VFXEnd} - ${VFXBegin:VFXUnlitDebugDisplay} #if defined(DEBUG_DISPLAY) InputData inputData; diff --git a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXCodeGenerator.cs b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXCodeGenerator.cs index 3301eac790f..54a77b6babc 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXCodeGenerator.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXCodeGenerator.cs @@ -21,74 +21,20 @@ static class VFXCodeGenerator { public const uint nbThreadsPerGroup = 64u; - private static string GetIndent(string src, int index) + internal static VFXShaderWriter GenerateLoadAttribute(string matching, VFXContext context, VFXTaskCompiledData taskData) { - var indent = ""; - index--; - while (index > 0 && (src[index] == ' ' || src[index] == '\t')) - { - indent = src[index] + indent; - index--; - } - return indent; - } + var r = new VFXShaderWriter(); - //This function insure to keep padding while replacing a specific string - public static void ReplaceMultiline(StringBuilder target, string targetQuery, StringBuilder value) - { - Profiler.BeginSample("ReplaceMultiline"); - - string[] delim = { System.Environment.NewLine, "\n" }; - var valueLines = value.ToString().Split(delim, System.StringSplitOptions.None); - // For some reasons, just calling Replace(...) without any index data is orders of magnitude - // slower than searching a copy of the string to get the index first. So both codepaths do - // exactly that. - if (valueLines.Length <= 1) + VFXAttributeInfo[] attributesFromContext; + if (matching != null) { - var replacement = value.ToString(); - int startIndex = 0; - while (true) - { - var targetCopy = target.ToString(); - var index = targetCopy.IndexOf(targetQuery, startIndex, StringComparison.Ordinal); - if (index == -1) - break; - target.Replace(targetQuery, replacement, index, targetQuery.Length); - startIndex = index; - } + var regex = new Regex(matching); + attributesFromContext = context.GetData().GetAttributes().Where(o => regex.IsMatch(o.attrib.name)).ToArray(); } else { - int startIndex = 0; - while (true) - { - var targetCopy = target.ToString(); - var index = targetCopy.IndexOf(targetQuery, startIndex, StringComparison.Ordinal); - if (index == -1) - break; - var indent = GetIndent(targetCopy, index); - var currentValue = new StringBuilder(); - foreach (var line in valueLines) - { - currentValue.Append(indent + line + '\n'); - } - var currentValueString = currentValue.ToString(); - var toReplace = indent + targetQuery; - index -= indent.Length; - target.Replace(toReplace, currentValueString, index, toReplace.Length); - startIndex = index; - } + attributesFromContext = context.GetData().GetAttributes().ToArray(); } - - Profiler.EndSample(); - } - - internal static VFXShaderWriter GenerateLoadAttribute(string matching, VFXContext context, VFXTaskCompiledData taskData) - { - var r = new VFXShaderWriter(); - - var regex = new Regex(matching); - var attributesFromContext = context.GetData().GetAttributes().Where(o => regex.IsMatch(o.attrib.name)).ToArray(); var attributesSource = attributesFromContext.Where(a => context.GetData().IsSourceAttributeUsed(a.attrib, context)).ToArray(); var attributesCurrent = attributesFromContext.Where(a => context.GetData().IsCurrentAttributeUsed(a.attrib, context) || (context.contextType == VFXContextType.Init && context.GetData().IsAttributeStored(a.attrib))).ToArray(); @@ -148,7 +94,42 @@ internal static VFXShaderWriter GenerateLoadAttribute(string matching, VFXContex private const string eventListOutName = "eventListOut"; - static private VFXShaderWriter GenerateStoreAttribute(string matching, VFXContext context, uint linkedOutCount) + internal class Cache + { + private Dictionary m_SnippetsMap = new Dictionary(); + private Dictionary m_TemplateIncludeCache = new Dictionary(); + + internal void ClearSnippets() + { + m_SnippetsMap.Clear(); + } + internal bool TryAddSnippet(string key, StringBuilder value) + { + return m_SnippetsMap.TryAdd(key, value); + } + + internal void SetSnippet(string key, StringBuilder value) + { + m_SnippetsMap[key] = value; + } + + internal bool TryGetSnippet(string key, out StringBuilder value) + { + return m_SnippetsMap.TryGetValue(key, out value); + } + + internal void AddTemplateCache(string key, string value) + { + m_TemplateIncludeCache.Add(key, value); + } + + internal bool TryGetTemplateCache(string key, out string value) + { + return m_TemplateIncludeCache.TryGetValue(key, out value); + } + } + + internal static VFXShaderWriter GenerateStoreAttribute(string matching, VFXContext context, uint linkedOutCount) { var r = new VFXShaderWriter(); var regex = new Regex(matching); @@ -180,7 +161,7 @@ static private VFXShaderWriter GenerateStoreAttribute(string matching, VFXContex } return r; } - static internal VFXShaderWriter GenerateSetInstancingIndices(VFXContext context) + static internal VFXShaderWriter GenerateSetInstancingIndices() { var r = new VFXShaderWriter(); @@ -193,11 +174,11 @@ static internal VFXShaderWriter GenerateSetInstancingIndices(VFXContext context) static internal VFXShaderWriter GenerateLoadParameter(string matching, VFXNamedExpression[] namedExpressions, Dictionary expressionToName) { - var r = new VFXShaderWriter(); - var regex = new Regex(matching); - - var filteredNamedExpressions = namedExpressions.Where(o => regex.IsMatch(o.name) && - !(expressionToName.ContainsKey(o.exp) && expressionToName[o.exp] == o.name)); // if parameter already in the global scope, there's nothing to do + VFXShaderWriter r = new VFXShaderWriter(); + var filteredNamedExpressions = namedExpressions.Where(o => o.name == matching && + !(expressionToName.ContainsKey(o.exp) && expressionToName[o.exp] == o.name)).ToArray(); // if parameter already in the global scope, there's nothing to do + if (filteredNamedExpressions.Length == 0) + return r; bool needScope = false; foreach (var namedExpression in filteredNamedExpressions) @@ -234,6 +215,7 @@ public static StringBuilder Build( VFXTaskCompiledData taskData, HashSet dependencies, bool forceShadeDebugSymbols, + Cache codeGeneratorCache, out List errors) { string templatePath = null; @@ -243,7 +225,7 @@ public static StringBuilder Build( dependencies.Add(AssetDatabase.AssetPathToGUID(templatePath)); } - return Build(context, task, templatePath, compilationMode, taskData, dependencies, forceShadeDebugSymbols, out errors); + return Build(context, task, templatePath, compilationMode, taskData, dependencies, forceShadeDebugSymbols, codeGeneratorCache, out errors); } private static void GetFunctionName(VFXBlock block, out string functionName, out string comment) @@ -271,123 +253,6 @@ private static void GetFunctionName(VFXBlock block, out string functionName, out } } - static private string FormatPath(string path) - { - return Path.GetFullPath(path) - .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) -#if !UNITY_EDITOR_LINUX - .ToLowerInvariant() -#endif - ; - } - - static IEnumerable GetUniqueMatches(string regexStr, string src) - { - var regex = new Regex(regexStr); - var matches = regex.Matches(src); - return matches.Cast().GroupBy(m => m.Groups[0].Value).Select(g => g.First()); - } - - static private StringBuilder GetFlattenedTemplateContent(string path, List includes, IEnumerable defines, HashSet dependencies) - { - var formattedPath = FormatPath(path); - - if (includes.Contains(formattedPath)) - { - var includeHierarchy = new StringBuilder(string.Format("Cyclic VFXInclude dependency detected: {0}\n", formattedPath)); - foreach (var str in Enumerable.Reverse(includes)) - includeHierarchy.Append(str + '\n'); - throw new InvalidOperationException(includeHierarchy.ToString()); - } - - includes.Add(formattedPath); - var templateContent = new StringBuilder(System.IO.File.ReadAllText(formattedPath)); - - foreach (var match in GetUniqueMatches("\\${VFXInclude(RP|)\\(\\\"(.*?)\\\"\\)(,.*)?}", templateContent.ToString())) - { - var groups = match.Groups; - var renderPipelineInclude = groups[1].Value == "RP"; - var includePath = groups[2].Value; - - - if (groups.Count > 3 && !String.IsNullOrEmpty(groups[2].Value)) - { - var allDefines = groups[3].Value.Split(new char[] { ',', ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); - var neededDefines = allDefines.Where(d => d[0] != '!'); - var forbiddenDefines = allDefines.Except(neededDefines).Select(d => d.Substring(1)); - if (!neededDefines.All(d => defines.Contains(d)) || forbiddenDefines.Any(d => defines.Contains(d))) - { - ReplaceMultiline(templateContent, groups[0].Value, new StringBuilder()); - continue; - } - } - - string absolutePath; - if (renderPipelineInclude) - absolutePath = VFXLibrary.currentSRPBinder.templatePath + "/" + includePath; - else - absolutePath = VisualEffectGraphPackageInfo.assetPackagePath + "/" + includePath; - dependencies.Add(AssetDatabase.AssetPathToGUID(absolutePath)); - - var includeBuilder = GetFlattenedTemplateContent(absolutePath, includes, defines, dependencies); - ReplaceMultiline(templateContent, groups[0].Value, includeBuilder); - } - - includes.Remove(formattedPath); - return templateContent; - } - - static private void SubstituteMacros(StringBuilder builder) - { - var definesToCode = new Dictionary(); - var source = builder.ToString(); - Regex beginRegex = new Regex("\\${VFXBegin:(.*)}"); - - int currentPos = -1; - int builderOffset = 0; - while ((currentPos = source.IndexOf("${", StringComparison.Ordinal)) != -1) - { - int endPos = source.IndexOf('}', currentPos); - if (endPos == -1) - throw new FormatException("Ill-formed VFX tag (Missing closing brace"); - - var tag = source.Substring(currentPos, endPos - currentPos + 1); - // Replace any tag found - string macro; - if (definesToCode.TryGetValue(tag, out macro)) - { - builder.Remove(currentPos + builderOffset, tag.Length); - var indentedMacro = macro.Replace("\n", "\n" + GetIndent(source, currentPos)); - builder.Insert(currentPos + builderOffset, indentedMacro); - } - else - { - const string endStr = "${VFXEnd}"; - var match = beginRegex.Match(source, currentPos, tag.Length); - if (match.Success) - { - var macroStartPos = match.Index + match.Length; - var macroEndCodePos = source.IndexOf(endStr, macroStartPos); - if (macroEndCodePos == -1) - throw new FormatException("${VFXBegin} found without ${VFXEnd}"); - - var defineStr = "${" + match.Groups[1].Value + "}"; - definesToCode[defineStr] = source.Substring(macroStartPos, macroEndCodePos - macroStartPos); - - // Remove the define in builder - builder.Remove(match.Index + builderOffset, macroEndCodePos - match.Index + endStr.Length); - } - else if (tag == endStr) - throw new FormatException("${VFXEnd} found without ${VFXBegin}"); - else // Remove undefined tag - builder.Remove(currentPos + builderOffset, tag.Length); - } - - builderOffset += currentPos; - source = builder.ToString(builderOffset, builder.Length - builderOffset); - } - } - internal static Dictionary BuildExpressionToName(VFXContext context, VFXTaskCompiledData taskData) { var expressionToName = new Dictionary(taskData.uniformMapper.expressionToCode); @@ -648,7 +513,7 @@ internal static void BuildLoadContextData(VFXDataParticle.GraphValuesLayout grap loadContextData = loadContextDataShaderWriter.ToString(); } - static private StringBuilder Build( + private static StringBuilder Build( VFXContext context, VFXTask task, string templatePath, @@ -656,6 +521,7 @@ static private StringBuilder Build( VFXTaskCompiledData taskData, HashSet dependencies, bool enableShaderDebugSymbols, + Cache codeGeneratorCache, out List errors) { errors = null; @@ -690,8 +556,10 @@ static private StringBuilder Build( } } - var allAdditionalDefines = context.additionalDefines.Concat(task.additionalDefines ?? Enumerable.Empty()); - var stringBuilder = GetFlattenedTemplateContent(templatePath, new List(), allAdditionalDefines, dependencies); + VFXShaderSnippets.ShaderGenerationData shaderGenerationData = new VFXShaderSnippets.ShaderGenerationData(); + codeGeneratorCache.ClearSnippets(); + + var allAdditionalDefines = context.additionalDefines.Concat(task.additionalDefines ?? Enumerable.Empty()).ToHashSet(); var allCurrentAttributes = contextData.GetAttributes().Where(a => (contextData.IsCurrentAttributeUsed(a.attrib, context)) || @@ -719,7 +587,12 @@ static private StringBuilder Build( globalDeclaration.WriteEventBuffers(eventListOutName, taskData.linkedEventOut.Length); var expressionToName = BuildExpressionToName(context, taskData); - BuildContextBlocks(context, taskData, expressionToName, out var blockFunction, out var blockCallFunction, out var blockIncludes, out var blockDefines); + shaderGenerationData.m_ExpressionToName = BuildExpressionToName(context, taskData); + BuildContextBlocks(context, taskData, expressionToName, + out var blockFunction, + out var blockCallFunction, + out var blockIncludes, + out var blockDefines); //< Final composition var globalIncludeContent = new VFXShaderWriter(); @@ -727,7 +600,6 @@ static private StringBuilder Build( if (enableShaderDebugSymbols) { globalIncludeContent.WriteLine("#pragma enable_d3d11_debug_symbols"); - globalIncludeContent.WriteLine(); } globalIncludeContent.WriteLine("#define NB_THREADS_PER_GROUP " + nbThreadsPerGroup); @@ -752,13 +624,7 @@ static private StringBuilder Build( // We consider that tasks are always generating a compute shader. bool generateComputes = task.shaderType == VFXTaskShaderType.ComputeShader; - var renderTemplatePipePath = VFXLibrary.currentSRPBinder.templatePath; var renderRuntimePipePath = VFXLibrary.currentSRPBinder.runtimePath; - if (!generateComputes && !string.IsNullOrEmpty(renderTemplatePipePath)) - { - string renderPipePasses = renderTemplatePipePath + "/VFXPasses.template"; - globalIncludeContent.Write(GetFlattenedTemplateContent(renderPipePasses, new List(), allAdditionalDefines, dependencies)); - } if (contextData is ISpaceable) { @@ -781,90 +647,66 @@ static private StringBuilder Build( { perPassIncludeContent.WriteLine("#include \"Packages/com.unity.visualeffectgraph/Shaders/VFXCommonOutput.hlsl\""); } + globalIncludeContent.Write(blockDefines.builder.ToString()); perPassIncludeContent.Write(blockIncludes.builder.ToString()); - ReplaceMultiline(stringBuilder, "${VFXGlobalInclude}", globalIncludeContent.builder); - ReplaceMultiline(stringBuilder, "${VFXGlobalDeclaration}", globalDeclaration.builder); - ReplaceMultiline(stringBuilder, "${VFXPerPassInclude}", perPassIncludeContent.builder); - ReplaceMultiline(stringBuilder, "${VFXGeneratedBlockFunction}", blockFunction.builder); - ReplaceMultiline(stringBuilder, "${VFXProcessBlocks}", blockCallFunction.builder); + codeGeneratorCache.TryAddSnippet("${VFXGlobalInclude}",globalIncludeContent.builder); + codeGeneratorCache.TryAddSnippet("${VFXGlobalDeclaration}", globalDeclaration.builder); + codeGeneratorCache.TryAddSnippet("${VFXPerPassInclude}", perPassIncludeContent.builder); + codeGeneratorCache.TryAddSnippet("${VFXGeneratedBlockFunction}", blockFunction.builder); + codeGeneratorCache.TryAddSnippet("${VFXProcessBlocks}", blockCallFunction.builder); VFXShaderWriter fillGraphValueStruct = new VFXShaderWriter(); fillGraphValueStruct.GenerateFillGraphValuesStruct(taskData.uniformMapper, particleData.graphValuesLayout); - ReplaceMultiline(stringBuilder, "${VFXLoadGraphValues}", fillGraphValueStruct.builder); + codeGeneratorCache.TryAddSnippet("${VFXLoadGraphValues}", fillGraphValueStruct.builder); VFXShaderWriter loadContextData = new VFXShaderWriter(); loadContextData.GenerateLoadContextData(particleData.graphValuesLayout); - ReplaceMultiline(stringBuilder, "${VFXLoadContextData}", loadContextData.builder); - - var mainParameters = taskData.gpuMapper.CollectExpression(-1).ToArray(); - foreach (var match in GetUniqueMatches("\\${VFXLoadParameter:{(.*?)}}", stringBuilder.ToString())) - { - var str = match.Groups[0].Value; - var pattern = match.Groups[1].Value; - var loadParameters = GenerateLoadParameter(pattern, mainParameters, expressionToName); - ReplaceMultiline(stringBuilder, str, loadParameters.builder); - } + codeGeneratorCache.TryAddSnippet("${VFXLoadContextData}", loadContextData.builder); + shaderGenerationData.m_MainParameters = taskData.gpuMapper.CollectExpression(-1).ToArray(); // Old SG integration - VFXOldShaderGraphHelpers.ReplaceShaderGraphTag(stringBuilder, context, mainParameters, expressionToName); + VFXOldShaderGraphHelpers.ReplaceShaderGraphTag(context, shaderGenerationData.m_MainParameters, expressionToName, codeGeneratorCache); //< Load Attribute - if (stringBuilder.ToString().Contains("${VFXLoadAttributes}")) - { - var loadAttributes = GenerateLoadAttribute(".*", context, taskData); - ReplaceMultiline(stringBuilder, "${VFXLoadAttributes}", loadAttributes.builder); - } - - foreach (var match in GetUniqueMatches("\\${VFXLoadAttributes:{(.*?)}}", stringBuilder.ToString())) - { - var str = match.Groups[0].Value; - var pattern = match.Groups[1].Value; - var loadAttributes = GenerateLoadAttribute(pattern, context, taskData); - ReplaceMultiline(stringBuilder, str, loadAttributes.builder); - } + var loadAttributes = GenerateLoadAttribute(null, context, taskData); + codeGeneratorCache.TryAddSnippet("${VFXLoadAttributes}", loadAttributes.builder); //< Store Attribute - if (stringBuilder.ToString().Contains("${VFXStoreAttributes}")) - { - var storeAttribute = GenerateStoreAttribute(".*", context, (uint)taskData.linkedEventOut.Length); - ReplaceMultiline(stringBuilder, "${VFXStoreAttributes}", storeAttribute.builder); - } - - foreach (var match in GetUniqueMatches("\\${VFXStoreAttributes:{(.*?)}}", stringBuilder.ToString())) - { - var str = match.Groups[0].Value; - var pattern = match.Groups[1].Value; - var storeAttributes = GenerateStoreAttribute(pattern, context, (uint)taskData.linkedEventOut.Length); - ReplaceMultiline(stringBuilder, str, storeAttributes.builder); - } + var storeAttribute = GenerateStoreAttribute(".*", context, (uint)taskData.linkedEventOut.Length); + codeGeneratorCache.TryAddSnippet("${VFXStoreAttributes}", storeAttribute.builder); //< Detect needed pragma require var useCubeArray = taskData.uniformMapper.textures.Any(o => o.valueType == VFXValueType.TextureCubeArray); var pragmaRequire = useCubeArray ? new StringBuilder("#pragma require cubearray") : new StringBuilder(); - ReplaceMultiline(stringBuilder, "${VFXPragmaRequire}", pragmaRequire); + codeGeneratorCache.TryAddSnippet("${VFXPragmaRequire}", pragmaRequire); + if (VFXLibrary.currentSRPBinder != null) { var allowedRenderers = new StringBuilder("#pragma only_renderers "); allowedRenderers.Append(String.Join(" ", VFXLibrary.currentSRPBinder.GetSupportedGraphicDevices().Select(d => DeviceTypeToShaderString(d)))); - ReplaceMultiline(stringBuilder, "${VFXPragmaOnlyRenderers}", allowedRenderers); + codeGeneratorCache.TryAddSnippet("${VFXPragmaOnlyRenderers}", allowedRenderers); } - foreach (var addionalReplacement in context.additionalReplacements) - { - ReplaceMultiline(stringBuilder, addionalReplacement.Key, addionalReplacement.Value.builder); - } + foreach (var additionalReplacement in context.additionalReplacements) + codeGeneratorCache.TryAddSnippet(additionalReplacement.Key, additionalReplacement.Value.builder); + + shaderGenerationData.m_Context = context; + shaderGenerationData.m_TaskData = taskData; + shaderGenerationData.m_Defines = allAdditionalDefines; + shaderGenerationData.m_Dependencies = dependencies; + shaderGenerationData.m_CodeGeneratorCache = codeGeneratorCache; + shaderGenerationData.m_HumanReadable = true; - // Replace defines - SubstituteMacros(stringBuilder); + StringBuilder shaderStringSb = VFXShaderSnippets.GenerateShaderCode(templatePath, shaderGenerationData); if (VFXViewPreference.advancedLogs) - Debug.LogFormat("GENERATED_OUTPUT_FILE_FOR : {0}\n{1}", context.ToString(), stringBuilder.ToString()); + Debug.LogFormat("GENERATED_OUTPUT_FILE_FOR : {0}\n{1}", context.ToString(), shaderStringSb.ToString()); context.EndCompilation(); Profiler.EndSample(); - return stringBuilder; + return shaderStringSb; } static string DeviceTypeToShaderString(GraphicsDeviceType deviceType) => deviceType switch diff --git a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXGraphCompiledData.cs b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXGraphCompiledData.cs index 1206be92de6..73c6474c618 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXGraphCompiledData.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXGraphCompiledData.cs @@ -826,6 +826,7 @@ private void GenerateShaders(List outGeneratedCodeData, VFXEx Profiler.BeginSample("VFXEditor.GenerateShaders"); try { + var codeGeneratorCache = new VFXCodeGenerator.Cache(); var errorMessage = new StringBuilder(); foreach (var context in contexts) { @@ -846,7 +847,7 @@ private void GenerateShaders(List outGeneratedCodeData, VFXEx if (task.doesGenerateShader) { - var generatedContent = VFXCodeGenerator.Build(context, task, compilationMode, contextData, dependencies, enableShaderDebugSymbols, out var errors); + var generatedContent = VFXCodeGenerator.Build(context, task, compilationMode, contextData, dependencies, enableShaderDebugSymbols, codeGeneratorCache, out var errors); if (generatedContent != null && generatedContent.Length > 0) { contextData.indexInShaderSource = outGeneratedCodeData.Count; diff --git a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderSnippets.cs b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderSnippets.cs new file mode 100644 index 00000000000..acfb379cd8f --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderSnippets.cs @@ -0,0 +1,373 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace UnityEditor.VFX +{ + internal class VFXShaderSnippets + { + internal static StringBuilder GenerateShaderCode(string templatePath, ShaderGenerationData shaderGenerationData) + { + VFXSnippetNodeInclude rootNode = new VFXSnippetNodeInclude(templatePath, shaderGenerationData, ""); + StringBuilder shaderStringSb = new StringBuilder(); + rootNode.CollectChildren(); + rootNode.AppendContent(shaderStringSb); + return shaderStringSb; + } + + //This function insure to keep padding while replacing a specific string + private static string GetIndent(string src, int index) + { + int indentLength = 0; + index--; + while (index > 0 && (src[index] == ' ' || src[index] == '\t')) + { + index--; + indentLength++; + } + + if (indentLength > 0) + return src.Substring(index + 1, indentLength); + return string.Empty; + } + + private static string FormatPath(string path) + { + return Path.GetFullPath(path) + .TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar) +#if !UNITY_EDITOR_LINUX + .ToLowerInvariant() +#endif + ; + } + + internal class ShaderGenerationData + { + internal Dictionary m_ExpressionToName; + internal VFXNamedExpression[] m_MainParameters; + internal VFXContext m_Context; + internal VFXTaskCompiledData m_TaskData; + internal HashSet m_Defines; + internal HashSet m_Dependencies; + internal VFXCodeGenerator.Cache m_CodeGeneratorCache; + internal bool m_HumanReadable; + } + + internal class VFXSnippetNode + { + private static readonly char[] kDefineSeparator = { ',', ' ', '\t' }; + private const string kVFXBeginStr = "${VFXBegin"; + private const string kVFXEndStr = "${VFXEnd"; + private const string kVFXIncludeStr = "${VFXInclude"; + private const string kVFXLoadParameterStr = "${VFXLoadParameter"; + private const string kVFXLoadAttributesStr = "${VFXLoadAttributes"; + private const string kVFXStoreAttributesStr = "${VFXStoreAttributes"; + protected const string kEndLineStr = "\n"; + + private List m_Children; + protected string m_CurrentIndent; + protected ShaderGenerationData m_ShaderGenerationData; + + public VFXSnippetNode(ShaderGenerationData shaderGenerationData, string indent) + { + this.m_ShaderGenerationData = shaderGenerationData; + this.m_CurrentIndent = indent; + } + + public virtual void AppendContent(StringBuilder sb) + { + if (m_Children != null) + { + foreach (var snippet in m_Children) + { + snippet.AppendContent(sb); + } + } + } + + //Returns endIndex + protected int CollectChildrenFromString(string templateContent, int startIndex) + { + int index; + while (true) + { + index = -1; + if (startIndex <= templateContent.Length) + index = templateContent.IndexOf("${", startIndex, StringComparison.Ordinal); + if (index == -1) + { + AddRawContent(templateContent, startIndex, templateContent.Length); + break; + } + + AddRawContent(templateContent, startIndex, index); + + ExtractSnippet(templateContent, index, out string snippetWithDecoration, out string snippetIndent); + + if (m_ShaderGenerationData.m_CodeGeneratorCache.TryGetSnippet(snippetWithDecoration, out StringBuilder snippetContent)) + { + VFXSnippetNodeLeaf snippetLeaf = new VFXSnippetNodeLeaf(snippetContent, m_ShaderGenerationData, m_CurrentIndent + snippetIndent); + AddChildNode(snippetLeaf); + startIndex = index + snippetWithDecoration.Length; + } + else if (snippetWithDecoration.StartsWith(kVFXLoadParameterStr, StringComparison.Ordinal)) + startIndex = HandleLoadParameter(templateContent, index, snippetIndent); + else if (snippetWithDecoration.StartsWith(kVFXLoadAttributesStr, StringComparison.Ordinal)) + startIndex = HandleLoadAttribute(templateContent, index, snippetIndent); + else if (snippetWithDecoration.StartsWith(kVFXStoreAttributesStr, StringComparison.Ordinal)) + startIndex = HandleStoreAttribute(templateContent, index, snippetIndent); + else if (snippetWithDecoration.StartsWith(kVFXBeginStr, StringComparison.Ordinal)) + startIndex = HandleBeginTag(templateContent, snippetWithDecoration, index); + else if (snippetWithDecoration.StartsWith(kVFXEndStr, StringComparison.Ordinal)) + return index + snippetWithDecoration.Length + 1; + else if (snippetWithDecoration.StartsWith(kVFXIncludeStr, StringComparison.Ordinal)) + startIndex = + HandleTemplateInclude(templateContent, index, snippetIndent, snippetWithDecoration); + else + startIndex = index + snippetWithDecoration.Length + 1; + } + + return index; + } + private void AddChildNode(VFXSnippetNode node) + { + if (m_Children == null) + m_Children = new List(); + m_Children.Add(node); + } + + private void ExtractSnippet(string templateContent, int startIndex, out string snippetWithDecoration, out string snippetIndent) + { + int endIndex = templateContent.IndexOf("}", startIndex, StringComparison.Ordinal); + snippetWithDecoration = templateContent.Substring(startIndex, endIndex - startIndex + 1); + snippetIndent = GetIndent(templateContent, startIndex); + } + + private void AddRawContent(string templateContent, int startIndex, int index) + { + string leafContent = templateContent.Substring(startIndex, index - startIndex); + if (!string.IsNullOrEmpty(leafContent)) + { + VFXSnippetNodeLeaf leaf = new VFXSnippetNodeLeaf(leafContent, m_ShaderGenerationData, m_CurrentIndent); + AddChildNode(leaf); + } + } + private void MatchTemplateIncludePattern(string templateContent, int index, out string includePath, out string includeDefinesRaw, out bool renderPipelineInclude) + { + int includeNameBeginIndex = templateContent.IndexOf("\"", index, StringComparison.Ordinal) + 1; + int includeNameEndIndex = templateContent.IndexOf("\"", includeNameBeginIndex + 1, StringComparison.Ordinal); + includePath = + templateContent.Substring(includeNameBeginIndex, includeNameEndIndex - includeNameBeginIndex); + + renderPipelineInclude = templateContent.IndexOf("RP", index, includeNameBeginIndex - index, StringComparison.Ordinal) != -1; + + int definesBeginIndex = includeNameEndIndex + 2; + int definesEndIndex = templateContent.IndexOf("}", definesBeginIndex, StringComparison.Ordinal); + includeDefinesRaw = templateContent.Substring(definesBeginIndex, definesEndIndex - definesBeginIndex); + } + + private int HandleTemplateInclude(string templateContent, int index, string snippetIndent, string snippetWithDecoration) + { + bool AcceptInclude(string includeDefinesFused) + { + var includeDefines = includeDefinesFused.Split(kDefineSeparator, StringSplitOptions.RemoveEmptyEntries); + foreach(var define in includeDefines) + { + if (define[0] != '!') + { + if (!m_ShaderGenerationData.m_Defines.Contains(define)) + return false; + } + else if (m_ShaderGenerationData.m_Defines.Contains(define.Substring(1))) + return false; + } + + return true; + } + + MatchTemplateIncludePattern(templateContent, index, out string includePath, + out string includeDefinesRaw, out bool renderPipelineInclude); + + if(string.IsNullOrEmpty(includeDefinesRaw) || AcceptInclude(includeDefinesRaw)) + { + string absolutePath = $"{(renderPipelineInclude ? VFXLibrary.currentSRPBinder.templatePath : VisualEffectGraphPackageInfo.assetPackagePath)}/{includePath}"; + VFXSnippetNodeInclude includeSnippetNode = new VFXSnippetNodeInclude(absolutePath, m_ShaderGenerationData, m_CurrentIndent + snippetIndent); + includeSnippetNode.CollectChildren(); + AddChildNode(includeSnippetNode); + } + + var startIndex = index + snippetWithDecoration.Length; + return startIndex; + } + + private int HandleBeginTag(string templateContent, string snippetWithDecoration, int index) + { + string macroName = snippetWithDecoration.Substring(kVFXBeginStr.Length + 1, + snippetWithDecoration.Length - kVFXBeginStr.Length - 2); + int startIndex = index + snippetWithDecoration.Length; + if (templateContent[startIndex] == '\n') + startIndex += 1; + VFXSnippetNodeMacroDefinition macroDefinitionNode = + new VFXSnippetNodeMacroDefinition(macroName, m_ShaderGenerationData, ""); + startIndex = macroDefinitionNode.CollectChildrenFromString(templateContent, startIndex); + macroDefinitionNode.ExpandMacroAndStore(); + AddChildNode(macroDefinitionNode); + return startIndex; + } + + private void MatchSnippetPattern(string templateContent, int index, out string key, out string pattern) + { + int endIndex = templateContent.IndexOf("}}", index, StringComparison.Ordinal) + 2; + int patternIndex = templateContent.IndexOf(":{", index, StringComparison.Ordinal) + 2; + key = templateContent.Substring(index, endIndex - index); + pattern = templateContent.Substring(patternIndex, endIndex - patternIndex - 2); + } + + private void AddLeafNodeFromShaderWriter(string snippetIndent, VFXShaderWriter shaderWriter, string str) + { + VFXSnippetNodeLeaf snippetNodeLeaf = new VFXSnippetNodeLeaf(shaderWriter.builder, + m_ShaderGenerationData, m_CurrentIndent + snippetIndent); + AddChildNode(snippetNodeLeaf); + m_ShaderGenerationData.m_CodeGeneratorCache.TryAddSnippet(str, shaderWriter.builder); + } + + private int HandleStoreAttribute(string templateContent, int index, string snippetIndent) + { + MatchSnippetPattern(templateContent, index, out string key, out string pattern); + var storeAttribute = VFXCodeGenerator.GenerateStoreAttribute(pattern, m_ShaderGenerationData.m_Context, + (uint)m_ShaderGenerationData.m_TaskData.linkedEventOut.Length); + AddLeafNodeFromShaderWriter(snippetIndent, storeAttribute, key); + int startIndex = index + key.Length + 1; + return startIndex; + } + + private int HandleLoadAttribute(string templateContent, int index, string snippetIndent) + { + MatchSnippetPattern(templateContent, index, out string key, out string pattern); + var loadAttribute = VFXCodeGenerator.GenerateLoadAttribute(pattern, m_ShaderGenerationData.m_Context, + m_ShaderGenerationData.m_TaskData); + AddLeafNodeFromShaderWriter(snippetIndent, loadAttribute, key); + int startIndex = index + key.Length + 1; + return startIndex; + } + + private int HandleLoadParameter(string templateContent, int index, string snippetIndent) + { + MatchSnippetPattern(templateContent, index, out string key, out string pattern); + var loadParameters = VFXCodeGenerator.GenerateLoadParameter(pattern, + m_ShaderGenerationData.m_MainParameters, m_ShaderGenerationData.m_ExpressionToName); + if (string.IsNullOrEmpty(loadParameters.ToString())) + loadParameters.builder.AppendLine(); + + AddLeafNodeFromShaderWriter(snippetIndent, loadParameters, key); + int startIndex = index + key.Length; + return startIndex; + } + } + + class VFXSnippetNodeLeaf : VFXSnippetNode + { + private StringBuilder m_LeafContentSb; + private string m_LeafContentStr; + + internal VFXSnippetNodeLeaf(StringBuilder leafContentSb, ShaderGenerationData shaderGenerationData, string indent) : base(shaderGenerationData, indent) + { + //Copy to not accumulate indent + this.m_LeafContentSb = new StringBuilder(); + this.m_LeafContentSb.Append(leafContentSb); + } + + internal VFXSnippetNodeLeaf(string leafContentStr, ShaderGenerationData shaderGenerationData, string indent) : base(shaderGenerationData, indent) + { + this.m_LeafContentStr = leafContentStr; + } + + public override void AppendContent(StringBuilder sb) + { + if (m_ShaderGenerationData.m_HumanReadable && m_CurrentIndent.Length > 0) + { + if (m_LeafContentSb != null) + { + m_LeafContentSb.Replace(kEndLineStr, kEndLineStr + m_CurrentIndent); + sb.Append(m_LeafContentSb); + } + else + { + var lines = m_LeafContentStr.Split(kEndLineStr, StringSplitOptions.None); + int i = 0; + foreach (var line in lines) + { + if (i > 0) + sb.Append(kEndLineStr + m_CurrentIndent); + sb.Append(line); + i++; + } + } + } + else + { + if (m_LeafContentSb != null) + sb.Append(m_LeafContentSb); + else + sb.Append(m_LeafContentStr); + } + } + } + + internal class VFXSnippetNodeInclude : VFXSnippetNode + { + private string m_IncludePath; + + internal VFXSnippetNodeInclude(string includePath, ShaderGenerationData shaderGenerationData, string indent) : base(shaderGenerationData, indent) + { + this.m_IncludePath = includePath; + } + + public void CollectChildren() + { + if (!m_ShaderGenerationData.m_CodeGeneratorCache.TryGetTemplateCache(m_IncludePath, out var templateContent)) + { + m_ShaderGenerationData.m_Dependencies.Add(AssetDatabase.AssetPathToGUID(m_IncludePath)); + var formattedPath = FormatPath(m_IncludePath); + templateContent = File.ReadAllText(formattedPath); + m_ShaderGenerationData.m_CodeGeneratorCache.AddTemplateCache(m_IncludePath, templateContent); + } + CollectChildrenFromString(templateContent, 0); + } + } + + class VFXSnippetNodeMacroDefinition : VFXSnippetNode + { + private string m_MacroName; + private StringBuilder m_ExpandedMacro; + private bool m_Expanded; + + internal VFXSnippetNodeMacroDefinition(string macroName, ShaderGenerationData shaderGenerationData, + string indent) : base(shaderGenerationData, indent) + { + this.m_MacroName = macroName; + } + + public void ExpandMacroAndStore() + { + StringBuilder sb = new StringBuilder(); + AppendContent(sb); + m_ExpandedMacro = sb; + string snippetizedMacroName = $"${{{m_MacroName}}}"; + if (!m_ShaderGenerationData.m_CodeGeneratorCache.TryAddSnippet(snippetizedMacroName, m_ExpandedMacro)) + { + m_ShaderGenerationData.m_CodeGeneratorCache.SetSnippet(snippetizedMacroName,m_ExpandedMacro); + } + + m_Expanded = true; + } + + public override void AppendContent(StringBuilder sb) + { + if (!m_Expanded) + base.AppendContent(sb); + } + } + } +} diff --git a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderSnippets.cs.meta b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderSnippets.cs.meta new file mode 100644 index 00000000000..516c437a617 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderSnippets.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7245be2bea814067bbd30db1d94c2cb4 +timeCreated: 1720614463 \ No newline at end of file diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/VFXBlockUtility.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/VFXBlockUtility.cs index 5365a63b3a2..f56314bfa9b 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/VFXBlockUtility.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/VFXBlockUtility.cs @@ -146,46 +146,6 @@ public static string GetRandStringFromSize(int size) return "RAND" + ((size != 1) ? size.ToString() : ""); } - // TODO Remove that - public static string GetSizeVector(VFXContext context, int nbComponents = 3) - { - var data = context.GetData(); - - string size = data.IsCurrentAttributeRead(VFXAttribute.Size, context) ? "size" : VFXAttribute.kDefaultSize.ToString(); - string scaleX = data.IsCurrentAttributeRead(VFXAttribute.ScaleX, context) ? "scaleX" : "1.0f"; - string scaleY = nbComponents >= 2 && data.IsCurrentAttributeRead(VFXAttribute.ScaleY, context) ? "scaleY" : "1.0f"; - string scaleZ = nbComponents >= 3 && data.IsCurrentAttributeRead(VFXAttribute.ScaleZ, context) ? "scaleZ" : "1.0f"; - - switch (nbComponents) - { - case 1: return string.Format("(size * {0})", scaleX); - case 2: return string.Format("(size * float2({0},{1}))", scaleX, scaleY); - case 3: return string.Format("(size * float3({0},{1},{2}))", scaleX, scaleY, scaleZ); - default: - throw new ArgumentException("NbComponents must be between 1 and 3"); - } - } - - // TODO Remove that - public static string SetSizesFromVector(VFXContext context, string vector, int nbComponents = 3) - { - if (nbComponents < 1 || nbComponents > 3) - throw new ArgumentException("NbComponents must be between 1 and 3"); - - var data = context.GetData(); - - string res = string.Empty; - - if (data.IsCurrentAttributeWritten(VFXAttribute.ScaleX, context)) - res += string.Format("scaleX = {0}.x / size;\n", vector); - if (nbComponents >= 2 && data.IsCurrentAttributeWritten(VFXAttribute.ScaleY, context)) - res += string.Format("scaleY = {0}.y / size;\n", vector); - if (nbComponents >= 3 && data.IsCurrentAttributeWritten(VFXAttribute.ScaleZ, context)) - res += string.Format("scaleZ = {0}.z / size;\n", vector); - - return res.TrimEnd(new[] { '\n' }); - } - private static bool ConvertToVariadicAttributeIfNeeded(VFXGraph vfxGraph, ref string attribName, out VariadicChannelOptions outChannel) { try diff --git a/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXOldShaderGraphHelpers.cs b/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXOldShaderGraphHelpers.cs index c97f7253c11..8e58e061961 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXOldShaderGraphHelpers.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXOldShaderGraphHelpers.cs @@ -20,7 +20,6 @@ public class RPInfo { public Dictionary passInfos; HashSet m_AllPorts; - public IEnumerable allPorts { get @@ -42,6 +41,28 @@ public IEnumerable allPorts } } + private const string kVFXShaderGraphFunctionsIncludeHDRP = + "#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl\"" + + "\n#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl\"" + + "\n#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/Packing.hlsl\"" + + "\n#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl\"" + + "\n#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/EntityLighting.hlsl\"" + + "\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/Material/BuiltinGIUtilities.hlsl\"" + + "\n#ifndef SHADERPASS" + + "\n#error Shaderpass should be defined at this stage." + + "\n#endif" + + "\n#include \"Packages/com.unity.render-pipelines.high-definition/Runtime/ShaderLibrary/ShaderGraphFunctions.hlsl\""; + + private const string kVFXShaderGraphFunctionsIncludeURP = + "#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl\"\n" + + "#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/Packing.hlsl\"\n" + + "#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl\"\n" + + "#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/EntityLighting.hlsl\"\n" + + "#include \"Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl\"\n" + + "#include \"Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl\"\n" + + "#include_with_pragmas \"Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl\"\n" + + "#include \"Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRendering.hlsl\""; + public static readonly RPInfo hdrpInfo = new RPInfo { passInfos = new Dictionary() @@ -51,6 +72,7 @@ public IEnumerable allPorts { "DepthNormals", new PassInfo() { vertexPorts = new int[] {}, pixelPorts = new int[] { ShaderGraphVfxAsset.AlphaSlotId, ShaderGraphVfxAsset.AlphaThresholdSlotId, ShaderGraphVfxAsset.NormalSlotId } } } } }; + public static readonly RPInfo hdrpLitInfo = new RPInfo { passInfos = new Dictionary() @@ -111,7 +133,7 @@ public static Dictionary BuildGraphCode(ShaderGraphVfxAsset s return graphCodes; } - public static IEnumerable GetAdditionalDefinesGetAdditionalReplacement(ShaderGraphVfxAsset shaderGraph, RPInfo info, Dictionary graphCodes) + public static IEnumerable GetAdditionalDefinesGetAdditionalReplacement(ShaderGraphVfxAsset shaderGraph, RPInfo info, Dictionary graphCodes, bool isMesh) { yield return "VFX_SHADERGRAPH"; @@ -145,8 +167,27 @@ public static IEnumerable GetAdditionalDefinesGetAdditionalReplacement(S yield return $"SHADERGRAPH_NEEDS_TANGENT_{kvPass.Key.ToUpper(CultureInfo.InvariantCulture)}"; needsPosWS |= NeedsPositionWorldInterpolator(graphCode); + + if (isMesh) + { + for (UVChannel uv = UVChannel.UV1; uv <= UVChannel.UV3; ++uv) + { + if (graphCode.requirements.requiresMeshUVs.Contains(uv)) + { + int uvi = (int)uv; + yield return $"VFX_SHADERGRAPH_HAS_UV{uvi}"; + } + } + + if (graphCode.requirements.requiresVertexColor) + { + yield return "VFX_SHADERGRAPH_HAS_COLOR"; + } + } } + + // TODO Put that per pass ? if (needsPosWS) yield return "VFX_NEEDS_POSWS_INTERPOLATOR"; @@ -170,7 +211,10 @@ public static IEnumerable> GetAdditionalRe preProcess.WriteLine("#define REQUIRE_OPAQUE_TEXTURE"); if (graphCode.requirements.requiresDepthTexture) preProcess.WriteLine("#define REQUIRE_DEPTH_TEXTURE"); - preProcess.WriteLine("${VFXShaderGraphFunctionsInclude}\n"); + string rpIncludes = VFXLibrary.currentSRPBinder.SRPAssetTypeStr == "HDRenderPipelineAsset" + ? kVFXShaderGraphFunctionsIncludeHDRP + : kVFXShaderGraphFunctionsIncludeURP; + preProcess.WriteLine(rpIncludes); yield return new KeyValuePair("${SHADERGRAPH_PIXEL_CODE_" + kvPass.Key.ToUpper(CultureInfo.InvariantCulture) + "}", new VFXShaderWriter(preProcess.ToString() + graphCode.code)); var callSG = new VFXShaderWriter("//Call Shader Graph\n"); @@ -309,14 +353,12 @@ public static IEnumerable> GetAdditionalRe if (graphCode.requirements.requiresMeshUVs.Contains(uv)) { int uvi = (int)uv; - yield return new KeyValuePair($"VFX_SHADERGRAPH_HAS_UV{uvi}", new VFXShaderWriter("1")); // TODO put that in additionalDefines callSG.builder.AppendLine($"INSG.uv{uvi} = i.uv{uvi};"); } } if (graphCode.requirements.requiresVertexColor) { - yield return new KeyValuePair($"VFX_SHADERGRAPH_HAS_COLOR", new VFXShaderWriter("1")); // TODO put that in additionalDefines callSG.builder.AppendLine($"INSG.VertexColor = i.vertexColor;"); } } @@ -345,7 +387,7 @@ public static IEnumerable> GetAdditionalRe } } - public static void ReplaceShaderGraphTag(StringBuilder stringBuilder, VFXContext context, VFXNamedExpression[] namedExpressions, Dictionary expressionToName) + public static void ReplaceShaderGraphTag(VFXContext context, VFXNamedExpression[] namedExpressions, Dictionary expressionToName, VFXCodeGenerator.Cache codeGeneratorCache) { var shaderGraph = VFXShaderGraphHelpers.GetShaderGraph(context); if (shaderGraph == null || shaderGraph.generatesWithShaderGraph) @@ -391,9 +433,10 @@ public static void ReplaceShaderGraphTag(StringBuilder stringBuilder, VFXContext additionalInterpolantsPreparation.WriteVariable(filteredNamedExpression.exp.valueType, filteredNamedExpression.name, filteredNamedExpression.exp.GetCodeString(null)); } } - VFXCodeGenerator.ReplaceMultiline(stringBuilder, "${VFXAdditionalInterpolantsGeneration}", additionalInterpolantsGeneration.builder); - VFXCodeGenerator.ReplaceMultiline(stringBuilder, "${VFXAdditionalInterpolantsDeclaration}", additionalInterpolantsDeclaration.builder); - VFXCodeGenerator.ReplaceMultiline(stringBuilder, "${VFXAdditionalInterpolantsPreparation}", additionalInterpolantsPreparation.builder); + + codeGeneratorCache.TryAddSnippet("${VFXAdditionalInterpolantsGeneration}", additionalInterpolantsGeneration.builder); + codeGeneratorCache.TryAddSnippet("${VFXAdditionalInterpolantsDeclaration}", additionalInterpolantsDeclaration.builder); + codeGeneratorCache.TryAddSnippet("${VFXAdditionalInterpolantsPreparation}", additionalInterpolantsPreparation.builder); } } diff --git a/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXShaderGraphParticleOutput.cs b/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXShaderGraphParticleOutput.cs index 4a439005688..bab566c132e 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXShaderGraphParticleOutput.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXShaderGraphParticleOutput.cs @@ -284,7 +284,7 @@ public override IEnumerable additionalDefines var shaderGraph = GetOrRefreshShaderGraphObject(); if (shaderGraph != null && !shaderGraph.generatesWithShaderGraph) { - foreach (var def in VFXOldShaderGraphHelpers.GetAdditionalDefinesGetAdditionalReplacement(shaderGraph, currentRP, graphCodes)) + foreach (var def in VFXOldShaderGraphHelpers.GetAdditionalDefinesGetAdditionalReplacement(shaderGraph, currentRP, graphCodes, taskType == VFXTaskType.ParticleMeshOutput)) yield return def; } } diff --git a/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXSubTarget.cs b/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXSubTarget.cs index ff5269ea7a3..20b694e5ebf 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXSubTarget.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/ShaderGraph/VFXSubTarget.cs @@ -268,17 +268,17 @@ static void GenerateVFXAdditionalCommands(VFXContext context, VFXSRPBinder srp, additionalDefinesDescriptor = new AdditionalCommandDescriptor("VFXDefines", additionalDefines.ToString()); // Load Position Attribute - loadPositionAttributeDescriptor = new AdditionalCommandDescriptor("VFXLoadPositionAttribute", VFXCodeGenerator.GenerateLoadAttribute("position", context, taskData).ToString().ToString()); + loadPositionAttributeDescriptor = new AdditionalCommandDescriptor("VFXLoadPositionAttribute", VFXCodeGenerator.GenerateLoadAttribute("position", context, taskData).ToString()); // Load Crop Factor Attribute var mainParameters = taskData.gpuMapper.CollectExpression(-1).ToArray(); - loadCropFactorAttributesDescriptor = new AdditionalCommandDescriptor("VFXLoadCropFactorParameter", VFXCodeGenerator.GenerateLoadParameter("cropFactor", mainParameters, expressionToName).ToString().ToString()); - loadTexcoordAttributesDescriptor = new AdditionalCommandDescriptor("VFXLoadTexcoordParameter", VFXCodeGenerator.GenerateLoadParameter("texCoord", mainParameters, expressionToName).ToString().ToString()); - loadCurrentFrameIndexParameterDescriptor = new AdditionalCommandDescriptor("VFXLoadCurrentFrameIndexParameter", VFXCodeGenerator.GenerateLoadParameter("currentFrameIndex", mainParameters, expressionToName).ToString().ToString()); - loadRayTracedScalingAttributesDescriptor = new AdditionalCommandDescriptor("VFXLoadRayTracedScaling", VFXCodeGenerator.GenerateLoadParameter("rayTracedScaling", mainParameters, expressionToName).ToString().ToString()); + loadCropFactorAttributesDescriptor = new AdditionalCommandDescriptor("VFXLoadCropFactorParameter", VFXCodeGenerator.GenerateLoadParameter("cropFactor", mainParameters, expressionToName).ToString()); + loadTexcoordAttributesDescriptor = new AdditionalCommandDescriptor("VFXLoadTexcoordParameter", VFXCodeGenerator.GenerateLoadParameter("texCoord", mainParameters, expressionToName).ToString()); + loadCurrentFrameIndexParameterDescriptor = new AdditionalCommandDescriptor("VFXLoadCurrentFrameIndexParameter", VFXCodeGenerator.GenerateLoadParameter("currentFrameIndex", mainParameters, expressionToName).ToString()); + loadRayTracedScalingAttributesDescriptor = new AdditionalCommandDescriptor("VFXLoadRayTracedScaling", VFXCodeGenerator.GenerateLoadParameter("rayTracedScaling", mainParameters, expressionToName).ToString()); //Set VFX Instancing indices - setInstancingIndicesDescriptor = new AdditionalCommandDescriptor("VFXInitInstancing", VFXCodeGenerator.GenerateSetInstancingIndices(context).ToString()); + setInstancingIndicesDescriptor = new AdditionalCommandDescriptor("VFXInitInstancing", VFXCodeGenerator.GenerateSetInstancingIndices().ToString()); additionalFragInputs = GenerateFragInputs(context, taskData); } diff --git a/Packages/com.unity.visualeffectgraph/Shaders/ParticleHexahedron/PassDepthOrMV.template b/Packages/com.unity.visualeffectgraph/Shaders/ParticleHexahedron/PassDepthOrMV.template index af95cc52b19..e9815aa9637 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/ParticleHexahedron/PassDepthOrMV.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/ParticleHexahedron/PassDepthOrMV.template @@ -12,7 +12,7 @@ struct ps_input #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR VFX_DECLARE_MOTION_VECTORS_STORAGE(2,3) #endif - + nointerpolation uint faceID : TEXCOORD4; UNITY_VERTEX_OUTPUT_STEREO @@ -51,4 +51,4 @@ ${VFXEnd} ${VFXInclude("Shaders/ParticleHexahedron/Pass.template")} #define VFX_PROCEDURAL_UV VFXCubeGetUV #define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1 -${VFXPassDepthCommonFragmentUnlit} +${VFXInclude("Shaders/VFXPassDepthCommonFragmentUnlit.template")} diff --git a/Packages/com.unity.visualeffectgraph/Shaders/ParticleLines/PassDepthOrMV.template b/Packages/com.unity.visualeffectgraph/Shaders/ParticleLines/PassDepthOrMV.template index 2ed95ab4d80..8b4738a5f9e 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/ParticleLines/PassDepthOrMV.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/ParticleLines/PassDepthOrMV.template @@ -34,4 +34,4 @@ ${VFXPassDepthDefine} ${VFXInclude("Shaders/ParticleLines/Pass.template")} #define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 0 -${VFXPassDepthCommonFragmentUnlit} +${VFXInclude("Shaders/VFXPassDepthCommonFragmentUnlit.template")} diff --git a/Packages/com.unity.visualeffectgraph/Shaders/ParticleLinesSW/PassDepthOrMV.template b/Packages/com.unity.visualeffectgraph/Shaders/ParticleLinesSW/PassDepthOrMV.template index 764cd116f1f..61c7deb8aeb 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/ParticleLinesSW/PassDepthOrMV.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/ParticleLinesSW/PassDepthOrMV.template @@ -33,4 +33,4 @@ ${VFXPassDepthDefine} ${VFXInclude("Shaders/ParticleLinesSW/Pass.template")} #define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 0 -${VFXPassDepthCommonFragmentUnlit} +${VFXInclude("Shaders/VFXPassDepthCommonFragmentUnlit.template")} diff --git a/Packages/com.unity.visualeffectgraph/Shaders/ParticleMeshes/PassDepthOrMV.template b/Packages/com.unity.visualeffectgraph/Shaders/ParticleMeshes/PassDepthOrMV.template index 22deb1db90b..c097b7a24d3 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/ParticleMeshes/PassDepthOrMV.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/ParticleMeshes/PassDepthOrMV.template @@ -102,5 +102,5 @@ ${VFXPassShadowDefine} ${VFXInclude("Shaders/ParticleMeshes/Pass.template")} #define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1 -${VFXPassDepthCommonFragmentUnlit} +${VFXInclude("Shaders/VFXPassDepthCommonFragmentUnlit.template")} diff --git a/Packages/com.unity.visualeffectgraph/Shaders/ParticlePlanarPrimitives/PassDepthOrMV.template b/Packages/com.unity.visualeffectgraph/Shaders/ParticlePlanarPrimitives/PassDepthOrMV.template index 83c466dfdba..fdaeed888f0 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/ParticlePlanarPrimitives/PassDepthOrMV.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/ParticlePlanarPrimitives/PassDepthOrMV.template @@ -98,4 +98,4 @@ ${VFXEnd} ${VFXInclude("Shaders/ParticlePlanarPrimitives/Pass.template")} #define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 1 -${VFXPassDepthCommonFragmentUnlit} +${VFXInclude("Shaders/VFXPassDepthCommonFragmentUnlit.template")} diff --git a/Packages/com.unity.visualeffectgraph/Shaders/ParticlePoints/PassDepthOrMV.template b/Packages/com.unity.visualeffectgraph/Shaders/ParticlePoints/PassDepthOrMV.template index fa72cc58927..706df5c95e9 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/ParticlePoints/PassDepthOrMV.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/ParticlePoints/PassDepthOrMV.template @@ -39,4 +39,4 @@ ${VFXPassDepthDefine} ${VFXInclude("Shaders/ParticlePoints/Pass.template")} #define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 0 -${VFXPassDepthCommonFragmentUnlit} +${VFXInclude("Shaders/VFXPassDepthCommonFragmentUnlit.template")} diff --git a/Packages/com.unity.visualeffectgraph/Shaders/SixWay/SixWayVaryings.template b/Packages/com.unity.visualeffectgraph/Shaders/SixWay/SixWayVaryings.template index a5fc7f405f2..82505a30b30 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/SixWay/SixWayVaryings.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/SixWay/SixWayVaryings.template @@ -1,60 +1,60 @@ #define USE_EMISSIVE_MAP HDRP_USE_EMISSIVE_MAP || URP_USE_EMISSIVE_MAP ${VFXBegin:SixWayVaryingsMacros} - #if VFX_SIX_WAY_COLOR_ABSORPTION - #define VFX_VARYING_ABSORPTIONRANGE absorptionRange - #endif - #if VFX_SIX_WAY_USE_ALPHA_REMAP - #define VFX_VARYING_ALPHA_REMAP alphaRemap - #endif - #if VFX_SIX_WAY_USE_ONE_EMISSIVE_CHANNEL - #define VFX_VARYING_EMISSIVE_GRADIENT emissiveControls.xy - #if VFX_SIX_WAY_EMISSIVE_CHANNEL_SCALE - #define VFX_VARYING_EMISSIVE_CHANNEL_SCALE emissiveControls.z - #endif - #define VFX_VARYING_EMISSIVE_MULTIPLIER emissiveControls.w +#if VFX_SIX_WAY_COLOR_ABSORPTION + #define VFX_VARYING_ABSORPTIONRANGE absorptionRange +#endif +#if VFX_SIX_WAY_USE_ALPHA_REMAP + #define VFX_VARYING_ALPHA_REMAP alphaRemap +#endif +#if VFX_SIX_WAY_USE_ONE_EMISSIVE_CHANNEL + #define VFX_VARYING_EMISSIVE_GRADIENT emissiveControls.xy + #if VFX_SIX_WAY_EMISSIVE_CHANNEL_SCALE + #define VFX_VARYING_EMISSIVE_CHANNEL_SCALE emissiveControls.z #endif + #define VFX_VARYING_EMISSIVE_MULTIPLIER emissiveControls.w +#endif - #if VFX_SIX_WAY_REMAP_RANGES - #define VFX_VARYING_LIGHTMAP_REMAP_RANGES lightmapRemapRanges - #endif - #if VFX_SIX_WAY_REMAP_NONLIN - #define VFX_VARYING_LIGHTMAP_REMAP_CONTROLS lightmapRemapControls - #endif - #if VFX_SIX_WAY_REMAP_CURVE - #define VFX_VARYING_LIGHTMAP_REMAP_CURVE lightRemapCurve - #endif - #if USE_EMISSIVE_MAP - #define VFX_VARYING_EMISSIVESCALE emissiveScale - #endif +#if VFX_SIX_WAY_REMAP_RANGES + #define VFX_VARYING_LIGHTMAP_REMAP_RANGES lightmapRemapRanges +#endif +#if VFX_SIX_WAY_REMAP_NONLIN + #define VFX_VARYING_LIGHTMAP_REMAP_CONTROLS lightmapRemapControls +#endif +#if VFX_SIX_WAY_REMAP_CURVE + #define VFX_VARYING_LIGHTMAP_REMAP_CURVE lightRemapCurve +#endif +#if USE_EMISSIVE_MAP + #define VFX_VARYING_EMISSIVESCALE emissiveScale +#endif ${VFXEnd} ${VFXBegin:SixWayDeclareVaryings} - #if VFX_SIX_WAY_USE_ALPHA_REMAP - nointerpolation float4 alphaRemap : TEXCOORD10; - #endif - #if VFX_SIX_WAY_USE_ONE_EMISSIVE_CHANNEL - nointerpolation float4 emissiveControls : TEXCOORD11; - #endif - #if VFX_SIX_WAY_REMAP_NONLIN - VFX_OPTIONAL_INTERPOLATION float2 lightmapRemapControls : TEXCOORD12; - #endif +#if VFX_SIX_WAY_USE_ALPHA_REMAP + nointerpolation float4 alphaRemap : TEXCOORD10; +#endif +#if VFX_SIX_WAY_USE_ONE_EMISSIVE_CHANNEL + nointerpolation float4 emissiveControls : TEXCOORD11; +#endif +#if VFX_SIX_WAY_REMAP_NONLIN + VFX_OPTIONAL_INTERPOLATION float2 lightmapRemapControls : TEXCOORD12; +#endif - #if VFX_SIX_WAY_REMAP_CURVE - nointerpolation float4 lightRemapCurve : TEXCOORD13; - #endif +#if VFX_SIX_WAY_REMAP_CURVE +nointerpolation float4 lightRemapCurve : TEXCOORD13; +#endif - #if VFX_SIX_WAY_REMAP_RANGES - VFX_OPTIONAL_INTERPOLATION float4 lightmapRemapRanges : TEXCOORD14; - #endif +#if VFX_SIX_WAY_REMAP_RANGES + VFX_OPTIONAL_INTERPOLATION float4 lightmapRemapRanges : TEXCOORD14; +#endif - #if USE_EMISSIVE_MAP - VFX_OPTIONAL_INTERPOLATION float emissiveScale : TEXCOORD0; - #endif +#if USE_EMISSIVE_MAP + VFX_OPTIONAL_INTERPOLATION float emissiveScale : TEXCOORD0; +#endif - #if VFX_SIX_WAY_COLOR_ABSORPTION - VFX_OPTIONAL_INTERPOLATION float absorptionRange : TEXCOORD15; - #endif +#if VFX_SIX_WAY_COLOR_ABSORPTION + VFX_OPTIONAL_INTERPOLATION float absorptionRange : TEXCOORD15; +#endif ${VFXVertexProbeDeclareVaryings} ${VFXEnd} @@ -98,4 +98,3 @@ ${VFXLoadParameter:{lightRemapCurve}} o.VFX_VARYING_LIGHTMAP_REMAP_CURVE = lightRemapCurve; #endif ${VFXEnd} - diff --git a/Packages/com.unity.visualeffectgraph/Shaders/VFXOutputUpdate.template b/Packages/com.unity.visualeffectgraph/Shaders/VFXOutputUpdate.template index 8180da5c06b..ee71945d927 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/VFXOutputUpdate.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/VFXOutputUpdate.template @@ -110,7 +110,7 @@ void CSMain(uint3 groupId : SV_GroupID, VFXAttributes attributes = (VFXAttributes)0; VFXSourceAttributes sourceAttributes = (VFXSourceAttributes)0; - ${VFXLoadAttributes:{alive}} + ${VFXLoadAttributes} #if HAS_STRIPS // For strips, we need to render the entire strip, even if some particles are dead. const StripData stripData = GetStripDataFromParticleIndex(index, instanceIndex); @@ -121,7 +121,6 @@ void CSMain(uint3 groupId : SV_GroupID, if (attributes.alive) #endif { - ${VFXLoadAttributes:{(?!(alive))(\b\w)}} ${VFXProcessBlocks} #if !HAS_STRIPS diff --git a/Packages/com.unity.visualeffectgraph/Shaders/VFXParticleCommon.template b/Packages/com.unity.visualeffectgraph/Shaders/VFXParticleCommon.template index 464cdf11764..1470e201efb 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/VFXParticleCommon.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/VFXParticleCommon.template @@ -176,20 +176,14 @@ if (!FindIndexInStrip(index, id, instanceIndex, relativeIndexInStrip, stripData) } #endif -#if VFX_HAS_INDIRECT_DRAW ${VFXLoadAttributes} -#else -${VFXLoadAttributes:{alive}} -#if !HAS_STRIPS +#if !VFX_HAS_INDIRECT_DRAW && !HAS_STRIPS if (!attributes.alive) { CULL_VERTEX(o); } #endif -${VFXLoadAttributes:{(?!(alive))(\b\w)}} -#endif - // Initialize built-in needed attributes #if HAS_STRIPS_DATA InitStripAttributes(index, attributes, stripData); @@ -276,117 +270,8 @@ float4 color = VFXGetFragmentColor(i); ${VFXEnd} -${VFXBegin:VFXPassDepthCommonFragmentUnlit} - -#ifndef VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH -#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 0 -#endif - -#ifdef VFX_SHADERGRAPH - #if (SHADERPASS == SHADERPASS_DEPTHNORMALSONLY) - ${SHADERGRAPH_PIXEL_CODE_DEPTHNORMALS} - #else - ${SHADERGRAPH_PIXEL_CODE_DEPTHONLY} - #endif -#endif - -#if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION -int _ObjectId; -int _PassValue; -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING -float4 _SelectionID; -#endif - -#pragma fragment frag -void frag(ps_input i -#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR - #ifdef WRITE_MSAA_DEPTH - // We need the depth color as SV_Target0 for alpha to coverage - , out float4 outDepthColor : SV_Target0 - , out float4 outMotionVector : SV_Target1 - #else - // When no MSAA, the motion vector is always the first buffer - , out float4 outMotionVector : SV_Target0 - #endif -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL - #if defined(WRITE_MSAA_DEPTH) - #if defined(WRITE_NORMAL_BUFFER) - #error Unexpected depth setup mssa + depth normal - #endif - , out float4 outDepthColor : SV_Target0 - #elif defined(WRITE_NORMAL_BUFFER) - , out float4 outNormalBuffer : SV_Target0 - #else - , out float4 dummy : SV_Target0 - #endif -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION || VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING - , out float4 outSelection : SV_Target0 -#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW - , out float4 dummy : SV_Target0 -#endif -) -{ - UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); - VFXTransformPSInputs(i); - ${VFXComputeNormalWS} - - #ifdef VFX_SHADERGRAPH - ${VFXAdditionalInterpolantsPreparation} - #if (SHADERPASS == SHADERPASS_DEPTHNORMALSONLY) - ${SHADERGRAPH_PIXEL_CALL_DEPTHNORMALS} - #else - ${SHADERGRAPH_PIXEL_CALL_DEPTHONLY} - #endif - float alpha = OUTSG.${SHADERGRAPH_PARAM_ALPHA}; - #else - float alpha = VFXGetFragmentColor(i).a; - #if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH - #ifdef VFX_PROCEDURAL_UV - alpha *= VFXGetTextureColorWithProceduralUV(VFX_SAMPLER(mainTexture),i,VFX_PROCEDURAL_UV(i)).a; - #else - alpha *= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a; - #endif - #endif - #endif - VFXClipFragmentColor(alpha,i); - - #ifdef WRITE_MSAA_DEPTH - outDepthColor = i.VFX_VARYING_POSCS.z; - #if VFX_USE_ALPHA_TO_MASK - outDepthColor.a = alpha; - #endif - #endif - - #ifdef WRITE_NORMAL_BUFFER - #ifdef VFX_VARYING_NORMAL - VFXComputePixelOutputToNormalBuffer(i, normalWS, GetUVData(i), outNormalBuffer); - #else - //Fallback for point and lines, render normal as if those are face camera plane - VFXComputePixelOutputToNormalBuffer(i, VFXGetWorldToViewRotMatrix()[2], GetUVData(i), outNormalBuffer); - #endif - #endif - - #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR - ${VFXComputeOutputMotionVector} - outMotionVector = encodedMotionVector; - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION - outSelection = float4(_ObjectId, _PassValue, 1.0, 1.0); - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING - outSelection = _SelectionID; - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL - #if !defined(WRITE_MSAA_DEPTH) && !defined(WRITE_NORMAL_BUFFER) - dummy = float4(i.VFX_VARYING_POSCS.z, 0,0,0); - #endif - #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW - dummy = (float4)0; - #else - #error VFX_PASSDEPTH undefined - #endif -} -${VFXEnd} - -// Strips tangent computation ${VFXBegin:VFXDeclareGetStripTangent} +// Strips tangent computation float3 GetParticlePosition(uint index, uint instanceIndex) { VFXAttributes attributes = (VFXAttributes)0; diff --git a/Packages/com.unity.visualeffectgraph/Shaders/VFXParticleHeader.template b/Packages/com.unity.visualeffectgraph/Shaders/VFXParticleHeader.template index 56fda70b46f..1d309386eec 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/VFXParticleHeader.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/VFXParticleHeader.template @@ -7,6 +7,7 @@ HLSLINCLUDE ${VFXPragmaOnlyRenderers} ${VFXPragmaRequire} ${VFXGlobalInclude} +${VFXIncludeRP("VFXPasses.template")} ${VFXGlobalDeclaration} #define VFX_NEEDS_COLOR_INTERPOLATOR (VFX_USE_COLOR_CURRENT || VFX_USE_ALPHA_CURRENT) diff --git a/Packages/com.unity.visualeffectgraph/Shaders/VFXPassDepthCommonFragmentUnlit.template b/Packages/com.unity.visualeffectgraph/Shaders/VFXPassDepthCommonFragmentUnlit.template new file mode 100644 index 00000000000..2976bfee7ff --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Shaders/VFXPassDepthCommonFragmentUnlit.template @@ -0,0 +1,105 @@ +#ifndef VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH +#define VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH 0 +#endif + +#ifdef VFX_SHADERGRAPH + #if (SHADERPASS == SHADERPASS_DEPTHNORMALSONLY) + ${SHADERGRAPH_PIXEL_CODE_DEPTHNORMALS} + #else + ${SHADERGRAPH_PIXEL_CODE_DEPTHONLY} + #endif +#endif + +#if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION +int _ObjectId; +int _PassValue; +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING +float4 _SelectionID; +#endif + +#pragma fragment frag +void frag(ps_input i +#if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR + #ifdef WRITE_MSAA_DEPTH + // We need the depth color as SV_Target0 for alpha to coverage + , out float4 outDepthColor : SV_Target0 + , out float4 outMotionVector : SV_Target1 + #else + // When no MSAA, the motion vector is always the first buffer + , out float4 outMotionVector : SV_Target0 + #endif +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL + #if defined(WRITE_MSAA_DEPTH) + #if defined(WRITE_NORMAL_BUFFER) + #error Unexpected depth setup mssa + depth normal + #endif + , out float4 outDepthColor : SV_Target0 + #elif defined(WRITE_NORMAL_BUFFER) + , out float4 outNormalBuffer : SV_Target0 + #else + , out float4 dummy : SV_Target0 + #endif +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION || VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING + , out float4 outSelection : SV_Target0 +#elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW + , out float4 dummy : SV_Target0 +#endif +) +{ + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); + VFXTransformPSInputs(i); + ${VFXComputeNormalWS} + + #ifdef VFX_SHADERGRAPH + ${VFXAdditionalInterpolantsPreparation} + #if (SHADERPASS == SHADERPASS_DEPTHNORMALSONLY) + ${SHADERGRAPH_PIXEL_CALL_DEPTHNORMALS} + #else + ${SHADERGRAPH_PIXEL_CALL_DEPTHONLY} + #endif + float alpha = OUTSG.${SHADERGRAPH_PARAM_ALPHA}; + #else + float alpha = VFXGetFragmentColor(i).a; + #if VFX_SUPPORT_MAIN_TEXTURE_SAMPLING_IN_FRAGMENT_DEPTH + #ifdef VFX_PROCEDURAL_UV + alpha *= VFXGetTextureColorWithProceduralUV(VFX_SAMPLER(mainTexture),i,VFX_PROCEDURAL_UV(i)).a; + #else + alpha *= VFXGetTextureColor(VFX_SAMPLER(mainTexture),i).a; + #endif + #endif + #endif + VFXClipFragmentColor(alpha,i); + + #ifdef WRITE_MSAA_DEPTH + outDepthColor = i.VFX_VARYING_POSCS.z; + #if VFX_USE_ALPHA_TO_MASK + outDepthColor.a = alpha; + #endif + #endif + + #ifdef WRITE_NORMAL_BUFFER + #ifdef VFX_VARYING_NORMAL + VFXComputePixelOutputToNormalBuffer(i, normalWS, GetUVData(i), outNormalBuffer); + #else + //Fallback for point and lines, render normal as if those are face camera plane + VFXComputePixelOutputToNormalBuffer(i, VFXGetWorldToViewRotMatrix()[2], GetUVData(i), outNormalBuffer); + #endif + #endif + + #if VFX_PASSDEPTH == VFX_PASSDEPTH_MOTION_VECTOR + ${VFXComputeOutputMotionVector} + outMotionVector = encodedMotionVector; + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION + outSelection = float4(_ObjectId, _PassValue, 1.0, 1.0); + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING + outSelection = _SelectionID; + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL + #if !defined(WRITE_MSAA_DEPTH) && !defined(WRITE_NORMAL_BUFFER) + dummy = float4(i.VFX_VARYING_POSCS.z, 0,0,0); + #endif + #elif VFX_PASSDEPTH == VFX_PASSDEPTH_SHADOW + dummy = (float4)0; + #else + #error VFX_PASSDEPTH undefined + #endif +} diff --git a/Packages/com.unity.visualeffectgraph/Shaders/VFXPassDepthCommonFragmentUnlit.template.meta b/Packages/com.unity.visualeffectgraph/Shaders/VFXPassDepthCommonFragmentUnlit.template.meta new file mode 100644 index 00000000000..e99d8ce33f9 --- /dev/null +++ b/Packages/com.unity.visualeffectgraph/Shaders/VFXPassDepthCommonFragmentUnlit.template.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 08c70af3d4e74babad634834082a2285 +timeCreated: 1720612366 \ No newline at end of file diff --git a/Packages/com.unity.visualeffectgraph/Shaders/VFXUpdate.template b/Packages/com.unity.visualeffectgraph/Shaders/VFXUpdate.template index 2fb3239f994..88a42c02cf2 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/VFXUpdate.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/VFXUpdate.template @@ -80,10 +80,9 @@ void CSMain(uint3 groupId : SV_GroupID, VFXSourceAttributes sourceAttributes = (VFXSourceAttributes)0; #if VFX_USE_ALIVE_CURRENT - ${VFXLoadAttributes:{alive|stripAlive}} + ${VFXLoadAttributes} if (attributes.alive) { - ${VFXLoadAttributes:{(?!(alive|stripAlive))(\b\w)}} #if VFX_USE_OLDVELOCITY_CURRENT && VFX_USE_VELOCITY_CURRENT attributes.oldVelocity = attributes.velocity; #endif diff --git a/Packages/com.unity.visualeffectgraph/Shaders/VFXVolumetricFogUpdate.template b/Packages/com.unity.visualeffectgraph/Shaders/VFXVolumetricFogUpdate.template index 6b9874808a5..1fc57580305 100644 --- a/Packages/com.unity.visualeffectgraph/Shaders/VFXVolumetricFogUpdate.template +++ b/Packages/com.unity.visualeffectgraph/Shaders/VFXVolumetricFogUpdate.template @@ -3,6 +3,7 @@ ${VFXPragmaOnlyRenderers} ${VFXPragmaRequire} ${VFXGlobalInclude} +${VFXIncludeRP("VFXPasses.template")} ${VFXGlobalDeclaration} ${VFXInclude("Shaders/VFXParticleCommon.template")} diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXShaderGenerationTests.cs b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXShaderGenerationTests.cs index 9a5d9675538..129de42150b 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXShaderGenerationTests.cs +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXShaderGenerationTests.cs @@ -155,8 +155,10 @@ public void DebugSymbolsPragmaGeneration() }; var task = new VFXTask { templatePath = updateContext.codeGeneratorTemplate, type = updateContext.taskType }; HashSet dependencies = new HashSet(); - var stringBuilderNoDebugSymbols = VFXCodeGenerator.Build(updateContext, task, VFXCompilationMode.Runtime, contextCompiledData, dependencies, false, out var _); - var stringBuilderDebugSymbols = VFXCodeGenerator.Build(updateContext, task, VFXCompilationMode.Runtime, contextCompiledData, dependencies, true, out var _); + var codeGeneratorCacheNoDebugSymbols = new VFXCodeGenerator.Cache(); + var codeGeneratorCacheDebugSymbols = new VFXCodeGenerator.Cache(); + var stringBuilderNoDebugSymbols = VFXCodeGenerator.Build(updateContext, task, VFXCompilationMode.Runtime, contextCompiledData, dependencies, false, codeGeneratorCacheNoDebugSymbols, out var _); + var stringBuilderDebugSymbols = VFXCodeGenerator.Build(updateContext, task, VFXCompilationMode.Runtime, contextCompiledData, dependencies, true, codeGeneratorCacheDebugSymbols, out var _); const string debugSymbolStr = "#pragma enable_d3d11_debug_symbols"; Assert.IsFalse(stringBuilderNoDebugSymbols.ToString().Contains(debugSymbolStr)); @@ -188,8 +190,8 @@ public void DifferentSettingsGenerateDifferentFunction() }; HashSet dependencies = new HashSet(); var task = new VFXTask { templatePath = updateContext.codeGeneratorTemplate, type = updateContext.taskType }; - var stringBuilder = VFXCodeGenerator.Build(updateContext, task, VFXCompilationMode.Runtime, contextCompiledData, dependencies, false, out var _); - + var codeGeneratorCache = new VFXCodeGenerator.Cache(); + var stringBuilder = VFXCodeGenerator.Build(updateContext, task, VFXCompilationMode.Runtime, contextCompiledData, dependencies, false, codeGeneratorCache, out var _); var code = stringBuilder.ToString(); Assert.IsTrue(code.Contains(VFXBlockSourceVariantTest.sourceCodeVariant[0])); Assert.IsTrue(code.Contains(VFXBlockSourceVariantTest.sourceCodeVariant[1])); From 90557024e2bb3a3a93677a522d5257b1808cbd95 Mon Sep 17 00:00:00 2001 From: Myeongseon Kim Date: Thu, 7 Nov 2024 02:05:43 +0000 Subject: [PATCH 15/85] Add clamp to HairAngleWorld to prevent nan from FastASin Jira: [UUM-72279](https://jira.unity3d.com/browse/UUM-72279) As reported in JIRA, the Scene view flickers due to `NaN` output from the hair shader. It is because in `GetHairAngleWorld`, `angles.sinThetaI` can exceed the range [-1, 1] depending on the input hair `normalWS`. (The `L` vector may not be a unit vector in some cases.) * `half3x3 localToWorld = GetLocalFrame(bsdfData.normalWS, bsdfData.hairStrandDirectionWS);` * `half3 L = mul(localL, localToWorld);` I was able to see that this `NaN` problem could happen if both `T` and `L` vectors are a unit vector due to precision. `angles.sinThetaI` can slightly exceed 1.0 so the `FastASin` result will be `NaN` in this case. ![image](https://media.github.cds.internal.unity3d.com/user/3842/files/f49cd338-9620-4d69-84e3-c9248bfb8a87) By explicitly clamping the angles, we can prevent `NaN` output from `FastASin` calculation. --- .../Runtime/Material/Hair/Hair.hlsl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Hair/Hair.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Hair/Hair.hlsl index 53baba429c3..38c4f586024 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Hair/Hair.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Material/Hair/Hair.hlsl @@ -595,8 +595,9 @@ void GetHairAngleLocal(float3 wo, float3 wi, inout HairAngle angles) void GetHairAngleWorld(float3 V, float3 L, float3 T, inout HairAngle angles) { - angles.sinThetaO = dot(T, V); - angles.sinThetaI = dot(T, L); + // It might exceed the range [-1, 1], so explicitly clamp here to prevent nan output from FastASin. + angles.sinThetaO = clamp(dot(T, V), -1.0, 1.0); + angles.sinThetaI = clamp(dot(T, L), -1.0, 1.0); half thetaO = FastASin(angles.sinThetaO); half thetaI = FastASin(angles.sinThetaI); From e30d813614a0144d254b2e330282fa791aa3f197 Mon Sep 17 00:00:00 2001 From: Apoorva Joshi Date: Thu, 7 Nov 2024 02:06:38 +0000 Subject: [PATCH 16/85] Fix for HDRP entity water excluders Fixes [UUM-86522](https://jira.unity3d.com/browse/UUM-86522). Since the water exclusion shader was developed, it hasn't been tested with rendering as an entity, and thus gave a compilation error. In this PR, I've fixed this error. image --- .../Runtime/Water/Shaders/WaterExclusion.shader | 1 + 1 file changed, 1 insertion(+) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/WaterExclusion.shader b/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/WaterExclusion.shader index a826a90cc16..1e72406e005 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/WaterExclusion.shader +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Water/Shaders/WaterExclusion.shader @@ -26,6 +26,7 @@ Shader "Hidden/HDRP/WaterExclusion" HLSLPROGRAM #pragma target 4.5 #pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal switch + #pragma multi_compile _ DOTS_INSTANCING_ON // #pragma enable_d3d11_debug_symbols From d9be71abb0a7cf978cd1c83f278c580cbdee0742 Mon Sep 17 00:00:00 2001 From: Apoorva Joshi Date: Thu, 7 Nov 2024 02:07:08 +0000 Subject: [PATCH 17/85] Fix DebugDisplay Camera list going beyond number of active cameras This PR fixes [UUM-86686](https://jira.unity3d.com/browse/UUM-86686). In DebugDisplay.UpdateCameraFreezeOptions, the s_CameraNames list grow each time this method is called. This PR adds a "None" string when initializing the list, instead of doing it every time a camera is registered on unregistered. --- .../Runtime/Debug/DebugDisplay.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs index c8173c9842c..1c5c84ccc5f 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Debug/DebugDisplay.cs @@ -272,7 +272,7 @@ public partial class DebugDisplaySettings : IDebugData static GUIContent[] s_RenderingMipmapDebugMaterialTextureSlotStrings = null; static int[] s_RenderingMipmapDebugMaterialTextureSlotValues = null; - static List s_CameraNames = new List(); + static List s_CameraNames = new List() { new("None") }; static GUIContent[] s_CameraNamesStrings = { new ("No Visible Camera") }; static int[] s_CameraNamesValues = { 0 }; @@ -2289,8 +2289,6 @@ internal void UpdateCameraFreezeOptions() { if (needsRefreshingCameraFreezeList) { - s_CameraNames.Insert(0, new GUIContent("None")); - s_CameraNamesStrings = s_CameraNames.ToArray(); s_CameraNamesValues = Enumerable.Range(0, s_CameraNames.Count()).ToArray(); From 7b86f28320baaebfe6b3e4cd9c386c5b79e7c98f Mon Sep 17 00:00:00 2001 From: Paul Demeulenaere Date: Thu, 7 Nov 2024 02:42:11 +0000 Subject: [PATCH 18/85] [VFX] CustomHLSL Extend Arbitrary Buffer Support to Texture MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ➕ Extension from this PR https://github.cds.internal.unity3d.com/unity/unity/pull/45766 and relative to this JIRA [VFXG-477](https://jira.unity3d.com/browse/VFXG-477) linked to [POI-1353](https://jira.unity3d.com/browse/POI-1353) for 6.1 This PR extends support of read/write data to texture, the great advantage of this kind of buffer is being able to allocate them in asset folder through RenderTexture and/or Custom Render Texture. Behind the scene, it uses the same pattern and storage than RWBuffer. The VFXExpressionUsage can take as input either a GraphicsBuffer or any texture. 🎁 This PR is also allowing parameter of type `Texture2D` directly (where we were forced to always use the macro `VFXSampler2D`) --- .../Editor/Compiler/VFXCodeGenerator.cs | 15 +- .../Editor/Compiler/VFXExpressionGraph.cs | 8 +- .../Editor/Compiler/VFXGraphCompiledData.cs | 4 +- .../Editor/Compiler/VFXShaderWriter.cs | 54 +- .../Expressions/VFXExpressionContext.cs | 11 +- .../Editor/Expressions/VFXExpressionHLSL.cs | 46 +- .../Expressions/VFXExpressionTextureValues.cs | 45 +- .../Blocks/Implementations/HLSL/CustomHLSL.cs | 31 +- .../Blocks/Implementations/HLSL/HLSLParser.cs | 109 +- .../Operators/Implementations/CustomHLSL.cs | 39 +- .../Operators/Implementations/SampleBuffer.cs | 2 +- .../Editor/Types/VFXPropertyAttribute.cs | 10 +- .../Scenes/027_RWTexture.shadergraph | 4780 ++++++++++++++ .../Scenes/027_RWTexture.shadergraph.meta | 10 + .../Scenes/027_RWTexture.unity | 678 ++ .../Scenes/027_RWTexture.unity.meta | 7 + .../Scenes/027_RWTexture.vfx | 5680 +++++++++++++++++ .../Scenes/027_RWTexture.vfx.meta | 14 + .../Scenes/027_RWTexture_N32.asset | 54 + .../Scenes/027_RWTexture_N32.asset.meta | 8 + .../Scenes/027_RWTexture_U32.asset | 54 + .../Scenes/027_RWTexture_U32.asset.meta | 8 + .../Editor/Tests/CustomHLSLBlockTest.cs | 25 - .../Editor/Tests/CustomHLSLOperatorTest.cs | 42 +- .../AllTests/Editor/Tests/HLSLParserTest.cs | 4 +- .../Editor/Tests/VFXShaderGenerationTests.cs | 4 +- .../ProjectSettings/EditorBuildSettings.asset | 3 + .../ProjectSettings/EditorBuildSettings.asset | 3 + 28 files changed, 11527 insertions(+), 221 deletions(-) create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.shadergraph create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.shadergraph.meta create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity.meta create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.vfx create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.vfx.meta create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_N32.asset create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_N32.asset.meta create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_U32.asset create mode 100644 Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_U32.asset.meta diff --git a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXCodeGenerator.cs b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXCodeGenerator.cs index 54a77b6babc..033f777e060 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXCodeGenerator.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXCodeGenerator.cs @@ -334,11 +334,11 @@ internal static void BuildParameterBuffer(VFXTaskCompiledData taskData, IEnumera var parameterBuffer = new VFXShaderWriter(); needsGraphValueStruct = parameterBuffer.WriteGraphValuesStruct(taskData.uniformMapper); parameterBuffer.WriteLine(); - parameterBuffer.WriteBufferTypeDeclaration(taskData.bufferUsage.Values); + parameterBuffer.WriteBufferTypeDeclaration(taskData.bufferTypeUsage.Values); parameterBuffer.WriteLine(); - parameterBuffer.WriteBuffer(taskData.uniformMapper, taskData.bufferUsage); + parameterBuffer.WriteBuffer(taskData.uniformMapper, taskData.bufferTypeUsage); parameterBuffer.WriteLine(); - parameterBuffer.WriteTexture(taskData.uniformMapper, filteredOutTextures); + parameterBuffer.WriteTexture(taskData.uniformMapper, taskData.bufferTypeUsage, filteredOutTextures); parameterBufferContent = parameterBuffer.ToString(); } @@ -568,7 +568,7 @@ private static StringBuilder Build( var allSourceAttributes = contextData.GetAttributes().Where(a => (contextData.IsSourceAttributeUsed(a.attrib, context))); var globalDeclaration = new VFXShaderWriter(); - globalDeclaration.WriteBufferTypeDeclaration(taskData.bufferUsage.Values); + globalDeclaration.WriteBufferTypeDeclaration(taskData.bufferTypeUsage.Values); globalDeclaration.WriteLine(); var particleData = (contextData as VFXDataParticle); var systemUniformMapper = particleData.systemUniformMapper; @@ -576,9 +576,9 @@ private static StringBuilder Build( var needsGraphValueStruct = globalDeclaration.WriteGraphValuesStruct(taskData.uniformMapper); globalDeclaration.WriteLine(); - globalDeclaration.WriteBuffer(taskData.uniformMapper, taskData.bufferUsage); + globalDeclaration.WriteBuffer(taskData.uniformMapper, taskData.bufferTypeUsage); globalDeclaration.WriteLine(); - globalDeclaration.WriteTexture(taskData.uniformMapper); + globalDeclaration.WriteTexture(taskData.uniformMapper, taskData.bufferTypeUsage); globalDeclaration.WriteAttributeStruct(allCurrentAttributes.Select(a => a.attrib), "VFXAttributes"); globalDeclaration.WriteLine(); globalDeclaration.WriteAttributeStruct(allSourceAttributes.Select(a => a.attrib), "VFXSourceAttributes"); @@ -873,7 +873,8 @@ private static void BuildBlock(VFXTaskCompiledData taskData, VFXShaderWriter blo blockCallFunction.WriteCallFunction(methodName, parameters, taskData.gpuMapper, - expressionToNameLocal); + expressionToNameLocal, + taskData.bufferTypeUsage); if (indexEventCount != -1) { diff --git a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXExpressionGraph.cs b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXExpressionGraph.cs index a7b0ac657a1..99ee206dbbc 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXExpressionGraph.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXExpressionGraph.cs @@ -289,14 +289,14 @@ private VFXExpressionMapper BuildMapper(VFXContext context, Dictionary GlobalEventAttributes => m_GlobalEventAttributes; - public ReadOnlyDictionary GetBufferTypeUsage(VFXContext context) + public ReadOnlyDictionary GetBufferUsage(VFXContext context) { if (m_BufferTypeUsagePerContext.TryGetValue(context, out var bufferTypeUsage)) { - return new ReadOnlyDictionary(bufferTypeUsage); + return new ReadOnlyDictionary(bufferTypeUsage); } - return new ReadOnlyDictionary(new Dictionary()); + return new ReadOnlyDictionary(new Dictionary()); } public IHLSLCodeHolder[] GetCustomHLSLExpressions(VFXContext context) @@ -309,7 +309,7 @@ public IHLSLCodeHolder[] GetCustomHLSLExpressions(VFXContext context) } private Dictionary> m_CustomHLSLExpressionsPerContext = new(); - private Dictionary> m_BufferTypeUsagePerContext = new(); + private Dictionary> m_BufferTypeUsagePerContext = new(); private HashSet m_Expressions = new HashSet(); private Dictionary m_CPUExpressionsToReduced = new Dictionary(); private Dictionary m_GPUExpressionsToReduced = new Dictionary(); diff --git a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXGraphCompiledData.cs b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXGraphCompiledData.cs index 73c6474c618..8b52a47c0f9 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXGraphCompiledData.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXGraphCompiledData.cs @@ -66,7 +66,7 @@ struct VFXTaskCompiledData public VFXUniformMapper uniformMapper; public VFXSGInputs SGInputs; public List instancingSplitValues; - public ReadOnlyDictionary bufferUsage; + public ReadOnlyDictionary bufferTypeUsage; public VFXMapping[] parameters; public (VFXSlot slot, VFXData data)[] linkedEventOut; public IHLSLCodeHolder[] hlslCodeHolders; @@ -843,7 +843,7 @@ private void GenerateShaders(List outGeneratedCodeData, VFXEx var contextData = compiledData.taskToCompiledData[task]; contextData.gpuMapper = gpuMapper; contextData.uniformMapper = uniformMapper; - contextData.bufferUsage = graph.GetBufferTypeUsage(context); + contextData.bufferTypeUsage = graph.GetBufferUsage(context); if (task.doesGenerateShader) { diff --git a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderWriter.cs b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderWriter.cs index 11118af23a5..90dd7922db3 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderWriter.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Compiler/VFXShaderWriter.cs @@ -303,9 +303,9 @@ private void WriteBufferTypeDeclaration(Type type, HashSet alreadyGenerate } } - public void WriteBufferTypeDeclaration(IEnumerable usages) + public void WriteBufferTypeDeclaration(IEnumerable bufferTypeUsage) { - var types = usages.Select(usage => + var types = bufferTypeUsage.Select(usage => { var type = usage.actualType; if (IsBufferBuiltinType(type)) @@ -327,7 +327,7 @@ public void WriteBufferTypeDeclaration(IEnumerable usages) } } - public void WriteBuffer(VFXUniformMapper mapper, ReadOnlyDictionary usageBuffer) + public void WriteBuffer(VFXUniformMapper mapper, ReadOnlyDictionary usageBuffer) { foreach (var buffer in mapper.buffers) { @@ -346,7 +346,7 @@ public void WriteBuffer(VFXUniformMapper mapper, ReadOnlyDictionary skipNames = null) + public void WriteTexture(VFXUniformMapper mapper, ReadOnlyDictionary bufferTypeUsage, IEnumerable skipNames = null) { foreach (var texture in mapper.textures) { @@ -358,7 +358,15 @@ public void WriteTexture(VFXUniformMapper mapper, IEnumerable skipNames if (skipNames != null && skipNames.Contains(name)) continue; - WriteLineFormat("{0} {1};", VFXExpression.TypeToCode(texture.valueType), name); + if (bufferTypeUsage.TryGetValue(texture, out var usage)) + { + WriteLineFormat("{0} {1};", GetBufferDeclaration(usage), name); + } + else + { + WriteLineFormat("{0} {1};", VFXExpression.TypeToCode(texture.valueType), name); + } + if (VFXExpression.IsTexture(texture.valueType)) //Mesh doesn't require a sampler or texel helper { WriteLineFormat("SamplerState sampler{0};", name); @@ -494,20 +502,23 @@ private string AggregateParameters(List parameters) return parameters.Count == 0 ? "" : parameters.Aggregate((a, b) => a + ", " + b); } - private static string GetBufferDeclaration(BufferUsage bufferUsage) + private static string GetBufferDeclaration(BufferType bufferType) { - if (string.IsNullOrEmpty(bufferUsage.verbatimType)) - return bufferUsage.container.ToString(); + if (string.IsNullOrEmpty(bufferType.verbatimType)) + return bufferType.container.ToString(); - var verbatimType = IsBufferBuiltinType(bufferUsage.actualType) - ? VFXExpression.TypeToCode(VFXExpression.GetVFXValueTypeFromType(bufferUsage.actualType)) - : bufferUsage.verbatimType; + var verbatimType = IsBufferBuiltinType(bufferType.actualType) + ? VFXExpression.TypeToCode(VFXExpression.GetVFXValueTypeFromType(bufferType.actualType)) + : bufferType.verbatimType; - return $"{bufferUsage.container}<{verbatimType}>"; + return $"{bufferType.container}<{verbatimType}>"; } - private static string GetFunctionParameterType(VFXExpression exp, ReadOnlyDictionary usages) + private static string GetFunctionParameterType(VFXExpression exp, ReadOnlyDictionary usages) { + if (usages.TryGetValue(exp, out var usage)) + return GetBufferDeclaration(usage); + switch (exp.valueType) { case VFXValueType.Texture2D: return "VFXSampler2D"; @@ -517,15 +528,13 @@ private static string GetFunctionParameterType(VFXExpression exp, ReadOnlyDictio case VFXValueType.TextureCubeArray: return "VFXSamplerCubeArray"; case VFXValueType.CameraBuffer: return "VFXSamplerCameraBuffer"; case VFXValueType.Buffer: - if (!usages.TryGetValue(exp, out var usage)) - throw new KeyNotFoundException("Cannot find appropriate usage for " + exp); - return GetBufferDeclaration(usage); + throw new KeyNotFoundException("Cannot find appropriate usage for " + exp); default: return VFXExpression.TypeToCode(exp.valueType); } } - private static string GetFunctionParameterName(VFXExpression expression, Dictionary names) + private static string GetFunctionParameterName(VFXExpression expression, Dictionary names, ReadOnlyDictionary textureBufferUsages) { var expressionName = names[expression]; switch (expression.valueType) @@ -534,7 +543,10 @@ private static string GetFunctionParameterName(VFXExpression expression, Diction case VFXValueType.Texture2DArray: case VFXValueType.Texture3D: case VFXValueType.TextureCube: - case VFXValueType.TextureCubeArray: return string.Format("GetVFXSampler({0}, {1})", expressionName, ("sampler" + expressionName)); + case VFXValueType.TextureCubeArray: + if (textureBufferUsages.TryGetValue(expression, out var textureUsage)) + return expressionName; + return string.Format("GetVFXSampler({0}, {1})", expressionName, ("sampler" + expressionName)); case VFXValueType.CameraBuffer: return string.Format("GetVFXSampler({0}, {1})", expressionName, ("sampler" + expressionName)); default: @@ -563,7 +575,7 @@ public void WriteBlockFunction(VFXTaskCompiledData taskData, string functionName foreach (var parameter in parameters) { var inputModifier = GetInputModifier(parameter.mode); - var parameterType = GetFunctionParameterType(parameter.expression, taskData.bufferUsage); + var parameterType = GetFunctionParameterType(parameter.expression, taskData.bufferTypeUsage); parametersCode.Add(string.Format("{0}{1} {2}", inputModifier, parameterType, parameter.name)); } @@ -579,13 +591,13 @@ public void WriteBlockFunction(VFXTaskCompiledData taskData, string functionName ExitScope(); } - public void WriteCallFunction(string functionName, IEnumerable parameters, VFXExpressionMapper mapper, Dictionary variableNames) + public void WriteCallFunction(string functionName, IEnumerable parameters, VFXExpressionMapper mapper, Dictionary variableNames, ReadOnlyDictionary textureBufferUsages) { var parametersCode = new List(); foreach (var parameter in parameters) { var inputModifier = GetInputModifier(parameter.mode); - parametersCode.Add(string.Format("{1}{0}", GetFunctionParameterName(parameter.expression, variableNames), string.IsNullOrEmpty(inputModifier) ? string.Empty : string.Format(" /*{0}*/", inputModifier))); + parametersCode.Add(string.Format("{1}{0}", GetFunctionParameterName(parameter.expression, variableNames, textureBufferUsages), string.IsNullOrEmpty(inputModifier) ? string.Empty : string.Format(" /*{0}*/", inputModifier))); } WriteLineFormat("{0}({1});", functionName, AggregateParameters(parametersCode)); diff --git a/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionContext.cs b/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionContext.cs index 0a9f2d59a31..6b6e6eb16aa 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionContext.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionContext.cs @@ -181,7 +181,7 @@ private void CollectPerContextData() m_GraphicsBufferTypeUsagePerContext.Add(context, usages); } - var usage = expressionBufferWithTypeCollection.Key.usage; + var usage = expressionBufferWithTypeCollection.Key.Type; var buffer = expressionBufferWithTypeCollection.Key.parents[0]; if (!usages.TryAdd(buffer, usage) && usages[buffer] != usage) { @@ -321,7 +321,7 @@ private VFXExpression PatchVFXExpression(VFXExpression input, VFXExpression targ } } - if (input.valueType == VFXValueType.Buffer && input is VFXExpressionBufferWithType bufferWithType) + if (input is VFXExpressionBufferWithType bufferWithType) { input = input.parents[0]; //Explicitly skip NoOp expression } @@ -426,14 +426,13 @@ public HashSet BuildAllReduced() } public IEnumerable RegisteredExpressions => m_EndExpressions.Keys; - - public Dictionary> GraphicsBufferTypeUsagePerContext => m_GraphicsBufferTypeUsagePerContext; + public Dictionary> GraphicsBufferTypeUsagePerContext => m_GraphicsBufferTypeUsagePerContext; public Dictionary> hlslCodeHoldersPerContext => m_HLSLCollectionPerContext; - private Dictionary m_ReducedCache = new (); + private Dictionary m_ReducedCache = new(); private Dictionary> m_EndExpressions = new (); - private Dictionary> m_GraphicsBufferTypeUsagePerContext = new (); + private Dictionary> m_GraphicsBufferTypeUsagePerContext = new (); private IEnumerable m_GlobalEventAttribute; private VFXExpressionContextOption m_ReductionOptions; diff --git a/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionHLSL.cs b/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionHLSL.cs index 1ad158e746b..9014df2a813 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionHLSL.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionHLSL.cs @@ -11,29 +11,42 @@ class VFXExpressionHLSL : VFXExpression, IHLSLCodeHolder string m_FunctionName; VFXValueType m_ValueType; string m_HlslCode; - List m_TextureParentExpressionIndex; + int[] m_TextureSamplerParentExpressionIndex; string[] m_Includes; public VFXExpressionHLSL() : this(string.Empty, string.Empty, VFXValueType.None, new [] { VFXValue.Default }, Array.Empty()) { } - public VFXExpressionHLSL(string functionName, string hlslCode, VFXValueType returnType, VFXExpression[] parents, string[] includes) : base(Flags.InvalidOnCPU, parents) + public VFXExpressionHLSL(string functionName, string hlslCode, System.Type returnType, VFXExpression[] parents, string[] includes) : this(functionName, hlslCode, GetVFXValueTypeFromType(returnType), parents, includes) { - this.m_TextureParentExpressionIndex = new List(); - this.m_FunctionName = functionName; - this.m_ValueType = returnType; - this.m_HlslCode = hlslCode; - this.m_Includes = includes; } - public VFXExpressionHLSL(string functionName, string hlslCode, System.Type returnType, VFXExpression[] parents, string[] includes) : base(Flags.InvalidOnCPU, parents) + public VFXExpressionHLSL(string functionName, string hlslCode, VFXValueType returnType, VFXExpression[] parents, string[] includes) : base(Flags.InvalidOnCPU, parents) { - this.m_TextureParentExpressionIndex = new List(); this.m_FunctionName = functionName; - this.m_ValueType = GetVFXValueTypeFromType(returnType); + this.m_ValueType = returnType; this.m_HlslCode = hlslCode; this.m_Includes = includes; + + List samplerExpression = null; + for (int i = 0; i < parents.Length; i++) + { + if (parents[i] is not VFXExpressionBufferWithType && IsTexture(parents[i].valueType)) + { + samplerExpression ??= new List(); + samplerExpression.Add(i); + } + } + + if (samplerExpression != null) + { + this.m_TextureSamplerParentExpressionIndex = samplerExpression.ToArray(); + } + else + { + this.m_TextureSamplerParentExpressionIndex = Array.Empty(); + } } public override VFXValueType valueType => m_ValueType; @@ -84,27 +97,18 @@ protected override int GetInnerHashCode() protected override VFXExpression Reduce(VFXExpression[] reducedParents) { - m_TextureParentExpressionIndex.Clear(); - for (int i = 0; i < reducedParents.Length; i++) - { - if (IsTexture(reducedParents[i].valueType)) - { - m_TextureParentExpressionIndex.Add(i); - } - } - var newExpression = (VFXExpressionHLSL)base.Reduce(reducedParents); newExpression.m_FunctionName = m_FunctionName; newExpression.m_ValueType = m_ValueType; newExpression.m_HlslCode = m_HlslCode; - newExpression.m_TextureParentExpressionIndex = new List(m_TextureParentExpressionIndex); + newExpression.m_TextureSamplerParentExpressionIndex = (int[])m_TextureSamplerParentExpressionIndex.Clone(); newExpression.m_Includes = (string[])m_Includes.Clone(); return newExpression; } public sealed override string GetCodeString(string[] parentsExpressions) { - foreach (var index in m_TextureParentExpressionIndex) + foreach (var index in m_TextureSamplerParentExpressionIndex) { var expression = parentsExpressions[index]; parentsExpressions[index] = $"VFX_SAMPLER({expression})"; diff --git a/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionTextureValues.cs b/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionTextureValues.cs index 1192714ebcd..40f80751e51 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionTextureValues.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Expressions/VFXExpressionTextureValues.cs @@ -152,7 +152,7 @@ public sealed override VFXValue CopyExpression(Mode mode) } } - struct BufferUsage : IEquatable + struct BufferType : IEquatable { public enum Container { @@ -163,9 +163,22 @@ public enum Container Buffer, RWBuffer, AppendStructuredBuffer, - ConsumeStructuredBuffer - - //Can be extended to integrate RWTexture2D here + ConsumeStructuredBuffer, + + Texture1D, + Texture2D, + Texture3D, + TextureCube, + Texture1DArray, + Texture2DArray, + TextureCubeArray, + RWTexture1D, + RWTexture2D, + RWTexture3D, + RWTextureCube, + RWTexture1DArray, + RWTexture2DArray, + RWTextureCubeArray, } public Container container { get; private set; } @@ -173,21 +186,21 @@ public enum Container public string verbatimType { get; private set; } public bool valid => actualType != null; - public BufferUsage(Container container, string verbatimType, Type actualType) + public BufferType(Container container, string verbatimType, Type actualType) { this.container = container; this.actualType = actualType; this.verbatimType = verbatimType; } - public bool Equals(BufferUsage other) + public bool Equals(BufferType other) { return container == other.container && actualType == other.actualType && verbatimType == other.verbatimType; } public override bool Equals(object obj) { - return obj is BufferUsage other && Equals(other); + return obj is BufferType other && Equals(other); } public override int GetHashCode() @@ -195,20 +208,20 @@ public override int GetHashCode() return HashCode.Combine(container, actualType, verbatimType); } - public static bool operator ==(BufferUsage lhs, BufferUsage rhs) => lhs.Equals(rhs); - public static bool operator !=(BufferUsage lhs, BufferUsage rhs) => !(lhs == rhs); + public static bool operator ==(BufferType lhs, BufferType rhs) => lhs.Equals(rhs); + public static bool operator !=(BufferType lhs, BufferType rhs) => !(lhs == rhs); } #pragma warning disable 0659 sealed class VFXExpressionBufferWithType : VFXExpression { - public VFXExpressionBufferWithType() : this(new BufferUsage(), VFXValue.Default) + public VFXExpressionBufferWithType() : this(new BufferType(), VFXValue.Default) { } - public VFXExpressionBufferWithType(BufferUsage usage, VFXExpression graphicsBuffer) : base(Flags.None, new[] { graphicsBuffer }) + public VFXExpressionBufferWithType(BufferType type, VFXExpression buffer) : base(Flags.None, new[] { buffer }) { - this.usage = usage; + this.Type = type; } public override VFXExpressionOperation operation => VFXExpressionOperation.None; @@ -218,7 +231,7 @@ public VFXExpressionBufferWithType(BufferUsage usage, VFXExpression graphicsBuff protected override VFXExpression Reduce(VFXExpression[] reducedParents) { var reduced = (VFXExpressionBufferWithType)base.Reduce(reducedParents); - reduced.usage = usage; + reduced.Type = Type; return reduced; } @@ -230,7 +243,7 @@ protected override VFXExpression Evaluate(VFXExpression[] constParents) protected override int GetInnerHashCode() { - return HashCode.Combine(base.GetInnerHashCode(), usage.GetHashCode()); + return HashCode.Combine(base.GetInnerHashCode(), Type.GetHashCode()); } public override bool Equals(object obj) @@ -242,10 +255,10 @@ public override bool Equals(object obj) if (other == null) return false; - return other.usage == usage; + return other.Type == Type; } - public BufferUsage usage { get; private set; } + public BufferType Type { get; private set; } } #pragma warning restore 0659 } diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/HLSL/CustomHLSL.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/HLSL/CustomHLSL.cs index 14bc382048b..9feb7426f1f 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/HLSL/CustomHLSL.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/HLSL/CustomHLSL.cs @@ -121,15 +121,34 @@ public override IEnumerable parameters { foreach (var expression in base.parameters) { - if (expression.exp is VFXGraphicsBufferValue bufferExpression) + if (VFXExpression.IsTexture(expression.exp.valueType)) { - var usage = new BufferUsage(); var property = m_Properties.Find(x => x.property.name == expression.name); + bool expressionWithUsage = false; foreach (var attribute in property.property.attributes.attributes) { - if (attribute is GraphicsBufferUsageAttribute graphicsBufferUsage) + if (attribute is BufferTypeUsageAttribute bufferTypeUsage) { - usage = graphicsBufferUsage.usage; + var newExpressionWithUsage = new VFXExpressionBufferWithType(bufferTypeUsage.Type, expression.exp); + expressionWithUsage = true; + yield return new VFXNamedExpression(newExpressionWithUsage, expression.name); + break; + } + } + + //Binding texture without usage is allowed + if (!expressionWithUsage) + yield return expression; + } + else if (expression.exp is VFXGraphicsBufferValue) + { + var usage = new BufferType(); + var property = m_Properties.Find(x => x.property.name == expression.name); + foreach (var attribute in property.property.attributes.attributes) + { + if (attribute is BufferTypeUsageAttribute bufferTypeUsage) + { + usage = bufferTypeUsage.Type; break; } } @@ -351,9 +370,9 @@ private void ParseCodeIfNeeded() private VFXPropertyWithValue CreateProperty(HLSLFunctionParameter parameter) { var propertyAttributes = new List(); - if (parameter.bufferUsage.valid) + if (parameter.bufferType.valid) { - propertyAttributes.Add(new GraphicsBufferUsageAttribute(parameter.bufferUsage)); + propertyAttributes.Add(new BufferTypeUsageAttribute(parameter.bufferType)); } if (!string.IsNullOrEmpty(parameter.tooltip)) diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/HLSL/HLSLParser.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/HLSL/HLSLParser.cs index fffb45e29f6..b9a1afd360c 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/HLSL/HLSLParser.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/Implementations/HLSL/HLSLParser.cs @@ -73,36 +73,7 @@ public HLSLUnknownParameterType(string type) public string message { get; } public VFXErrorType type => VFXErrorType.Error; } - - class HLSLTextureCubeArrayNotSupported : IHLSMessage - { - public HLSLTextureCubeArrayNotSupported(string paramName) - { - message = $"The function parameter '{paramName}' is of type TextureCubeArray which is not supported in CustomHLSL"; - } - public string message { get; } - public VFXErrorType type => VFXErrorType.Error; - } - - class HLSLWrongHLSLTextureType : IHLSMessage - { - private static Dictionary s_TextureTypeMapping = new() - { - { "Texture2D", "VFXSampler2D"}, - { "Texture3D", "VFXSampler3D"}, - { "TextureCube", "VFXSamplerCube"}, - //{ "TextureCubeArray", "VFXSamplerCubeArray"}, - { "Texture2DArray", "VFXSampler2DArray"}, - }; - - public HLSLWrongHLSLTextureType(string inputRawType, string paramName) - { - message = $"The function parameter '{paramName}' is of type {inputRawType}.\nPlease use {s_TextureTypeMapping[inputRawType]} type instead (see documentation)"; - } - public string message { get; } - public VFXErrorType type => VFXErrorType.Error; - } - + class HLSLUnsupportedAttributes : IHLSMessage { public HLSLUnsupportedAttributes(IEnumerable attributesName) @@ -184,7 +155,7 @@ class HLSLFunctionParameter public string rawType { get; } public string name { get; } public string tooltip { get; } - public BufferUsage bufferUsage { get; } + public BufferType bufferType { get; } public string templatedRawType { get; } public HLSLAccess access { get; } public IReadOnlyCollection errors { get; } @@ -204,6 +175,18 @@ public static IEnumerable Parse(string hlsl, Dictionary + return typeof(void); + } + HLSLFunctionParameter(string access, string type, string template, string name, string tooltip) { this.name = name; @@ -211,25 +194,19 @@ public static IEnumerable Parse(string hlsl, Dictionary(rawType, out var container)) - throw new InvalidOperationException("Unknown container type: " + rawType); - - var actualTemplateType = typeof(void); - if (!string.IsNullOrEmpty(template)) + if (Enum.TryParse(rawType, out var container)) { - foreach (var validType in VFXLibrary.GetGraphicsBufferType()) - { - if (template == validType.Name) - { - actualTemplateType = validType; - break; - } - } + this.bufferType = new BufferType(container, template, GetTypeFromName(template)); } + } + else if (this.type == typeof(GraphicsBuffer)) + { + if (!Enum.TryParse(rawType, out var container)) + throw new InvalidOperationException("Unknown container type: " + rawType); - this.bufferUsage = new BufferUsage(container, template, actualTemplateType); + this.bufferType = new BufferType(container, template, GetTypeFromName(template)); } this.access = HLSLParser.HLSLAccessToEnum(access); @@ -489,7 +466,6 @@ private static Dictionary ComputeKnownTypes() { "float3", typeof(Vector3) }, { "float4", typeof(Vector4) }, { "float4x4", typeof(Matrix4x4) }, - { "Texture2D", typeof(Texture2D) }, { "VFXSampler2D", typeof(Texture2D) }, { "VFXSampler3D", typeof(Texture3D) }, { "VFXSampler2DArray", typeof(Texture2DArray) }, @@ -503,9 +479,44 @@ private static Dictionary ComputeKnownTypes() { "VFXAttributes", typeof(VFXAttribute) }, }; - foreach (var graphicsBufferContainer in Enum.GetNames(typeof(BufferUsage.Container))) + foreach (BufferType.Container bufferContainer in Enum.GetValues(typeof(BufferType.Container))) { - knownTypes.Add(graphicsBufferContainer, typeof(GraphicsBuffer)); + Type type; + switch (bufferContainer) + { + case BufferType.Container.Texture1D: + case BufferType.Container.RWTexture1D: + type = typeof(Texture2D); + break; + case BufferType.Container.Texture1DArray: + case BufferType.Container.RWTexture1DArray: + type = typeof(Texture2DArray); + break; + case BufferType.Container.Texture2D: + case BufferType.Container.RWTexture2D: + type = typeof(Texture2D); + break; + case BufferType.Container.Texture2DArray: + case BufferType.Container.RWTexture2DArray: + type = typeof(Texture2DArray); + break; + case BufferType.Container.Texture3D: + case BufferType.Container.RWTexture3D: + type = typeof(Texture3D); + break; + case BufferType.Container.TextureCube: + case BufferType.Container.RWTextureCube: + type = typeof(Cubemap); + break; + case BufferType.Container.TextureCubeArray: + case BufferType.Container.RWTextureCubeArray: + type = typeof(CubemapArray); + break; + default: + type = typeof(GraphicsBuffer); + break; + } + knownTypes.Add(bufferContainer.ToString(), type); } return knownTypes; diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/CustomHLSL.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/CustomHLSL.cs index 55dcae7becc..751b5b49bbd 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/CustomHLSL.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/CustomHLSL.cs @@ -34,19 +34,6 @@ public IEnumerable Validate(IEnumerable functions, HLSLFunc functionsFound[f] = count + 1; } - foreach (var input in selectedFunction.inputs) - { - if (input.access is HLSLAccess.IN or HLSLAccess.INOUT && - input.rawType is "Texture2D" or "Texture3D" or "TextureCube" or "Texture2DArray") - { - yield return new HLSLWrongHLSLTextureType(input.rawType, input.name); - } - if (input.rawType is "TextureCubeArray" or "VFXSamplerCubeArray") - { - yield return new HLSLTextureCubeArrayNotSupported(input.name); - } - } - foreach (var message in selectedFunction.inputs) { if (message.errors != null) @@ -293,24 +280,28 @@ protected override VFXExpression[] BuildExpression(VFXExpression[] inputExpressi // Specifically handle buffers to specify the templated type for (int i = 0; i < inputExpression.Length; i++) { - if (inputExpression[i] is VFXGraphicsBufferValue bufferExpression) + if (VFXExpression.IsTexture(inputExpression[i].valueType)) { foreach (var attribute in m_InputProperties[i].property.attributes.attributes) { - if (attribute is GraphicsBufferUsageAttribute graphicsBufferUsageAttribute) + if (attribute is BufferTypeUsageAttribute bufferTypeUsageAttribute) { - if (!graphicsBufferUsageAttribute.usage.valid) - throw new InvalidOperationException("Unexpected invalid GraphicsBufferUsageAttribute"); - - var expressionBufferWithType = new VFXExpressionBufferWithType(graphicsBufferUsageAttribute.usage, bufferExpression); + var expressionBufferWithType = new VFXExpressionBufferWithType(bufferTypeUsageAttribute.Type, inputExpression[i]); inputExpression[i] = expressionBufferWithType; break; } } - - if (!(inputExpression[i] is VFXExpressionBufferWithType)) + } + else if (inputExpression[i] is VFXGraphicsBufferValue bufferExpression) + { + foreach (var attribute in m_InputProperties[i].property.attributes.attributes) { - throw new InvalidOperationException("Unexpected missing GraphicsBufferUsageAttribute"); + if (attribute is BufferTypeUsageAttribute bufferUsageAttribute) + { + var expressionBufferWithType = new VFXExpressionBufferWithType(bufferUsageAttribute.Type, bufferExpression); + inputExpression[i] = expressionBufferWithType; + break; + } } } } @@ -451,9 +442,9 @@ private void ParseCodeIfNeeded() private VFXPropertyWithValue CreateProperty(HLSLFunctionParameter parameter) { var propertyAttributes = new List(); - if (parameter.bufferUsage.valid) + if (parameter.bufferType.valid) { - propertyAttributes.Add(new GraphicsBufferUsageAttribute(parameter.bufferUsage)); + propertyAttributes.Add(new BufferTypeUsageAttribute(parameter.bufferType)); } if (!string.IsNullOrEmpty(parameter.tooltip)) diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/SampleBuffer.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/SampleBuffer.cs index 1d05e69837e..b878fffa792 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/SampleBuffer.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Operators/Implementations/SampleBuffer.cs @@ -83,7 +83,7 @@ protected override sealed VFXExpression[] BuildExpression(VFXExpression[] inputE var expressions = new List(); var type = (Type)m_Type; - var usage = new BufferUsage(BufferUsage.Container.StructuredBuffer, type.Name, type); + var usage = new BufferType(BufferType.Container.StructuredBuffer, type.Name, type); var bufferWithUsage = new VFXExpressionBufferWithType(usage, buffer); foreach (var slot in slots) diff --git a/Packages/com.unity.visualeffectgraph/Editor/Types/VFXPropertyAttribute.cs b/Packages/com.unity.visualeffectgraph/Editor/Types/VFXPropertyAttribute.cs index 400f0fdf9d0..a504d4ff00b 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Types/VFXPropertyAttribute.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Types/VFXPropertyAttribute.cs @@ -45,13 +45,13 @@ public LogarithmicAttribute(float @base, bool snap) public bool snapToPower { get; } = false; } - sealed class GraphicsBufferUsageAttribute : PropertyAttribute + sealed class BufferTypeUsageAttribute : PropertyAttribute { - public BufferUsage usage { get; } + public BufferType Type { get; } - public GraphicsBufferUsageAttribute(BufferUsage usage) + public BufferTypeUsageAttribute(BufferType type) { - this.usage = usage; + this.Type = type; } } @@ -102,7 +102,7 @@ public enum Type { typeof(EnumAttribute), Type.Enum }, { typeof(MinMaxAttribute), Type.MinMax}, { typeof(LogarithmicAttribute), Type.Logarithmic}, - { typeof(GraphicsBufferUsageAttribute), Type.GraphicsBufferUsage}, + { typeof(BufferTypeUsageAttribute), Type.GraphicsBufferUsage}, }; public VFXPropertyAttributes(params object[] attributes) : this() diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.shadergraph b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.shadergraph new file mode 100644 index 00000000000..b7b1e00246d --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.shadergraph @@ -0,0 +1,4780 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "0eee5796c76d40b194851d783f40cfb3", + "m_Properties": [ + { + "m_Id": "4e8b51acacb64d01ac218578e7cc7d2f" + }, + { + "m_Id": "cceb76d9892f4d51a013847e840295bb" + } + ], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "1ba01848e6114e7e81aa80883998620c" + } + ], + "m_Nodes": [ + { + "m_Id": "b26d89e6464f41a6aa5f088c5ed709df" + }, + { + "m_Id": "a247a5a294e54512baf648a3ee9ad3c8" + }, + { + "m_Id": "4d24ba27721c4426ae7d5f361cd5d751" + }, + { + "m_Id": "716fe6f6ad1a4acba38d720b01ef48a6" + }, + { + "m_Id": "46884ff57b0b42b389ca23da148f26ec" + }, + { + "m_Id": "eaa01bc043724df4a41b90d907539b1b" + }, + { + "m_Id": "a92833f0697740cdb9e464942e4cbaa5" + }, + { + "m_Id": "970df457b14b4b82a433a2777314199b" + }, + { + "m_Id": "658bdb9466a14f9ab703b5c25eaa6e80" + }, + { + "m_Id": "b87bd545a6e944d0b1964cc3396c620e" + }, + { + "m_Id": "fae96694ff3e45ebb556fad7cfb9535e" + }, + { + "m_Id": "5bdafa785f41421496b227fcc9817258" + }, + { + "m_Id": "d97ce4b390df43ab81f47f6ea0b7722a" + }, + { + "m_Id": "2afd7d71d1da4bc38b8ff0b35163c485" + }, + { + "m_Id": "c8897a6c28044bcda5598ee329df9ebf" + }, + { + "m_Id": "7c6b7eea99b047b09736de33c9dcacee" + }, + { + "m_Id": "d075078095f247efb212c988b1d86cbb" + }, + { + "m_Id": "0859f842291c4019b115ba961a097207" + }, + { + "m_Id": "977bbae909e14447ab30d2aa697516a8" + }, + { + "m_Id": "f6603adf3ff344d696ca1fa1eb05bc87" + }, + { + "m_Id": "1e74337c2eaa488a93f9ab75d42711e7" + }, + { + "m_Id": "25f498782e5d4fe49abd746833e5b349" + }, + { + "m_Id": "fec3d87f15e94518bcd00b3d2442bb61" + }, + { + "m_Id": "e26d779930004ffc9004f07392954010" + }, + { + "m_Id": "de22c1c5f2e144968731bfb137a287db" + }, + { + "m_Id": "694e10aca4b8481ba2346b5518caf4ea" + }, + { + "m_Id": "e9f3910d6f6444a58959236c3135ac0c" + }, + { + "m_Id": "f01c1f68cf5f4c1ea26d496776a19bd3" + }, + { + "m_Id": "b73cda3187e440d1925cae467f68583f" + }, + { + "m_Id": "7bd580c21b494c26a3941721031c2862" + }, + { + "m_Id": "0a75c945a20e4104ad54be6c6b4bb2ee" + }, + { + "m_Id": "e01a98e3eeda4ba880bc041ae00eba4f" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "0859f842291c4019b115ba961a097207" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "d075078095f247efb212c988b1d86cbb" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "0a75c945a20e4104ad54be6c6b4bb2ee" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e01a98e3eeda4ba880bc041ae00eba4f" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "1e74337c2eaa488a93f9ab75d42711e7" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "694e10aca4b8481ba2346b5518caf4ea" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "25f498782e5d4fe49abd746833e5b349" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f01c1f68cf5f4c1ea26d496776a19bd3" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2afd7d71d1da4bc38b8ff0b35163c485" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5bdafa785f41421496b227fcc9817258" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2afd7d71d1da4bc38b8ff0b35163c485" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7c6b7eea99b047b09736de33c9dcacee" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2afd7d71d1da4bc38b8ff0b35163c485" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "977bbae909e14447ab30d2aa697516a8" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2afd7d71d1da4bc38b8ff0b35163c485" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "d075078095f247efb212c988b1d86cbb" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "46884ff57b0b42b389ca23da148f26ec" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "eaa01bc043724df4a41b90d907539b1b" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "5bdafa785f41421496b227fcc9817258" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fae96694ff3e45ebb556fad7cfb9535e" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "694e10aca4b8481ba2346b5518caf4ea" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b73cda3187e440d1925cae467f68583f" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7bd580c21b494c26a3941721031c2862" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "0a75c945a20e4104ad54be6c6b4bb2ee" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "7c6b7eea99b047b09736de33c9dcacee" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1e74337c2eaa488a93f9ab75d42711e7" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "977bbae909e14447ab30d2aa697516a8" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "25f498782e5d4fe49abd746833e5b349" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a92833f0697740cdb9e464942e4cbaa5" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "716fe6f6ad1a4acba38d720b01ef48a6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b73cda3187e440d1925cae467f68583f" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "0a75c945a20e4104ad54be6c6b4bb2ee" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b87bd545a6e944d0b1964cc3396c620e" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "1e74337c2eaa488a93f9ab75d42711e7" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b87bd545a6e944d0b1964cc3396c620e" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "25f498782e5d4fe49abd746833e5b349" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b87bd545a6e944d0b1964cc3396c620e" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fae96694ff3e45ebb556fad7cfb9535e" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "b87bd545a6e944d0b1964cc3396c620e" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fec3d87f15e94518bcd00b3d2442bb61" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "c8897a6c28044bcda5598ee329df9ebf" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7c6b7eea99b047b09736de33c9dcacee" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "d075078095f247efb212c988b1d86cbb" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "fec3d87f15e94518bcd00b3d2442bb61" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "d97ce4b390df43ab81f47f6ea0b7722a" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "5bdafa785f41421496b227fcc9817258" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "de22c1c5f2e144968731bfb137a287db" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "694e10aca4b8481ba2346b5518caf4ea" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "de22c1c5f2e144968731bfb137a287db" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e26d779930004ffc9004f07392954010" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "de22c1c5f2e144968731bfb137a287db" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e9f3910d6f6444a58959236c3135ac0c" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "de22c1c5f2e144968731bfb137a287db" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "f01c1f68cf5f4c1ea26d496776a19bd3" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e01a98e3eeda4ba880bc041ae00eba4f" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "a92833f0697740cdb9e464942e4cbaa5" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e26d779930004ffc9004f07392954010" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "b73cda3187e440d1925cae467f68583f" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "e9f3910d6f6444a58959236c3135ac0c" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7bd580c21b494c26a3941721031c2862" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f01c1f68cf5f4c1ea26d496776a19bd3" + }, + "m_SlotId": 4 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "7bd580c21b494c26a3941721031c2862" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "f6603adf3ff344d696ca1fa1eb05bc87" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "977bbae909e14447ab30d2aa697516a8" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "fae96694ff3e45ebb556fad7cfb9535e" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e26d779930004ffc9004f07392954010" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "fec3d87f15e94518bcd00b3d2442bb61" + }, + "m_SlotId": 2 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "e9f3910d6f6444a58959236c3135ac0c" + }, + "m_SlotId": 2 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 1082.999755859375, + "y": -9.000006675720215 + }, + "m_Blocks": [ + { + "m_Id": "b26d89e6464f41a6aa5f088c5ed709df" + }, + { + "m_Id": "a247a5a294e54512baf648a3ee9ad3c8" + }, + { + "m_Id": "4d24ba27721c4426ae7d5f361cd5d751" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 1082.999755859375, + "y": 190.99996948242188 + }, + "m_Blocks": [ + { + "m_Id": "716fe6f6ad1a4acba38d720b01ef48a6" + }, + { + "m_Id": "970df457b14b4b82a433a2777314199b" + }, + { + "m_Id": "658bdb9466a14f9ab703b5c25eaa6e80" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "97eefb68d53b4a91ac81d4ce1c36cc10" + }, + { + "m_Id": "cc9720d8ed054a3db6393559eae4bdc2" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "001e0140088f49e78ac7ea904bf272f5", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "006008c613e5440bbe552808bc0724d5", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "0585e73e86c04130a249aeb7d568559a", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "07db61ed35f34492ae3d5e05d0afa1e9", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2Node", + "m_ObjectId": "0859f842291c4019b115ba961a097207", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Vector 2", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -906.0000610351563, + "y": 741.0000610351563, + "width": 128.0, + "height": 101.0 + } + }, + "m_Slots": [ + { + "m_Id": "3355fdcf5e5b4d9c83c43352cb43a090" + }, + { + "m_Id": "f8de66d402ad4562b9509ee115e98bc3" + }, + { + "m_Id": "2e5885222b3847edbd204daf6244bc1a" + } + ], + "synonyms": [ + "2", + "v2", + "vec2", + "float2" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Value": { + "x": 0.0, + "y": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.AddNode", + "m_ObjectId": "0a75c945a20e4104ad54be6c6b4bb2ee", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Add", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 589.0001220703125, + "y": 589.0000610351563, + "width": 125.9998779296875, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "e2d8f9e7e6364292a510b6872e41f0f5" + }, + { + "m_Id": "6117f6c9af1742728a720e1f1ea466ea" + }, + { + "m_Id": "991d0a32093b4eb6bdf9e211114c9f17" + } + ], + "synonyms": [ + "addition", + "sum", + "plus" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "11cb88f283a7494db9fb634225220e6b", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.25, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "16108b717aa74b0691c1aa654c651cd6", + "m_Id": 0, + "m_DisplayName": "Texture2D", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "168f7ef6b5824a03be20d025d2d81fa2", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "16b457801fdc47e39ce9771647e49ee1" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "1ba01848e6114e7e81aa80883998620c", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "4e8b51acacb64d01ac218578e7cc7d2f" + }, + { + "m_Id": "cceb76d9892f4d51a013847e840295bb" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "1bb8cc6836d74d3683f6c5c64d60a769", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.AddNode", + "m_ObjectId": "1e74337c2eaa488a93f9ab75d42711e7", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Add", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -349.0000305175781, + "y": 489.0000305175781, + "width": 129.99996948242188, + "height": 118.00003051757813 + } + }, + "m_Slots": [ + { + "m_Id": "9faa07454e5a490ebba07902b0802760" + }, + { + "m_Id": "07db61ed35f34492ae3d5e05d0afa1e9" + }, + { + "m_Id": "a172f08185e14fe394d8f533584fc81c" + } + ], + "synonyms": [ + "addition", + "sum", + "plus" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "2260a2d0c0714db9854a78e934923c5a", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.AddNode", + "m_ObjectId": "25f498782e5d4fe49abd746833e5b349", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Add", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -348.99993896484377, + "y": 752.0000610351563, + "width": 129.9999542236328, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "2260a2d0c0714db9854a78e934923c5a" + }, + { + "m_Id": "b8bdc98c9d1f4763aa2613c064373377" + }, + { + "m_Id": "1bb8cc6836d74d3683f6c5c64d60a769" + } + ], + "synonyms": [ + "addition", + "sum", + "plus" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "264d33ef134f450f938402a19056e3c7", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "293d9b1dd55b4a548735d824e9019840", + "m_Id": 1, + "m_DisplayName": "X", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "X", + "m_StageCapability": 3, + "m_Value": 1.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "2ad3bb3cb17d4c89abe46b804a8a342b", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "2afd7d71d1da4bc38b8ff0b35163c485", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -872.0, + "y": 404.9999694824219, + "width": 94.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "c6c8cef2d9964e449a88a46054e749a1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "cceb76d9892f4d51a013847e840295bb" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.BuiltinData", + "m_ObjectId": "2c1fbbbb98d64c0bbb1c865bd21adbd2", + "m_Distortion": false, + "m_DistortionMode": 0, + "m_DistortionDepthTest": true, + "m_AddPrecomputedVelocity": false, + "m_TransparentWritesMotionVec": false, + "m_DepthOffset": false, + "m_ConservativeDepthOffset": false, + "m_TransparencyFog": true, + "m_AlphaTestShadow": false, + "m_BackThenFrontRendering": false, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_TransparentPerPixelSorting": false, + "m_SupportLodCrossFade": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "2e5885222b3847edbd204daf6244bc1a", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "2eddfb19733e46bb9da1fabf3be99af6", + "m_Id": 1, + "m_DisplayName": "X", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "X", + "m_StageCapability": 3, + "m_Value": -1.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "32d4504371f148429ecb4d1d60f3f1b1", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "3340afc7339648e0bf05f0190bb58bd8", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "3355fdcf5e5b4d9c83c43352cb43a090", + "m_Id": 1, + "m_DisplayName": "X", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "X", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "34f1ba6aa05c47c79dd89fb85cdfc776", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "3c9c944029674adab341940165fff46c", + "m_Id": 1, + "m_DisplayName": "Time", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Time", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "40e6dc6c30d1408590f60763e2a76f1b", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "42ca0f5e8f7d4f9c8abdf52327cc4d05", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "4477e51e840744938a466f9b8eeb2cfe", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "46884ff57b0b42b389ca23da148f26ec", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 139.99998474121095, + "y": 58.99998092651367, + "width": 138.00010681152345, + "height": 34.0000114440918 + } + }, + "m_Slots": [ + { + "m_Id": "63ca788fe080457788d186dceb3f879c" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "4e8b51acacb64d01ac218578e7cc7d2f" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "49893fbe9595403aae181dfb1e95b0b7", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "4c589059a8b243f3b575e2b384c82e53", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "4d24ba27721c4426ae7d5f361cd5d751", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "c1c55cac83474156b506bf85958f562f" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Internal.Texture2DShaderProperty", + "m_ObjectId": "4e8b51acacb64d01ac218578e7cc7d2f", + "m_Guid": { + "m_GuidSerialized": "d8f0f166-9aef-461e-8036-4abfcb3304f5" + }, + "m_Name": "Texture2D", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Texture2D", + "m_DefaultReferenceName": "_Texture2D", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "m_SerializedTexture": "{\"texture\":{\"fileID\":8600000,\"guid\":\"1e7eb60b77a4466468e992de03cd7e47\",\"type\":2}}", + "m_Guid": "" + }, + "isMainTexture": false, + "useTilingAndOffset": false, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "51a75f99262844ebb44e95780f596427", + "m_Id": 2, + "m_DisplayName": "Y", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Y", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "54ae570baf8e4ea08a2220e2d5a360c3", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "54f0b4808f784f85959bbd2af8aff333", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "57c23ba8fdc14f2590b474906b25653c", + "m_Id": 2, + "m_DisplayName": "Y", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Y", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "58094f4696334d11883ea4a1b964ae94", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "5ab0359952fd421680561d600d64e7cf", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "5bdafa785f41421496b227fcc9817258", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -719.9999389648438, + "y": 450.0, + "width": 207.99996948242188, + "height": 301.99993896484377 + } + }, + "m_Slots": [ + { + "m_Id": "7d521f53a0e94989ba44c43759da36ae" + }, + { + "m_Id": "54ae570baf8e4ea08a2220e2d5a360c3" + }, + { + "m_Id": "99341f749d38452f9bf0d72e08dde5ca" + } + ], + "synonyms": [ + "multiplication", + "times", + "x" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "5c28ebad6f9248e4a84844d7be9ea743", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.GradientInputMaterialSlot", + "m_ObjectId": "6067bb17d83842bc9fdffcbcb7557c2a", + "m_Id": 0, + "m_DisplayName": "Gradient", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Gradient", + "m_StageCapability": 3, + "m_Value": { + "serializedVersion": "2", + "key0": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + }, + "key1": { + "r": 0.027752945199608804, + "g": 0.008829884231090546, + "b": 0.0006183127406984568, + "a": 1.0 + }, + "key2": { + "r": 0.07277197390794754, + "g": 0.007770526222884655, + "b": 0.0009992928244173527, + "a": 0.0 + }, + "key3": { + "r": 0.9473068714141846, + "g": 0.4125427007675171, + "b": 0.046665094792842868, + "a": 0.0 + }, + "key4": { + "r": 0.17788846790790559, + "g": 0.26225072145462038, + "b": 0.03310477361083031, + "a": 0.0 + }, + "key5": { + "r": 0.026241222396492959, + "g": 0.17788846790790559, + "b": 0.26225072145462038, + "a": 0.0 + }, + "key6": { + "r": 0.05660378932952881, + "g": 0.05660378932952881, + "b": 0.05660378932952881, + "a": 0.0 + }, + "key7": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "ctime0": 0, + "ctime1": 10922, + "ctime2": 21845, + "ctime3": 32768, + "ctime4": 43690, + "ctime5": 54613, + "ctime6": 65535, + "ctime7": 0, + "atime0": 0, + "atime1": 65535, + "atime2": 0, + "atime3": 0, + "atime4": 0, + "atime5": 0, + "atime6": 0, + "atime7": 0, + "m_Mode": 2, + "m_ColorSpace": -1, + "m_NumColorKeys": 7, + "m_NumAlphaKeys": 2 + }, + "m_DefaultValue": { + "serializedVersion": "2", + "key0": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "key1": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "key2": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "key3": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "key4": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "key5": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "key6": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "key7": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "ctime0": 0, + "ctime1": 65535, + "ctime2": 0, + "ctime3": 0, + "ctime4": 0, + "ctime5": 0, + "ctime6": 0, + "ctime7": 0, + "atime0": 0, + "atime1": 65535, + "atime2": 0, + "atime3": 0, + "atime4": 0, + "atime5": 0, + "atime6": 0, + "atime7": 0, + "m_Mode": 0, + "m_ColorSpace": -1, + "m_NumColorKeys": 2, + "m_NumAlphaKeys": 2 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "60944aaa1b624290bcb16194d3721c03", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "6117f6c9af1742728a720e1f1ea466ea", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "63ca788fe080457788d186dceb3f879c", + "m_Id": 0, + "m_DisplayName": "Texture2D", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "658bdb9466a14f9ab703b5c25eaa6e80", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Alpha", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "d23c1091c008421191441e7f558b2dd0" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "694e10aca4b8481ba2346b5518caf4ea", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -43.000022888183597, + "y": 648.0000610351563, + "width": 183.00006103515626, + "height": 251.00006103515626 + } + }, + "m_Slots": [ + { + "m_Id": "001e0140088f49e78ac7ea904bf272f5" + }, + { + "m_Id": "54f0b4808f784f85959bbd2af8aff333" + }, + { + "m_Id": "c3fd8e2828d34b12a3750e4fb9a46bc1" + }, + { + "m_Id": "ab059635d78446c5a9f604eca4541d85" + }, + { + "m_Id": "aef71214c94d4ec887c35f84a1dfd3d6" + }, + { + "m_Id": "4477e51e840744938a466f9b8eeb2cfe" + }, + { + "m_Id": "d70339081f0c4ad3a135f20a10ff2719" + }, + { + "m_Id": "fcebed4302684206a8db3acd6654a120" + } + ], + "synonyms": [ + "tex2d" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0, + "m_EnableGlobalMipBias": true, + "m_MipSamplingMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "69b7c40bd2fa4bbfa8a1615cee09da51", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "6e13e15a90744a1486cce63592b4616f", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "716fe6f6ad1a4acba38d720b01ef48a6", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "aea8fc62060e4e0cb46f0ade74bd9875" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "73a5abbc455c484883f51608b37db05d", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "77a2e6b9e1ee4942898d1118b3bec38d", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7a4b1bafef7f4cab86fe194d0a702053", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.AddNode", + "m_ObjectId": "7bd580c21b494c26a3941721031c2862", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Add", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 309.0000305175781, + "y": 634.0000610351563, + "width": 126.00006103515625, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "c6a65012f14145749fdfadef4f8ef05a" + }, + { + "m_Id": "92b86566a09649afbd30bc6924a964a2" + }, + { + "m_Id": "264d33ef134f450f938402a19056e3c7" + } + ], + "synonyms": [ + "addition", + "sum", + "plus" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDUnlitSubTarget", + "m_ObjectId": "7c1fe092d8824ed8b9274d4c499ce164" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "7c6b7eea99b047b09736de33c9dcacee", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -720.0001220703125, + "y": 568.0000610351563, + "width": 208.00006103515626, + "height": 302.00006103515627 + } + }, + "m_Slots": [ + { + "m_Id": "aca0d91cbe884a2e875b63bc65348d99" + }, + { + "m_Id": "baf587fc17a34823b8e55142da214e92" + }, + { + "m_Id": "dcc0ce027acc4f98a8e2bfbb00d71230" + } + ], + "synonyms": [ + "multiplication", + "times", + "x" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "7c78b33e58144b3284605a03e195c2ed", + "m_Id": 2, + "m_DisplayName": "Y", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Y", + "m_StageCapability": 3, + "m_Value": -1.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "7d521f53a0e94989ba44c43759da36ae", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "80ebb59aa64c4c2f848b629efe6b10cf", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "80fe762a839f41e4947c240c2e49cc62", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "8238e0589a704f5b85581948d0480f83", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "848979c70743492a8f2946d0a8f8b515", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "8d1a69e8c2654f31b73b569dcb46cb62", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "8d73bb3caff246eab738867a7fb6b866", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "8e70b91771434bcb9bea3d7fbc4db9c3", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "8e7f764a57a344328c09088f8621dd51", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "92b86566a09649afbd30bc6924a964a2", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "9680e2fd897342f7954134a877a1aac2", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.SystemData", + "m_ObjectId": "96b21abaa8ee4546b933eb33ae7593c7", + "m_MaterialNeedsUpdateHash": 0, + "m_SurfaceType": 0, + "m_RenderingPass": 1, + "m_BlendMode": 0, + "m_ZTest": 4, + "m_ZWrite": false, + "m_TransparentCullMode": 2, + "m_OpaqueCullMode": 2, + "m_SortPriority": 0, + "m_AlphaTest": false, + "m_ExcludeFromTUAndAA": false, + "m_TransparentDepthPrepass": false, + "m_TransparentDepthPostpass": false, + "m_SupportLodCrossFade": false, + "m_DoubleSidedMode": 0, + "m_DOTSInstancing": false, + "m_CustomVelocity": false, + "m_Tessellation": false, + "m_TessellationMode": 0, + "m_TessellationFactorMinDistance": 20.0, + "m_TessellationFactorMaxDistance": 50.0, + "m_TessellationFactorTriangleSize": 100.0, + "m_TessellationShapeFactor": 0.75, + "m_TessellationBackFaceCullEpsilon": -0.25, + "m_TessellationMaxDisplacement": 0.009999999776482582, + "m_DebugSymbols": false, + "m_Version": 2, + "inspectorFoldoutMask": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "970df457b14b4b82a433a2777314199b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Emission", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "9a8e6eb1f7bc49a8b670eb49314f4db1" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Emission" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "977bbae909e14447ab30d2aa697516a8", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -719.0000610351563, + "y": 790.0000610351563, + "width": 208.00003051757813, + "height": 302.00006103515627 + } + }, + "m_Slots": [ + { + "m_Id": "eed1fcba32f44abc89c02c612d54614d" + }, + { + "m_Id": "58094f4696334d11883ea4a1b964ae94" + }, + { + "m_Id": "9b9e38b058a24118b7f23cf87c241cb9" + } + ], + "synonyms": [ + "multiplication", + "times", + "x" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDUnlitData", + "m_ObjectId": "97864b0388f44bcaa7fda10bc7d6305e", + "m_EnableShadowMatte": false, + "m_DistortionOnly": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "97cfc85856e545ad9b97ae172f0c9049", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.Rendering.HighDefinition.ShaderGraph.HDTarget", + "m_ObjectId": "97eefb68d53b4a91ac81d4ce1c36cc10", + "m_ActiveSubTarget": { + "m_Id": "7c1fe092d8824ed8b9274d4c499ce164" + }, + "m_Datas": [ + { + "m_Id": "2c1fbbbb98d64c0bbb1c865bd21adbd2" + }, + { + "m_Id": "96b21abaa8ee4546b933eb33ae7593c7" + }, + { + "m_Id": "97864b0388f44bcaa7fda10bc7d6305e" + } + ], + "m_CustomEditorGUI": "", + "m_SupportVFX": false, + "m_SupportLineRendering": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "98b4a4c1b55c436d9ba9376ea534855f", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "991d0a32093b4eb6bdf9e211114c9f17", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "99341f749d38452f9bf0d72e08dde5ca", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "9a048e1b3e8043b78b2b3e30ebaf186c", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "9a8e6eb1f7bc49a8b670eb49314f4db1", + "m_Id": 0, + "m_DisplayName": "Emission", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Emission", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 1, + "m_DefaultColor": { + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "9b9e38b058a24118b7f23cf87c241cb9", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "9faa07454e5a490ebba07902b0802760", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "a172f08185e14fe394d8f533584fc81c", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "a247a5a294e54512baf648a3ee9ad3c8", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "c3acdaffcc5d413eb929c81f38fd3956" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "a2a3ac7f1fb84326a72761524a18590d", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "a84282dd32254d7cbb21089d17944175", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.SampleGradient", + "m_ObjectId": "a92833f0697740cdb9e464942e4cbaa5", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Sample Gradient", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 832.9998779296875, + "y": 183.99996948242188, + "width": 167.9998779296875, + "height": 118.00003051757813 + } + }, + "m_Slots": [ + { + "m_Id": "6067bb17d83842bc9fdffcbcb7557c2a" + }, + { + "m_Id": "3c9c944029674adab341940165fff46c" + }, + { + "m_Id": "8d1a69e8c2654f31b73b569dcb46cb62" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ab059635d78446c5a9f604eca4541d85", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "aca0d91cbe884a2e875b63bc65348d99", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "ae1c84f31a974475a642744bb8de8ffc", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "aea8fc62060e4e0cb46f0ade74bd9875", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "aef71214c94d4ec887c35f84a1dfd3d6", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "b26d89e6464f41a6aa5f088c5ed709df", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "34f1ba6aa05c47c79dd89fb85cdfc776" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "b51c0c730cad4fd68c703fd1e97bd814", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b5d3c5078907422cbdf38be6ec373c6a", + "m_Id": 7, + "m_DisplayName": "A", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b5f5bc89be3c40c8aeee3c057381ab06", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "b65487bc33554e41a3a57d426a1bf2eb", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.AddNode", + "m_ObjectId": "b73cda3187e440d1925cae467f68583f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Add", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 295.0, + "y": 489.0000305175781, + "width": 208.00003051757813, + "height": 302.0000305175781 + } + }, + "m_Slots": [ + { + "m_Id": "848979c70743492a8f2946d0a8f8b515" + }, + { + "m_Id": "c1e41e83e3da4312adf1ea3e910e6607" + }, + { + "m_Id": "b51c0c730cad4fd68c703fd1e97bd814" + } + ], + "synonyms": [ + "addition", + "sum", + "plus" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "b80888a108ae4477bfc89b390c44bd24", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVNode", + "m_ObjectId": "b87bd545a6e944d0b1964cc3396c620e", + "m_Group": { + "m_Id": "" + }, + "m_Name": "UV", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -700.0001831054688, + "y": 276.0000305175781, + "width": 145.00006103515626, + "height": 129.00003051757813 + } + }, + "m_Slots": [ + { + "m_Id": "49893fbe9595403aae181dfb1e95b0b7" + } + ], + "synonyms": [ + "texcoords", + "coords", + "coordinates" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_OutputChannel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "b8bdc98c9d1f4763aa2613c064373377", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "baf587fc17a34823b8e55142da214e92", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "e00": 2.0, + "e01": 2.0, + "e02": 2.0, + "e03": 2.0, + "e10": 2.0, + "e11": 2.0, + "e12": 2.0, + "e13": 2.0, + "e20": 2.0, + "e21": 2.0, + "e22": 2.0, + "e23": 2.0, + "e30": 2.0, + "e31": 2.0, + "e32": 2.0, + "e33": 2.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "bb348c3e8693469e927e9409c0c9d807", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2MaterialSlot", + "m_ObjectId": "be64478e46994e15bd669fbe67212a3a", + "m_Id": 0, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "bf399bc31598490db29187b4019647ac", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "c1c55cac83474156b506bf85958f562f", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "c1e41e83e3da4312adf1ea3e910e6607", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "c39f98b859a043c4a06dc504c4ce68b1", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "c3acdaffcc5d413eb929c81f38fd3956", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c3fd8e2828d34b12a3750e4fb9a46bc1", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "c5e4d72d50e844c08981fa29557f23dd", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "c6a65012f14145749fdfadef4f8ef05a", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "c6c8cef2d9964e449a88a46054e749a1", + "m_Id": 0, + "m_DisplayName": "Scale", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2Node", + "m_ObjectId": "c8897a6c28044bcda5598ee329df9ebf", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Vector 2", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -906.0000610351563, + "y": 633.0000610351563, + "width": 128.0, + "height": 101.0 + } + }, + "m_Slots": [ + { + "m_Id": "2eddfb19733e46bb9da1fabf3be99af6" + }, + { + "m_Id": "57c23ba8fdc14f2590b474906b25653c" + }, + { + "m_Id": "9a048e1b3e8043b78b2b3e30ebaf186c" + } + ], + "synonyms": [ + "2", + "v2", + "vec2", + "float2" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Value": { + "x": 0.0, + "y": 0.0 + } +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "cc9720d8ed054a3db6393559eae4bdc2", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "16b457801fdc47e39ce9771647e49ee1" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": false, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_DisableTint": false, + "m_AdditionalMotionVectorMode": 0, + "m_AlembicMotionVectors": false, + "m_SupportsLODCrossFade": false, + "m_CustomEditorGUI": "", + "m_SupportVFX": false +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector1ShaderProperty", + "m_ObjectId": "cceb76d9892f4d51a013847e840295bb", + "m_Guid": { + "m_GuidSerialized": "074247bd-25b1-426c-b416-236a1751bb0e" + }, + "m_Name": "Scale", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Scale", + "m_DefaultReferenceName": "_Scale", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": false, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": 0.03125, + "m_FloatType": 0, + "m_RangeValues": { + "x": 0.0, + "y": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "d075078095f247efb212c988b1d86cbb", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -719.0001220703125, + "y": 683.0000610351563, + "width": 208.00006103515626, + "height": 302.0 + } + }, + "m_Slots": [ + { + "m_Id": "168f7ef6b5824a03be20d025d2d81fa2" + }, + { + "m_Id": "006008c613e5440bbe552808bc0724d5" + }, + { + "m_Id": "6e13e15a90744a1486cce63592b4616f" + } + ], + "synonyms": [ + "multiplication", + "times", + "x" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d23c1091c008421191441e7f558b2dd0", + "m_Id": 0, + "m_DisplayName": "Alpha", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Alpha", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.UVMaterialSlot", + "m_ObjectId": "d70339081f0c4ad3a135f20a10ff2719", + "m_Id": 2, + "m_DisplayName": "UV", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "UV", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0 + }, + "m_Labels": [], + "m_Channel": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2Node", + "m_ObjectId": "d97ce4b390df43ab81f47f6ea0b7722a", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Vector 2", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -906.0000610351563, + "y": 522.0, + "width": 128.00006103515626, + "height": 101.0 + } + }, + "m_Slots": [ + { + "m_Id": "293d9b1dd55b4a548735d824e9019840" + }, + { + "m_Id": "51a75f99262844ebb44e95780f596427" + }, + { + "m_Id": "be64478e46994e15bd669fbe67212a3a" + } + ], + "synonyms": [ + "2", + "v2", + "vec2", + "float2" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Value": { + "x": 0.0, + "y": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "dcc0ce027acc4f98a8e2bfbb00d71230", + "m_Id": 2, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "dd0a264817ec4bfaac7980a2be6bdbc7", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "de22c1c5f2e144968731bfb137a287db", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -349.00006103515627, + "y": 951.0000610351563, + "width": 138.0, + "height": 34.0 + } + }, + "m_Slots": [ + { + "m_Id": "16108b717aa74b0691c1aa654c651cd6" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "4e8b51acacb64d01ac218578e7cc7d2f" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "dfa838a626364eb2ab1706b9bc8c122f", + "m_Id": 4, + "m_DisplayName": "R", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "R", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.MultiplyNode", + "m_ObjectId": "e01a98e3eeda4ba880bc041ae00eba4f", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Multiply", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 905.9999389648438, + "y": 564.9999389648438, + "width": 208.00006103515626, + "height": 302.0 + } + }, + "m_Slots": [ + { + "m_Id": "8d73bb3caff246eab738867a7fb6b866" + }, + { + "m_Id": "11cb88f283a7494db9fb634225220e6b" + }, + { + "m_Id": "a2a3ac7f1fb84326a72761524a18590d" + } + ], + "synonyms": [ + "multiplication", + "times", + "x" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "e26d779930004ffc9004f07392954010", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -43.000022888183597, + "y": 397.0000305175781, + "width": 183.00006103515626, + "height": 251.00003051757813 + } + }, + "m_Slots": [ + { + "m_Id": "b80888a108ae4477bfc89b390c44bd24" + }, + { + "m_Id": "7a4b1bafef7f4cab86fe194d0a702053" + }, + { + "m_Id": "98b4a4c1b55c436d9ba9376ea534855f" + }, + { + "m_Id": "2ad3bb3cb17d4c89abe46b804a8a342b" + }, + { + "m_Id": "8238e0589a704f5b85581948d0480f83" + }, + { + "m_Id": "dd0a264817ec4bfaac7980a2be6bdbc7" + }, + { + "m_Id": "4c589059a8b243f3b575e2b384c82e53" + }, + { + "m_Id": "42ca0f5e8f7d4f9c8abdf52327cc4d05" + } + ], + "synonyms": [ + "tex2d" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0, + "m_EnableGlobalMipBias": true, + "m_MipSamplingMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "e2d8f9e7e6364292a510b6872e41f0f5", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DInputMaterialSlot", + "m_ObjectId": "e58de542e6d0407e85ae68efe7ac5013", + "m_Id": 1, + "m_DisplayName": "Texture", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Texture", + "m_StageCapability": 3, + "m_BareResource": false, + "m_Texture": { + "m_SerializedTexture": "{\"texture\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "e61c139bef174891a1e4e23a07db35ec", + "m_Id": 5, + "m_DisplayName": "G", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "G", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "e9f3910d6f6444a58959236c3135ac0c", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -42.9999885559082, + "y": 899.0001220703125, + "width": 183.0000457763672, + "height": 251.0 + } + }, + "m_Slots": [ + { + "m_Id": "77a2e6b9e1ee4942898d1118b3bec38d" + }, + { + "m_Id": "3340afc7339648e0bf05f0190bb58bd8" + }, + { + "m_Id": "ae1c84f31a974475a642744bb8de8ffc" + }, + { + "m_Id": "b5f5bc89be3c40c8aeee3c057381ab06" + }, + { + "m_Id": "69b7c40bd2fa4bbfa8a1615cee09da51" + }, + { + "m_Id": "32d4504371f148429ecb4d1d60f3f1b1" + }, + { + "m_Id": "a84282dd32254d7cbb21089d17944175" + }, + { + "m_Id": "bf399bc31598490db29187b4019647ac" + } + ], + "synonyms": [ + "tex2d" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0, + "m_EnableGlobalMipBias": true, + "m_MipSamplingMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "eaa01bc043724df4a41b90d907539b1b", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 570.9998779296875, + "y": 58.99998092651367, + "width": 183.00018310546876, + "height": 250.99998474121095 + } + }, + "m_Slots": [ + { + "m_Id": "fdecc262ca2045f8a52942d1dd1824ed" + }, + { + "m_Id": "dfa838a626364eb2ab1706b9bc8c122f" + }, + { + "m_Id": "b65487bc33554e41a3a57d426a1bf2eb" + }, + { + "m_Id": "f99f8f35c7494954994ea67ee8a8f978" + }, + { + "m_Id": "40e6dc6c30d1408590f60763e2a76f1b" + }, + { + "m_Id": "e58de542e6d0407e85ae68efe7ac5013" + }, + { + "m_Id": "8e70b91771434bcb9bea3d7fbc4db9c3" + }, + { + "m_Id": "73a5abbc455c484883f51608b37db05d" + } + ], + "synonyms": [ + "tex2d" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0, + "m_EnableGlobalMipBias": true, + "m_MipSamplingMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicValueMaterialSlot", + "m_ObjectId": "eed1fcba32f44abc89c02c612d54614d", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "e00": 0.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 0.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 0.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 0.0 + }, + "m_DefaultValue": { + "e00": 1.0, + "e01": 0.0, + "e02": 0.0, + "e03": 0.0, + "e10": 0.0, + "e11": 1.0, + "e12": 0.0, + "e13": 0.0, + "e20": 0.0, + "e21": 0.0, + "e22": 1.0, + "e23": 0.0, + "e30": 0.0, + "e31": 0.0, + "e32": 0.0, + "e33": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "efe78285656a49d897925bc294d54297", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "f01c1f68cf5f4c1ea26d496776a19bd3", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -42.99993896484375, + "y": 1166.0001220703125, + "width": 183.0000457763672, + "height": 251.0 + } + }, + "m_Slots": [ + { + "m_Id": "efe78285656a49d897925bc294d54297" + }, + { + "m_Id": "9680e2fd897342f7954134a877a1aac2" + }, + { + "m_Id": "e61c139bef174891a1e4e23a07db35ec" + }, + { + "m_Id": "80ebb59aa64c4c2f848b629efe6b10cf" + }, + { + "m_Id": "b5d3c5078907422cbdf38be6ec373c6a" + }, + { + "m_Id": "8e7f764a57a344328c09088f8621dd51" + }, + { + "m_Id": "80fe762a839f41e4947c240c2e49cc62" + }, + { + "m_Id": "60944aaa1b624290bcb16194d3721c03" + } + ], + "synonyms": [ + "tex2d" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_TextureType": 0, + "m_NormalMapSpace": 0, + "m_EnableGlobalMipBias": true, + "m_MipSamplingMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector2Node", + "m_ObjectId": "f6603adf3ff344d696ca1fa1eb05bc87", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Vector 2", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -906.0000610351563, + "y": 849.0001220703125, + "width": 128.0, + "height": 101.0 + } + }, + "m_Slots": [ + { + "m_Id": "f907aaea100c497681e70bdf3f4f9b8d" + }, + { + "m_Id": "7c78b33e58144b3284605a03e195c2ed" + }, + { + "m_Id": "5ab0359952fd421680561d600d64e7cf" + } + ], + "synonyms": [ + "2", + "v2", + "vec2", + "float2" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Value": { + "x": 0.0, + "y": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f8de66d402ad4562b9509ee115e98bc3", + "m_Id": 2, + "m_DisplayName": "Y", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Y", + "m_StageCapability": 3, + "m_Value": 1.0, + "m_DefaultValue": 0.0, + "m_Labels": [ + "Y" + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f907aaea100c497681e70bdf3f4f9b8d", + "m_Id": 1, + "m_DisplayName": "X", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "X", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "f99f8f35c7494954994ea67ee8a8f978", + "m_Id": 6, + "m_DisplayName": "B", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.AddNode", + "m_ObjectId": "fae96694ff3e45ebb556fad7cfb9535e", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Add", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -345.9999694824219, + "y": 362.0, + "width": 129.9999542236328, + "height": 117.99996948242188 + } + }, + "m_Slots": [ + { + "m_Id": "c39f98b859a043c4a06dc504c4ce68b1" + }, + { + "m_Id": "0585e73e86c04130a249aeb7d568559a" + }, + { + "m_Id": "bb348c3e8693469e927e9409c0c9d807" + } + ], + "synonyms": [ + "addition", + "sum", + "plus" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SamplerStateMaterialSlot", + "m_ObjectId": "fcebed4302684206a8db3acd6654a120", + "m_Id": 3, + "m_DisplayName": "Sampler", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Sampler", + "m_StageCapability": 3, + "m_BareResource": false +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "fdecc262ca2045f8a52942d1dd1824ed", + "m_Id": 0, + "m_DisplayName": "RGBA", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "RGBA", + "m_StageCapability": 2, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.AddNode", + "m_ObjectId": "fec3d87f15e94518bcd00b3d2442bb61", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Add", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -349.0000305175781, + "y": 623.0000610351563, + "width": 129.99996948242188, + "height": 118.0 + } + }, + "m_Slots": [ + { + "m_Id": "97cfc85856e545ad9b97ae172f0c9049" + }, + { + "m_Id": "5c28ebad6f9248e4a84844d7be9ea743" + }, + { + "m_Id": "c5e4d72d50e844c08981fa29557f23dd" + } + ], + "synonyms": [ + "addition", + "sum", + "plus" + ], + "m_Precision": 0, + "m_PreviewExpanded": false, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.shadergraph.meta b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.shadergraph.meta new file mode 100644 index 00000000000..a20f97344ca --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 938118ec53798ca40bcd730243871230 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity new file mode 100644 index 00000000000..2b52c79cc50 --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity @@ -0,0 +1,678 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &254188552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 254188555} + - component: {fileID: 254188554} + - component: {fileID: 254188553} + m_Layer: 0 + m_Name: 026_RWTexture + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!73398921 &254188553 +VFXRenderer: + serializedVersion: 1 + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254188552} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!2083052967 &254188554 +VisualEffect: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254188552} + m_Enabled: 1 + m_Asset: {fileID: 8926484042661614526, guid: 6e8202714e4e69c458e1fbaa07bac0f6, type: 3} + m_InitialEventName: OnPlay + m_InitialEventNameOverriden: 0 + m_StartSeed: 0 + m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ResourceVersion: 1 + m_PropertySheet: + m_Float: + m_Array: [] + m_Vector2f: + m_Array: [] + m_Vector3f: + m_Array: [] + m_Vector4f: + m_Array: [] + m_Uint: + m_Array: [] + m_Int: + m_Array: [] + m_Matrix4x4f: + m_Array: [] + m_AnimationCurve: + m_Array: [] + m_Gradient: + m_Array: [] + m_NamedObject: + m_Array: + - m_Value: {fileID: 8600000, guid: 67cf5ac4780572f4695d66206f75e1d4, type: 2} + m_Name: RWTexture + m_Overridden: 1 + - m_Value: {fileID: 8600000, guid: 1e7eb60b77a4466468e992de03cd7e47, type: 2} + m_Name: RWTexture_N8 + m_Overridden: 1 + - m_Value: {fileID: 8600000, guid: 67cf5ac4780572f4695d66206f75e1d4, type: 2} + m_Name: RWTexture_U8 + m_Overridden: 1 + m_Bool: + m_Array: [] +--- !u!4 &254188555 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 254188552} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1076684443 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1076684447} + - component: {fileID: 1076684446} + - component: {fileID: 1076684445} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1076684445 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076684443} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: -876546973899608171, guid: 938118ec53798ca40bcd730243871230, type: 3} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1076684446 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076684443} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1076684447 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1076684443} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.1, y: 0.1, z: 0.1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1582664618 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1582664621} + - component: {fileID: 1582664620} + - component: {fileID: 1582664619} + - component: {fileID: 1582664622} + - component: {fileID: 1582664623} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &1582664619 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582664618} + m_Enabled: 1 +--- !u!20 &1582664620 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582664618} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 1 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 5 + field of view: 60 + orthographic: 1 + orthographic size: 0.4 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &1582664621 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582664618} + serializedVersion: 2 + m_LocalRotation: {x: 0.70710576, y: -0, z: -0, w: 0.70710784} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!114 &1582664622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582664618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 23c1ce4fb46143f46bc5cb5224c934f6, type: 3} + m_Name: + m_EditorClassIdentifier: + clearColorMode: 1 + backgroundColorHDR: {r: 0, g: 0, b: 0, a: 0} + clearDepth: 1 + volumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + volumeAnchorOverride: {fileID: 0} + antialiasing: 0 + SMAAQuality: 2 + dithering: 0 + stopNaNs: 0 + taaSharpenStrength: 0.5 + TAAQuality: 1 + taaSharpenMode: 0 + taaRingingReduction: 0 + taaHistorySharpening: 0.35 + taaAntiFlicker: 0.5 + taaMotionVectorRejection: 0 + taaAntiHistoryRinging: 0 + taaBaseBlendFactor: 0.875 + taaJitterScale: 1 + physicalParameters: + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + flipYMode: 0 + xrRendering: 1 + fullscreenPassthrough: 0 + allowDynamicResolution: 0 + customRenderingSettings: 0 + invertFaceCulling: 0 + probeLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + hasPersistentHistory: 0 + screenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + screenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + allowDeepLearningSuperSampling: 1 + deepLearningSuperSamplingUseCustomQualitySettings: 0 + deepLearningSuperSamplingQuality: 0 + deepLearningSuperSamplingUseCustomAttributes: 0 + deepLearningSuperSamplingUseOptimalSettings: 1 + deepLearningSuperSamplingSharpening: 0 + allowFidelityFX2SuperResolution: 1 + fidelityFX2SuperResolutionUseCustomQualitySettings: 0 + fidelityFX2SuperResolutionQuality: 0 + fidelityFX2SuperResolutionUseCustomAttributes: 0 + fidelityFX2SuperResolutionUseOptimalSettings: 1 + fidelityFX2SuperResolutionEnableSharpening: 0 + fidelityFX2SuperResolutionSharpening: 0 + fsrOverrideSharpness: 0 + fsrSharpness: 0.92 + exposureTarget: {fileID: 0} + materialMipBias: 0 + m_RenderingPathCustomFrameSettings: + bitDatas: + data1: 5770166122053453 + data2: 12934340311651418136 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + renderingPathCustomFrameSettingsOverrideMask: + mask: + data1: 0 + data2: 0 + defaultFrameSettings: 0 + m_Version: 9 + m_ObsoleteRenderingPath: 0 + m_ObsoleteFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 +--- !u!114 &1582664623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582664618} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 +--- !u!1 &2120693944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2120693946} + - component: {fileID: 2120693945} + m_Layer: 0 + m_Name: GraphicsTest + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2120693945 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2120693944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ea0c24060324bed47851dcbecd754031, type: 3} + m_Name: + m_EditorClassIdentifier: + ImageComparisonSettings: + TargetWidth: 128 + TargetHeight: 128 + TargetMSAASamples: 1 + PerPixelCorrectnessThreshold: 0 + PerPixelGammaThreshold: 0.003921569 + PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 + AverageCorrectnessThreshold: 0.0005 + IncorrectPixelsThreshold: 0.0000038146973 + UseHDR: 0 + UseBackBuffer: 0 + ImageResolution: 0 + ActiveImageTests: 1 + ActivePixelTests: -1 + captureFrameRate: 20 + fixedTimeStepScale: 1 + simulateTime: 5.95 + xrCompatible: 1 +--- !u!4 &2120693946 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2120693944} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1582664621} + - {fileID: 254188555} + - {fileID: 1076684447} + - {fileID: 2120693946} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity.meta b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity.meta new file mode 100644 index 00000000000..bd9f830ef68 --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3c54816ebc5cdcc448210af3594252cb +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.vfx b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.vfx new file mode 100644 index 00000000000..cec1413fb9a --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.vfx @@ -0,0 +1,5680 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &114340500867371532 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: d01270efd3285ea4a9d6c555cb0a8027, type: 3} + m_Name: VFXUI + m_EditorClassIdentifier: + groupInfos: [] + stickyNoteInfos: [] + categories: [] + uiBounds: + serializedVersion: 2 + x: 334 + y: -1449 + width: 2714 + height: 1936 +--- !u!114 &114350483966674976 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 7d4c867f6b72b714dbb5fd1780afe208, type: 3} + m_Name: 027_RWTexture + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614608} + - {fileID: 8926484042661614613} + - {fileID: 8926484042661614662} + - {fileID: 8926484042661614853} + - {fileID: 8926484042661614889} + - {fileID: 8926484042661614894} + - {fileID: 8926484042661614946} + - {fileID: 8926484042661614988} + - {fileID: 8926484042661615018} + - {fileID: 8926484042661615129} + - {fileID: 8926484042661615131} + - {fileID: 8926484042661615145} + - {fileID: 8926484042661615160} + - {fileID: 8926484042661615191} + - {fileID: 8926484042661615256} + - {fileID: 8926484042661615259} + - {fileID: 8926484042661615264} + - {fileID: 8926484042661615267} + - {fileID: 8926484042661615271} + - {fileID: 8926484042661615274} + - {fileID: 8926484042661615278} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_UIInfos: {fileID: 114340500867371532} + m_CustomAttributes: [] + m_ParameterInfo: + - name: RWTexture_U8 + path: RWTexture_U8 + tooltip: + space: -1 + spaceable: 0 + sheetType: m_NamedObject + realType: Texture2D + defaultValue: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + min: -Infinity + max: Infinity + enumValues: [] + descendantCount: 0 + - name: RWTexture_N8 + path: RWTexture_N8 + tooltip: + space: -1 + spaceable: 0 + sheetType: m_NamedObject + realType: Texture2D + defaultValue: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + min: -Infinity + max: Infinity + enumValues: [] + descendantCount: 0 + m_ImportDependencies: [] + m_GraphVersion: 18 + m_ResourceVersion: 1 + m_SubgraphDependencies: [] + m_CategoryPath: +--- !u!2058629511 &8926484042661614527 +VisualEffectResource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 027_RWTexture + m_Graph: {fileID: 114350483966674976} + m_Infos: + m_RendererSettings: + motionVectorGenerationMode: 0 + shadowCastingMode: 0 + rayTracingMode: 0 + receiveShadows: 0 + reflectionProbeUsage: 0 + lightProbeUsage: 0 + m_CullingFlags: 3 + m_UpdateMode: 0 + m_PreWarmDeltaTime: 0.05 + m_PreWarmStepCount: 0 + m_InitialEventName: OnPlay + m_InstancingMode: 0 + m_InstancingCapacity: 64 +--- !u!114 &8926484042661614608 +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: 73a13919d81fb7444849bae8b5c812a2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661615247} + m_UIPosition: {x: 877, y: -1449} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: A + m_Data: {fileID: 8926484042661614609} + m_InputFlowSlot: + - link: [] + - link: [] + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614613} + slotIndex: 0 + loopDuration: 0 + loopCount: 0 + delayBeforeLoop: 0 + delayAfterLoop: 0 +--- !u!114 &8926484042661614609 +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: f68759077adc0b143b6e1c101e82065e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: + m_Owners: + - {fileID: 8926484042661614608} +--- !u!114 &8926484042661614613 +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: 9dfea48843f53fc438eabc12a3a30abc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614628} + - {fileID: 8926484042661614834} + - {fileID: 8926484042661614806} + m_UIPosition: {x: 877, y: -1147} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614774} + m_OutputSlots: [] + m_Label: Initialize Particles + m_Data: {fileID: 8926484042661614627} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614608} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614662} + slotIndex: 0 +--- !u!114 &8926484042661614627 +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: d78581a96eae8bf4398c282eb0b098bd, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: Draw Particles + m_Owners: + - {fileID: 8926484042661614613} + - {fileID: 8926484042661614662} + - {fileID: 8926484042661615018} + dataType: 0 + capacity: 128 + stripCapacity: 1 + particlePerStripCount: 32 + needsComputeBounds: 0 + boundsMode: 1 + m_Space: 1 +--- !u!114 &8926484042661614628 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614613} + m_Children: [] + m_UIPosition: {x: 357.33423, y: 1214.2454} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614629} + - {fileID: 8926484042661614630} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614631} + attribute: lifetime + Composition: 0 + Source: 0 + Random: 2 + channels: 6 +--- !u!114 &8926484042661614629 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614629} + m_MasterData: + m_Owner: {fileID: 8926484042661614628} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0.8 + m_Space: -1 + m_Property: + name: A + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614630 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614630} + m_MasterData: + m_Owner: {fileID: 8926484042661614628} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1.2 + m_Space: -1 + m_Property: + name: B + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614631 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614631} + m_MasterData: + m_Owner: {fileID: 8926484042661614628} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614662 +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: 2dc095764ededfa4bb32fa602511ea4b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614820} + m_UIPosition: {x: 877, y: -401} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: Update Particles + m_Data: {fileID: 8926484042661614627} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614613} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661615018} + slotIndex: 0 + integration: 0 + angularIntegration: 0 + ageParticles: 1 + reapParticles: 1 + skipZeroDeltaUpdate: 0 +--- !u!114 &8926484042661614774 +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: 1b605c022ee79394a8a776c0869b3f9a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614775} + - {fileID: 8926484042661614779} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 8926484042661614613} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"center":{"x":0.0,"y":0.0,"z":0.0},"size":{"x":1.0,"y":1.0,"z":1.0}}' + m_Space: 0 + m_Property: + name: bounds + m_serializedType: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614775 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614774} + m_Children: + - {fileID: 8926484042661614776} + - {fileID: 8926484042661614777} + - {fileID: 8926484042661614778} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: center + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614775} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614777 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614775} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614775} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614774} + m_Children: + - {fileID: 8926484042661614780} + - {fileID: 8926484042661614781} + - {fileID: 8926484042661614782} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614780 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614779} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614781 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614779} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614782 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614779} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614774} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614806 +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: 26096dfac7c062b4b94c293605ba085e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614613} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614807} + - {fileID: 8926484042661614818} + - {fileID: 8926484042661614819} + - {fileID: 8926484042661614813} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614814} + composition: 0 + speedMode: 1 +--- !u!114 &8926484042661614807 +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: e8f2b4a846fd4c14a893cde576ad172b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614808} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614807} + m_MasterData: + m_Owner: {fileID: 8926484042661614806} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.DirectionType, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"direction":{"x":0.0,"y":1.0,"z":0.0}}' + m_Space: 0 + m_Property: + name: Direction + m_serializedType: + m_SerializableType: UnityEditor.VFX.DirectionType, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614808 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614807} + m_Children: + - {fileID: 8926484042661614809} + - {fileID: 8926484042661614810} + - {fileID: 8926484042661614811} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614807} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: direction + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614809 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614808} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614807} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614810 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614808} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614807} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614811 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614808} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614807} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614813 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614813} + m_MasterData: + m_Owner: {fileID: 8926484042661614806} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0.9 + m_Space: -1 + m_Property: + name: DirectionBlend + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614814 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614814} + m_MasterData: + m_Owner: {fileID: 8926484042661614806} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614818} + m_MasterData: + m_Owner: {fileID: 8926484042661614806} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 4.8 + m_Space: -1 + m_Property: + name: MinSpeed + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614819 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614819} + m_MasterData: + m_Owner: {fileID: 8926484042661614806} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 7.5 + m_Space: -1 + m_Property: + name: MaxSpeed + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614820 +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: e5dce54ae3368c042b26ab1f305e15b2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614662} + m_Children: [] + m_UIPosition: {x: 0, y: 2} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614821} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614826} +--- !u!114 &8926484042661614821 +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: a9f9544b71b7dab44a4644b6807e8bf6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614822} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614821} + m_MasterData: + m_Owner: {fileID: 8926484042661614820} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.Vector, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"vector":{"x":0.0,"y":-9.8100004196167,"z":0.0}}' + m_Space: 1 + m_Property: + name: Force + m_serializedType: + m_SerializableType: UnityEditor.VFX.Vector, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614822 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614821} + m_Children: + - {fileID: 8926484042661614823} + - {fileID: 8926484042661614824} + - {fileID: 8926484042661614825} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614821} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: vector + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614823 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614822} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614821} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614824 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614822} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614821} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614822} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614821} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614826 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614826} + m_MasterData: + m_Owner: {fileID: 8926484042661614820} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614834 +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: fb1f6794ace8b0c4592af9c5604cddbf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614613} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614835} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614852} + compositionPosition: 0 + compositionAxes: 0 + compositionDirection: 0 + positionMode: 0 + spawnMode: 0 + shape: 0 + heightMode: 1 + applyOrientation: 1 + killOutliers: 0 + projectionSteps: 2 +--- !u!114 &8926484042661614835 +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: 1b605c022ee79394a8a776c0869b3f9a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614836} + - {fileID: 8926484042661614851} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 8926484042661614834} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.TArcSphere, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"sphere":{"transform":{"position":{"x":0.0,"y":0.0,"z":0.0},"angles":{"x":0.0,"y":0.0,"z":0.0},"scale":{"x":1.0,"y":1.0,"z":1.0}},"radius":0.10000000149011612},"arc":6.28000020980835}' + m_Space: 0 + m_Property: + name: arcSphere + m_serializedType: + m_SerializableType: UnityEditor.VFX.TArcSphere, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614836 +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: 1b605c022ee79394a8a776c0869b3f9a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614835} + m_Children: + - {fileID: 8926484042661614837} + - {fileID: 8926484042661614850} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: sphere + m_serializedType: + m_SerializableType: UnityEditor.VFX.TSphere, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614837 +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: 3e3f628d80ffceb489beac74258f9cf7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614836} + m_Children: + - {fileID: 8926484042661614838} + - {fileID: 8926484042661614842} + - {fileID: 8926484042661614846} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: transform + m_serializedType: + m_SerializableType: UnityEditor.VFX.Transform, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614838 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614837} + m_Children: + - {fileID: 8926484042661614839} + - {fileID: 8926484042661614840} + - {fileID: 8926484042661614841} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: position + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614839 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614838} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614840 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614838} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614841 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614838} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614842 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614837} + m_Children: + - {fileID: 8926484042661614843} + - {fileID: 8926484042661614844} + - {fileID: 8926484042661614845} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: angles + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614843 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614842} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614844 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614842} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614845 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614842} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614846 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614837} + m_Children: + - {fileID: 8926484042661614847} + - {fileID: 8926484042661614848} + - {fileID: 8926484042661614849} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: scale + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614847 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614846} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614848 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614846} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614849 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614846} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614850 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614836} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: radius + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614835} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614835} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: arc + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614852 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614852} + m_MasterData: + m_Owner: {fileID: 8926484042661614834} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614853 +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: 330e0fca1717dde4aaa144f48232aa64, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: + - {fileID: 8926484042661614854} + m_ExposedName: RWTexture_N8 + m_Exposed: 1 + m_Order: 1 + m_Category: + m_Min: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Max: + m_Type: + m_SerializableType: + m_SerializableObject: + m_IsOutput: 0 + m_EnumValues: [] + m_ValueFilter: 0 + m_Tooltip: + m_Nodes: + - m_Id: 6 + linkedSlots: + - outputSlot: {fileID: 8926484042661614854} + inputSlot: {fileID: 8926484042661615243} + position: {x: 2400, y: -471} + expandedSlots: [] + expanded: 1 +--- !u!114 &8926484042661614854 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614854} + m_MasterData: + m_Owner: {fileID: 8926484042661614853} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + m_Space: -1 + m_Property: + name: o + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615243} +--- !u!114 &8926484042661614889 +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: 73a13919d81fb7444849bae8b5c812a2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661615169} + m_UIPosition: {x: 1916, y: -1189} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: B + m_Data: {fileID: 8926484042661614890} + m_InputFlowSlot: + - link: [] + - link: [] + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614894} + slotIndex: 0 + loopDuration: 0 + loopCount: 0 + delayBeforeLoop: 0 + delayAfterLoop: 0 +--- !u!114 &8926484042661614890 +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: f68759077adc0b143b6e1c101e82065e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: + m_Owners: + - {fileID: 8926484042661614889} +--- !u!114 &8926484042661614894 +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: 9dfea48843f53fc438eabc12a3a30abc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661615187} + m_UIPosition: {x: 1916, y: -848} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614895} + m_OutputSlots: [] + m_Label: Initialize Particles + m_Data: {fileID: 8926484042661614908} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614889} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614988} + slotIndex: 0 +--- !u!114 &8926484042661614895 +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: 1b605c022ee79394a8a776c0869b3f9a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614896} + - {fileID: 8926484042661614900} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 8926484042661614894} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"center":{"x":0.0,"y":0.0,"z":0.0},"size":{"x":1.0,"y":1.0,"z":1.0}}' + m_Space: 0 + m_Property: + name: bounds + m_serializedType: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614896 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614895} + m_Children: + - {fileID: 8926484042661614897} + - {fileID: 8926484042661614898} + - {fileID: 8926484042661614899} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: center + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614897 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614896} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614898 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614896} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614899 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614896} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614895} + m_Children: + - {fileID: 8926484042661614901} + - {fileID: 8926484042661614902} + - {fileID: 8926484042661614903} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614901 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614900} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614902 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614900} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614903 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614900} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614895} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614908 +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: d78581a96eae8bf4398c282eb0b098bd, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: Reduce Value + m_Owners: + - {fileID: 8926484042661614894} + - {fileID: 8926484042661614988} + - {fileID: 8926484042661614946} + dataType: 0 + capacity: 4096 + stripCapacity: 1 + particlePerStripCount: 32 + needsComputeBounds: 0 + boundsMode: 1 + m_Space: 1 +--- !u!114 &8926484042661614946 +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: a0b9e6b9139e58d4c957ec54595da7d3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614981} + m_UIPosition: {x: 1916, y: -139} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614947} + m_OutputSlots: [] + m_Label: Render Quad + m_Data: {fileID: 8926484042661614908} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614988} + slotIndex: 0 + m_OutputFlowSlot: + - link: [] + blendMode: 1 + cullMode: 0 + zWriteMode: 0 + zTestMode: 0 + useAlphaClipping: 0 + generateMotionVector: 0 + excludeFromTUAndAA: 0 + sortingPriority: 0 + m_SubOutputs: + - {fileID: 8926484042661614952} + colorMapping: 0 + uvMode: 0 + flipbookLayout: 0 + flipbookBlendFrames: 0 + flipbookMotionVectors: 0 + useSoftParticle: 0 + vfxSystemSortPriority: 0 + sort: 0 + sortMode: 0 + revertSorting: 0 + indirectDraw: 0 + computeCulling: 0 + frustumCulling: 0 + castShadows: 0 + useExposureWeight: 0 + enableRayTracing: 0 + decimationFactor: 1 + raytracedScaleMode: 0 + needsOwnSort: 0 + needsOwnAabbBuffer: 0 + shaderGraph: {fileID: 0} + materialSettings: + m_PropertyNames: [] + m_PropertyValues: [] + renderQueue: -1 + primitiveType: 1 + useGeometryShader: 0 +--- !u!114 &8926484042661614947 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614947} + m_MasterData: + m_Owner: {fileID: 8926484042661614946} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"8aafaa78fe944854997fef757ff4ba72","type":3}}' + m_Space: -1 + m_Property: + name: mainTexture + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614952 +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: 081ffb0090424ba4cb05370a42ead6b9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + opaqueRenderQueue: 0 + transparentRenderQueue: 1 +--- !u!114 &8926484042661614981 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614946} + m_Children: [] + m_UIPosition: {x: 0, y: 2} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614982} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614983} + attribute: alive + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614982 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614982} + m_MasterData: + m_Owner: {fileID: 8926484042661614981} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: False + m_Space: -1 + m_Property: + name: _Alive + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614983 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614983} + m_MasterData: + m_Owner: {fileID: 8926484042661614981} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614988 +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: 2dc095764ededfa4bb32fa602511ea4b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614990} + m_UIPosition: {x: 1916, y: -439} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: + m_Data: {fileID: 8926484042661614908} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614894} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614946} + slotIndex: 0 + integration: 0 + angularIntegration: 0 + ageParticles: 1 + reapParticles: 1 + skipZeroDeltaUpdate: 0 +--- !u!114 &8926484042661614990 +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: 833c3541f2af4b28b080abc2cd1a804d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614988} + m_Children: [] + m_UIPosition: {x: 0, y: 2} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615177} + - {fileID: 8926484042661615195} + - {fileID: 8926484042661615263} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614992} + m_BlockName: Custom HLSL + m_HLSLCode: "void Decrement(inout VFXAttributes attributes, in RWTexture2D + dest, in uint size, in int decrement)\n{\n uint particleId = attributes.particleId + % (size * size);\n uint2 texCoord = uint2(particleId % size, particleId / size);\n + \n //N.B.: There isn't concurrent access in this Update\n dest[texCoord] + = dest[texCoord] - decrement;\n if (dest[texCoord] < 0)\n {\n dest[texCoord] + = 0;\n }\n}" + m_ShaderFile: {fileID: 0} + m_AvailableFunction: + selection: Decrement + selectedIndex: 0 +--- !u!114 &8926484042661614992 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614992} + m_MasterData: + m_Owner: {fileID: 8926484042661614990} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615018 +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: f574644f84c35a64e94e2cfae807c1a3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661615023} + - {fileID: 8926484042661615030} + m_UIPosition: {x: 877, y: -139} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: + m_Data: {fileID: 8926484042661614627} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614662} + slotIndex: 0 + m_OutputFlowSlot: + - link: [] + blendMode: 1 + cullMode: 3 + zWriteMode: 0 + zTestMode: 0 + useAlphaClipping: 0 + generateMotionVector: 0 + excludeFromTUAndAA: 0 + sortingPriority: 0 + m_SubOutputs: + - {fileID: 8926484042661615020} + colorMapping: 0 + uvMode: 0 + flipbookLayout: 0 + flipbookBlendFrames: 0 + flipbookMotionVectors: 0 + useSoftParticle: 0 + vfxSystemSortPriority: 0 + sort: 0 + sortMode: 0 + revertSorting: 0 + indirectDraw: 0 + computeCulling: 0 + frustumCulling: 0 + castShadows: 0 + useExposureWeight: 0 + enableRayTracing: 0 + decimationFactor: 1 + raytracedScaleMode: 0 + needsOwnSort: 0 + needsOwnAabbBuffer: 0 +--- !u!114 &8926484042661615020 +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: 081ffb0090424ba4cb05370a42ead6b9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + opaqueRenderQueue: 0 + transparentRenderQueue: 1 +--- !u!114 &8926484042661615023 +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: 833c3541f2af4b28b080abc2cd1a804d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615018} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615229} + - {fileID: 8926484042661615230} + - {fileID: 8926484042661615255} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615025} + m_BlockName: Custom HLSL + m_HLSLCode: "void WriteParticle(inout VFXAttributes attributes, in RWTexture2D + dest, in uint size, in int increment)\n{\n float2 normPosition = attributes.position.xz;\n + normPosition += 1.0f;\n normPosition *= 0.5f;\n normPosition = saturate(normPosition);\n + normPosition *= size;\n#if defined(SHADER_API_METAL)\n dest[(uint2)normPosition] + = 2048;\n#else\n InterlockedAdd(dest[(uint2)normPosition], increment);\n#endif\n}" + m_ShaderFile: {fileID: 0} + m_AvailableFunction: + selection: WriteParticle + selectedIndex: 0 +--- !u!114 &8926484042661615025 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615025} + m_MasterData: + m_Owner: {fileID: 8926484042661615023} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615030 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615018} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615031} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615032} + attribute: alive + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661615031 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615031} + m_MasterData: + m_Owner: {fileID: 8926484042661615030} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: False + m_Space: -1 + m_Property: + name: _Alive + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615032 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615032} + m_MasterData: + m_Owner: {fileID: 8926484042661615030} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615129 +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: 330e0fca1717dde4aaa144f48232aa64, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: + - {fileID: 8926484042661615130} + m_ExposedName: RWTexture_U8 + m_Exposed: 1 + m_Order: 0 + m_Category: + m_Min: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Max: + m_Type: + m_SerializableType: + m_SerializableObject: + m_IsOutput: 0 + m_EnumValues: [] + m_ValueFilter: 0 + m_Tooltip: + m_Nodes: + - m_Id: 1 + linkedSlots: + - outputSlot: {fileID: 8926484042661615130} + inputSlot: {fileID: 8926484042661615177} + - outputSlot: {fileID: 8926484042661615130} + inputSlot: {fileID: 8926484042661615188} + position: {x: 1635, y: -439} + expandedSlots: [] + expanded: 1 + - m_Id: 2 + linkedSlots: + - outputSlot: {fileID: 8926484042661615130} + inputSlot: {fileID: 8926484042661615242} + position: {x: 2401, y: -560} + expandedSlots: [] + expanded: 1 + - m_Id: 3 + linkedSlots: + - outputSlot: {fileID: 8926484042661615130} + inputSlot: {fileID: 8926484042661615229} + position: {x: 607, y: 15} + expandedSlots: [] + expanded: 1 +--- !u!114 &8926484042661615130 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615130} + m_MasterData: + m_Owner: {fileID: 8926484042661615129} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + m_Space: -1 + m_Property: + name: o + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615177} + - {fileID: 8926484042661615242} + - {fileID: 8926484042661615188} + - {fileID: 8926484042661615229} +--- !u!114 &8926484042661615131 +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: a0b9e6b9139e58d4c957ec54595da7d3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661615231} + m_UIPosition: {x: 2624, y: -272} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615132} + m_OutputSlots: [] + m_Label: Render Quad + m_Data: {fileID: 8926484042661615159} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661615145} + slotIndex: 0 + m_OutputFlowSlot: + - link: [] + blendMode: 1 + cullMode: 0 + zWriteMode: 0 + zTestMode: 0 + useAlphaClipping: 0 + generateMotionVector: 0 + excludeFromTUAndAA: 0 + sortingPriority: 0 + m_SubOutputs: + - {fileID: 8926484042661615138} + colorMapping: 0 + uvMode: 0 + flipbookLayout: 0 + flipbookBlendFrames: 0 + flipbookMotionVectors: 0 + useSoftParticle: 0 + vfxSystemSortPriority: 0 + sort: 0 + sortMode: 0 + revertSorting: 0 + indirectDraw: 0 + computeCulling: 0 + frustumCulling: 0 + castShadows: 0 + useExposureWeight: 0 + enableRayTracing: 0 + decimationFactor: 1 + raytracedScaleMode: 0 + needsOwnSort: 0 + needsOwnAabbBuffer: 0 + shaderGraph: {fileID: 0} + materialSettings: + m_PropertyNames: [] + m_PropertyValues: [] + renderQueue: -1 + primitiveType: 1 + useGeometryShader: 0 +--- !u!114 &8926484042661615132 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615132} + m_MasterData: + m_Owner: {fileID: 8926484042661615131} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"8aafaa78fe944854997fef757ff4ba72","type":3}}' + m_Space: -1 + m_Property: + name: mainTexture + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615138 +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: 081ffb0090424ba4cb05370a42ead6b9, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + opaqueRenderQueue: 0 + transparentRenderQueue: 1 +--- !u!114 &8926484042661615145 +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: 9dfea48843f53fc438eabc12a3a30abc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661615241} + - {fileID: 8926484042661615184} + m_UIPosition: {x: 2624, y: -848} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615146} + m_OutputSlots: [] + m_Label: Initialize Particles + m_Data: {fileID: 8926484042661615159} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661615160} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661615131} + slotIndex: 0 +--- !u!114 &8926484042661615146 +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: 1b605c022ee79394a8a776c0869b3f9a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661615147} + - {fileID: 8926484042661615151} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 8926484042661615145} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"center":{"x":0.0,"y":0.0,"z":0.0},"size":{"x":1.0,"y":1.0,"z":1.0}}' + m_Space: 0 + m_Property: + name: bounds + m_serializedType: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615146} + m_Children: + - {fileID: 8926484042661615148} + - {fileID: 8926484042661615149} + - {fileID: 8926484042661615150} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: center + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615148 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615147} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615149 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615147} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615150 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615147} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615151 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615146} + m_Children: + - {fileID: 8926484042661615152} + - {fileID: 8926484042661615153} + - {fileID: 8926484042661615154} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615152 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615151} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615151} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615154 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615151} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615146} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615159 +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: d78581a96eae8bf4398c282eb0b098bd, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: Blit (Periodically) + m_Owners: + - {fileID: 8926484042661615145} + - {fileID: 8926484042661615131} + dataType: 0 + capacity: 4096 + stripCapacity: 1 + particlePerStripCount: 32 + needsComputeBounds: 0 + boundsMode: 1 + m_Space: 0 +--- !u!114 &8926484042661615160 +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: 73a13919d81fb7444849bae8b5c812a2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661615173} + m_UIPosition: {x: 2624, y: -1205} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: C + m_Data: {fileID: 8926484042661615161} + m_InputFlowSlot: + - link: [] + - link: [] + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661615145} + slotIndex: 0 + loopDuration: 0 + loopCount: 0 + delayBeforeLoop: 0 + delayAfterLoop: 0 +--- !u!114 &8926484042661615161 +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: f68759077adc0b143b6e1c101e82065e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: + m_Owners: + - {fileID: 8926484042661615160} +--- !u!114 &8926484042661615169 +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: 5e382412bb691334bb79457a6c127924, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614889} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615170} + - {fileID: 8926484042661615171} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615172} + repeat: 0 + spawnMode: 0 + delayMode: 0 +--- !u!114 &8926484042661615170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615170} + m_MasterData: + m_Owner: {fileID: 8926484042661615169} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 4096 + m_Space: -1 + m_Property: + name: Count + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615171} + m_MasterData: + m_Owner: {fileID: 8926484042661615169} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: -1 + m_Property: + name: Delay + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615172 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615172} + m_MasterData: + m_Owner: {fileID: 8926484042661615169} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615173 +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: 5e382412bb691334bb79457a6c127924, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615160} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615174} + - {fileID: 8926484042661615175} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615176} + repeat: 1 + spawnMode: 0 + delayMode: 0 +--- !u!114 &8926484042661615174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615174} + m_MasterData: + m_Owner: {fileID: 8926484042661615173} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 4096 + m_Space: -1 + m_Property: + name: Count + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615175 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615175} + m_MasterData: + m_Owner: {fileID: 8926484042661615173} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0.05 + m_Space: -1 + m_Property: + name: Delay + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615176 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615176} + m_MasterData: + m_Owner: {fileID: 8926484042661615173} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615177 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615177} + m_MasterData: + m_Owner: {fileID: 8926484042661614990} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + m_Space: -1 + m_Property: + name: dest + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615130} +--- !u!114 &8926484042661615184 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615145} + m_Children: [] + m_UIPosition: {x: 1113.9453, y: 453.60367} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615185} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615186} + attribute: alive + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661615185 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615185} + m_MasterData: + m_Owner: {fileID: 8926484042661615184} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: False + m_Space: -1 + m_Property: + name: _Alive + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615186 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615186} + m_MasterData: + m_Owner: {fileID: 8926484042661615184} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615187 +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: 833c3541f2af4b28b080abc2cd1a804d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614894} + m_Children: [] + m_UIPosition: {x: 0, y: 2} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615188} + - {fileID: 8926484042661615193} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615190} + m_BlockName: Custom HLSL + m_HLSLCode: "void Clear(inout VFXAttributes attributes, in RWTexture2D dest, + in uint size)\n{\n uint particleId = attributes.particleId % (size * size);\n + uint2 texCoord = uint2(particleId % size, particleId / size);\n dest[texCoord] + = 0;\n}" + m_ShaderFile: {fileID: 0} + m_AvailableFunction: + selection: Clear + selectedIndex: 0 +--- !u!114 &8926484042661615188 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615188} + m_MasterData: + m_Owner: {fileID: 8926484042661615187} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + m_Space: -1 + m_Property: + name: dest + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615130} +--- !u!114 &8926484042661615190 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615190} + m_MasterData: + m_Owner: {fileID: 8926484042661615187} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615191 +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: 330e0fca1717dde4aaa144f48232aa64, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: + - {fileID: 8926484042661615192} + m_ExposedName: Size + m_Exposed: 0 + m_Order: 2 + m_Category: + m_Min: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Max: + m_Type: + m_SerializableType: + m_SerializableObject: + m_IsOutput: 0 + m_EnumValues: [] + m_ValueFilter: 0 + m_Tooltip: + m_Nodes: + - m_Id: 0 + linkedSlots: + - outputSlot: {fileID: 8926484042661615192} + inputSlot: {fileID: 8926484042661615195} + - outputSlot: {fileID: 8926484042661615192} + inputSlot: {fileID: 8926484042661615193} + position: {x: 1694, y: -315} + expandedSlots: [] + expanded: 1 + - m_Id: 1 + linkedSlots: + - outputSlot: {fileID: 8926484042661615192} + inputSlot: {fileID: 8926484042661615244} + position: {x: 2441, y: -370} + expandedSlots: [] + expanded: 1 + - m_Id: 2 + linkedSlots: + - outputSlot: {fileID: 8926484042661615192} + inputSlot: {fileID: 8926484042661615230} + position: {x: 667, y: 96} + expandedSlots: [] + expanded: 1 +--- !u!114 &8926484042661615192 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615192} + m_MasterData: + m_Owner: {fileID: 8926484042661615191} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 64 + m_Space: -1 + m_Property: + name: o + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615193} + - {fileID: 8926484042661615244} + - {fileID: 8926484042661615195} + - {fileID: 8926484042661615230} +--- !u!114 &8926484042661615193 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615193} + m_MasterData: + m_Owner: {fileID: 8926484042661615187} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 64 + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615192} +--- !u!114 &8926484042661615195 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615195} + m_MasterData: + m_Owner: {fileID: 8926484042661614990} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 64 + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615192} +--- !u!114 &8926484042661615229 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615229} + m_MasterData: + m_Owner: {fileID: 8926484042661615023} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + m_Space: -1 + m_Property: + name: dest + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615130} +--- !u!114 &8926484042661615230 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615230} + m_MasterData: + m_Owner: {fileID: 8926484042661615023} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615192} +--- !u!114 &8926484042661615231 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615131} + m_Children: [] + m_UIPosition: {x: 1113.9453, y: 453.60367} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615232} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615233} + attribute: alive + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661615232 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615232} + m_MasterData: + m_Owner: {fileID: 8926484042661615231} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: False + m_Space: -1 + m_Property: + name: _Alive + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615233 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615233} + m_MasterData: + m_Owner: {fileID: 8926484042661615231} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615241 +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: 833c3541f2af4b28b080abc2cd1a804d, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615145} + m_Children: [] + m_UIPosition: {x: 1113.9453, y: 453.60367} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615242} + - {fileID: 8926484042661615243} + - {fileID: 8926484042661615244} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615245} + m_BlockName: Custom HLSL + m_HLSLCode: "void Blit(inout VFXAttributes attributes, in RWTexture2D source, + in RWTexture2D dest, in uint size)\n{\n uint particleId = attributes.particleId + % (size * size);\n uint2 texCoord = uint2(particleId % size, particleId / size);\n + dest[texCoord] = source[texCoord] / 2048.f;\n}" + m_ShaderFile: {fileID: 0} + m_AvailableFunction: + selection: Blit + selectedIndex: 0 +--- !u!114 &8926484042661615242 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615242} + m_MasterData: + m_Owner: {fileID: 8926484042661615241} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + m_Space: -1 + m_Property: + name: source + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615130} +--- !u!114 &8926484042661615243 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615243} + m_MasterData: + m_Owner: {fileID: 8926484042661615241} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"276d9e395ae18fe40a9b4988549f2349","type":3}}' + m_Space: -1 + m_Property: + name: dest + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614854} +--- !u!114 &8926484042661615244 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615244} + m_MasterData: + m_Owner: {fileID: 8926484042661615241} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 64 + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615192} +--- !u!114 &8926484042661615245 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615245} + m_MasterData: + m_Owner: {fileID: 8926484042661615241} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615247 +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: 162e4a5d99325f14da009fce43aa54ba, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614608} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615248} + - {fileID: 8926484042661615251} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661615254} +--- !u!114 &8926484042661615248 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b2b751071c7fc14f9fa503163991826, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661615249} + - {fileID: 8926484042661615250} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615248} + m_MasterData: + m_Owner: {fileID: 8926484042661615247} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":16.0,"y":64.0}' + m_Space: -1 + m_Property: + name: Rate + m_serializedType: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615249 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615248} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615248} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615250 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615248} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615248} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615251 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1b2b751071c7fc14f9fa503163991826, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661615252} + - {fileID: 8926484042661615253} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615251} + m_MasterData: + m_Owner: {fileID: 8926484042661615247} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":0.0,"y":3.0}' + m_Space: -1 + m_Property: + name: Period + m_serializedType: + m_SerializableType: UnityEngine.Vector2, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615252 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615251} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615251} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615253 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661615251} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615251} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615254 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615254} + m_MasterData: + m_Owner: {fileID: 8926484042661615247} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615255 +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: 4d246e354feb93041a837a9ef59437cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615255} + m_MasterData: + m_Owner: {fileID: 8926484042661615023} + m_Value: + m_Type: + m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 64 + m_Space: -1 + m_Property: + name: increment + m_serializedType: + m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615262} +--- !u!114 &8926484042661615256 +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: a72fbb93ebe17974e90a144ef2ec8ceb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 334, y: 174} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: + - {fileID: 8926484042661615258} + m_BuiltInParameters: 1 +--- !u!114 &8926484042661615258 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615258} + m_MasterData: + m_Owner: {fileID: 8926484042661615256} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: Delta Time + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615260} +--- !u!114 &8926484042661615259 +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: b8ee8a7543fa09e42a7c8616f60d2ad7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 566, y: 180} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615260} + - {fileID: 8926484042661615261} + m_OutputSlots: + - {fileID: 8926484042661615262} + m_Operands: + - name: a + type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + - name: b + type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 +--- !u!114 &8926484042661615260 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615260} + m_MasterData: + m_Owner: {fileID: 8926484042661615259} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: -1 + m_Property: + name: a + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615258} +--- !u!114 &8926484042661615261 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615261} + m_MasterData: + m_Owner: {fileID: 8926484042661615259} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 30000 + m_Space: -1 + m_Property: + name: b + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615280} +--- !u!114 &8926484042661615262 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615262} + m_MasterData: + m_Owner: {fileID: 8926484042661615259} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615255} +--- !u!114 &8926484042661615263 +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: 4d246e354feb93041a837a9ef59437cb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615263} + m_MasterData: + m_Owner: {fileID: 8926484042661614990} + m_Value: + m_Type: + m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: decrement + m_serializedType: + m_SerializableType: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615270} +--- !u!114 &8926484042661615264 +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: a72fbb93ebe17974e90a144ef2ec8ceb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 1477, y: -175} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: + - {fileID: 8926484042661615266} + m_BuiltInParameters: 1 +--- !u!114 &8926484042661615266 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615266} + m_MasterData: + m_Owner: {fileID: 8926484042661615264} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: Delta Time + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615268} +--- !u!114 &8926484042661615267 +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: b8ee8a7543fa09e42a7c8616f60d2ad7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 1681, y: -213} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615268} + - {fileID: 8926484042661615269} + m_OutputSlots: + - {fileID: 8926484042661615270} + m_Operands: + - name: a + type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + - name: b + type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 +--- !u!114 &8926484042661615268 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615268} + m_MasterData: + m_Owner: {fileID: 8926484042661615267} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: -1 + m_Property: + name: a + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615266} +--- !u!114 &8926484042661615269 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615269} + m_MasterData: + m_Owner: {fileID: 8926484042661615267} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 512 + m_Space: -1 + m_Property: + name: b + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615270} + m_MasterData: + m_Owner: {fileID: 8926484042661615267} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615263} +--- !u!114 &8926484042661615271 +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: 955b0c175a6f3bb4582e92f3de8f0626, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 520, y: 412} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615272} + m_OutputSlots: + - {fileID: 8926484042661615273} + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 +--- !u!114 &8926484042661615272 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615272} + m_MasterData: + m_Owner: {fileID: 8926484042661615271} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0.1 + m_Space: -1 + m_Property: + name: + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615273} + m_MasterData: + m_Owner: {fileID: 8926484042661615271} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615275} +--- !u!114 &8926484042661615274 +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: 39201e37c9a341c45bace12065f0cb90, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 445, y: 290} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615276} + - {fileID: 8926484042661615275} + m_OutputSlots: + - {fileID: 8926484042661615277} + m_Operands: + - name: b + type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + - name: a + type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 +--- !u!114 &8926484042661615275 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615275} + m_MasterData: + m_Owner: {fileID: 8926484042661615274} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: -1 + m_Property: + name: a + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615273} +--- !u!114 &8926484042661615276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615276} + m_MasterData: + m_Owner: {fileID: 8926484042661615274} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 2048 + m_Space: -1 + m_Property: + name: b + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661615277 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615277} + m_MasterData: + m_Owner: {fileID: 8926484042661615274} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615279} +--- !u!114 &8926484042661615278 +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: 955b0c175a6f3bb4582e92f3de8f0626, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 667, y: 302} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661615279} + m_OutputSlots: + - {fileID: 8926484042661615280} + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 +--- !u!114 &8926484042661615279 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615279} + m_MasterData: + m_Owner: {fileID: 8926484042661615278} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661615277} +--- !u!114 &8926484042661615280 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661615280} + m_MasterData: + m_Owner: {fileID: 8926484042661615278} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661615261} diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.vfx.meta b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.vfx.meta new file mode 100644 index 00000000000..488d09b13e5 --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.vfx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 6e8202714e4e69c458e1fbaa07bac0f6 +VisualEffectImporter: + externalObjects: {} + serializedVersion: 1 + template: + name: + category: + description: + icon: {instanceID: 0} + thumbnail: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_N32.asset b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_N32.asset new file mode 100644 index 00000000000..fc6f79918ab --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_N32.asset @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!86 &8600000 +CustomRenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 027_RWTexture_N32 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_IsAlphaChannelOptional: 0 + serializedVersion: 6 + m_Width: 64 + m_Height: 64 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthStencilFormat: 0 + m_ColorFormat: 9 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_UseDynamicScaleExplicit: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 0 + m_EnableRandomWrite: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 + m_ShadowSamplingMode: 2 + m_Material: {fileID: 0} + m_InitSource: 0 + m_InitMaterial: {fileID: 0} + m_InitColor: {r: 1, g: 1, b: 1, a: 1} + m_InitTexture: {fileID: 0} + m_UpdateMode: 0 + m_InitializationMode: 2 + m_UpdateZoneSpace: 0 + m_CurrentUpdateZoneSpace: 0 + m_UpdateZones: [] + m_UpdatePeriod: 0 + m_ShaderPass: 0 + m_CubemapFaceMask: 4294967295 + m_DoubleBuffered: 0 + m_WrapUpdateZones: 0 diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_N32.asset.meta b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_N32.asset.meta new file mode 100644 index 00000000000..39bbd943ace --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_N32.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1e7eb60b77a4466468e992de03cd7e47 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8600000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_U32.asset b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_U32.asset new file mode 100644 index 00000000000..36a91d9b5ba --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_U32.asset @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!86 &8600000 +CustomRenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 027_RWTexture_U32 + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_IsAlphaChannelOptional: 0 + serializedVersion: 6 + m_Width: 64 + m_Height: 64 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthStencilFormat: 0 + m_ColorFormat: 41 + m_MipMap: 0 + m_GenerateMips: 1 + m_SRGB: 0 + m_UseDynamicScale: 0 + m_UseDynamicScaleExplicit: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 0 + m_EnableRandomWrite: 1 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 + m_ShadowSamplingMode: 2 + m_Material: {fileID: 0} + m_InitSource: 0 + m_InitMaterial: {fileID: 0} + m_InitColor: {r: 1, g: 1, b: 1, a: 1} + m_InitTexture: {fileID: 0} + m_UpdateMode: 0 + m_InitializationMode: 2 + m_UpdateZoneSpace: 0 + m_CurrentUpdateZoneSpace: 0 + m_UpdateZones: [] + m_UpdatePeriod: 0 + m_ShaderPass: 0 + m_CubemapFaceMask: 4294967295 + m_DoubleBuffered: 0 + m_WrapUpdateZones: 0 diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_U32.asset.meta b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_U32.asset.meta new file mode 100644 index 00000000000..b8d1efff181 --- /dev/null +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture_U32.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 67cf5ac4780572f4695d66206f75e1d4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8600000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/CustomHLSLBlockTest.cs b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/CustomHLSLBlockTest.cs index 414ee1d8540..3967f0d3f1a 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/CustomHLSLBlockTest.cs +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/CustomHLSLBlockTest.cs @@ -434,31 +434,6 @@ public IEnumerator Check_CustomHLSL_Block_Unknown_Parameter_Type() Assert.AreEqual($"Unknown parameter type '{parameterType}'", report.description); } - [UnityTest] - public IEnumerator Check_CustomHLSL_Block_Texture2D_Type_Used() - { - // Arrange - var paramName = "texture"; - var hlslCode = - $"void TestFunction(inout VFXAttributes attributes, in Texture2D {paramName})\n" + - "{\n" + - "}"; - var hlslBlock = ScriptableObject.CreateInstance(); - hlslBlock.SetSettingValue("m_HLSLCode", hlslCode); - - MakeSimpleGraphWithCustomHLSL(hlslBlock, out var view, out var graph, false /* this test expects shader errors */); - yield return null; - - // Act - graph.errorManager.GenerateErrors(); - - // Assert - var report = graph.errorManager.errorReporter.GetDirtyModelErrors(hlslBlock).Single(); - Assert.IsNotNull(report); - Assert.AreEqual(VFXErrorType.Error, report.type); - Assert.AreEqual($"The function parameter '{paramName}' is of type Texture2D.\nPlease use VFXSampler2D type instead (see documentation)", report.description); - } - [UnityTest] public IEnumerator Check_CustomHLSL_Block_Missing_VFXAttributes() { diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/CustomHLSLOperatorTest.cs b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/CustomHLSLOperatorTest.cs index 0eb764f9297..1b58e7c6751 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/CustomHLSLOperatorTest.cs +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/CustomHLSLOperatorTest.cs @@ -600,34 +600,6 @@ float3 DummyFunction() Assert.IsTrue(found, "Unable to find matching include in generated code."); } - public static Array k_Invalid_Texture_Type = new string[] { "Texture2D", "Texture3D", "TextureCube", "Texture2DArray" }; - - [UnityTest] - public IEnumerator Check_CustomHLSL_Operator_WrongTexture_Type_Used([ValueSource(nameof(k_Invalid_Texture_Type))] string textureType) - { - // Arrange - var paramName = "texture"; - var hlslCode = - $"float3 Transform(in {textureType} {paramName})" + "\n" + - "{" + "\n" + - " return float3(0, 0, 0);" + "\n" + - "}"; - var hlslOperator = ScriptableObject.CreateInstance(); - hlslOperator.SetSettingValue("m_HLSLCode", hlslCode); - - MakeSimpleGraphWithCustomHLSL(hlslOperator, out var view, out var graph); - yield return null; - - // Act - graph.errorManager.GenerateErrors(); - - // Assert - var report = graph.errorManager.errorReporter.GetDirtyModelErrors(hlslOperator).First(x => x.model == hlslOperator); - Assert.IsNotNull(report); - Assert.AreEqual(VFXErrorType.Error, report.type); - Assert.IsTrue(report.description.StartsWith($"The function parameter '{paramName}' is of type {textureType}.\nPlease use VFXSampler")); - } - [UnityTest] public IEnumerator Check_CustomHLSL_Operator_Unsupported_Attributes() { @@ -747,7 +719,16 @@ public override string ToString() new() { declaration = $"StructuredBuffer<{nameof(CustomHLSLOperatorTestType)}>", implementation = "localValue = inputBuffer[0].position;" }, new() { declaration = "StructuredBuffer", implementation = "localValue = asfloat(inputBuffer[0]);" }, new() { declaration = "StructuredBuffer", implementation = "localValue = inputBuffer[0];" }, - new() { declaration = "RWStructuredBuffer", implementation = "inputBuffer[0].x += 0.0f; localValue = inputBuffer[0];" } + new() { declaration = "RWStructuredBuffer", implementation = "inputBuffer[0].x += 0.0f; localValue = inputBuffer[0];" }, + + new() { declaration = "RWTexture2D", implementation = "InterlockedAdd(inputBuffer[(int2)0], 1u); localValue = 0.1f;" }, + new() { declaration = "RWTexture2D", implementation = "inputBuffer[(int2)0].xyz = (float3)1.0f; localValue = 0.1f;" }, + new() { declaration = "Texture2D", implementation = "localValue = inputBuffer[(int2)0].rgb;" }, + new() { declaration = "Texture2D", implementation = "localValue = inputBuffer[(int2)0].rgb;" }, + + new() { declaration = "RWTexture1D", implementation = "inputBuffer[0] = 1u; localValue = 0.1f;" }, + //new() { declaration = "RWTexture1DArray", implementation = "inputBuffer[(uint2)0] = 0u; localValue = 0.1f;" }, (see UUM-64315) + new() { declaration = "Texture1D", implementation = "localValue = inputBuffer[(uint)0];" } }; [UnityTest] @@ -774,7 +755,8 @@ public IEnumerator Check_CustomHLSL_Operator_Buffer([ValueSource(nameof(kSampleB Assert.IsTrue(blockAttribute.inputSlots[0].Link(hlslOperator.outputSlots[0])); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(graph)); - yield return null; + for (int i = 0; i < 4; ++i) + yield return null; } [UnityTest, Description("Repro case UUM-66018")] diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/HLSLParserTest.cs b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/HLSLParserTest.cs index 05253e1f7c5..f0c55853d67 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/HLSLParserTest.cs +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/HLSLParserTest.cs @@ -115,7 +115,7 @@ public void HLSL_Check_Parameter_StructuredBuffer(string templateType) Assert.AreEqual("buffer", input.name, "Wrong parameter name"); Assert.AreEqual("StructuredBuffer", input.rawType, "Wrong parameter hlsl type"); Assert.AreEqual(typeof(GraphicsBuffer), input.type, "Wrong parameter csharp type"); - Assert.AreEqual(templateType, input.bufferUsage.verbatimType, "Wrong Structured buffer template parameter type"); + Assert.AreEqual(templateType, input.bufferType.verbatimType, "Wrong Structured buffer template parameter type"); Assert.IsNull(input.errors, "There was errors when parsing parameters"); } @@ -133,7 +133,7 @@ public void HLSL_Check_Parameter_ByteAddressBuffer() Assert.NotNull(input); Assert.AreEqual("ByteAddressBuffer", input.rawType, "Wrong parameter hlsl type"); Assert.AreEqual(typeof(GraphicsBuffer), input.type, "Wrong parameter csharp type"); - Assert.AreEqual(input.bufferUsage.actualType, typeof(void), "ByteAddressBuffer must not have a template type"); + Assert.AreEqual(input.bufferType.actualType, typeof(void), "ByteAddressBuffer must not have a template type"); Assert.IsNull(input.errors, "There was errors when parsing parameters"); } diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXShaderGenerationTests.cs b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXShaderGenerationTests.cs index 129de42150b..d4200e9cf49 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXShaderGenerationTests.cs +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Assets/AllTests/Editor/Tests/VFXShaderGenerationTests.cs @@ -149,7 +149,7 @@ public void DebugSymbolsPragmaGeneration() { gpuMapper = new VFXExpressionMapper(), uniformMapper = new VFXUniformMapper(new VFXExpressionMapper(), true, true), - bufferUsage = new ReadOnlyDictionary(new Dictionary()), + bufferTypeUsage = new ReadOnlyDictionary(new Dictionary()), linkedEventOut = Array.Empty<(VFXSlot slot, VFXData data)>(), hlslCodeHolders = Array.Empty() }; @@ -183,7 +183,7 @@ public void DifferentSettingsGenerateDifferentFunction() { gpuMapper = new VFXExpressionMapper(), uniformMapper = new VFXUniformMapper(new VFXExpressionMapper(), true, true), - bufferUsage = new ReadOnlyDictionary(new Dictionary()), + bufferTypeUsage = new ReadOnlyDictionary(new Dictionary()), linkedEventOut = new (VFXSlot slot, VFXData data)[] { }, hlslCodeHolders = Array.Empty() diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/ProjectSettings/EditorBuildSettings.asset b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/ProjectSettings/EditorBuildSettings.asset index 8832a8e96af..55e86d2a003 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/ProjectSettings/EditorBuildSettings.asset +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/ProjectSettings/EditorBuildSettings.asset @@ -83,6 +83,9 @@ EditorBuildSettings: - enabled: 1 path: Packages/com.unity.testing.visualeffectgraph/Scenes/026_RWBuffer.unity guid: 6ae9549c79226fb458d7fec09ac258df + - enabled: 1 + path: Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity + guid: 3c54816ebc5cdcc448210af3594252cb - enabled: 1 path: Assets/AllTests/VFXTests/GraphicsTests/101_Exposure.unity guid: 4125f3630764c6a43a752a73908fa0ee diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/EditorBuildSettings.asset b/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/EditorBuildSettings.asset index d8ea384b10e..bbf61a74dcb 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/EditorBuildSettings.asset +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/ProjectSettings/EditorBuildSettings.asset @@ -86,6 +86,9 @@ EditorBuildSettings: - enabled: 1 path: Packages/com.unity.testing.visualeffectgraph/Scenes/026_RWBuffer.unity guid: 6ae9549c79226fb458d7fec09ac258df + - enabled: 1 + path: Packages/com.unity.testing.visualeffectgraph/Scenes/027_RWTexture.unity + guid: 3c54816ebc5cdcc448210af3594252cb - enabled: 1 path: Assets/GraphicsTests/100_Fog.unity guid: b288e123b6536de40bc86452b3811b20 From de9e5f6bff48b3f672aa2f34db064d8da3a74d8d Mon Sep 17 00:00:00 2001 From: Julien Fryer Date: Fri, 8 Nov 2024 03:10:22 +0000 Subject: [PATCH 19/85] [VFX] Fix subgraph block nesting Fix for https://jira.unity3d.com/browse/UUM-83521 Nesting subgraph blocks was not possible anymore and all blocks in subgraph block contexts appeared as "invalid" (detoured in red) After investigation it appeared that this had never really working. However before "the regression" the issue was less obvious: Subgraph blocks could accept too many blocks regardless of their compatibility, and the red detour feedback was not working correctly. There was a big ambiguity in code about context type and compatible context types. I tried to refactor this a bit so that it's clearer and less hacky. - Accepting blocks should work with all contexts now. For subgraph block context, it can only accept a block that is compatible with *all* its suitable contexts. - Invalid visual feedback should work and be refreshed correctly now (so for instance when switching the suitable context setting of the subblock context) --- .../Editor/FilterPopup/VFXBlockProvider.cs | 9 +++++++-- .../Editor/GraphView/Elements/VFXContextUI.cs | 16 ++++++++++++---- .../Editor/Models/Blocks/VFXBlock.cs | 14 ++++---------- .../Editor/Models/Blocks/VFXSubgraphBlock.cs | 14 +++----------- .../Models/Contexts/VFXBlockSubgraphContext.cs | 12 ++++++------ .../Editor/Models/Contexts/VFXContext.cs | 9 ++++----- .../Editor/UIResources/uss/VFXContext.uss | 5 +++++ 7 files changed, 41 insertions(+), 38 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/FilterPopup/VFXBlockProvider.cs b/Packages/com.unity.visualeffectgraph/Editor/FilterPopup/VFXBlockProvider.cs index cd6cad2decd..f353d2f21c1 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/FilterPopup/VFXBlockProvider.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/FilterPopup/VFXBlockProvider.cs @@ -54,10 +54,15 @@ public override IEnumerable GetDescriptors() new[] { new KeyValuePair(nameof(SetAttribute.attribute), customAttribute.name) }), null); } + var selfPath = m_ContextController.model is VFXBlockSubgraphContext ? AssetDatabase.GetAssetPath(m_ContextController.model) : string.Empty; + foreach (var item in SubGraphCache.GetItems(typeof(VisualEffectSubgraphBlock))) { - if (((SubGraphCache.AdditionalBlockInfo)item.additionalInfos).compatibleType.HasFlag(m_ContextController.model.contextType) - && ((SubGraphCache.AdditionalBlockInfo)item.additionalInfos).compatibleData.HasFlag(m_ContextController.model.ownedType)) + if (!string.IsNullOrEmpty(selfPath) && selfPath == item.path) // don't include self + continue; + + var blockInfo = (SubGraphCache.AdditionalBlockInfo)item.additionalInfos; + if (m_ContextController.model.Accept(blockInfo.compatibleType, blockInfo.compatibleData)) { var variant = new SubgraphVariant( item.name, diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/VFXContextUI.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/VFXContextUI.cs index 9f6b72a194f..1898c81bf7d 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/VFXContextUI.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/VFXContextUI.cs @@ -118,8 +118,9 @@ protected override void SelfChange() } m_HeaderIcon.image = GetIconForVFXType(controller.model.inputType); - m_HeaderIcon.visible = m_HeaderIcon.image != null; m_HeaderIcon.SendToBack(); // Actually move it as first child so it's before the title label + if (m_HeaderIcon.image == null) + m_HeaderIcon.AddToClassList("Empty"); var subTitle = controller.subtitle; m_Subtitle.text = controller.subtitle; @@ -457,8 +458,11 @@ private void OnDragUpdated(DragUpdatedEvent evt) if (references.Any() && (!controller.viewController.model.isSubgraph || !references.Any(t => t.GetResource().GetOrCreateGraph().subgraphDependencies.Contains(controller.viewController.model.subgraph) || t.GetResource() == controller.viewController.model))) { - var compatibleReferences = references - .Where(x => x != null && x.GetResource().GetOrCreateGraph().children.OfType().First().compatibleContextType.HasFlag(controller.model.contextType)); + var compatibleReferences = references.Where(x => + { + var subgraphBlock = x?.GetResource()?.GetOrCreateGraph()?.children.OfType().First(); + return subgraphBlock != null ? controller.model.Accept(subgraphBlock.compatibleContextType, subgraphBlock.ownedType) : false; + }); if (compatibleReferences.Any()) { @@ -529,8 +533,12 @@ void OnDragPerform(DragPerformEvent evt) foreach (var reference in references) { var graph = reference != null ? reference.GetResource().GetOrCreateGraph() : null; - if (graph != null && graph.children.OfType().First().compatibleContextType.HasFlag(controller.model.contextType)) + if (graph != null) { + var subgraphContext = graph.children.OfType().First(); + if (!controller.model.Accept(subgraphContext.compatibleContextType, subgraphContext.ownedType)) + continue; + DragAndDrop.AcceptDrag(); if (view.HasCustomAttributeConflicts(graph.attributesManager.GetCustomAttributes())) { diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXBlock.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXBlock.cs index 9b43899a9b5..e4e2c628181 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXBlock.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXBlock.cs @@ -49,20 +49,14 @@ public virtual bool isValid { get { - if (GetParent() == null) return true; // a block is invalid only if added to incompatible context. - if ((compatibleContexts & GetParent().contextType) != GetParent().contextType) - return false; - if (GetParent() is VFXBlockSubgraphContext subgraphContext) - return (subgraphContext.compatibleContextType & compatibleContexts) == subgraphContext.compatibleContextType; + if (GetParent() == null) + return true; - return true; + return GetParent().Accept(this); } } - public bool isActive - { - get { return enabled && isValid; } - } + public bool isActive => enabled && isValid; public abstract VFXContextType compatibleContexts { get; } public abstract VFXDataType compatibleData { get; } diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXSubgraphBlock.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXSubgraphBlock.cs index a5b33ded8ff..aaca79ffb8a 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXSubgraphBlock.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXSubgraphBlock.cs @@ -20,16 +20,7 @@ class VFXSubgraphBlock : VFXBlock VFXBlock[] m_SubBlocks; VFXGraph m_UsedSubgraph; - public VisualEffectSubgraphBlock subgraph - { - get - { - if (!isValid) - return null; - - return m_Subgraph; - } - } + public VisualEffectSubgraphBlock subgraph => m_Subgraph; public override void GetImportDependentAssets(HashSet dependencies) { @@ -49,6 +40,7 @@ public override void CheckGraphBeforeImport() { ResyncSlots(true); ResyncCustomAttributes(); + Invalidate(InvalidationCause.kUIChangedTransient); // if a subgraph block has changed, we need to update it's visual valid state } } @@ -233,7 +225,7 @@ public override bool isValid if (blockContext == null) return false; - return (blockContext.compatibleContextType & parent.contextType) == parent.contextType; + return base.isValid; } } diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXBlockSubgraphContext.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXBlockSubgraphContext.cs index d214cbc6e72..2a4a240dcde 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXBlockSubgraphContext.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXBlockSubgraphContext.cs @@ -40,7 +40,7 @@ protected override IEnumerable inputProperties [VFXSetting, SerializeField] ContextType m_SuitableContexts = ContextType.InitAndUpdateAndOutput; - public VFXContextType compatibleContextType + public override VFXContextType compatibleContextType { get { @@ -70,11 +70,11 @@ protected internal override void Invalidate(VFXModel model, InvalidationCause ca { model.RefreshErrors(); } - } - - public override bool Accept(VFXBlock block, int index = -1) - { - return ((block.compatibleContexts & compatibleContextType) == compatibleContextType); + if (model == this && cause == InvalidationCause.kSettingChanged) // Suitable context has changed, refresh valid blocks UI + { + foreach (var block in children) + block.Invalidate(InvalidationCause.kUIChangedTransient); + } } public override bool CanBeCompiled() diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXContext.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXContext.cs index 9fc919ce736..03d20c72708 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXContext.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXContext.cs @@ -134,6 +134,8 @@ public override void OnEnable() public virtual bool codeGeneratorCompute { get { return true; } } public virtual bool doesIncludeCommonCompute { get { return codeGeneratorCompute; } } public virtual VFXContextType contextType { get { return m_ContextType; } } + + public virtual VFXContextType compatibleContextType { get { return contextType; } } public virtual VFXDataType inputType { get { return m_InputType; } } public virtual VFXDataType outputType { get { return m_OutputType; } } public virtual VFXDataType ownedType { get { return contextType == VFXContextType.Output ? inputType : outputType; } } @@ -269,11 +271,8 @@ public override bool AcceptChild(VFXModel model, int index = -1) return Accept(block, index); } - public virtual bool Accept(VFXBlock block, int index = -1) - { - var testedType = contextType == VFXContextType.Output ? inputType : outputType; - return ((block.compatibleContexts & contextType) != 0) && ((block.compatibleData & testedType) != 0); - } + public bool Accept(VFXBlock block, int index = -1) => Accept(block.compatibleContexts, block.compatibleData); + public bool Accept(VFXContextType blockContexts, VFXDataType blockData) => (blockContexts & compatibleContextType) == compatibleContextType && (blockData & ownedType) != 0; public bool CanHaveBlocks() { diff --git a/Packages/com.unity.visualeffectgraph/Editor/UIResources/uss/VFXContext.uss b/Packages/com.unity.visualeffectgraph/Editor/UIResources/uss/VFXContext.uss index 4d131af5cda..d7818743101 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/UIResources/uss/VFXContext.uss +++ b/Packages/com.unity.visualeffectgraph/Editor/UIResources/uss/VFXContext.uss @@ -166,6 +166,11 @@ VFXContextUI #title #icon margin-right: 6px; } +VFXContextUI #title #icon.Empty +{ + display: none; +} + VFXContextUI #header-space { position:absolute; From 95963755d18fc6662e4447885b6b561474faebcf Mon Sep 17 00:00:00 2001 From: Brendan Duncan Date: Fri, 8 Nov 2024 03:12:10 +0000 Subject: [PATCH 20/85] Fix Vulkan URP 2D crash on some android devices URP Renderer2D sets the depthStencilFormat to D32_SFloat_S8_UInt except for switch, embedded, and QNX, in which case it uses D24_UNorm_S8_UInt. D32_SFloat_S8_UInt is not supported on a number of Android devices, such as the Galaxy Note 8 or Galaxy Note 9. Because RenderTexture will try to find a fallback format by **increasing** the bits of the depth format, and there are no formats with more than 32 bits, the RenderTexture will fail to be created, causing the render pass to fail. Everywhere else in Unity D24_UNorm_S8_UInt is used for Android, so we should have Android use that in Renderer2D, too. --- .../Runtime/2D/Renderer2D.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs index 64d6698adde..21f8a8de8a1 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/2D/Renderer2D.cs @@ -6,7 +6,7 @@ namespace UnityEngine.Rendering.Universal { internal sealed partial class Renderer2D : ScriptableRenderer { - #if UNITY_SWITCH || UNITY_EMBEDDED_LINUX || UNITY_QNX + #if UNITY_SWITCH || UNITY_EMBEDDED_LINUX || UNITY_QNX || UNITY_ANDROID const GraphicsFormat k_DepthStencilFormat = GraphicsFormat.D24_UNorm_S8_UInt; #else const GraphicsFormat k_DepthStencilFormat = GraphicsFormat.D32_SFloat_S8_UInt; From e786b0c681117ab903d5d92dd674215f514d39a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Carr=C3=A8re?= Date: Fri, 8 Nov 2024 16:19:13 +0000 Subject: [PATCH 21/85] Docs/graphics/docg 5740 ray tracing troubleshooting 1 Implement https://forum.unity.com/threads/hdrp-dxr-realtime-ray-tracing-lighting-troubleshooting-guide.1248550/ --- .../Documentation~/Images/fog-color-black.jpg | Bin 0 -> 90354 bytes .../Images/fog-color-sky-color.jpg | Bin 0 -> 78269 bytes ...leshoot__directional_shadow_fallback_0.jpg | Bin 0 -> 47002 bytes ...leshoot__directional_shadow_fallback_1.jpg | Bin 0 -> 47527 bytes ...ng_troubleshoot_ambient-probe-dimmer-0.jpg | Bin 0 -> 62670 bytes ...ng_troubleshoot_ambient-probe-dimmer-1.jpg | Bin 0 -> 67820 bytes ...indirect_specular_reflection_probe_off.jpg | Bin 0 -> 44861 bytes ..._indirect_specular_reflection_probe_on.jpg | Bin 0 -> 45132 bytes ...ubleshoot_apartment_shadow_culling_off.jpg | Bin 0 -> 42703 bytes ...oubleshoot_apartment_shadow_culling_on.jpg | Bin 0 -> 43165 bytes .../Documentation~/TableOfContents.md | 1 + .../raytracing-troubleshooting.md | 233 ++++++++++++++++++ 12 files changed, 234 insertions(+) create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/fog-color-black.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/fog-color-sky-color.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot__directional_shadow_fallback_0.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot__directional_shadow_fallback_1.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_ambient-probe-dimmer-0.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_ambient-probe-dimmer-1.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_apartment_indirect_specular_reflection_probe_off.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_apartment_indirect_specular_reflection_probe_on.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_apartment_shadow_culling_off.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_apartment_shadow_culling_on.jpg create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/raytracing-troubleshooting.md diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/fog-color-black.jpg b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/fog-color-black.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa43aa46974bda1296ba27165181a34b72f713e6 GIT binary patch literal 90354 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 k}Y)C6$BZr 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 tNdW0?$pyyARLr^LDTq{_8?S% z#y-xmcy9Lr(a6_L$B2+9Mfq{`$VP|zGL%KvCdtR%O!79!_1XEvn4(cN&3{>`5mXO8 zvqeDh6B&Tm!41XP@HzEhL;j2++-{xe4)JNN_r!d|$|S)}on!hjw5&Yc(^ za_{KCma)=Gg$oWJ4o0D9AYr>(G}K4>a0$9-nFvFkbT{qb<;VkPAiqBzvD#=Uzo)bQ z<2VTmzL=wLBcEjcvf90#Y5xG2T{c7C{5r)&x?gxyM-KW?-_|v*NrFrIuK*jW{@)lk z6^G}}{{SvQvDl2_BbF+M�T9PxrNdj3 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 literal 0 HcmV?d00001 diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/fog-color-sky-color.jpg b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/fog-color-sky-color.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7927b47ae1a9fd46c2ddd798a295677dc77e8c10 GIT binary patch literal 78269 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

(CT(2^yc#| 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�+j`4fPtSq}$OP0A3j; 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 WQ&Po^4MnsRyv;2u1(;08fBDz!Bg9V1pf< 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 z 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 literal 0 HcmV?d00001 diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_apartment_shadow_culling_on.jpg b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_apartment_shadow_culling_on.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c822d26049e2ace0429b882360da3736bccf7795 GIT binary patch literal 43165 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 IB+1qP* [!NOTE] + > For each rasterized pixel, the lighting comes from at least five distinct sources: + > * Bullet text. + > * Directional (global) lights and their shadows + > * Direct local lights (point, spot, area) and their shadows + > * Indirect specular lighting: + > * Screen Space Reflection (SSR)/Ray Traced Reflection (RTR) + > * Planar reflection + > * Reflection probes + > * Sky cubemap + +- Indirect diffuse lighting: + + - Screen Space Global Illumination (SSGI)/Ray-Traced Global Illumination (RTGI) + + - Adaptive Probe Volumes (APV) + + - Light probe groups + + - Lightmaps + + - Ambient probes + +- Fog + +## Fix missing shadows from directional lights + +### Symptoms + +You might notice the following symptoms when shadows from directional lights are missing: + +- Shadows from directional lights don't appear, even though the light source is visible. + +- Certain areas of the scene appear overly bright without proper shading or occlusion. + +- The lighting feels flat or unrealistic, especially in large outdoor scenes with sunlight. + + + + + + +### Cause + +Shadows cast by directional light don't render if the camera's field of view (frustum) is narrower than the cascade shadow map's coverage area. + +### Resolution + +To fix missing shadows from directional lights, adjust the **Directional Shadow Fallback Intensity** in the [Ray Tracing settings](reference-ray-tracing-settings.html). This setting allows HDRP to apply a fallback shadow value to points in the scene geometry where rays from the camera intersect objects but fall outside the coverage area of the shadow map. Depending on your setup, use 0.0 (in shadow) or 1.0 (fully lit) as the fallback shadow value. + +## Fix missing shadows from punctual lights + +### Symptoms + +The following symptoms indicate missing shadows from punctual lights: + +- Shadows from point lights or spot lights are missing, causing illuminated objects to look as though they're lit from all directions. + +- Scenes appear washed out or lack depth, particularly when using small, concentrated light sources. + +- Light leaks occur in areas where shadows are meant to be cast by nearby objects. + + + + + + +### Cause + +Shadows cast by punctual lights don't render if the camera's field of view (frustum) is narrower than the cascade shadow map's coverage area. + +### Resolution + +To fix missing shadows from punctual lights, enable **Extend Shadow Culling** in the [Ray Tracing settings](reference-ray-tracing-settings.html). + +Extended shadow culling provides the following benefits: + +- The [extended frustum culling region](reference-ray-tracing-settings.html#extended-culling) includes more objects in the shadow maps, even if their shadows don't affect pixels inside the frustum. + +- Extended frustum culling doesn't increase the size of the cascade shadow map (only for directional lights). + +However, extended shadow culling increases memory use and computational load. + +## Fix insufficient local light contributions + +### Symptoms + +If local lights, such as point or area lights, aren't contributing properly to the scene, you might observe the following: + +- Local lights seem too dim or fail to light nearby objects properly. + +- Certain objects appear unlit or underlit despite being close to a light source. + +- Ray-traced global illumination (RTGI) or RTR lighting doesn't seem to take local lights into account. + +### Cause + +The [light cluster's](Ray-Tracing-Light-Cluster.html) configuration can cause issues with the impact of direct local lights on real-time ray tracing (RTR) and ray-traced global illumination (RTGI). + +### Resolution + +To fix insufficient local light contributions, diagnose the issue in the [Rendering Debugger window](use-the-rendering-debugger.md). + +- If the number of lights in each cell exceeds the default limit, reduce the number of lights in **Edit** > **Project Settings** > **Quality** > **HDRP** > **Lights**. + +- If lights outside the camera range aren't contributing as expected, enlarge the camera cluster range in the volume's **Inspector** window under **Override** > **Ray Tracing** > **Light Cluster**. + +## Fix indirect specular light leaks + +### Symptoms + +The following symptoms might occur when an indirect specular light leaks: + +- Reflections, especially on glossy or metallic surfaces, are either missing or overly bright, as though they reflect the sky or environment instead of the intended object. + +- Unrealistic or random bright spots appear on surfaces with specular highlights, especially in interior scenes. + +- Reflections seem disconnected from nearby objects or appear out of place. + + + + + + +### Cause + +Common causes for indirect specular light leaks include the absence of reflection probes and incorrect fallback settings in the last bounce of screen-space reflections (SSR) and real-time ray tracing (RTR). + +### Resolution + +To fix indirect specular light leaks, add reflection probes and configure the **Ray Miss** and **Last Bounce** settings in the volume's Inspector window under **Override** > **Lighting** > **Screen Space Reflection** > **Tracing** > **Ray Tracing**. + +## Fix lighting leaks that occur when the sky lights the scene + +### Symptoms + +You might encounter the following issues when the sky lights the scene: + +- Bright light leaks from outside or from the sky into enclosed interiors, particularly in areas with no windows or other direct openings. + +- Overexposed or unnaturally bright spots appear on surfaces in closed spaces, even when no visible light sources are present. + +- Lighting feels uneven, with areas illuminated by the sky despite being fully enclosed. + +### Cause + +When the camera is in a closed environment, and no data is sampled from reflection probes at a ray intersection, the sky becomes the only light source. + +### Resolution + +To fix lighting leaks that occur when the sky lights the scene, create, place, and bake reflection probes, or use real-time reflection probes. + +- In the **Last Bounce** dropdown menu, select **Reflection Probes** or **None**. + +- Even in **Quality** mode and with more than the default number of bounces, you must specify a valid source of indirect specular light for the last bounce. + +## Fix indirect diffuse light leaks + +### Symptoms + +The following symptoms can indicate indirect diffuse light leaks: + +- Diffuse lighting appears to seep through walls or barriers, creating bright patches in areas meant to be shaded. + +- Areas in closed environments are lit by ambient or external light sources, producing an unrealistic lighting effect. + +- Objects near walls or other occlusions might appear brighter than intended, disrupting the desired lighting mood. + + + + + + +### Cause + +Common causes of indirect diffuse light leaks include improper use of ambient probes, deprecated light probes, and lightmaps in real-time ray tracing (RTR). + +### Resolution + +To fix indirect diffuse light leaks, follow one or both of these steps: + +- Adjust the **Ambient Probe Dimmer** in the Inspector window under **Override** > **Lighting** > **Screen Space Global Illumination** > **Tracing** > **Ray Tracing**. + +- Bake probes via adaptive probe volumes. + +## Fix fog light leaks + +### Symptoms + +Fog light leaks have the following symptoms: + +- Interior scenes have a tinted or colored fog effect that seems unnatural or overly bright, especially in areas with no visible sky. + +- The color of the fog in enclosed spaces appears inconsistent with the intended lighting setup, creating a disjointed visual effect. + +- Fog might seem to have a glowing or leaking effect, as though it's illuminated by a non-existent light source from outside. + + + + + + +### Cause + +Setting the fog color mode to **Sky Color** can cause unintended tinting in closed interiors. + +### Resolution + +To fix fog light leaks, set the fog's color to a constant black in closed environments. In the Sky and Fog Global Volume's Inspector window, select **Color mode** > **Constant color**, check the **Color box**, and select black in the color wheel. Bake probes via adaptive probe volumes. + +## Additional resources + +- [Unity ray tracing guide](Ray-Tracing-Getting-Started.html) + +- [Ray tracing settings](Ray-Tracing-Settings.html) + +- [Ray-traced global illumination](Ray-Traced-Global-Illumination.html) + +- [Ray-traced reflections](Ray-Traced-Reflections.html) + +- [Understand reflection in HDRP](reflection-understand.html) From 6af91297a8d836cd01a632624a88e46e7247917e Mon Sep 17 00:00:00 2001 From: Ludovic Theobald Date: Fri, 8 Nov 2024 16:19:15 +0000 Subject: [PATCH 22/85] [VFX] Compilation Optimisation - Cache implicit blocks This PR implements a cache for implicit blocks during compilation, avoiding expensive creation of new VFX Blocks. Before: ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/3b764f31-4617-44a8-8a23-3dff5f26afaf) After : ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/ac2a5480-02e2-4468-88df-976025428ab0) --- .../VFXGraph/Outputs/VFXLitSphereOutput.cs | 2 +- .../Editor/Models/Blocks/VFXBlock.cs | 6 +++++ .../Implementations/VFXBasicInitialize.cs | 2 +- .../Implementations/VFXBasicUpdate.cs | 10 ++++---- .../Editor/Models/Contexts/VFXContext.cs | 24 +++++++++++++++++++ 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Outputs/VFXLitSphereOutput.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Outputs/VFXLitSphereOutput.cs index f1cbf74a66a..8caac1c7f40 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Outputs/VFXLitSphereOutput.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/VFXGraph/Outputs/VFXLitSphereOutput.cs @@ -43,7 +43,7 @@ protected override IEnumerable implicitPostBlock { get { - var orient = VFXBlock.CreateImplicitBlock(GetData()); + var orient = GetOrCreateImplicitBlock(GetData()); orient.mode = Orient.Mode.FaceCameraPosition; yield return orient; } diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXBlock.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXBlock.cs index e4e2c628181..5d91d75fd0a 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXBlock.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Blocks/VFXBlock.cs @@ -181,6 +181,12 @@ public VFXData GetData() return m_TransientData; } + internal void SetTransientData(VFXData data) + { + Debug.Assert(GetParent() == null, "SetTransientData should only be called on implicit blocks, that have no parents."); + m_TransientData = data; + } + public override void RefreshErrors() { if (enabled) diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/Implementations/VFXBasicInitialize.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/Implementations/VFXBasicInitialize.cs index cf2695106bd..e36473ea6a2 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/Implementations/VFXBasicInitialize.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/Implementations/VFXBasicInitialize.cs @@ -243,7 +243,7 @@ protected override IEnumerable implicitPreBlock if (hasGPUSpawner) { // Force "alive" attribute when a system can spawn particles from GPU, because we are updating the entire capacity - var block = VFXBlock.CreateImplicitBlock(data); + var block = GetOrCreateImplicitBlock(data); block.SetSettingValue(nameof(Block.SetAttribute.attribute), VFXAttribute.Alive.name); yield return block; } diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/Implementations/VFXBasicUpdate.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/Implementations/VFXBasicUpdate.cs index cdda6fb547a..12a6d3be149 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/Implementations/VFXBasicUpdate.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/Implementations/VFXBasicUpdate.cs @@ -215,7 +215,7 @@ protected override IEnumerable implicitPreBlock var data = GetData(); if (data.IsCurrentAttributeUsed(VFXAttribute.OldPosition)) { - yield return VFXBlock.CreateImplicitBlock(data); + yield return GetOrCreateImplicitBlock(data); } } } @@ -227,7 +227,7 @@ protected override IEnumerable implicitPostBlock var data = GetData(); if (integration == VFXIntegrationMode.Euler && data.IsCurrentAttributeWritten(VFXAttribute.Velocity)) - yield return VFXBlock.CreateImplicitBlock(data); + yield return GetOrCreateImplicitBlock(data); if (angularIntegration == VFXIntegrationMode.Euler && ( @@ -235,7 +235,7 @@ protected override IEnumerable implicitPostBlock data.IsCurrentAttributeWritten(VFXAttribute.AngularVelocityY) || data.IsCurrentAttributeWritten(VFXAttribute.AngularVelocityZ)) ) - yield return VFXBlock.CreateImplicitBlock(data); + yield return GetOrCreateImplicitBlock(data); var lifeTime = GetData().IsCurrentAttributeWritten(VFXAttribute.Lifetime); var age = GetData().IsCurrentAttributeUsed(VFXAttribute.Age); @@ -243,10 +243,10 @@ protected override IEnumerable implicitPostBlock if (age || lifeTime) { if (ageParticles) - yield return VFXBlock.CreateImplicitBlock(data); + yield return GetOrCreateImplicitBlock(data); if (lifeTime && reapParticles) - yield return VFXBlock.CreateImplicitBlock(data); + yield return GetOrCreateImplicitBlock(data); } } } diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXContext.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXContext.cs index 03d20c72708..c58e40e34b7 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXContext.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/Contexts/VFXContext.cs @@ -742,5 +742,29 @@ public List CreateInstancingSplitValues(VFXExpressionGraph expressionGraph } public virtual IEnumerable instancingSplitCPUExpressions { get { return Enumerable.Empty(); } } + + protected Dictionary implicitBlockCache; + + private void CreateImplicitBlockCacheIfNeeded() + { + implicitBlockCache ??= new Dictionary(); + } + + protected T GetOrCreateImplicitBlock(VFXData data) where T : VFXBlock + { + CreateImplicitBlockCacheIfNeeded(); + if (implicitBlockCache.TryGetValue(typeof(T), out var block)) + { + T typedBlock = block as T; + typedBlock.SetTransientData(data); + return typedBlock; + } + else + { + var newBlock = VFXBlock.CreateImplicitBlock(data); + implicitBlockCache.Add(typeof(T), newBlock); + return newBlock; + } + } } } From 5ff8a6e33858ef2fda866d4434391d170a722fd8 Mon Sep 17 00:00:00 2001 From: Yvain Raeymaekers Date: Fri, 8 Nov 2024 22:33:55 +0000 Subject: [PATCH 23/85] [HDRP] Assertion printed when Maximum Reflection Probe count is higher than 64 due to k_MaxCubeReflectionsOnScreen when Raytracing is enabled JIRA: https://jira.unity3d.com/browse/UUM-86779 Slack: https://unity.slack.com/archives/C6Y79CZM0/p1730454767182339 Out of bounds asserts for _PlanarCaptureVPWL and _CubeScaleOffsetWL were using an incorrect size. Fixed by using the right constants matching their actual size. --- .../RenderPipeline/WorldLightManager.cs | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs index 9186de26cfe..33934362745 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/WorldLightManager.cs @@ -154,12 +154,9 @@ internal void ResizeLightDataGraphicsBuffer(int numLights) m_LightDataGPUArray = new GraphicsBuffer(GraphicsBuffer.Target.Structured, numLightsGpu, System.Runtime.InteropServices.Marshal.SizeOf(typeof(LightData))); } - internal const int k_MaxPlanarReflectionsOnScreen = 16; - internal const int k_MaxCubeReflectionsOnScreen = 64; - internal unsafe void SetPlanarReflectionDataRT(int index, ref Matrix4x4 vp, ref Vector4 scaleOffset) { - Debug.Assert(index < k_MaxPlanarReflectionsOnScreen); + Debug.Assert(index < HDRenderPipeline.k_MaxPlanarReflectionsOnScreen); for (int j = 0; j < 16; ++j) m_EnvLightReflectionDataRT._PlanarCaptureVPWL[index * 16 + j] = vp[j]; @@ -170,7 +167,7 @@ internal unsafe void SetPlanarReflectionDataRT(int index, ref Matrix4x4 vp, ref internal unsafe void SetCubeReflectionDataRT(int index, ref Vector4 scaleOffset) { - Debug.Assert(index < k_MaxCubeReflectionsOnScreen); + Debug.Assert(index < HDRenderPipeline.k_MaxCubeReflectionsOnScreen); for (int j = 0; j < 4; ++j) m_EnvLightReflectionDataRT._CubeScaleOffsetWL[index * 4 + j] = scaleOffset[j]; @@ -354,16 +351,16 @@ public static void CollectWorldLights(in HDCamera hdCamera, in WorldLightsSettin // this to ensure that we don't process more lights than before if ((flagFunc(hdCamera, hdLight, light) & 0xfffffffe) == 0) continue; - + // TODO-WL: Directional lights if (hdLight.legacyLight.type == LightType.Directional) continue; - + // Compute the camera relative position Vector3 lightPositionRWS = hdLight.gameObject.transform.position; if (ShaderConfig.s_CameraRelativeRendering != 0) lightPositionRWS -= camPosWS; - + var lightType = hdLight.legacyLight.type; float lightRange = light.range; bool isAreaLight = lightType.IsArea(); @@ -401,10 +398,10 @@ public static void CollectWorldLights(in HDCamera hdCamera, in WorldLightsSettin // Let's now compute an AABB that matches the previously defined OOBB Bounds lightBounds = new Bounds(); OOBBToAABBBounds(oobbCenter, extents, hdLight.gameObject.transform.up, hdLight.gameObject.transform.right, hdLight.gameObject.transform.forward, ref lightBounds); - + if (!bounds.Intersects(lightBounds)) continue; - + visibleLight.bounds = lightBounds; } @@ -679,7 +676,7 @@ public static void BuildWorldLightVolumes(in HDCamera hdCamera, in HDRenderPipel lightVolume.position = visibleLight.bounds.center; lightVolume.lightType = isAreaLight ? 1u : 0u; lightVolume.shape = isAreaLight || isBoxLight ? 1u : 0u; - + worldLightsVolumes.bounds.Encapsulate(visibleLight.bounds); realIndex++; } From 114985879916f4cca1d94d5ade5a842be4d381be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Chapelain?= Date: Fri, 8 Nov 2024 22:34:07 +0000 Subject: [PATCH 24/85] [HDRP] Fix building errors in water samples After adding example of rolling wave scene here ([#55701](https://github.cds.internal.unity3d.com/unity/unity/pull/55701)), I forgot to add #if UNITY_EDITOR around the editor script thus preventing users to make a build if the script were present. This PR fixes that. --- .../Samples~/WaterSamples/Scripts/MeshBaker.cs | 7 ++++++- .../Samples~/WaterSamples/Scripts/MoveWave.cs | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/Scripts/MeshBaker.cs b/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/Scripts/MeshBaker.cs index 2cc953d196b..b9fed33f313 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/Scripts/MeshBaker.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/Scripts/MeshBaker.cs @@ -1,8 +1,10 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; -using UnityEditor; using System.IO; +#if UNITY_EDITOR +using UnityEditor; +#endif public class MeshBaker : MonoBehaviour { @@ -188,6 +190,7 @@ void OnDrawGizmos() } } +#if UNITY_EDITOR [CustomEditor(typeof(MeshBaker))] public class MeshBakerEditor : Editor { @@ -206,3 +209,5 @@ public override void OnInspectorGUI() } } } + +#endif diff --git a/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/Scripts/MoveWave.cs b/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/Scripts/MoveWave.cs index c4faae2fabc..e7850183707 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/Scripts/MoveWave.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Samples~/WaterSamples/Scripts/MoveWave.cs @@ -2,8 +2,10 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.VFX; -using UnityEditor; using UnityEngine.Rendering.HighDefinition; +#if UNITY_EDITOR +using UnityEditor; +#endif [ExecuteInEditMode] public class MoveWave : MonoBehaviour @@ -58,6 +60,7 @@ public float GetState() } } +#if UNITY_EDITOR [CustomEditor(typeof(MoveWave))] public class MoveWaveEditor : Editor { @@ -74,3 +77,5 @@ public override void OnInspectorGUI() } } +#endif + From 15bb643601f425b6ab91b77f54a926cb6f41cbd1 Mon Sep 17 00:00:00 2001 From: Sumin Cho Date: Mon, 11 Nov 2024 22:36:13 +0000 Subject: [PATCH 25/85] [HDRP] Empty template starts with incorrect Physically Based Sky (incorrect exposure in later frames) This PR fixes the issue of removing the celestial data twice resulting in a black sky cubemap. The cleanup calling order was changed after this PR(https://github.cds.internal.unity3d.com/unity/unity/pull/49443) was applied. The ordering change caused the removal of the celestial data for sky rendering in the middle of the render pipeline. So it has been fixed to call the cleanup only once to maintain the celestial body data. --- .../Runtime/Sky/SkyManager.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/SkyManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/SkyManager.cs index 81a7a6a9ffd..3510969b3ba 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/SkyManager.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/SkyManager.cs @@ -534,7 +534,6 @@ public void Cleanup() for (int i = 0; i < m_CachedSkyContexts.size; ++i) m_CachedSkyContexts[i].Cleanup(); - m_StaticLightingSky.Cleanup(); lightingOverrideVolumeStack.Dispose(); #if UNITY_EDITOR From 540478b77f9dea0fa27c7b9ff8bd61f3455d8c8d Mon Sep 17 00:00:00 2001 From: Kazuki Matsumoto Date: Mon, 11 Nov 2024 22:36:16 +0000 Subject: [PATCH 26/85] Graphics: Refactor shader code of dynamic branching fog in URP This PR refactors the shader code for Fog related keywords implemented by the previous PR (#54892). I reduced the duplicate lines in the shader code because the code works just fine with both dynamic_branch and multi_compile. --- .../Runtime/VFXGraph/Shaders/VFXCommon.hlsl | 20 +---- .../ShaderLibrary/Lighting.hlsl | 17 +--- .../ShaderLibrary/ShaderGraphFunctions.hlsl | 18 +--- .../ShaderVariablesFunctions.hlsl | 90 ++++--------------- .../Shaders/UnlitForwardPass.hlsl | 20 ++--- 5 files changed, 31 insertions(+), 134 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/VFXGraph/Shaders/VFXCommon.hlsl b/Packages/com.unity.render-pipelines.universal/Runtime/VFXGraph/Shaders/VFXCommon.hlsl index 5518a7de713..16dc0eaa3b0 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/VFXGraph/Shaders/VFXCommon.hlsl +++ b/Packages/com.unity.render-pipelines.universal/Runtime/VFXGraph/Shaders/VFXCommon.hlsl @@ -189,7 +189,7 @@ float4 VFXTransformFinalColor(float4 color, float4 posCS) float4 VFXApplyFog(float4 color,float4 posCS,float3 posWS) { -#if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) +#if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_LINEAR || FOG_EXP || FOG_EXP2) { float4 fog = (float4)0; @@ -205,23 +205,7 @@ float4 VFXApplyFog(float4 color,float4 posCS,float3 posWS) color.rgb = lerp(fog.rgb * color.a, color.rgb, fog.a); #endif } -#else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) -#if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2) - float4 fog = (float4)0; - fog.rgb = unity_FogColor.rgb; - - float fogFactor = ComputeFogFactor(posCS.z * posCS.w); - fog.a = ComputeFogIntensity(fogFactor); - -#if VFX_BLENDMODE_ALPHA || IS_OPAQUE_PARTICLE - color.rgb = lerp(fog.rgb, color.rgb, fog.a); -#elif VFX_BLENDMODE_ADD - color.rgb *= fog.a; -#elif VFX_BLENDMODE_PREMULTIPLY - color.rgb = lerp(fog.rgb * color.a, color.rgb, fog.a); -#endif -#endif // #if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2) -#endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) +#endif // #if defined(FOG_LINEAR_KEYWORD_DECLARED) return color; } diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl index d997e1cfcf6..8c0f13c9d84 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl @@ -205,27 +205,18 @@ half4 CalculateFinalColor(LightingData lightingData, half alpha) half4 CalculateFinalColor(LightingData lightingData, half3 albedo, half alpha, float fogCoord) { + half fogFactor = 0; #if defined(_FOG_FRAGMENT) - - #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - half fogFactor = 0; + #if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_LINEAR || FOG_EXP || FOG_EXP2) { float viewZ = -fogCoord; float nearToFarZ = max(viewZ - _ProjectionParams.y, 0); fogFactor = ComputeFogFactorZ0ToFar(nearToFarZ); } - #else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - #if (defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)) - float viewZ = -fogCoord; - float nearToFarZ = max(viewZ - _ProjectionParams.y, 0); - half fogFactor = ComputeFogFactorZ0ToFar(nearToFarZ); - #else - half fogFactor = 0; - #endif - #endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #endif // defined(FOG_LINEAR_KEYWORD_DECLARED) #else // #if defined(_FOG_FRAGMENT) - half fogFactor = fogCoord; + fogFactor = fogCoord; #endif // #if defined(_FOG_FRAGMENT) half3 lightingColor = CalculateLightingColor(lightingData, albedo); half3 finalColor = MixFog(lightingColor, fogFactor); diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl index c64c3bd9232..616d4fd7588 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl @@ -95,7 +95,8 @@ float3 shadergraph_LWReflectionProbe(float3 viewDir, float3 normalOS, float lod) void shadergraph_LWFog(float3 positionOS, out float4 color, out float density) { color = unity_FogColor; - #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + density = 0.0f; + #if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_LINEAR || FOG_EXP || FOG_EXP2) { float viewZ = -TransformWorldToView(TransformObjectToWorld(positionOS)).z; @@ -103,20 +104,7 @@ void shadergraph_LWFog(float3 positionOS, out float4 color, out float density) // ComputeFogFactorZ0ToFar returns the fog "occlusion" (0 for full fog and 1 for no fog) so this has to be inverted for density. density = 1.0f - ComputeFogIntensity(ComputeFogFactorZ0ToFar(nearZ0ToFarZ)); } - else - { - density = 0.0f; - } - #else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - #if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2) - float viewZ = -TransformWorldToView(TransformObjectToWorld(positionOS)).z; - float nearZ0ToFarZ = max(viewZ - _ProjectionParams.y, 0); - // ComputeFogFactorZ0ToFar returns the fog "occlusion" (0 for full fog and 1 for no fog) so this has to be inverted for density. - density = 1.0f - ComputeFogIntensity(ComputeFogFactorZ0ToFar(nearZ0ToFarZ)); - #else - density = 0.0f; - #endif - #endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #endif // defined(FOG_LINEAR_KEYWORD_DECLARED) } // This function assumes the bitangent flip is encoded in tangentWS.w diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl index df5ffa03d36..ecd7c6b5bd3 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl @@ -314,7 +314,7 @@ float3 NormalizeNormalPerPixel(float3 normalWS) real ComputeFogFactorZ0ToFar(float z) { - #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_LINEAR) { // factor = (end-z)/(end-start) = z * (-1/(end-start)) + (end/(end-start)) @@ -329,21 +329,13 @@ real ComputeFogFactorZ0ToFar(float z) } else { + // This process is necessary to avoid errors in iOS graphics tests + // when using the dynamic branching of fog keywords. return real(0.0); } - #else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - #if defined(FOG_LINEAR) - // factor = (end-z)/(end-start) = z * (-1/(end-start)) + (end/(end-start)) - float fogFactor = saturate(z * unity_FogParams.z + unity_FogParams.w); - return real(fogFactor); - #elif defined(FOG_EXP) || defined(FOG_EXP2) - // factor = exp(-(density*z)^2) - // -density * z computed at vertex - return real(unity_FogParams.x * z); - #else - return real(0.0); - #endif - #endif //#if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #else // #if defined(FOG_LINEAR_KEYWORD_DECLARED) + return real(0.0); + #endif // #if defined(FOG_LINEAR_KEYWORD_DECLARED) } real ComputeFogFactor(float zPositionCS) @@ -355,7 +347,7 @@ real ComputeFogFactor(float zPositionCS) half ComputeFogIntensity(half fogFactor) { half fogIntensity = half(0.0); - #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_EXP) { // factor = exp(-density*z) @@ -372,21 +364,7 @@ half ComputeFogIntensity(half fogFactor) { fogIntensity = fogFactor; } - #else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - #if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2) - #if defined(FOG_EXP) - // factor = exp(-density*z) - // fogFactor = density*z compute at vertex - fogIntensity = saturate(exp2(-fogFactor)); - #elif defined(FOG_EXP2) - // factor = exp(-(density*z)^2) - // fogFactor = density*z compute at vertex - fogIntensity = saturate(exp2(-fogFactor * fogFactor)); - #elif defined(FOG_LINEAR) - fogIntensity = fogFactor; - #endif - #endif - #endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #endif // #if defined(FOG_LINEAR_KEYWORD_DECLARED return fogIntensity; } @@ -396,7 +374,7 @@ real InitializeInputDataFog(float4 positionWS, real vertFogFactor) { real fogFactor = 0.0; #if defined(_FOG_FRAGMENT) - #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_LINEAR || FOG_EXP || FOG_EXP2) { // Compiler eliminates unused math --> matrix.column_z * vec @@ -405,15 +383,7 @@ real InitializeInputDataFog(float4 positionWS, real vertFogFactor) float nearToFarZ = max(viewZ - _ProjectionParams.y, 0); fogFactor = ComputeFogFactorZ0ToFar(nearToFarZ); } - #else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - #if (defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)) - // Compiler eliminates unused math --> matrix.column_z * vec - float viewZ = -(mul(UNITY_MATRIX_V, positionWS).z); - // View Z is 0 at camera pos, remap 0 to near plane. - float nearToFarZ = max(viewZ - _ProjectionParams.y, 0); - fogFactor = ComputeFogFactorZ0ToFar(nearToFarZ); - #endif - #endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #endif // #if defined(FOG_LINEAR_KEYWORD_DECLARED) #else // #if defined(_FOG_FRAGMENT) fogFactor = vertFogFactor; #endif // #if defined(_FOG_FRAGMENT) @@ -423,7 +393,7 @@ real InitializeInputDataFog(float4 positionWS, real vertFogFactor) float ComputeFogIntensity(float fogFactor) { float fogIntensity = 0.0; - #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_EXP) { // factor = exp(-density*z) @@ -440,46 +410,26 @@ float ComputeFogIntensity(float fogFactor) { fogIntensity = fogFactor; } - #else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - #if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2) - #if defined(FOG_EXP) - // factor = exp(-density*z) - // fogFactor = density*z compute at vertex - fogIntensity = saturate(exp2(-fogFactor)); - #elif defined(FOG_EXP2) - // factor = exp(-(density*z)^2) - // fogFactor = density*z compute at vertex - fogIntensity = saturate(exp2(-fogFactor * fogFactor)); - #elif defined(FOG_LINEAR) - fogIntensity = fogFactor; - #endif - #endif - #endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #endif // #if defined(FOG_LINEAR_KEYWORD_DECLARED) return fogIntensity; } half3 MixFogColor(half3 fragColor, half3 fogColor, half fogFactor) { - #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_LINEAR || FOG_EXP || FOG_EXP2) { half fogIntensity = ComputeFogIntensity(fogFactor); // Workaround for UUM-61728: using a manual lerp to avoid rendering artifacts on some GPUs when Vulkan is used fragColor = fragColor * fogIntensity + fogColor * (half(1.0) - fogIntensity); } - #else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - #if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2) - half fogIntensity = ComputeFogIntensity(fogFactor); - // Workaround for UUM-61728: using a manual lerp to avoid rendering artifacts on some GPUs when Vulkan is used - fragColor = fragColor * fogIntensity + fogColor * (half(1.0) - fogIntensity); - #endif - #endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #endif // #if defined(FOG_LINEAR_KEYWORD_DECLARED) return fragColor; } float3 MixFogColor(float3 fragColor, float3 fogColor, float fogFactor) { - #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_LINEAR || FOG_EXP || FOG_EXP2) { if (IsFogEnabled()) @@ -488,15 +438,7 @@ float3 MixFogColor(float3 fragColor, float3 fogColor, float fogFactor) fragColor = lerp(fogColor, fragColor, fogIntensity); } } - #else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) - #if defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2) - if (IsFogEnabled()) - { - float fogIntensity = ComputeFogIntensity(fogFactor); - fragColor = lerp(fogColor, fragColor, fogIntensity); - } - #endif - #endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) + #endif // #if defined(FOG_LINEAR_KEYWORD_DECLARED) return fragColor; } diff --git a/Packages/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl b/Packages/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl index 8181b553913..b77b18b4167 100644 --- a/Packages/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl +++ b/Packages/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl @@ -132,27 +132,19 @@ void UnlitPassFragment( finalColor.rgb *= aoFactor.directAmbientOcclusion; #endif -#if defined(_FOG_FRAGMENT) -#if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) half fogFactor = 0; +#if defined(_FOG_FRAGMENT) +#if defined(FOG_LINEAR_KEYWORD_DECLARED) if (FOG_LINEAR || FOG_EXP || FOG_EXP2) { float viewZ = -input.fogCoord; float nearToFarZ = max(viewZ - _ProjectionParams.y, 0); fogFactor = ComputeFogFactorZ0ToFar(nearToFarZ); } -#else // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) -#if (defined(FOG_LINEAR) || defined(FOG_EXP) || defined(FOG_EXP2)) - float viewZ = -input.fogCoord; - float nearToFarZ = max(viewZ - _ProjectionParams.y, 0); - half fogFactor = ComputeFogFactorZ0ToFar(nearToFarZ); -#else - half fogFactor = 0; -#endif -#endif // #if USE_DYNAMIC_BRANCH_FOG_KEYWORD && defined(FOG_LINEAR_KEYWORD_DECLARED) -#else - half fogFactor = input.fogCoord; -#endif +#endif // #if defined(FOG_LINEAR_KEYWORD_DECLARED) +#else // #if defined(_FOG_FRAGMENT) + fogFactor = input.fogCoord; +#endif // #if defined(_FOG_FRAGMENT) finalColor.rgb = MixFog(finalColor.rgb, fogFactor); finalColor.a = OutputAlpha(finalColor.a, IsSurfaceTypeTransparent(_Surface)); From ac554d82a3a22af9f8b862edca47854712b21c29 Mon Sep 17 00:00:00 2001 From: Kazuki Matsumoto Date: Mon, 11 Nov 2024 22:36:19 +0000 Subject: [PATCH 27/85] Graphics: Use Reflection to fix compiling error when using old URP config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The PR fixes the compiling error when using the old URP config. The issue is that the old config doesn’t define a required value, `ShaderOptions.k_UseDynamicBranchFogKeyword`. I added the workaround, which uses reflection to check whether the value exists. --- .../Runtime/UniversalRenderPipeline.cs | 12 +++++++++++- .../Tests/Editor/EditorTests.cs | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs index cf37da04b80..37cbb8492df 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs @@ -1,6 +1,7 @@ using System; using Unity.Collections; using System.Collections.Generic; +using System.Reflection; #if UNITY_EDITOR using UnityEditor; using UnityEditor.Rendering.Universal; @@ -151,7 +152,16 @@ public static int maxVisibleAdditionalLights } } - internal static bool useDynamicBranchFogKeyword => ShaderOptions.k_UseDynamicBranchFogKeyword == 1; + internal static bool UseDynamicBranchFogKeyword() + { + const string kMemberName = "k_UseDynamicBranchFogKeyword"; + Type type = typeof(ShaderOptions); + MemberInfo[] memberInfo = type.GetMember(kMemberName); + if (memberInfo.Length == 0) + return false; + int value = (int)((FieldInfo)memberInfo[0]).GetValue(null); + return value == 1; + } // Match with values in Input.hlsl internal static int lightsPerTile => ((maxVisibleAdditionalLights + 31) / 32) * 32; diff --git a/Packages/com.unity.render-pipelines.universal/Tests/Editor/EditorTests.cs b/Packages/com.unity.render-pipelines.universal/Tests/Editor/EditorTests.cs index f7af2108c80..fc5c568f359 100644 --- a/Packages/com.unity.render-pipelines.universal/Tests/Editor/EditorTests.cs +++ b/Packages/com.unity.render-pipelines.universal/Tests/Editor/EditorTests.cs @@ -179,7 +179,7 @@ public void UseDynamicBranchFogKeyword(ShaderPathID shaderPathID) string path = AssetDatabase.GUIDToAssetPath(ShaderUtils.GetShaderGUID(shaderPathID)); var shader = AssetDatabase.LoadAssetAtPath(path); var keywordIdentifiers = new string[] { "FOG_EXP", "FOG_EXP2", "FOG_LINEAR" }; - var dynamicBranchFogKeyword = UniversalRenderPipeline.useDynamicBranchFogKeyword; + var dynamicBranchFogKeyword = UniversalRenderPipeline.UseDynamicBranchFogKeyword(); foreach (var identifier in keywordIdentifiers) { From a3a38017a1e3f34a9ec77c3d240d50ba1d3d1b6e Mon Sep 17 00:00:00 2001 From: Mark Green Date: Mon, 11 Nov 2024 22:36:22 +0000 Subject: [PATCH 28/85] Add dynamic resolution / upscaling docs page Add a general dynamic resolution/upscaling page to the manual. Jira ticket: https://jira.unity3d.com/browse/DOCG-5783 --- .../Documentation~/Dynamic-Resolution.md | 4 ++++ .../Documentation~/deep-learning-super-sampling-in-hdrp.md | 5 +++++ .../Documentation~/stp/stp-upscaler.md | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Dynamic-Resolution.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Dynamic-Resolution.md index 731e64df2b2..8578689db89 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Dynamic-Resolution.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Dynamic-Resolution.md @@ -149,3 +149,7 @@ The intensity of the sharpening filter used by FSR can be controlled using the * > [!NOTE] > This setting is not available in the editor if the **Override FSR Sharpness** checkbox is not checked. The checkbox itself is not available if the default upscaling filter is set to FSR. + +## Additional resources + +- [Introduction to changing resolution scale](https://docs.unity3d.com/6000.0/Documentation/Manual/resolution-scale-introduction.html) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/deep-learning-super-sampling-in-hdrp.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/deep-learning-super-sampling-in-hdrp.md index 2d63a398267..993a539074f 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/deep-learning-super-sampling-in-hdrp.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/deep-learning-super-sampling-in-hdrp.md @@ -82,3 +82,8 @@ Out = SAMPLE_TEXTURE2D_BIAS(TextureInput, SamplerInput, UV, MipBias); ![](Images/CustomMipSupportNodeExample.png) + +## Additional resources + +- [Introduction to changing resolution scale](https://docs.unity3d.com/6000.0/Documentation/Manual/resolution-scale-introduction.html) + diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/stp/stp-upscaler.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/stp/stp-upscaler.md index a5276cadf21..1db366b1a29 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/stp/stp-upscaler.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/stp/stp-upscaler.md @@ -33,3 +33,8 @@ To enable STP in the High Definition Render Pipeline (HDRP), do the following: 3. Set **Dynamic Resolution Type** to **Hardware**. STP remains active when **Render Scale** is set to **1.0** as it applies temporal anti-aliasing (TAA) to the final rendered output. + +## Additional resources + +- [Introduction to changing resolution scale](https://docs.unity3d.com/6000.0/Documentation/Manual/resolution-scale-introduction.html) + From 5d2d7e63b29ded7d5661f69c4cd2ac7b9f058b63 Mon Sep 17 00:00:00 2001 From: Chetan Prasad Date: Tue, 12 Nov 2024 14:54:10 +0000 Subject: [PATCH 29/85] Fix Depth attachment texture for DX11 Fixed the CameraDepthAttachment Texture for Dx11, which was rendering as black earlier. The issue is the Camera Depth Attachment texture is referring to the depth buffer and when the shader is trying to access the texture the texture is black. This mainly happens because of 2 reasons: 1. When we try to set the active depth buffer texture, the code unbinds the texture(passes null value to PSSetShaderResources) 2. As the depth buffer is active, we need to set OMSetRenderTargets for depth as null to be able to access it. Bug: https://jira.unity3d.com/browse/UUM-64316 Port: https://jira.unity3d.com/browse/UUM-85190 --- .../Runtime/UniversalRenderer.cs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index d3c0eb53d76..1c90fd6aeeb 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -152,6 +152,7 @@ protected internal override bool SupportsMotionVectors() RTHandle m_ColorFrontBuffer; internal RTHandle m_ActiveCameraDepthAttachment; internal RTHandle m_CameraDepthAttachment; + internal RTHandle m_CameraDepthAttachment_D3d_11; RTHandle m_TargetColorHandle; RTHandle m_TargetDepthHandle; internal RTHandle m_DepthTexture; @@ -461,6 +462,7 @@ internal override void ReleaseRenderTargets() m_AdditionalLightsShadowCasterPass?.Dispose(); m_CameraDepthAttachment?.Release(); + m_CameraDepthAttachment_D3d_11?.Release(); m_DepthTexture?.Release(); m_NormalsTexture?.Release(); m_DecalLayersTexture?.Release(); @@ -1008,6 +1010,9 @@ public override void Setup(ScriptableRenderContext context, ref RenderingData re // Assign camera targets (color and depth) ConfigureCameraTarget(m_ActiveCameraColorAttachment, m_ActiveCameraDepthAttachment); + if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D11) + cmd.CopyTexture(m_CameraDepthAttachment, m_CameraDepthAttachment_D3d_11); + bool hasPassesAfterPostProcessing = activeRenderPassQueue.Find(x => x.renderPassEvent == RenderPassEvent.AfterRenderingPostProcessing) != null; if (mainLightShadows) @@ -1840,7 +1845,14 @@ void CreateCameraRenderTarget(ScriptableRenderContext context, ref RenderTexture depthDescriptor.graphicsFormat = GraphicsFormat.None; depthDescriptor.depthStencilFormat = cameraDepthAttachmentFormat; RenderingUtils.ReAllocateHandleIfNeeded(ref m_CameraDepthAttachment, depthDescriptor, FilterMode.Point, TextureWrapMode.Clamp, name: "_CameraDepthAttachment"); - cmd.SetGlobalTexture(m_CameraDepthAttachment.name, m_CameraDepthAttachment.nameID); + + if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Direct3D11) + { + RenderingUtils.ReAllocateHandleIfNeeded(ref m_CameraDepthAttachment_D3d_11, depthDescriptor, FilterMode.Point, TextureWrapMode.Clamp, name: "_CameraDepthAttachment_Temp"); + cmd.SetGlobalTexture(m_CameraDepthAttachment.name, m_CameraDepthAttachment_D3d_11.nameID); + } + else + cmd.SetGlobalTexture(m_CameraDepthAttachment.name, m_CameraDepthAttachment.nameID); // update the descriptor to match the depth attachment descriptor.depthStencilFormat = depthDescriptor.depthStencilFormat; From ba3c73c42921c8d5dfb1af5a5d341c95baa6c482 Mon Sep 17 00:00:00 2001 From: Jaeho Lee Date: Wed, 13 Nov 2024 08:10:46 +0000 Subject: [PATCH 30/85] [UUM-67179] fixed the crash happening when APV tries to stream in block data JIRA: [UUM-67179](https://jira.unity3d.com/browse/UUM-67179) This PR is to fix the crash case caused by APV's file streaming for block data writes to the output NativeArray buffer position beyond its fixed range. Although the reason for repro project's two different counts is unclear, the issue was successfully avoided by using the smaller count among two counts instead of using the streamable count, direcrtly. My initial fix try was to exit the process function at the beginning when the array count and the streamable count are not identical, but as there were cases where cell reads succeeded despite of count discrepancy the direction was changed to have the current status. One thing to note is that after fixing this the cell in position (2, 0, 0) in the repro project kept retrying to be streamed in because two streaming processes for `cellDataStreamingRequest` and `cellSharedDataStreamingRequest` were failed while reading target files with out-of-range-ing offset. I could add early-out pre conditions for the out-of-range cases, but decided not to commit it as it looks like another issue and maybe there is an intention for repetitive read try. --- .../Lighting/ProbeVolume/ProbeReferenceVolume.Streaming.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolume.Streaming.cs b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolume.Streaming.cs index abb57ee39f4..37613e48df2 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolume.Streaming.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeReferenceVolume.Streaming.cs @@ -1231,7 +1231,7 @@ unsafe bool ProcessDiskStreamingRequest(CellStreamingRequest request) var brickDataAsset = m_CurrentBakingSet.cellBricksDataAsset; cellStreamingDesc = brickDataAsset.streamableCellDescs[cellIndex]; - request.brickStreamingRequest.AddReadCommand(cellStreamingDesc.offset, brickDataAsset.elementSize * cellStreamingDesc.elementCount, (byte*)cellData.bricks.GetUnsafePtr()); + request.brickStreamingRequest.AddReadCommand(cellStreamingDesc.offset, brickDataAsset.elementSize * Mathf.Min(cellStreamingDesc.elementCount, cellDesc.bricksCount), (byte*)cellData.bricks.GetUnsafePtr()); request.brickStreamingRequest.RunCommands(brickDataAsset.OpenFile()); // Support Data From 0cee6f1ef01ea7be73ce089b793f3b673af61adb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Chapelain?= Date: Wed, 13 Nov 2024 08:11:31 +0000 Subject: [PATCH 31/85] [HDRP] Better material creation for PBR Sky Custom Material Currently, the only way to use the default shader graph in the HDRP package for custom PBR Sky is to use the menu (that no one knows about). ![image](https://media.github.cds.internal.unity3d.com/user/1764/files/2beff507-dad9-40c0-bf69-468041483d5a) And the default material is in the HDRP package making it readonly. Currently : ![image](https://media.github.cds.internal.unity3d.com/user/1764/files/35eb2961-ba4b-4331-be82-c43cc185c112) After the PR: What this PR does is add the pattern that we already have elsewhere (custom pass, water surface, water decal) to basically create a NEW material based on a shader graph that is in the HDRP package using the NEW button. ![image](https://media.github.cds.internal.unity3d.com/user/1764/files/11ad1dab-19c2-4459-9618-f777b25a93b7) After clicking on new, a new folder is created using the name of the current scene, assign it and highlight it. This is the material created, it should help users not knowing how to use the PBR Sky master stack by default by not starting from an empty master stack. ![image](https://media.github.cds.internal.unity3d.com/user/1764/files/b79f107d-7b51-42c0-a838-5396d1f9e71a) This PR also fix a minor discrepancy, between setting no material and overidding the material property and setting no material and not overriding the property. The two gave 2 different render whereas they should have been the same. (cf [commit](https://github.cds.internal.unity3d.com/unity/unity/pull/56435/commits/df0fc3e234358fdbf5210fcaf00b369baada6da1)) --- .../PhysicallyBasedSkyEditor.cs | 54 ++++++++++++++++++- .../PhysicallyBasedSkyRenderer.cs | 2 +- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Sky/PhysicallyBasedSky/PhysicallyBasedSkyEditor.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Sky/PhysicallyBasedSky/PhysicallyBasedSkyEditor.cs index 635c6296ee4..6ec7c5a1fe0 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Sky/PhysicallyBasedSky/PhysicallyBasedSkyEditor.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Sky/PhysicallyBasedSky/PhysicallyBasedSkyEditor.cs @@ -1,5 +1,5 @@ -using UnityEditor.Rendering; using UnityEngine; +using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; namespace UnityEditor.Rendering.HighDefinition @@ -47,6 +47,11 @@ class PhysicallyBasedSkyEditor : SkySettingsEditor GUIContent[] m_ModelTypes = { new GUIContent("Earth (Simple)"), new GUIContent("Earth (Advanced)"), new GUIContent("Custom Planet") }; int[] m_ModelTypeValues = { (int)PhysicallyBasedSkyModel.EarthSimple, (int)PhysicallyBasedSkyModel.EarthAdvanced, (int)PhysicallyBasedSkyModel.Custom }; + static public readonly GUIContent k_NewMaterialButtonText = EditorGUIUtility.TrTextContent("New", "Creates a new Physically Based Sky Material asset template."); + static public readonly GUIContent k_CustomMaterial = EditorGUIUtility.TrTextContent("Material", "Sets a custom material that will be used to render the PBR Sky. If set to None, the default Rendering Mode is used."); + + static public readonly string k_NewSkyMaterialText = "Physically Based Sky"; + public override void OnEnable() { base.OnEnable(); @@ -130,7 +135,10 @@ public override void OnInspectorGUI() if (hasMaterial) { using (new IndentLevelScope()) - PropertyField(m_Material); + { + MaterialFieldWithButton(m_Material, k_CustomMaterial); + } + } DrawHeader("Planet"); @@ -200,5 +208,47 @@ public override void OnInspectorGUI() base.CommonSkySettingsGUI(); } + + internal void MaterialFieldWithButton(SerializedDataParameter prop, GUIContent label) + { + using (var scope = new OverridablePropertyScope(prop, prop.displayName, this)) + { + if (!scope.displayed) + return; + + const int k_NewFieldWidth = 70; + var rect = EditorGUILayout.GetControlRect(); + rect.xMax -= k_NewFieldWidth + 2; + + var newFieldRect = rect; + newFieldRect.x = rect.xMax + 2; + newFieldRect.width = k_NewFieldWidth; + + EditorGUI.PropertyField(rect, prop.value, label); + + if (GUI.Button(newFieldRect, k_NewMaterialButtonText)) + { + string materialName = "New " + k_NewSkyMaterialText + ".mat"; + var materialIcon = AssetPreview.GetMiniTypeThumbnail(typeof(Material)); + var action = ScriptableObject.CreateInstance(); + action.physicallyBasedSky = target as PhysicallyBasedSky; + ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, action, materialName, materialIcon, null); + } + } + } + } + + class DoCreatePBRSkyDefaultMaterial : ProjectWindowCallback.EndNameEditAction + { + public PhysicallyBasedSky physicallyBasedSky; + public Material material = null; + public override void Action(int instanceId, string pathName, string resourceFile) + { + var shader = GraphicsSettings.GetRenderPipelineSettings().pbrSkyMaterial; + material = new Material(shader); + AssetDatabase.CreateAsset(material, pathName); + ProjectWindowUtil.ShowCreatedAsset(material); + physicallyBasedSky.material.value = material; + } } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/PhysicallyBasedSky/PhysicallyBasedSkyRenderer.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/PhysicallyBasedSky/PhysicallyBasedSkyRenderer.cs index 3a711f5c921..1b00ab03e71 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/PhysicallyBasedSky/PhysicallyBasedSkyRenderer.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/PhysicallyBasedSky/PhysicallyBasedSkyRenderer.cs @@ -562,7 +562,7 @@ public override void RenderSky(BuiltinSkyParameters builtinParams, bool renderFo cameraPosPS -= (upAltitude.w - 1.0f) * (Vector3)upAltitude.xyz; bool simpleEarthMode = pbrSky.type.value == PhysicallyBasedSkyModel.EarthSimple; - bool customMaterial = pbrSky.renderingMode.value == PhysicallyBasedSky.RenderingMode.Material && pbrSky.material.value != null; + bool customMaterial = pbrSky.renderingMode.value == PhysicallyBasedSky.RenderingMode.Material && pbrSky.material.value != null && pbrSky.material.overrideState; var material = customMaterial ? pbrSky.material.value : m_PbrSkyMaterial; // Common material properties From 64cc7a88b11581812a28153afbe7bb1d0fc34ed9 Mon Sep 17 00:00:00 2001 From: Charles-Frederik Hollemeersch Date: Wed, 13 Nov 2024 08:11:57 +0000 Subject: [PATCH 32/85] Fix the RenderGraphPass clear function not working correctly. Fixes https://jira.unity3d.com/browse/UUM-85333 --- .../Runtime/RenderGraph/RenderGraphPass.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs index 093e6d82437..c2d1f933887 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs @@ -96,6 +96,10 @@ public void Clear() colorBufferMaxIndex = -1; fragmentInputMaxIndex = -1; randomAccessResourceMaxIndex = -1; + + // We do not need to clear colorBufferAccess and fragmentInputAccess as we have the colorBufferMaxIndex and fragmentInputMaxIndex + // which are reset above so we only clear depthAccess here. + depthAccess = default(TextureAccess); } // Check if the pass has any render targets set-up From e6b96438c2d44db84ea6c443b6dd9d71b7b9c17f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elvar=20=C3=96rn=20Unn=C3=BE=C3=B3rsson?= Date: Wed, 13 Nov 2024 08:12:14 +0000 Subject: [PATCH 33/85] [URP] Fixing an issue where Transparent Receive Shadows toggle wasn't working (UUM-79471) Fixes UUM-79471. The issue is that for Main Light Shadows, it changes the shadow fade to accomplish the goal of making transparent objects not receive shadows. While Additional Light Shadows do this by setting the shadow strength to 0 and marking every light as a non shadow casting. This discrepancy causes issue for users making custom shaders that don't use the Shadow Fade for main light shadows. To fix the issue, shadow strength is now set to 0 for the transparent passes if the toggle is disabled (so transparent objects should not receive shadows). This PR also cleans up the shadow codebase a little bit, similar to #56069 --- .../AdditionalLightsShadowCasterPass.cs | 189 ++++++++---------- .../Passes/MainLightShadowCasterPass.cs | 36 ++-- .../Runtime/Passes/TransparentSettingsPass.cs | 4 +- .../ShaderLibrary/Shadows.hlsl | 4 +- 4 files changed, 102 insertions(+), 131 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs index 1f9940bca35..8f2b5f0861d 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/AdditionalLightsShadowCasterPass.cs @@ -10,57 +10,80 @@ namespace UnityEngine.Rendering.Universal.Internal /// public partial class AdditionalLightsShadowCasterPass : ScriptableRenderPass { - private static class AdditionalShadowsConstantBuffer - { - public static int _AdditionalLightsWorldToShadow; - public static int _AdditionalShadowParams; - public static int _AdditionalShadowOffset0; - public static int _AdditionalShadowOffset1; - public static int _AdditionalShadowFadeParams; - public static int _AdditionalShadowmapSize; - } - - ///

- /// x is used in RenderAdditionalShadowMapAtlas to skip shadow map rendering for non-shadow-casting lights. - /// w is perLightFirstShadowSliceIndex, used in Lighting shader to find if Additional light casts shadows. - /// - readonly static Vector4 c_DefaultShadowParams = new Vector4(0, 0, 0, -1); - - static int m_AdditionalLightsWorldToShadow_SSBO; - static int m_AdditionalShadowParams_SSBO; - bool m_UseStructuredBuffer; - - const int k_ShadowmapBufferBits = 16; - private int m_AdditionalLightsShadowmapID; + // Internal internal RTHandle m_AdditionalLightsShadowmapHandle; + internal static Vector4[] s_EmptyAdditionalLightIndexToShadowParams = null; + // Private + private int renderTargetWidth; + private int renderTargetHeight; private bool m_CreateEmptyShadowmap; - private bool m_EmptyShadowmapNeedsClear = false; + private bool m_EmptyShadowmapNeedsClear; + private bool m_IssuedMessageAboutShadowSlicesTooMany; + private bool m_IssuedMessageAboutShadowMapsRescale; + private bool m_IssuedMessageAboutShadowMapsTooBig; + private bool m_IssuedMessageAboutRemovedShadowSlices; + private static bool m_IssuedMessageAboutPointLightHardShadowResolutionTooSmall; + private static bool m_IssuedMessageAboutPointLightSoftShadowResolutionTooSmall; + private readonly bool m_UseStructuredBuffer; + private float m_MaxShadowDistanceSq; + private float m_CascadeBorder; + private PassData m_PassData; private RTHandle m_EmptyAdditionalLightShadowmapTexture; + private bool[] m_VisibleLightIndexToIsCastingShadows; // maps a "global" visible light index (index to lightData.visibleLights) to a shadow casting state (Is the light casting shadows or not?) + private short[] m_VisibleLightIndexToAdditionalLightIndex; // maps a "global" visible light index (index to lightData.visibleLights) to an "additional light index" (index to arrays _AdditionalLightsPosition, _AdditionalShadowParams, ...), or -1 if it is not an additional light (i.e if it is the main light) + private short[] m_AdditionalLightIndexToVisibleLightIndex; // maps additional light index (index to arrays _AdditionalLightsPosition, _AdditionalShadowParams, ...) to its "global" visible light index (index to lightData.visibleLights) + private Vector4[] m_AdditionalLightIndexToShadowParams; // per-additional-light shadow info passed to the lighting shader (x: shadowStrength, y: softShadows, z: light type, w: perLightFirstShadowSliceIndex) + private List m_GlobalShadowSliceIndexToPerLightShadowSliceIndex = new(); // For each shadow slice, store its "per-light shadow slice index" in the punctual light that casts it (can be up to 5 for point lights) + private List m_ShadowSliceToAdditionalLightIndex = new (); // For each shadow slice, store the "additional light indices" of the punctual light that casts it + private Matrix4x4[] m_AdditionalLightShadowSliceIndexTo_WorldShadowMatrix; // per-shadow-slice info passed to the lighting shader + private ShadowSliceData[] m_AdditionalLightsShadowSlices; + private Dictionary m_ShadowRequestsHashes = new(); // used to keep track of changes in the shadow requests and shadow atlas configuration (per camera) + private ProfilingSampler m_ProfilingSetupSampler = new ProfilingSampler("Setup Additional Shadows"); + private RenderTextureDescriptor m_AdditionalLightShadowDescriptor; + + // Constants and Statics + private const int k_ShadowmapBufferBits = 16; private const int k_EmptyShadowMapDimensions = 1; private const string k_AdditionalLightShadowMapTextureName = "_AdditionalLightsShadowmapTexture"; private const string k_EmptyAdditionalLightShadowMapTextureName = "_EmptyAdditionalLightShadowmapTexture"; - internal static Vector4[] s_EmptyAdditionalLightIndexToShadowParams = null; - - float m_MaxShadowDistanceSq; - float m_CascadeBorder; - - ShadowSliceData[] m_AdditionalLightsShadowSlices = null; - - bool[] m_VisibleLightIndexToIsCastingShadows = null; // maps a "global" visible light index (index to lightData.visibleLights) to a shadow casting state (Is the light casting shadows or not?) - short[] m_VisibleLightIndexToAdditionalLightIndex = null; // maps a "global" visible light index (index to lightData.visibleLights) to an "additional light index" (index to arrays _AdditionalLightsPosition, _AdditionalShadowParams, ...), or -1 if it is not an additional light (i.e if it is the main light) - short[] m_AdditionalLightIndexToVisibleLightIndex = null; // maps additional light index (index to arrays _AdditionalLightsPosition, _AdditionalShadowParams, ...) to its "global" visible light index (index to lightData.visibleLights) - Vector4[] m_AdditionalLightIndexToShadowParams = null; // per-additional-light shadow info passed to the lighting shader (x: shadowStrength, y: softShadows, z: light type, w: perLightFirstShadowSliceIndex) - Matrix4x4[] m_AdditionalLightShadowSliceIndexTo_WorldShadowMatrix = null; // per-shadow-slice info passed to the lighting shader - List m_ShadowSliceToAdditionalLightIndex = new (); // For each shadow slice, store the "additional light indices" of the punctual light that casts it - List m_GlobalShadowSliceIndexToPerLightShadowSliceIndex = new(); // For each shadow slice, store its "per-light shadow slice index" in the punctual light that casts it (can be up to 5 for point lights) + // x is used in RenderAdditionalShadowMapAtlas to skip shadow map rendering for non-shadow-casting lights. + // w is perLightFirstShadowSliceIndex, used in Lighting shader to find if Additional light casts shadows. + readonly static Vector4 c_DefaultShadowParams = new Vector4(0, 0, 0, -1); + // Magic numbers used to identify light type when rendering shadow receiver. + // Keep in sync with AdditionalLightRealtimeShadow code in com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl + private const float LightTypeIdentifierInShadowParams_Spot = 0; + private const float LightTypeIdentifierInShadowParams_Point = 1; - int renderTargetWidth; - int renderTargetHeight; - private RenderTextureDescriptor m_AdditionalLightShadowDescriptor; + // Classes + private static class AdditionalShadowsConstantBuffer + { + public static int _AdditionalLightsWorldToShadow = Shader.PropertyToID("_AdditionalLightsWorldToShadow"); + public static int _AdditionalShadowParams = Shader.PropertyToID("_AdditionalShadowParams"); + public static int _AdditionalShadowOffset0 = Shader.PropertyToID("_AdditionalShadowOffset0"); + public static int _AdditionalShadowOffset1 = Shader.PropertyToID("_AdditionalShadowOffset1"); + public static int _AdditionalShadowFadeParams = Shader.PropertyToID("_AdditionalShadowFadeParams"); + public static int _AdditionalShadowmapSize = Shader.PropertyToID("_AdditionalShadowmapSize"); + public static int _AdditionalLightsShadowmapID = Shader.PropertyToID(k_AdditionalLightShadowMapTextureName); + public static int _AdditionalLightsWorldToShadow_SSBO = Shader.PropertyToID("_AdditionalLightsWorldToShadow_SSBO"); + public static int _AdditionalShadowParams_SSBO = Shader.PropertyToID("_AdditionalShadowParams_SSBO"); + } - ProfilingSampler m_ProfilingSetupSampler = new ProfilingSampler("Setup Additional Shadows"); - private PassData m_PassData; + private class PassData + { + internal int shadowmapID; + internal bool emptyShadowmap; + internal bool useStructuredBuffer; + internal bool stripShadowsOffVariants; + internal Matrix4x4 viewMatrix; + internal Vector2Int allocatedShadowAtlasSize; + internal TextureHandle shadowmapTexture; + internal RendererList[] shadowRendererLists = new RendererList[ShaderOptions.k_MaxVisibleLightCountDesktop]; + internal RendererListHandle[] shadowRendererListsHdl = new RendererListHandle[ShaderOptions.k_MaxVisibleLightCountDesktop]; + internal UniversalLightData lightData; + internal UniversalShadowData shadowData; + internal AdditionalLightsShadowCasterPass pass; + } /// /// Creates a new AdditionalLightsShadowCasterPass instance. @@ -73,17 +96,6 @@ public AdditionalLightsShadowCasterPass(RenderPassEvent evt) renderPassEvent = evt; m_PassData = new PassData(); - AdditionalShadowsConstantBuffer._AdditionalLightsWorldToShadow = Shader.PropertyToID("_AdditionalLightsWorldToShadow"); - AdditionalShadowsConstantBuffer._AdditionalShadowParams = Shader.PropertyToID("_AdditionalShadowParams"); - AdditionalShadowsConstantBuffer._AdditionalShadowOffset0 = Shader.PropertyToID("_AdditionalShadowOffset0"); - AdditionalShadowsConstantBuffer._AdditionalShadowOffset1 = Shader.PropertyToID("_AdditionalShadowOffset1"); - AdditionalShadowsConstantBuffer._AdditionalShadowFadeParams = Shader.PropertyToID("_AdditionalShadowFadeParams"); - AdditionalShadowsConstantBuffer._AdditionalShadowmapSize = Shader.PropertyToID("_AdditionalShadowmapSize"); - m_AdditionalLightsShadowmapID = Shader.PropertyToID(k_AdditionalLightShadowMapTextureName); - - m_AdditionalLightsWorldToShadow_SSBO = Shader.PropertyToID("_AdditionalLightsWorldToShadow_SSBO"); - m_AdditionalShadowParams_SSBO = Shader.PropertyToID("_AdditionalShadowParams_SSBO"); - m_UseStructuredBuffer = RenderingUtils.useStructuredBuffer; // Preallocated a fixed size. CommandBuffer.SetGlobal* does allow this data to grow. @@ -104,11 +116,9 @@ public AdditionalLightsShadowCasterPass(RenderPassEvent evt) for (int i = 0; i < s_EmptyAdditionalLightIndexToShadowParams.Length; i++) s_EmptyAdditionalLightIndexToShadowParams[i] = c_DefaultShadowParams; + // Uniform buffers are faster on some platforms, but they have stricter size limitations if (!m_UseStructuredBuffer) - { - // Uniform buffers are faster on some platforms, but they have stricter size limitations m_AdditionalLightShadowSliceIndexTo_WorldShadowMatrix = new Matrix4x4[maxVisibleAdditionalLights]; - } m_EmptyShadowmapNeedsClear = true; } @@ -122,12 +132,6 @@ public void Dispose() m_EmptyAdditionalLightShadowmapTexture?.Release(); } - // Magic numbers used to identify light type when rendering shadow receiver. - // Keep in sync with AdditionalLightRealtimeShadow code in com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl - private const float LightTypeIdentifierInShadowParams_Spot = 0; - private const float LightTypeIdentifierInShadowParams_Point = 1; - - // Returns the guard angle that must be added to a frustum angle covering a projection map of resolution sliceResolutionInTexels, // in order to also cover a guard band of size guardBandSizeInTexels around the projection map. // Formula illustrated in https://i.ibb.co/wpW5Mnf/Calc-Guard-Angle.png @@ -152,7 +156,6 @@ internal static float CalcGuardAngle(float frustumAngleInDegrees, float guardBan return guardAngleInDegree; } - // Returns the guard angle that must be added to a point light shadow face frustum angle // in order to avoid shadows missing at the boundaries between cube faces. internal static float GetPointLightShadowFrustumFovBiasInDegrees(int shadowSliceResolution, bool shadowFiltering) @@ -166,7 +169,6 @@ internal static float GetPointLightShadowFrustumFovBiasInDegrees(int shadowSlice return fudgeFactor * CalcGuardAngle(90, shadowFiltering ? 5 : 1, shadowSliceResolution); #endif - float fovBias = 4.00f; // Empirical value found to remove gaps between point light shadow faces in test scenes. @@ -229,16 +231,7 @@ internal static float GetPointLightShadowFrustumFovBiasInDegrees(int shadowSlice return fovBias; } - private bool m_IssuedMessageAboutShadowSlicesTooMany = false; - private bool m_IssuedMessageAboutShadowMapsRescale = false; - private bool m_IssuedMessageAboutShadowMapsTooBig = false; - private bool m_IssuedMessageAboutRemovedShadowSlices = false; - private static bool m_IssuedMessageAboutPointLightHardShadowResolutionTooSmall = false; - private static bool m_IssuedMessageAboutPointLightSoftShadowResolutionTooSmall = false; - - Dictionary m_ShadowRequestsHashes = new Dictionary(); // used to keep track of changes in the shadow requests and shadow atlas configuration (per camera) - - ulong ResolutionLog2ForHash(int resolution) + private ulong ResolutionLog2ForHash(int resolution) { switch (resolution) { @@ -250,7 +243,7 @@ ulong ResolutionLog2ForHash(int resolution) return 08; } - ulong ComputeShadowRequestHash(UniversalLightData lightData, UniversalShadowData shadowData) + private ulong ComputeShadowRequestHash(UniversalLightData lightData, UniversalShadowData shadowData) { ulong numberOfShadowedPointLights = 0; ulong numberOfSoftShadowedLights = 0; @@ -605,7 +598,7 @@ private void UpdateTextureDescriptorIfNeeded() } } - bool SetupForEmptyRendering(bool stripShadowsOffVariants, UniversalShadowData shadowData) + private bool SetupForEmptyRendering(bool stripShadowsOffVariants, UniversalShadowData shadowData) { if (!stripShadowsOffVariants) return false; @@ -662,7 +655,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData if (m_CreateEmptyShadowmap) { SetEmptyAdditionalShadowmapAtlas(CommandBufferHelpers.GetRasterCommandBuffer(renderingData.commandBuffer)); - universalRenderingData.commandBuffer.SetGlobalTexture(m_AdditionalLightsShadowmapID, m_EmptyAdditionalLightShadowmapTexture); + universalRenderingData.commandBuffer.SetGlobalTexture(AdditionalShadowsConstantBuffer._AdditionalLightsShadowmapID, m_EmptyAdditionalLightShadowmapTexture); return; } @@ -676,7 +669,7 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData m_PassData.allocatedShadowAtlasSize = m_AdditionalLightsShadowmapHandle.referenceSize; InitRendererLists(ref universalRenderingData.cullResults, ref m_PassData, context, default(RenderGraph), false); RenderAdditionalShadowmapAtlas(CommandBufferHelpers.GetRasterCommandBuffer(universalRenderingData.commandBuffer), ref m_PassData, false); - universalRenderingData.commandBuffer.SetGlobalTexture(m_AdditionalLightsShadowmapID, m_AdditionalLightsShadowmapHandle.nameID); + universalRenderingData.commandBuffer.SetGlobalTexture(AdditionalShadowsConstantBuffer._AdditionalLightsShadowmapID, m_AdditionalLightsShadowmapHandle.nameID); } /// @@ -692,13 +685,13 @@ public int GetShadowLightIndexFromLightIndex(int visibleLightIndex) return m_VisibleLightIndexToAdditionalLightIndex[visibleLightIndex]; } - void Clear() + private void Clear() { m_ShadowSliceToAdditionalLightIndex.Clear(); m_GlobalShadowSliceIndexToPerLightShadowSliceIndex.Clear(); } - void SetEmptyAdditionalShadowmapAtlas(RasterCommandBuffer cmd) + private void SetEmptyAdditionalShadowmapAtlas(RasterCommandBuffer cmd) { cmd.EnableKeyword(ShaderGlobalKeywords.AdditionalLightShadows); SetEmptyAdditionalLightShadowParams(cmd, m_AdditionalLightIndexToShadowParams); @@ -710,7 +703,7 @@ internal static void SetEmptyAdditionalLightShadowParams(RasterCommandBuffer cmd { ComputeBuffer shadowParamsBuffer = ShaderData.instance.GetAdditionalLightShadowParamsStructuredBuffer(lightIndexToShadowParams.Length); shadowParamsBuffer.SetData(lightIndexToShadowParams); - cmd.SetGlobalBuffer(m_AdditionalShadowParams_SSBO, shadowParamsBuffer); + cmd.SetGlobalBuffer(AdditionalShadowsConstantBuffer._AdditionalShadowParams_SSBO, shadowParamsBuffer); } else { @@ -718,7 +711,7 @@ internal static void SetEmptyAdditionalLightShadowParams(RasterCommandBuffer cmd } } - void RenderAdditionalShadowmapAtlas(RasterCommandBuffer cmd, ref PassData data, bool useRenderGraph) + private void RenderAdditionalShadowmapAtlas(RasterCommandBuffer cmd, ref PassData data, bool useRenderGraph) { NativeArray visibleLights = data.lightData.visibleLights; @@ -796,19 +789,19 @@ void RenderAdditionalShadowmapAtlas(RasterCommandBuffer cmd, ref PassData data, } // Set constant buffer data that will be used during the lighting/shadowing pass - void SetupAdditionalLightsShadowReceiverConstants(RasterCommandBuffer cmd, Vector2Int allocatedShadowAtlasSize, bool useStructuredBuffer, bool softShadows) + private void SetupAdditionalLightsShadowReceiverConstants(RasterCommandBuffer cmd, Vector2Int allocatedShadowAtlasSize, bool useStructuredBuffer, bool softShadows) { if (useStructuredBuffer) { // per-light data var shadowParamsBuffer = ShaderData.instance.GetAdditionalLightShadowParamsStructuredBuffer(m_AdditionalLightIndexToShadowParams.Length); shadowParamsBuffer.SetData(m_AdditionalLightIndexToShadowParams); - cmd.SetGlobalBuffer(m_AdditionalShadowParams_SSBO, shadowParamsBuffer); + cmd.SetGlobalBuffer(AdditionalShadowsConstantBuffer._AdditionalShadowParams_SSBO, shadowParamsBuffer); // per-shadow-slice data var shadowSliceMatricesBuffer = ShaderData.instance.GetAdditionalLightShadowSliceMatricesStructuredBuffer(m_AdditionalLightShadowSliceIndexTo_WorldShadowMatrix.Length); shadowSliceMatricesBuffer.SetData(m_AdditionalLightShadowSliceIndexTo_WorldShadowMatrix); - cmd.SetGlobalBuffer(m_AdditionalLightsWorldToShadow_SSBO, shadowSliceMatricesBuffer); + cmd.SetGlobalBuffer(AdditionalShadowsConstantBuffer._AdditionalLightsWorldToShadow_SSBO, shadowSliceMatricesBuffer); } else { @@ -836,26 +829,6 @@ void SetupAdditionalLightsShadowReceiverConstants(RasterCommandBuffer cmd, Vecto } } - private class PassData - { - internal UniversalLightData lightData; - internal UniversalShadowData shadowData; - internal Matrix4x4 viewMatrix; - internal bool stripShadowsOffVariants; - - internal AdditionalLightsShadowCasterPass pass; - - internal TextureHandle shadowmapTexture; - internal int shadowmapID; - internal bool useStructuredBuffer; - internal Vector2Int allocatedShadowAtlasSize; - - internal bool emptyShadowmap; - - internal RendererListHandle[] shadowRendererListsHdl = new RendererListHandle[ShaderOptions.k_MaxVisibleLightCountDesktop]; - internal RendererList[] shadowRendererLists = new RendererList[ShaderOptions.k_MaxVisibleLightCountDesktop]; - } - private void InitPassData(ref PassData passData, UniversalCameraData cameraData, UniversalLightData lightData, UniversalShadowData shadowData) { passData.pass = this; @@ -866,11 +839,11 @@ private void InitPassData(ref PassData passData, UniversalCameraData cameraData, passData.stripShadowsOffVariants = cameraData.renderer.stripShadowsOffVariants; passData.emptyShadowmap = m_CreateEmptyShadowmap; - passData.shadowmapID = m_AdditionalLightsShadowmapID; + passData.shadowmapID = AdditionalShadowsConstantBuffer._AdditionalLightsShadowmapID; passData.useStructuredBuffer = m_UseStructuredBuffer; } - void InitEmptyPassData(ref PassData passData, UniversalCameraData cameraData, UniversalLightData lightData, UniversalShadowData shadowData) + private void InitEmptyPassData(ref PassData passData, UniversalCameraData cameraData, UniversalLightData lightData, UniversalShadowData shadowData) { passData.pass = this; @@ -879,7 +852,7 @@ void InitEmptyPassData(ref PassData passData, UniversalCameraData cameraData, Un passData.stripShadowsOffVariants = cameraData.renderer.stripShadowsOffVariants; passData.emptyShadowmap = m_CreateEmptyShadowmap; - passData.shadowmapID = m_AdditionalLightsShadowmapID; + passData.shadowmapID = AdditionalShadowsConstantBuffer._AdditionalLightsShadowmapID; } private void InitRendererLists(ref CullingResults cullResults, ref PassData passData, ScriptableRenderContext context, RenderGraph renderGraph, bool useRenderGraph) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs index 9a277381f54..0ad302b9652 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/MainLightShadowCasterPass.cs @@ -35,7 +35,7 @@ public class MainLightShadowCasterPass : ScriptableRenderPass private const int k_ShadowmapBufferBits = 16; private const string k_MainLightShadowMapTextureName = "_MainLightShadowmapTexture"; private const string k_EmptyMainLightShadowMapTextureName = "_EmptyMainLightShadowmapTexture"; - private static readonly Vector4 s_EmptyShadowParams = new (1, 0, 1, 0); + private static readonly Vector4 s_EmptyShadowParams = new (0f, 0f, 1f, 0f); private static readonly Vector4 s_EmptyShadowmapSize = new (k_EmptyShadowMapDimensions, 1f / k_EmptyShadowMapDimensions, k_EmptyShadowMapDimensions, k_EmptyShadowMapDimensions); // Classes @@ -54,6 +54,22 @@ private static class MainLightShadowConstantBuffer public static readonly int _MainLightShadowmapID = Shader.PropertyToID(k_MainLightShadowMapTextureName); } + private class PassData + { + internal UniversalRenderingData renderingData; + internal UniversalCameraData cameraData; + internal UniversalLightData lightData; + internal UniversalShadowData shadowData; + + internal MainLightShadowCasterPass pass; + + internal TextureHandle shadowmapTexture; + internal bool emptyShadowmap; + + internal RendererListHandle[] shadowRendererListsHandle = new RendererListHandle[k_MaxCascades]; + internal RendererList[] shadowRendererLists = new RendererList[k_MaxCascades]; + } + /// /// Creates a new MainLightShadowCasterPass instance. /// @@ -201,9 +217,7 @@ public override void Configure(CommandBuffer cmd, RenderTextureDescriptor camera m_EmptyShadowmapNeedsClear = true; if (!m_EmptyShadowmapNeedsClear) - { return; - } ConfigureTarget(m_EmptyMainLightShadowmapTexture); m_EmptyShadowmapNeedsClear = false; @@ -370,22 +384,6 @@ void SetupMainLightShadowReceiverConstants(RasterCommandBuffer cmd, ref VisibleL } } - private class PassData - { - internal UniversalRenderingData renderingData; - internal UniversalCameraData cameraData; - internal UniversalLightData lightData; - internal UniversalShadowData shadowData; - - internal MainLightShadowCasterPass pass; - - internal TextureHandle shadowmapTexture; - internal bool emptyShadowmap; - - internal RendererListHandle[] shadowRendererListsHandle = new RendererListHandle[k_MaxCascades]; - internal RendererList[] shadowRendererLists = new RendererList[k_MaxCascades]; - } - private void InitPassData( ref PassData passData, UniversalRenderingData renderingData, diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/TransparentSettingsPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/TransparentSettingsPass.cs index 85cfa3182e0..6a96fc30918 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/TransparentSettingsPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/TransparentSettingsPass.cs @@ -37,11 +37,11 @@ public override void Execute(ScriptableRenderContext context, ref RenderingData } public static void ExecutePass(RasterCommandBuffer cmd, bool shouldReceiveShadows) - { + { // This pass is only used when transparent objects should not // receive shadows using the setting on the URP Renderer. MainLightShadowCasterPass.SetEmptyMainLightShadowParams(cmd); - AdditionalLightsShadowCasterPass.SetEmptyAdditionalLightShadowParams(cmd, AdditionalLightsShadowCasterPass.s_EmptyAdditionalLightIndexToShadowParams); + AdditionalLightsShadowCasterPass.SetEmptyAdditionalLightShadowParams(cmd, AdditionalLightsShadowCasterPass.s_EmptyAdditionalLightIndexToShadowParams); } } } diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl index 38cf43e4091..1e9478a13e6 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl @@ -90,7 +90,7 @@ float4 _AdditionalShadowmapSize; // (xy: 1/width and 1/height, zw: width an // blocks bigger than 8kb while others have a 64kb max uniform block size. This number ensures size of buffer // AdditionalLightShadows stays reasonable. It also avoids shader compilation errors on SHADER_API_GLES30 // devices where max number of uniforms per shader GL_MAX_FRAGMENT_UNIFORM_VECTORS is low (224) -float4 _AdditionalShadowParams[MAX_VISIBLE_LIGHTS]; // Per-light data +float4 _AdditionalShadowParams[MAX_VISIBLE_LIGHTS]; // Per-light data: (x: shadowStrength, y: softShadows, z: light type (Spot: 0, Point: 1), w: perLightFirstShadowSliceIndex) float4x4 _AdditionalLightsWorldToShadow[MAX_VISIBLE_LIGHTS]; // Per-shadow-slice-data #endif #endif @@ -196,7 +196,7 @@ half4 GetAdditionalLightShadowParams(int lightIndex) #if USE_STRUCTURED_BUFFER_FOR_LIGHT_DATA results = _AdditionalShadowParams_SSBO[lightIndex]; #else - results = _AdditionalShadowParams[lightIndex]; + results = _AdditionalShadowParams[lightIndex]; // workaround: Avoid failing the graphics test using Terrain Shader on Android Vulkan when using dynamic branching for fog keywords. #if !SKIP_SHADOWS_LIGHT_INDEX_CHECK results.w = lightIndex < 0 ? -1 : results.w; From e6dfbc285b8ad181e9f15dc43a4e04efe7ec5636 Mon Sep 17 00:00:00 2001 From: Janice See Date: Thu, 14 Nov 2024 23:01:42 +0000 Subject: [PATCH 34/85] Multiview Per View Viewports Part 2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR includes fixes for corner cases previously identified in Phase 1 for the Multiview Per View Viewports (MVPVV) extension for Quest. The goal of Part 2 is to get MVPVV working with user-defined viewports and addressing corner cases. Again, MVPVV is only applied to the last render pass in each frame, when the eye textures are being rendered to. MVPVV allows developers to set multiple viewports and scissors per viewport. In the context of VR rendering, this enables the drivers to skip shader invocations (and rendering work) for screen areas outside of the user’s view (these are the nasal regions that the user can't see within the headset). Note that it only works with symmetric Field of View (FOV). We removed the "-enable-vulkan-mvpvv" argument and instead now rely on the XRBootConfig/MVPVV checkbox in the xr.sdk.oculus settings (only available in Unity 6.1 and above) to determine whether to execute the MVPVV paths in the engine. This change is also needed in xr.sdk.oculus to pass the two different XR scissors per eye and adds the MVPVV checkbox to Oculus Plugin Settings: https://github.cds.internal.unity3d.com/unity/xr.sdk.oculus/pull/644. These engine-side changes contained within this PR do not take effect without the plugin-side changes. --- .../com.unity.render-pipelines.core/Runtime/XR/XRSystem.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/XR/XRSystem.cs b/Packages/com.unity.render-pipelines.core/Runtime/XR/XRSystem.cs index 6be5c7b846d..91ad9d7744a 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/XR/XRSystem.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/XR/XRSystem.cs @@ -436,6 +436,9 @@ static bool CanUseSinglePass(Camera camera, XRDisplaySubsystem.XRRenderPass rend if (renderParam0.textureArraySlice != 0 || renderParam1.textureArraySlice != 1) return false; + if (renderParam0.viewport != renderParam1.viewport) + return false; + return true; } From e027ad30ff4ecb2446bc45f8880bc75637c69bb3 Mon Sep 17 00:00:00 2001 From: Brendan Duncan Date: Thu, 14 Nov 2024 23:02:26 +0000 Subject: [PATCH 35/85] Fix URP Lit shader for mobile WebGL Fix URP Lit shader for WebGL on Adreno GPUs. Some mobile browsers have a small GL_FRAGMENT_MAX_UNIFORM_VECTORS. The Galaxy Tab S8 has a limit of 256, while a desktop browser has 1024. This causes URP Lit shaders to fail to load on these devices, resulting in the object not rendering. Shadows.hlsl normally puts shadow values into a CBuffer, but it does not do this for GLES3, due to some devices having performance issues with large uniform buffers. We need to do this for WebGL to avoid the uniform vector limit, so the shader was updated to include WebGL for using a CBuffer for the shadow values. --- .../ShaderLibrary/API/GLES3.hlsl | 9 +++++++++ .../ShaderLibrary/Input.hlsl | 8 ++++---- .../ShaderLibrary/LightCookie/LightCookieInput.hlsl | 4 ++-- .../ShaderLibrary/Shadows.hlsl | 4 ++-- .../Generation/Targets/BuiltIn/ShaderLibrary/Input.hlsl | 4 ++-- .../Targets/BuiltIn/ShaderLibrary/Shadows.hlsl | 8 ++++---- 6 files changed, 23 insertions(+), 14 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/ShaderLibrary/API/GLES3.hlsl b/Packages/com.unity.render-pipelines.core/ShaderLibrary/API/GLES3.hlsl index b5e9d13e745..9dacf8d91c3 100644 --- a/Packages/com.unity.render-pipelines.core/ShaderLibrary/API/GLES3.hlsl +++ b/Packages/com.unity.render-pipelines.core/ShaderLibrary/API/GLES3.hlsl @@ -38,6 +38,15 @@ #define GLES3_1_AEP 0 #endif +// GLES3 causes a performance regression in some devices when using CBUFFER. +// WebGL needs to put LightShadow uniforms into a uniform buffer, +// despite being a GLES3 API. Some mobile devices, such as Adreno GPUs, +// have a small GL_MAX_FRAGMENT_UNIFORM_VECTORS limit, causing Lit shaders +// to fail on those devices. https://jira.unity3d.com/browse/UUM-87232 +#if !defined(UNITY_PLATFORM_WEBGL) +#define LIGHT_SHADOWS_NO_CBUFFER +#endif + // Initialize arbitrary structure with zero values. // Do not exist on some platform, in this case we need to have a standard name that call a function that will initialize all parameters to 0 #define ZERO_INITIALIZE(type, name) name = (type)0; diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl index 51980f231c1..e584771b1eb 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl @@ -163,7 +163,7 @@ StructuredBuffer _AdditionalLightsBuffer; StructuredBuffer _AdditionalLightsIndices; #else // GLES3 causes a performance regression in some devices when using CBUFFER. -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_START(AdditionalLights) #endif float4 _AdditionalLightsPosition[MAX_VISIBLE_LIGHTS]; @@ -173,7 +173,7 @@ half4 _AdditionalLightsAttenuation[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsSpotDir[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsOcclusionProbes[MAX_VISIBLE_LIGHTS]; float _AdditionalLightsLayerMasks[MAX_VISIBLE_LIGHTS]; // we want uint[] but Unity api does not support it. -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_END #endif #endif @@ -193,14 +193,14 @@ float urp_ReflProbes_Count; // 2023.3 Deprecated. This is for backwards compatibility. Remove in the future. #define samplerurp_ReflProbes_Atlas sampler_LinearClamp -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_START(urp_ReflectionProbeBuffer) #endif float4 urp_ReflProbes_BoxMax[MAX_REFLECTION_PROBES]; // w contains the blend distance float4 urp_ReflProbes_BoxMin[MAX_REFLECTION_PROBES]; // w contains the importance float4 urp_ReflProbes_ProbePosition[MAX_REFLECTION_PROBES]; // w is positive for box projection, |w| is max mip level float4 urp_ReflProbes_MipScaleOffset[MAX_REFLECTION_PROBES * 7]; -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_END #endif diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/LightCookie/LightCookieInput.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/LightCookie/LightCookieInput.hlsl index 3d29e8b73a4..7f79825ddc5 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/LightCookie/LightCookieInput.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/LightCookie/LightCookieInput.hlsl @@ -13,7 +13,7 @@ SAMPLER(sampler_MainLightCookieTexture); // Buffers // GLES3 causes a performance regression in some devices when using CBUFFER. -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_START(LightCookies) #endif float4x4 _MainLightWorldToLight; @@ -25,7 +25,7 @@ CBUFFER_START(LightCookies) float4 _AdditionalLightsCookieAtlasUVRects[MAX_VISIBLE_LIGHTS]; // (xy: uv size, zw: uv offset) float _AdditionalLightsLightTypes[MAX_VISIBLE_LIGHTS]; #endif -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_END #endif diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl index 1e9478a13e6..fb11f527707 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl @@ -60,7 +60,7 @@ TEXTURE2D_SHADOW(_AdditionalLightsShadowmapTexture); SAMPLER_CMP(sampler_LinearClampCompare); // GLES3 causes a performance regression in some devices when using CBUFFER. -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_START(LightShadows) #endif @@ -95,7 +95,7 @@ float4x4 _AdditionalLightsWorldToShadow[MAX_VISIBLE_LIGHTS]; // Per-shadow-s #endif #endif -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_END #endif diff --git a/Packages/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/Input.hlsl b/Packages/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/Input.hlsl index 403b06e6d1f..a80df578bd4 100644 --- a/Packages/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/Input.hlsl +++ b/Packages/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/Input.hlsl @@ -56,7 +56,7 @@ StructuredBuffer _AdditionalLightsBuffer; StructuredBuffer _AdditionalLightsIndices; #else // GLES3 causes a performance regression in some devices when using CBUFFER. -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_START(AdditionalLights) #endif float4 _AdditionalLightsPosition[MAX_VISIBLE_LIGHTS]; @@ -64,7 +64,7 @@ half4 _AdditionalLightsColor[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsAttenuation[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsSpotDir[MAX_VISIBLE_LIGHTS]; half4 _AdditionalLightsOcclusionProbes[MAX_VISIBLE_LIGHTS]; -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_END #endif #endif diff --git a/Packages/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/Shadows.hlsl b/Packages/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/Shadows.hlsl index 14a5d1678d6..fd146904f3c 100644 --- a/Packages/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/Shadows.hlsl +++ b/Packages/com.unity.shadergraph/Editor/Generation/Targets/BuiltIn/ShaderLibrary/Shadows.hlsl @@ -49,7 +49,7 @@ TEXTURE2D_SHADOW(_AdditionalLightsShadowmapTexture); SAMPLER_CMP(sampler_AdditionalLightsShadowmapTexture); // GLES3 causes a performance regression in some devices when using CBUFFER. -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_START(MainLightShadows) #endif // Last cascade is initialized with a no-op matrix. It always transforms @@ -67,7 +67,7 @@ half4 _MainLightShadowOffset2; half4 _MainLightShadowOffset3; half4 _MainLightShadowParams; // (x: shadowStrength, y: 1.0 if soft shadows, 0.0 otherwise, z: main light fade scale, w: main light fade bias) float4 _MainLightShadowmapSize; // (xy: 1/width and 1/height, zw: width and height) -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_END #endif @@ -98,7 +98,7 @@ float4 _AdditionalShadowmapSize; // (xy: 1/width and 1/height, zw: width an #endif // GLES3 causes a performance regression in some devices when using CBUFFER. -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_START(AdditionalLightShadows) #endif @@ -112,7 +112,7 @@ half4 _AdditionalShadowOffset3; half4 _AdditionalShadowFadeParams; // x: additional light fade scale, y: additional light fade bias, z: 0.0, w: 0.0) float4 _AdditionalShadowmapSize; // (xy: 1/width and 1/height, zw: width and height) -#ifndef SHADER_API_GLES3 +#ifndef LIGHT_SHADOWS_NO_CBUFFER CBUFFER_END #endif From 39a711c92ba3db07b4092ebe5f5a84ac283d294d Mon Sep 17 00:00:00 2001 From: Kirill Titov Date: Thu, 14 Nov 2024 23:02:31 +0000 Subject: [PATCH 36/85] [SRPF] Fixed key duplication exception for Render Grah Viewer This [PR](https://github.cds.internal.unity3d.com/unity/unity/pull/53445/files#diff-6ce277d3b9e2d947963212a0dd41c0a62ab89b515e31e27534797fc527eb49d4R214-R215) introduced a regression by replacing TryAdd to Add in this method. --- .../Runtime/RenderGraph/RenderGraph.DebugData.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.DebugData.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.DebugData.cs index e2ccb7922b0..a533c2b7870 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.DebugData.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.DebugData.cs @@ -212,7 +212,7 @@ void AddPassDebugMetadata(RenderGraphPass renderPass, string file, int line) if (renderPass.name == k_PassNameDebugIgnoreList[i]) return; - DebugData.s_PassScriptMetadata.Add(renderPass, new DebugData.PassScriptInfo { filePath = file, line = line }); + DebugData.s_PassScriptMetadata.TryAdd(renderPass, new DebugData.PassScriptInfo { filePath = file, line = line }); } [Conditional("UNITY_EDITOR")] From ace5e1955d8e6ca09d18ec1dbfb2863e859e0c01 Mon Sep 17 00:00:00 2001 From: Julien Amsellem Date: Fri, 15 Nov 2024 11:13:22 +0000 Subject: [PATCH 37/85] [VFX] Added support for CustomRenderTexture in our object property field Jira: UUM-85711 Steps to reproduce: 1. Create a Custom Render Texture, set it to 3D 2. Create a new VFX, Open It 3. Create a property field Texture3D 4. Try drag & drop texture in the property field Actual results: Nothing happens Expected results: The texture is assigned in the property field **After the fix** ![Unity_vf1xw6TwGd](https://media.github.cds.internal.unity3d.com/user/4003/files/78b91ab4-a036-4ef8-8cdc-479e725cb3ae) --- .../Editor/GraphView/Views/Properties/ObjectPropertyRM.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/Properties/ObjectPropertyRM.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/Properties/ObjectPropertyRM.cs index 8095a1f5ff5..d53e65e7fe5 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/Properties/ObjectPropertyRM.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/Properties/ObjectPropertyRM.cs @@ -59,7 +59,7 @@ public override void SetValue(object obj) private void OnValueChanged(ChangeEvent evt) { var newValueType = evt.newValue != null ? evt.newValue.GetType() : null; - if (newValueType != null && newValueType != m_Provider.portType && (newValueType != typeof(RenderTexture) || m_Provider.portType == typeof(CubemapArray))) + if (newValueType != null && newValueType != m_Provider.portType && (!typeof(RenderTexture).IsAssignableFrom(newValueType) || m_Provider.portType == typeof(CubemapArray))) { m_ObjectField.SetValueWithoutNotify(evt.previousValue); } From 1245ff99ed80df67ceb2621d39feb98e5450dd78 Mon Sep 17 00:00:00 2001 From: Jussi Knuuttila Date: Sat, 16 Nov 2024 00:13:16 +0000 Subject: [PATCH 38/85] Fix picking and outline for all BatchRendererGroup draw types Previously, the internal method `OnDrawCommand()` used for BatchRendererGroup picking and outline expected a pointer to a `BatchDrawCommand` (i.e. a regular direct draw), which it expects to be able to modify, at least for the material and mesh fields. When non-direct (procedural and/or indirect) draws were added to BRG, this code was not changed, and draws were simply skipped if they were not of the regular direct type. The existing `OnDrawCommand` implementations did not actually require the draw to be direct. Instead, they need to: * Select the Material the draw is performed with, which can differ from the original Material. * Skip over some draws, e.g. in case the draw is present in an ignore list. * Know the submesh index so it can be communicated to the shader. This PR modifies `OnDrawCommand` to accept an immutable `BatchDrawCommandRef` instead, which it can use to read any relevant data from the draw command. Instead of being able to modify the draw command (which was bug prone to begin with, since modifying some parts like the flags would not actually work), it now returns the `BatchMaterialID` the draw should be performed with, or a null material ID in case the draw should be skipped. The mesh can no longer be modified, but this was not actually being used in practice, and would not be well defined for procedural draw types. The code which needs to know the submesh index can now check if the draw actually has one, and default to zero in case it doesn't. --- .../Packages/com.unity.testing.brg/Scripts/RenderBRG.cs | 2 ++ .../Assets/SampleScenes/SimpleExample/SimpleBRGExample.cs | 1 + .../SampleScenes/SortingPositionsSplit/SortingPositionsSplit.cs | 1 + 3 files changed, 4 insertions(+) diff --git a/Tests/SRPTests/Packages/com.unity.testing.brg/Scripts/RenderBRG.cs b/Tests/SRPTests/Packages/com.unity.testing.brg/Scripts/RenderBRG.cs index 2adddd2b5cf..9f538ddeb69 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.brg/Scripts/RenderBRG.cs +++ b/Tests/SRPTests/Packages/com.unity.testing.brg/Scripts/RenderBRG.cs @@ -371,6 +371,7 @@ public void Execute() staticShadowCaster = false, allDepthSorted = false, }, + drawCommandsType = BatchDrawCommandType.Direct, }; outRange++; } @@ -506,6 +507,7 @@ private BatchCullingOutputDrawCommands OutputPickingDrawCommands(BatchCullingOut }; draws.drawRanges[0].drawCommandsBegin = 0; draws.drawRanges[0].drawCommandsCount = (uint)draws.drawCommandCount; + draws.drawRanges[0].drawCommandsType = BatchDrawCommandType.Direct; return draws; } diff --git a/Tests/SRPTests/Projects/BatchRendererGroup_URP/Assets/SampleScenes/SimpleExample/SimpleBRGExample.cs b/Tests/SRPTests/Projects/BatchRendererGroup_URP/Assets/SampleScenes/SimpleExample/SimpleBRGExample.cs index 1a98f175446..ccd29d36650 100644 --- a/Tests/SRPTests/Projects/BatchRendererGroup_URP/Assets/SampleScenes/SimpleExample/SimpleBRGExample.cs +++ b/Tests/SRPTests/Projects/BatchRendererGroup_URP/Assets/SampleScenes/SimpleExample/SimpleBRGExample.cs @@ -261,6 +261,7 @@ public unsafe JobHandle OnPerformCulling( // to the default zero values, except the renderingLayerMask which we have to set to all ones // so the instances will be drawn regardless of mask settings when rendering. drawCommands->drawRanges[0].filterSettings = new BatchFilterSettings { renderingLayerMask = 0xffffffff, }; + drawCommands->drawRanges[0].drawCommandsType = BatchDrawCommandType.Direct; // Finally, write the actual visible instance indices to their array. In a more complicated // implementation, this output would depend on what we determined to be visible, but in this example diff --git a/Tests/SRPTests/Projects/BatchRendererGroup_URP/Assets/SampleScenes/SortingPositionsSplit/SortingPositionsSplit.cs b/Tests/SRPTests/Projects/BatchRendererGroup_URP/Assets/SampleScenes/SortingPositionsSplit/SortingPositionsSplit.cs index a086f9c755f..3f84a644488 100644 --- a/Tests/SRPTests/Projects/BatchRendererGroup_URP/Assets/SampleScenes/SortingPositionsSplit/SortingPositionsSplit.cs +++ b/Tests/SRPTests/Projects/BatchRendererGroup_URP/Assets/SampleScenes/SortingPositionsSplit/SortingPositionsSplit.cs @@ -140,6 +140,7 @@ public unsafe JobHandle OnPerformCulling(BatchRendererGroup brg, BatchCullingCon drawCommands->drawRanges[0].drawCommandsBegin = 0; drawCommands->drawRanges[0].drawCommandsCount = 1; + drawCommands->drawRanges[0].drawCommandsType = BatchDrawCommandType.Direct; drawCommands->drawRanges[0].filterSettings = new BatchFilterSettings { renderingLayerMask = 0xffffffff, }; From f3b2f2eec02bfbff7b969a72b0447c58f79d4b67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Carr=C3=A8re?= Date: Sat, 16 Nov 2024 03:24:22 +0000 Subject: [PATCH 39/85] docg-5833-mask-and-current-water-decals - New pages on how to simulate water surface effects such as swell, agitation, and ripples using masks and decals. This includes guides on enabling water masks and water decals, adding foam and currents, and simulating these effects with precise control over specific regions. - Add descriptions and examples for using masks to control water surface effects like swell and agitation for different water types (oceans, rivers, pools). - Detailed steps for enabling specific water system features, including new shader graph properties that allow for complex water decal effects. - Clarify the use of terms like "simulation band" instead of "frequency band" to describe water effects, ensuring the documentation is aligned with the technical implementation of HDRP's water simulation. - Update various property descriptions in the water system settings, such as tessellation, foam intensity, and mask usage, to be more consistent and clear, particularly with regards to HDRP's handling of these effects. - Remove link to missing Environment limitations page. --- .../Documentation~/TableOfContents.md | 33 +++-- .../add-swell-agitation-or-ripples.md | 40 +++++ .../enable-mask-and-water-decals.md | 7 + ...-properties-related-to-the-water-system.md | 139 ++++++++++++++---- .../simulating-currents-with-water-decals.md | 42 ++++++ .../simulating-foam-or-ripples-with-masks.md | 10 ++ .../water-caustics-in-the-water-system.md | 2 +- .../Documentation~/water-debug-mode.md | 2 +- .../water-decals-masking-landing.md | 14 ++ 9 files changed, 247 insertions(+), 42 deletions(-) create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/add-swell-agitation-or-ripples.md create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/enable-mask-and-water-decals.md create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/simulating-currents-with-water-decals.md create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/simulating-foam-or-ripples-with-masks.md create mode 100644 Packages/com.unity.render-pipelines.high-definition/Documentation~/water-decals-masking-landing.md diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md index 61b6e0eba93..5e67adb9849 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md @@ -83,9 +83,9 @@ * [Configure the size and density of Adaptive Probe Volumes](probevolumes-changedensity.md) * [Bake multiple scenes together with Baking Sets](probevolumes-usebakingsets.md) * [Changing lighting at runtime](change-lighting-at-runtime.md) - * [Choose how to change lighting at runtime](probevolumes-understand-changing-lighting-at-runtime.md) - * [Bake different lighting setups with Lighting Scenarios](probevolumes-bakedifferentlightingsetups.md) - * [Update light from the sky at runtime with sky occlusion](probevolumes-skyocclusion.md) + * [Choose how to change lighting at runtime](probevolumes-understand-changing-lighting-at-runtime.md) + * [Bake different lighting setups with Lighting Scenarios](probevolumes-bakedifferentlightingsetups.md) + * [Update light from the sky at runtime with sky occlusion](probevolumes-skyocclusion.md) * [Optimize loading Adaptive Probe Volume data](probevolumes-streaming.md) * [Fix issues with Adaptive Probe Volumes](probevolumes-fixissues.md) * [Adaptive Probe Volume Inspector window reference](probevolumes-inspector-reference.md) @@ -206,21 +206,26 @@ * [Water system simulation](water-water-system-simulation.md) * [Quality and performance decisions](water-quality-and-performance-decisions.md) * [Water Override for Volumes](water-the-water-system-volume-override.md) + * [Water surface fluctuations](water-decals-masking-landing.md) + * [Enable mask and water decals](enable-mask-and-water-decals.md) + * [Add swell, agitation, or ripples](add-swell-agitation-or-ripples.md) + * [Simulating currents with water decals](simulating-currents-with-water-decals.md) + * [Simulating foam or ripples with masks](simulating-foam-or-ripples-with-masks.md) * [Decals and masking in the water system](water-decals-and-masking-in-the-water-system.md) - * [Foam in the water system](water-foam-in-the-water-system.md) - * [Caustics in the water system](water-caustics-in-the-water-system.md) - * [Create a current in the water system](water-create-a-current-in-the-water-system.md) + * [Foam in the Water System](water-foam-in-the-water-system.md) + * [Caustics in the Water System](water-caustics-in-the-water-system.md) + * [Create a current in the Water System](water-create-a-current-in-the-water-system.md) * [Deform a water surface](water-deform-a-water-surface.md) * [Exclude part of a water surface](water-exclude-part-of-the-water-surface.md) * [Underwater view](water-underwater-view.md) - * [Materials in the water system](water-materials-in-the-water-system.md) - * [Scripting in the water system](water-scripting-in-the-water-system.md) - * [Float objects on a water surface](float-objects-on-a-water-surface.md) - * [Align objects to the water surface using normals](align-objects-to-water-surface-using-normals.md) - * [Add caustics](add-caustics-and-foam-and-check-waves-and-ripples.md) - * [Synchronize water surfaces](synchronize-water-surfaces.md) - * [Debug in the water system](water-debug-mode.md) - * [Environment limitations](Environment-Limitations.md) + * [Materials in the Water System](water-materials-in-the-water-system.md) + * [Scripting in the Water System](water-scripting-in-the-water-system.md) + * [Float objects on a water surface](float-objects-on-a-water-surface.md) + * [Align objects to the water surface using normals](align-objects-to-water-surface-using-normals.md) + * [Add caustics](add-caustics-and-foam-and-check-waves-and-ripples.md) + * [Synchronize water surfaces](synchronize-water-surfaces.md) + * [Debug in the Water System](water-debug-mode.md) + * [Environment limitations](Environment-Limitations.md) * [Camera and scene composition](camera-and-scene-composition.md) * [Graphics Compositor](graphics-compositor.md) * [Understand the Graphics Compositor](understand-the-graphics-compositor.md) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/add-swell-agitation-or-ripples.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/add-swell-agitation-or-ripples.md new file mode 100644 index 00000000000..4b9d265d7c1 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/add-swell-agitation-or-ripples.md @@ -0,0 +1,40 @@ +# Add swell, agitation, or ripples + +To add swell, agitation or ripples, use a Water Mask to affect the influence the simulation has on specific areas of the water surface. + +Masks take into account the Wrap Mode of the texture. For Ocean, Sea, or Lake water surface types, select **Clamp** rather than the default **Repeat** value. + +To add a Water Mask: + +1. Create and import a texture where the color channels represent the fluctuations. + + Refer to the following table: + + | Water surface type | Red channel | Green channel | Blue channel | + |---------------------|-------------|---------------|--------------| + | Ocean | Swell | Agitation | Ripples | + | River | Agitation | Ripples | Not used | + | Pool | Ripples | Not used | Not used | + + > [!NOTE] + > The water types use different channels for different effects to optimize texture packing, and use the first channel for the widest simulation band. + + The darker the color of a channel, the lesser the effect. For example, use white for 100% intensity and black for 0% intensity. + +1. In the Water Volume Inspector window, drag the texture to the **Water Mask** property. + + + + + + + + + +
+ + + +
+In this example, the red channel has a gradient that reduces the first and second simulation bands. The noise on the green channel reduces ripples. For more information, refer to the Water Mask property description. +
diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/enable-mask-and-water-decals.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/enable-mask-and-water-decals.md new file mode 100644 index 00000000000..3e61be290e2 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/enable-mask-and-water-decals.md @@ -0,0 +1,7 @@ +# Enable mask and water decals + +To enable mask and water decals, follow these steps: + +1. Go to **Edit** > **Project Settings**. + +1. In the **Project Settings** window, select the **Graphics** tab and enable **Enable Mask and Current Water Decals** in the **Water System** section. diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/settings-and-properties-related-to-the-water-system.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/settings-and-properties-related-to-the-water-system.md index f123b4dc77e..20580625e0a 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/settings-and-properties-related-to-the-water-system.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/settings-and-properties-related-to-the-water-system.md @@ -48,16 +48,13 @@ Water type - - + +X + +X + X - -X - - -X - General @@ -82,7 +79,7 @@ Specifies the shape of the water surface. The options are:
  • Quad: Based on a square.
  • -
  • InstanceQuads: Creates a finite water surface with multiple instanced grids to keep a higher vertex density.
  • +
  • Instanced Quads: Creates a finite water surface with multiple instanced grids to keep a higher vertex density.
  • Custom Mesh: Based on a Mesh you provide. Overrides the vertical position of the vertices to keep the surface of the water consistently level.
  • Infinite (Ocean, Sea, or Lake only): Bounds the water surface with the Global Volume.
@@ -94,7 +91,7 @@ The options are: Script Interactions
-Enable to have the ability to query the water surface position and current direction from the simulation. See Scripting in the water system for more information. +Enable to have the ability to query the water surface position and current direction from the simulation. Refer to Scripting in the water system for more information. @@ -116,6 +113,42 @@ Only available if Script Interactions is active. Enable to have HDRP incl + + +Tessellation + + +Enable to implement tessellation. + + + + + +- Max Tessellation Factor + + +Set the level of detail HDRP applies to the surface geometry relative to the camera's position. A higher maximum tessellation factor makes the water surface more detailed and responsive to waves but increases the computational load. + + + + + +- Tessellation Factor Fade Start + + +Set the distance from the camera where the tessellation detail begins to decrease. + + + + + +- Tessellation Factor Fade Range + + +Set the distance from the camera at which the tessellation factor reaches 0. + + + X @@ -123,7 +156,7 @@ X X - + X @@ -143,10 +176,64 @@ Determines the speed at which HDRP presents the water simulation. Values above 1 -Water Mask +Water Mask -A texture HDRP uses to attenuate or supress Ripple (green channel) and Swell or Agitation (red channel) water frequencies. For more information, see Decals and masking in the water system. +Set the texture HDRP uses to reduce or stop water frequencies depending on the water surface type.
  • Ocean: Reduces swell (red channel), agitation (green), and ripples (blue).
  • River: Reduces agitation (red channel) and ripples (green channel).
  • Pool: Reduces ripples (red channel).
The Water Mask reduces the intensity of these water effects by multiplying the mask values with the corresponding water properties in the shader. Darker areas (closer to black) reduce the intensity, while lighter areas (closer to white) increase it.
For more information, refer to Decals and masking in the Water System. + + + + + +X + + +X + + +X + + +Water Decals + + + + + +Region Size + + +Set the width and length in meters of the region HDRP applies the Water Decal to. + + + + + + +Region Anchor + + +Anchor the Water Decal to a GameObject. By default, the region follows the camera. To make the region static, anchor it to the water surface. + + + + + + +Deformation + + +Enable to activate the option for creating a deformation decal. + + + + + + +Foam + + +Enable to activate the option for creating a foam decal. @@ -171,7 +258,7 @@ X Repetition Size -The size of the water patch in meters. Higher values result in less visible repetition. Also affects the Maximum Amplitude of Swell or Agitation frequency bands. +The size of the water patch in meters. Higher values result in less visible repetition. Also affects the Maximum Amplitude of Swell or Agitation simulation bands. @@ -241,12 +328,12 @@ Simulation Band properties Amplitude Dimmer (Ocean, Sea, or Lake)
    -
  • First band: The degree to which amplitude attenuates on the first frequency band of the Swell.
  • -
  • Second Band: The degree to which amplitude attenuates on the second frequency band of the Swell.
+
  • First band: The degree to which amplitude reduces on the first simulation band of the Swell.
  • +
  • Second Band: The degree to which amplitude reduces on the second simulation band of the Swell.

  • Amplitude Dimmer (River)
    -A dimmer that determines the degree to which amplitude can attenuate on the Agitation frequency band. For example, if your Amplitude value is 10 meters and you set this property to 0.5, your Agitation is 5 meters high.
    +A dimmer that determines the degree to which amplitude can reduce on the Agitation simulation band. For example, if your Amplitude value is 10 meters and you set this property to 0.5, your Agitation is 5 meters high.
    @@ -257,7 +344,7 @@ A dimmer that determines the degree to which amplitude can attenuate on the Agit Fade -Additional property. When this option is active, HDRP begins fading the contribution of this frequency band at the distance from the camera that the Range value specifies. This helps minimize distant aliasing artifacts. +Additional property. When this option is active, HDRP begins fading the contribution of this simulation band at the distance from the camera that the Range value specifies. This helps minimize distant aliasing artifacts. @@ -266,7 +353,7 @@ A dimmer that determines the degree to which amplitude can attenuate on the Agit - Range -Additional property. The distance from the camera in meters at which HDRP begins to fade the contribution of this frequency band. +Additional property. The distance from the camera in meters at which HDRP begins to fade the contribution of this simulation band. @@ -372,7 +459,7 @@ Determines the orientation and constant speed of the current that displaces ripp Fade -Additional property. When this option is active, HDRP begins fading the contribution of this frequency band at the distance from the camera that corresponds to the Range value in meters. This helps minimize distant aliasing artifacts. +Additional property. When this option is active, HDRP begins fading the contribution of this simulation band at the distance from the camera that corresponds to the Range value in meters. This helps minimize distant aliasing artifacts. @@ -381,7 +468,7 @@ Determines the orientation and constant speed of the current that displaces ripp - Range -Additional property. The distance from the camera, in meters, at which HDRP begins to fade the contribution of this frequency band. +Additional property. The distance from the camera, in meters, at which HDRP begins to fade the contribution of this simulation band. @@ -419,7 +506,7 @@ X - + Area Size @@ -452,7 +539,7 @@ X Simulation Foam Amount -Determines the amount of surface foam. Higher values generate larger foam patches. The Wind Speed Dimmer configuration determines which Distant Wind Speed values generate foam, and how much; see Foam in the water system. +Determines the amount of surface foam. Higher values generate larger foam patches. The Wind Speed Dimmer configuration determines which Distant Wind Speed values generate foam, and how much; refer to Foam in the water system. @@ -480,14 +567,14 @@ X Mask -Select a texture whose red channel Unity uses to attenuate and suppress foam. +Select a texture whose red channel Unity uses to reduce or remove foam. Wind Speed Dimmer -Determines foam intensity. The normalized Distant Wind Speed determines the X axis value. The spline editor configures the Y axis value. See Foam in the water system for more information. +Determines foam intensity. The normalized Distant Wind Speed determines the X axis value. The spline editor configures the Y axis value. Refer to Foam in the water system for more information. @@ -870,7 +957,7 @@ Specifies the view of the debug mode used for the water surface. To use a Volume Override, you must first add a Volume Profile. -See The water system Volume Override for more information.
    +Refer to The water system Volume Override for more information.
    diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/simulating-currents-with-water-decals.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/simulating-currents-with-water-decals.md new file mode 100644 index 00000000000..bc1f9509f89 --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/simulating-currents-with-water-decals.md @@ -0,0 +1,42 @@ +# Simulate currents with water decals + +To add deformation, foam, or current effects to a water surface, use a water decal, which is a texture projected onto the surface. + +A water decal is a shader graph Master Stack. It's applied in world space, allowing it to project across the water surface and integrate with the entire environment, not just a single area. + +By default, water decal regions are anchored to the camera. You can also anchor them to a GameObject. + +> [!NOTE] +> For backward compatibility, water decals are disabled by default. + +## Water decal shader graph Master Stack + +By default, the water decal shader graph Master Stack contains the following properties: + +- **Deformation** +- **SurfaceFoam** +- **DeepFoam** + +Once you have [enabled mask and current water decals](enable-mask-and-water-decals.md), you can add the following water features through the Graph Inspector: + +- **SimulationMask** +- **SimulationFoamMask** +- **LargeCurrent** +- **LargeCurrentInfluence** +- **RipplesCurrent** +- **RipplesCurrentInfluence** + +## Decal layer masks + +To add foam, you can change material properties (base color, smoothness, normals, etc.) by using a [decal](decals.md) on a water surface. For example, you might use this technique to imitate debris floating on the water. +**Global Opacity** determines the amount of influence the decal has on the appearance of the water surface. + +The following [Decal Shader](decal-material-inspector-reference.md) Surface Options don't work with water surfaces: +* **Affect Metal** +* **Affect Ambient Occlusion** +* **Affect Emission** +* **Affect Base Color** only produces monochromatic output. + +## Additional resources + +- [Shader Graph](https://docs.unity3d.com/Packages/com.unity.shadergraph@latest) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/simulating-foam-or-ripples-with-masks.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/simulating-foam-or-ripples-with-masks.md new file mode 100644 index 00000000000..9301d45e17c --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/simulating-foam-or-ripples-with-masks.md @@ -0,0 +1,10 @@ +# Simulate foam or ripples with masks + +A simulation mask defines areas of influence for specific water simulation effects, such as foam or ripples. + +By using a simulation mask, you can restrict these effects to particular regions on the water surface, enabling localized interactions. + +For example, if you're simulating debris or objects affecting the water, a simulation mask will allow you to define where foam or other effects appear based on those interactions. + +> [!NOTE] +> For backward compatibility, simulation masks are disabled by default. diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-caustics-in-the-water-system.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-caustics-in-the-water-system.md index 936ce5375c2..a62595d6c6e 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-caustics-in-the-water-system.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-caustics-in-the-water-system.md @@ -17,7 +17,7 @@ this.GetComponent().material.SetTexture("_Base_Color", waterSurf Caustics have the following limitations with transparents GameObjects: * When the camera is above a water surface, HDRP computes caustics using the position of any opaque object behind a transparent. * HDRP doesn't apply caustics to transparent GameObjects when the camera is underwater. -* Caustics do not react to current maps and water mask. +* Caustics do not react to current maps and Water Mask. ## Additional resources * Settings and properties related to the water system diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-debug-mode.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-debug-mode.md index c57a8cf4913..4afccf381bc 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-debug-mode.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-debug-mode.md @@ -4,7 +4,7 @@ For authoring purposes, the water surface component has debug view modes. Those They are especially useful for placing the different areas (Mask, Deformation, Foam) precisely. ## Water Mask -The Water Mask mode shows the attenuation of each frequency band. White color means no attenuation, black color means 100% masking. +The Water Mask mode displays the reduction of each simulation band. White means no reduction. Black means 100% reduction. You can select which channel of the water mask to debug by using the **Water Mask Mode** dropdown. Note that, for saving texture space, the red channel always attenuate the first band (First swell band for oceans, Agitation for rivers, Ripples for pools), green channel, the second band (Second swell band for oceans, ripples for rivers)... etc diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-decals-masking-landing.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-decals-masking-landing.md new file mode 100644 index 00000000000..208ace00cbd --- /dev/null +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-decals-masking-landing.md @@ -0,0 +1,14 @@ +# Water surface fluctuations + +You can apply effects like swell, agitation, deformation, and foam across the water surface. + +You can add fluctuations such as swell, agitation, or ripples to the whole of a water surface based on texture channels with a Water Mask. + +You can also add detailed visual effects to localized water areas with water decals, a type of shader graph nodes. + +| **Page** | **Description** | +|---------------------------------------------------------------------------------------|-----------------------------------------------------------------------------| +| **[Enable mask and water decals](enable-mask-and-water-decals.md)** | Mask and current water decals are disabled by default. | +| **[Add swell, agitation, or ripples](add-swell-agitation-or-ripples.md)** | Add swell, agitation, or ripples across the water surface. | +| **[Simulating currents with water decals](simulating-currents-with-water-decals.md)** | Simulate water currents by projecting textures. | +| **[Simulating foam or ripples with masks](simulating-foam-or-ripples-with-masks.md)** | Create effects like foam or ripples. | From d7ee228019313e119c09646416052c8ab522ae11 Mon Sep 17 00:00:00 2001 From: Julien Amsellem Date: Sat, 16 Nov 2024 09:34:12 +0000 Subject: [PATCH 40/85] [VFX] Add a button to install learning templates Jira: UUM-85329 - A new button is added so that users can quickly install learning samples - The button should be disabled when the samples are already installed - Add a button in the help drop down (VFX Graph window toolbar's right most button) ![Unity_lB4PrsYOgF2](https://media.github.cds.internal.unity3d.com/user/4003/files/21a35009-8956-4563-bbb2-158ca4e34319) --- .../Editor/GraphView/VFXViewWindow.cs | 2 +- .../GraphView/Views/VFXHelpDropdownButton.cs | 28 ++---- .../Editor/PackageInfo.cs | 9 +- .../SamplesLinkPackageManagerExtension.cs | 6 +- .../TemplateWindow/VFXTemplateWindow.cs | 96 ++++++++++++++----- .../UIResources/uss/VFXTemplateWindow.uss | 9 +- .../uxml/VFXHelpDropdownPanel.uxml | 1 + .../UIResources/uxml/VFXTemplateWindow.uxml | 4 + .../Editor/VFXAnalytics.cs | 4 +- 9 files changed, 99 insertions(+), 60 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXViewWindow.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXViewWindow.cs index d50b8e853d7..ddf3bd94f08 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXViewWindow.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXViewWindow.cs @@ -354,7 +354,7 @@ void Update() if (graphView == null && m_DisplayedResource == null) return; - VFXViewController controller = graphView.controller; + VFXViewController controller = graphView?.controller; var filename = "No Asset"; if (controller != null) { diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/VFXHelpDropdownButton.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/VFXHelpDropdownButton.cs index 70db4d9000a..997f300714d 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/VFXHelpDropdownButton.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/VFXHelpDropdownButton.cs @@ -10,18 +10,15 @@ namespace UnityEditor.VFX.UI { class VFXHelpDropdownButton : DropDownButtonBase { - const string k_PackageName = "com.unity.visualeffectgraph"; const string k_AdditionalSamples = "VisualEffectGraph Additions"; const string k_AdditionalHelpers = "OutputEvent Helpers"; + const string k_LearningSamples = "Learning Templates"; const string k_ManualUrl = @"https://docs.unity3d.com/Packages/com.unity.visualeffectgraph@{0}/index.html"; const string k_ForumUrl = @"https://forum.unity.com/forums/visual-effect-graph.428/"; const string k_SpaceShipUrl = @"https://github.com/Unity-Technologies/SpaceshipDemo"; const string k_SamplesUrl = @"https://github.com/Unity-Technologies/VisualEffectGraph-Samples"; const string k_VfxGraphUrl = @"https://unity.com/visual-effect-graph"; - readonly Button m_installSamplesButton; - readonly Button m_installHelpersButton; - string m_ManualUrlWithVersion; ListRequest m_PackageManagerRequest; @@ -35,11 +32,14 @@ public VFXHelpDropdownButton(VFXView vfxView) EditorResources.iconsPath + "_Help.png", true) { - m_installSamplesButton = m_PopupContent.Q - + From d6363d98ebe6cd003096734f9a2240d73bd9d30e Mon Sep 17 00:00:00 2001 From: Adrien Moulin Date: Sat, 16 Nov 2024 09:35:05 +0000 Subject: [PATCH 42/85] Graphics/SRP/RPF - [UUM-87121] - STP is disabled when TAA is disabled Currently STP upscaler can be enabled only if temporal anti-aliasing (TAA) is enabled. This PR fixes corner case situations where, despite being selected, STP is not enabled due to TAA pre-requisite conditions (needs motion vector, no camera stacking, no dynamic resolution...) not being fulfilled. Root cause is due to the imperfect junction between TAA and STP enablement: we end up with cases where `IsTAAEnabled()` is false but `IsSTPEnabled()` is true, generating various mis-behaviors. In this given issue, URP wrongly tries to use upscaled color buffer despite STP being disabled due to TAA pre-requisite missing. At runtime, STP upscaler is not used but `IsSTPEnabled()` remains true, triggering wrong resource connections. Current PR fixes this by: - clarifying terminology: supported/selected/enabled. Support is hardware/gfx API specific (`IsSTPSupported()`), selection is user choice (`IsTAA/STPSelected()`), enablement (`IsTAA/STPEnabled()`) is our choice based on support/selection and other internal reasons. - clarifiying logic: STP is enabled only if TAA is enabled - adding IsTAA/STPSelected helpers in cameraData PR is also adjusting TAA warning when being disabled to mention STP if selected, helping users to understand why STP is not called despite being selected. In the given situation, both STP and TAA are disabled because of camera stacking (first message only appearing for TAA+noSTP case: ![image](https://media.github.cds.internal.unity3d.com/user/5521/files/f0c278af-b37d-47b4-b185-d8c9cb111bcc) --- .../Runtime/FrameData/UniversalCameraData.cs | 34 ++++++++++++++++--- .../Runtime/Passes/PostProcessPass.cs | 2 +- .../Passes/PostProcessPassRenderGraph.cs | 13 ++++--- .../Runtime/TemporalAA.cs | 32 ++++++++--------- .../Runtime/UniversalRenderPipeline.cs | 12 +++---- 5 files changed, 61 insertions(+), 32 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalCameraData.cs b/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalCameraData.cs index 6e50635426a..6099d4b9d6c 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalCameraData.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/FrameData/UniversalCameraData.cs @@ -442,12 +442,28 @@ public bool IsRenderTargetProjectionMatrixFlipped(RTHandle color, RTHandle depth return targetTexture != null || IsHandleYFlipped(color ?? depth); } + /// + /// Returns true if temporal anti-aliasing has been requested + /// Use IsTemporalAAEnabled() to ensure that TAA is active at runtime + /// + /// True if TAA is requested + internal bool IsTemporalAARequested() + { + return antialiasing == AntialiasingMode.TemporalAntiAliasing; + } + + /// + /// Returns true if the pipeline and the given camera are configured to render with temporal anti-aliasing post processing enabled + /// + /// Once selected, TAA necessitates some pre-requisites from the pipeline to run, mostly from the camera itself. + /// + /// True if TAA is enabled internal bool IsTemporalAAEnabled() { UniversalAdditionalCameraData additionalCameraData; camera.TryGetComponent(out additionalCameraData); - return (antialiasing == AntialiasingMode.TemporalAntiAliasing) // Enabled + return IsTemporalAARequested() // Requested && postProcessEnabled // Postprocessing Enabled && (taaHistory != null) // Initialized && (cameraTargetDescriptor.msaaSamples == 1) // No MSAA @@ -457,17 +473,27 @@ internal bool IsTemporalAAEnabled() } /// - /// Returns true if the pipeline is configured to render with the STP upscaler + /// Returns true if the STP upscaler has been requested + /// Use IsSTPEnabled() to ensure that STP upscaler is active at runtime, it necessitates TAA pre-processing + /// + /// True if STP is requested + internal bool IsSTPRequested() + { + return (imageScalingMode == ImageScalingMode.Upscaling) && (upscalingFilter == ImageUpscalingFilter.STP); + } + + /// + /// Returns true if the pipeline and the given camera are configured to render with the STP upscaler /// /// When STP runs, it relies on much of the existing TAA infrastructure provided by URP's native TAA. Due to this, URP forces the anti-aliasing mode to - /// TAA when STP is enabled to ensure that most TAA logic remains active. A side effect of this behavior is that STP inherits all of the same configuration + /// TAA when STP is requested to ensure that most TAA logic remains active. A side effect of this behavior is that STP inherits all of the same configuration /// restrictions as TAA and effectively cannot run if IsTemporalAAEnabled() returns false. The post processing pass logic that executes STP handles this /// situation and STP should behave identically to TAA in cases where TAA support requirements aren't met at runtime. /// /// True if STP is enabled internal bool IsSTPEnabled() { - return (imageScalingMode == ImageScalingMode.Upscaling) && (upscalingFilter == ImageUpscalingFilter.STP); + return IsSTPRequested() && IsTemporalAAEnabled(); } /// diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPass.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPass.cs index c0469c81572..0d61eeb7bd9 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPass.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPass.cs @@ -463,7 +463,7 @@ void Render(CommandBuffer cmd, ref RenderingData renderingData) // disable useTemporalAA if another feature is disabled) then we need to put it in CameraData::IsTemporalAAEnabled() as opposed // to tweaking the value here. bool useTemporalAA = cameraData.IsTemporalAAEnabled(); - if (cameraData.antialiasing == AntialiasingMode.TemporalAntiAliasing && !useTemporalAA) + if (cameraData.IsTemporalAARequested() && !useTemporalAA) TemporalAA.ValidateAndWarn(cameraData); int amountOfPassesRemaining = (useStopNan ? 1 : 0) + (useSubPixeMorpAA ? 1 : 0) + (useDepthOfField ? 1 : 0) + (useLensFlare ? 1 : 0) + (useTemporalAA ? 1 : 0) + (useMotionBlur ? 1 : 0) + (usePaniniProjection ? 1 : 0); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs index 6e083d54b17..48282b7dbf9 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/Passes/PostProcessPassRenderGraph.cs @@ -1996,12 +1996,15 @@ public void RenderPostProcessingRenderGraph(RenderGraph renderGraph, ContextCont // disable useTemporalAA if another feature is disabled) then we need to put it in CameraData::IsTemporalAAEnabled() as opposed // to tweaking the value here. bool useTemporalAA = cameraData.IsTemporalAAEnabled(); - if (cameraData.antialiasing == AntialiasingMode.TemporalAntiAliasing && !useTemporalAA) - TemporalAA.ValidateAndWarn(cameraData); - // STP is only supported when TAA is enabled and all of its runtime requirements are met. - // See the comments for IsSTPEnabled() for more information. - bool useSTP = useTemporalAA && cameraData.IsSTPEnabled(); + // STP is only enabled when TAA is enabled and all of its runtime requirements are met. + // Using IsSTPRequested() vs IsSTPEnabled() for perf reason here, as we already know TAA status + bool isSTPRequested = cameraData.IsSTPRequested(); + bool useSTP = useTemporalAA && isSTPRequested; + + // Warn users if TAA and STP are disabled despite being requested + if (!useTemporalAA && cameraData.IsTemporalAARequested()) + TemporalAA.ValidateAndWarn(cameraData, isSTPRequested); using (var builder = renderGraph.AddRasterRenderPass("Setup PostFX passes", out var passData, ProfilingSampler.Get(URPProfileId.RG_SetupPostFX))) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/TemporalAA.cs b/Packages/com.unity.render-pipelines.universal/Runtime/TemporalAA.cs index cdbfe3fc43a..b0da32158d6 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/TemporalAA.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/TemporalAA.cs @@ -337,47 +337,47 @@ internal static RenderTextureDescriptor TemporalAADescFromCameraDesc(ref RenderT static uint s_warnCounter = 0; - internal static string ValidateAndWarn(UniversalCameraData cameraData) + internal static string ValidateAndWarn(UniversalCameraData cameraData, bool isSTPRequested = false) { - string warning = null; + string reasonWarning = null; - if(warning == null && !cameraData.postProcessEnabled) - warning = "Disabling TAA because camera has post-processing disabled."; + if(reasonWarning == null && !cameraData.postProcessEnabled) + reasonWarning = "because camera has post-processing disabled."; if (cameraData.taaHistory == null) { - warning = "Disabling TAA due to invalid persistent data."; + reasonWarning = "due to invalid persistent data."; } - if (warning == null && cameraData.cameraTargetDescriptor.msaaSamples != 1) + if (reasonWarning == null && cameraData.cameraTargetDescriptor.msaaSamples != 1) { if (cameraData.xr != null && cameraData.xr.enabled) - warning = "Disabling TAA because MSAA is on. MSAA must be disabled globally for all cameras in XR mode."; + reasonWarning = "because MSAA is on. MSAA must be disabled globally for all cameras in XR mode."; else - warning = "Disabling TAA because MSAA is on. Turn MSAA off on the camera or current URP Asset to enable TAA."; + reasonWarning = "because MSAA is on. Turn MSAA off on the camera or current URP Asset."; } - if(warning == null && cameraData.camera.TryGetComponent(out var additionalCameraData)) + if(reasonWarning == null && cameraData.camera.TryGetComponent(out var additionalCameraData)) { if (additionalCameraData.renderType == CameraRenderType.Overlay || additionalCameraData.cameraStack.Count > 0) { - warning = "Disabling TAA because camera is stacked."; + reasonWarning = "because camera is stacked."; } } - if (warning == null && cameraData.camera.allowDynamicResolution) - warning = "Disabling TAA because camera has dynamic resolution enabled. You can use a constant render scale instead."; + if (reasonWarning == null && cameraData.camera.allowDynamicResolution) + reasonWarning = "because camera has dynamic resolution enabled. You can use a constant render scale instead."; - if(warning == null && !cameraData.renderer.SupportsMotionVectors()) - warning = "Disabling TAA because the renderer does not implement motion vectors. Motion vectors are required for TAA."; + if(reasonWarning == null && !cameraData.renderer.SupportsMotionVectors()) + reasonWarning = "because the renderer does not implement motion vectors. Motion vectors are required."; const int warningThrottleFrames = 60 * 1; // 60 FPS * 1 sec if (s_warnCounter % warningThrottleFrames == 0) - Debug.LogWarning(warning); + Debug.LogWarning("Disabling TAA " + (isSTPRequested ? "and STP " : "") + reasonWarning); s_warnCounter++; - return warning; + return reasonWarning; } internal static void ExecutePass(CommandBuffer cmd, Material taaMaterial, ref CameraData cameraData, RTHandle source, RTHandle destination, RenderTexture motionVectors) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs index 37cbb8492df..d513785feeb 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs @@ -1438,12 +1438,12 @@ static void InitializeStackedCameraData(Camera baseCamera, UniversalAdditionalCa } else if ((cameraData.renderScale < 1.0f) || (!isScenePreviewOrReflectionCamera && ((cameraData.upscalingFilter == ImageUpscalingFilter.FSR) || (cameraData.upscalingFilter == ImageUpscalingFilter.STP)))) { - // When certain upscalers are enabled, we still consider 100% render scale an upscaling operation. (This behavior is only intended for game view cameras) + // When certain upscalers are requested, we still consider 100% render scale an upscaling operation. (This behavior is only intended for game view cameras) // This allows us to run the upscaling shader passes all the time since they improve visual quality even at 100% scale. cameraData.imageScalingMode = ImageScalingMode.Upscaling; - // When STP is enabled, we force temporal anti-aliasing on since it's a prerequisite. + // When STP is requested, we force temporal anti-aliasing on since it's a prerequisite. if (cameraData.upscalingFilter == ImageUpscalingFilter.STP) { cameraData.antialiasing = AntialiasingMode.TemporalAntiAliasing; @@ -1884,7 +1884,7 @@ private static void UpdateTemporalAATargets(UniversalCameraData cameraData) xrMultipassEnabled = cameraData.xr.enabled && !cameraData.xr.singlePassEnabled; #endif bool allocation; - if (cameraData.IsSTPEnabled()) + if (cameraData.IsSTPRequested()) { Debug.Assert(cameraData.stpHistory != null); @@ -1907,9 +1907,9 @@ private static void UpdateTemporalAATargets(UniversalCameraData cameraData) { cameraData.taaHistory.Reset(); // TAA GPUResources is explicitly released if the feature is turned off. We could refactor this to rely on the type request and the "gc" only. - // In the case where STP is enabled, but TAA gets disabled for various reasons, we should release the STP history resources - if (cameraData.IsSTPEnabled()) - cameraData.stpHistory.Reset(); + // In the case where STP is requested, but TAA gets disabled for various reasons so STP is disabled, we should release the STP history resources + if (cameraData.IsSTPRequested()) + cameraData.stpHistory?.Reset(); } } From fc5bd6ef00640211c39db0cbb2191ffb425e1a3d Mon Sep 17 00:00:00 2001 From: Ludovic Theobald Date: Mon, 18 Nov 2024 20:20:51 +0000 Subject: [PATCH 43/85] [VFX][Optimisation] Optimise Attribute Layout to avoid holes and reduce memory usage Currently, the attribute buffer contains holes because we're trying to force memory alignment by adding padding. It turns out that it does not really have any performance benefits ( see https://github.com/sebbbi/perftest). This PR does two things : - Remove the paddings the attribute buffer - Split the buckets into buckets of maximum size 4 This reduces the footprint of the attribute buffer and improve bandwidth. Results, with a system of capacity 3,000,000, quite heavy in attributes stored : Before : ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/134189b1-8ac2-4086-8bcd-ab93bca310e0) ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/5bcfe9ae-e8b1-4d8f-a0cc-249e5a3fa2e4) After : ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/b52c73d8-6d81-4566-98bb-3b77aa568d98) ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/41677438-0d5f-4b88-8f6e-d6add44c3cb8) --- .../Editor/Data/VFXDataParticle.cs | 51 +++++++++++-------- .../Editor/Inspector/VFXContextEditor.cs | 10 +++- 2 files changed, 38 insertions(+), 23 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/Data/VFXDataParticle.cs b/Packages/com.unity.visualeffectgraph/Editor/Data/VFXDataParticle.cs index 917f9d5da45..63ced2a7906 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Data/VFXDataParticle.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Data/VFXDataParticle.cs @@ -11,7 +11,7 @@ namespace UnityEditor.VFX { interface ILayoutProvider { - void GenerateAttributeLayout(uint capacity, Dictionary storedAttribute); + void GenerateAttributeLayout(uint capacity, Dictionary storedAttribute, bool splitBuckets); string GetCodeOffset(VFXAttribute attrib, uint capacity, string index, string instanceIndex); uint GetBufferSize(uint capacity); @@ -32,8 +32,14 @@ public AttributeLayout(int bucket, int offset) } } - // return size - private int GenerateBucketLayout(List attributes, int bucketId) + private void AddBucket(int capacity, int bucketId, int currentOffset) + { + int bucketOffset = bucketId == 0 ? 0 : m_BucketOffsets[bucketId - 1] + capacity * m_BucketSizes[bucketId - 1]; + m_BucketOffsets.Add((bucketOffset + 3) & ~3); // align on dword; + m_BucketSizes.Add(currentOffset); + } + + private void AddAttributeBuckets(List attributes, int capacity, ref int bucketId, bool splitBuckets) { var sortedAttrib = attributes.OrderByDescending(a => VFXValue.TypeToSize(a.type)); @@ -48,52 +54,55 @@ private int GenerateBucketLayout(List attributes, int bucketId) } int currentOffset = 0; - int minAlignment = 0; foreach (var block in attribBlocks) { + if (splitBuckets) + currentOffset = 0; + foreach (var attrib in block) { int size = VFXValue.TypeToSize(attrib.type); - int alignment = size > 2 ? 4 : size; - minAlignment = Math.Max(alignment, minAlignment); - // align offset - currentOffset = (currentOffset + alignment - 1) & ~(alignment - 1); m_AttributeLayout.Add(attrib, new AttributeLayout(bucketId, currentOffset)); currentOffset += size; } + if (splitBuckets) + { + AddBucket(capacity, bucketId, currentOffset); + bucketId++; + } + } + if (!splitBuckets) + { + AddBucket(capacity, bucketId, currentOffset); + bucketId++; } - - return (currentOffset + minAlignment - 1) & ~(minAlignment - 1); } - public void GenerateAttributeLayout(uint capacity, Dictionary storedAttribute) + public void GenerateAttributeLayout(uint capacity, Dictionary storedAttribute, bool splitBuckets = true) { m_BucketSizes.Clear(); m_AttributeLayout.Clear(); m_BucketOffsets.Clear(); - var attributeBuckets = new Dictionary>(); + var attributeGroups = new Dictionary>(); foreach (var kvp in storedAttribute) { List attributes; - if (!attributeBuckets.ContainsKey(kvp.Value)) + if (!attributeGroups.ContainsKey(kvp.Value)) { attributes = new List(); - attributeBuckets[kvp.Value] = attributes; + attributeGroups[kvp.Value] = attributes; } else - attributes = attributeBuckets[kvp.Value]; + attributes = attributeGroups[kvp.Value]; attributes.Add(kvp.Key); } int bucketId = 0; - foreach (var bucket in attributeBuckets) + foreach (var group in attributeGroups) { - int bucketOffset = bucketId == 0 ? 0 : m_BucketOffsets[bucketId - 1] + (int)capacity * m_BucketSizes[bucketId - 1]; - m_BucketOffsets.Add((bucketOffset + 3) & ~3); // align on dword; - m_BucketSizes.Add(GenerateBucketLayout(bucket.Value, bucketId)); - ++bucketId; + AddAttributeBuckets(group.Value, (int)capacity, ref bucketId, splitBuckets); } // Debug log @@ -485,7 +494,7 @@ public override void GenerateAttributeLayout(Dictionary o, _ => (int)VFXAttributeMode.ReadSource); - m_layoutAttributeSource.GenerateAttributeLayout(m_SourceCount, readSourceAttribute); + m_layoutAttributeSource.GenerateAttributeLayout(m_SourceCount, readSourceAttribute, false); m_ownAttributeSourceBuffer = true; } } diff --git a/Packages/com.unity.visualeffectgraph/Editor/Inspector/VFXContextEditor.cs b/Packages/com.unity.visualeffectgraph/Editor/Inspector/VFXContextEditor.cs index 719622816d5..3d06c893a8f 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Inspector/VFXContextEditor.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Inspector/VFXContextEditor.cs @@ -156,13 +156,19 @@ protected void DisplaySummary() var data = (VFXData)dataObject.targetObject; // Particle context data - if (data.type == VFXDataType.Particle) + if (data.type == VFXDataType.Particle || data.type == VFXDataType.ParticleStrip) { VFXDataParticle particleData = data as VFXDataParticle; EditorGUILayout.Space(); { Styles.Row(Styles.header, "Name", "Value"); - Styles.Row(Styles.cell, "Capacity", particleData.GetSettingValue("capacity").ToString()); + if(data.type == VFXDataType.Particle) + Styles.Row(Styles.cell, "Capacity", particleData.GetSettingValue("capacity").ToString()); + else + { + Styles.Row(Styles.cell, "Strip Capacity", particleData.GetSettingValue("stripCapacity").ToString()); + Styles.Row(Styles.cell, "Particle Per Strip Count", particleData.GetSettingValue("particlePerStripCount").ToString()); + } EditorGUILayout.Space(); From 4732e581df76a236ded77ceb80e6060ccc665678 Mon Sep 17 00:00:00 2001 From: Minseok Lee Date: Mon, 18 Nov 2024 20:20:55 +0000 Subject: [PATCH 44/85] Bind dummy depth texture for MRT in Volumetric Clouds Combine pass Unity forces depth buffer binding when binding MRTs. 'Volumetric Clouds Combine' pass uses MRTs, but there were 2 errors: - There are two places to bind dummy depth buffers but only one place was handled. - The bound texture has a color format, not a depth format. This PR binds a dummy texture with a depth format in both places. --- .../VolumetricClouds/HDRenderPipeline.VolumetricClouds.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/VolumetricClouds/HDRenderPipeline.VolumetricClouds.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/VolumetricClouds/HDRenderPipeline.VolumetricClouds.cs index 4f9d1543dd0..e9b32a04a78 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/VolumetricClouds/HDRenderPipeline.VolumetricClouds.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/VolumetricClouds/HDRenderPipeline.VolumetricClouds.cs @@ -591,7 +591,7 @@ internal void CombineVolumetricClouds(RenderGraph renderGraph, HDCamera hdCamera if (passData.perPixelSorting) { - builder.UseDepthBuffer(transparentPrepass.beforeRefraction, DepthAccess.Read); // Dummy buffer to avoid 'Setting MRT without a depth buffer is not supported' + builder.UseDepthBuffer(transparentPrepass.depthBufferPreRefraction, DepthAccess.Read); // Dummy buffer to avoid 'Setting MRT without a depth buffer is not supported' builder.UseColorBuffer(transparentPrepass.beforeRefraction, 1); builder.UseColorBuffer(transparentPrepass.beforeRefractionAlpha, 2); opticalFogBufferIndex = 3; @@ -604,6 +604,7 @@ internal void CombineVolumetricClouds(RenderGraph renderGraph, HDCamera hdCamera { if (!opticalFogTransmittance.IsValid()) opticalFogTransmittance = renderGraph.CreateTexture(HDRenderPipeline.GetOpticalFogTransmittanceDesc(hdCamera)); + builder.UseDepthBuffer(transparentPrepass.depthBufferPreRefraction, DepthAccess.Read); // Dummy buffer to avoid 'Setting MRT without a depth buffer is not supported' builder.UseColorBuffer(opticalFogTransmittance, opticalFogBufferIndex); } From 4f1913973c49b1cc3b54303db60570b19f05c95d Mon Sep 17 00:00:00 2001 From: Minseok Lee Date: Mon, 18 Nov 2024 20:21:00 +0000 Subject: [PATCH 45/85] [HDRP] Fix errors when building XR player with Water samples Fix errors when building XR Player with the repro project in [UUM-86061](https://jira.unity3d.com/browse/UUM-86061). - SRP: ProbeVolumeDebugBase.hlsl was missing an include statement for stereo rendering. - HDRP: WaterDecalSubTarget.cs was not generating stereo rendering related keywords. --- .../Runtime/Debug/ProbeVolumeDebugBase.hlsl | 1 + .../Editor/Material/Water/ShaderGraph/WaterDecalSubTarget.cs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Debug/ProbeVolumeDebugBase.hlsl b/Packages/com.unity.render-pipelines.core/Runtime/Debug/ProbeVolumeDebugBase.hlsl index a7d3ed205dd..9e124643602 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Debug/ProbeVolumeDebugBase.hlsl +++ b/Packages/com.unity.render-pipelines.core/Runtime/Debug/ProbeVolumeDebugBase.hlsl @@ -35,6 +35,7 @@ float GetCurrentExposureMultiplier() return LOAD_TEXTURE2D(_ExposureTexture, int2(0, 0)).x; } +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureXR.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" #include "Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/DecodeSH.hlsl" #include "Packages/com.unity.render-pipelines.core/Runtime/Lighting/ProbeVolume/ProbeVolume.hlsl" diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Water/ShaderGraph/WaterDecalSubTarget.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Water/ShaderGraph/WaterDecalSubTarget.cs index 9ad5c1d60d7..e4d66212586 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Water/ShaderGraph/WaterDecalSubTarget.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Water/ShaderGraph/WaterDecalSubTarget.cs @@ -260,6 +260,8 @@ PassDescriptor GeneratePass(WaterDecal.PassType type) StructFields.Varyings.texCoord0, StructFields.Varyings.texCoord1, StructFields.Varyings.instanceID, + StructFields.Varyings.stereoTargetEyeIndexAsBlendIdx0, + StructFields.Varyings.stereoTargetEyeIndexAsRTArrayIdx, } }, @@ -280,6 +282,8 @@ PassDescriptor GeneratePass(WaterDecal.PassType type) { Pragma.Vertex("Vert") }, { Pragma.Fragment("Frag") }, { Pragma.EditorSyncCompilation }, + { Pragma.DOTSInstancing }, + Pragma.MultiCompileInstancing, //{ Pragma.DebugSymbols }, }, defines = WaterDecalDefines.GetPassDefines(type), From 691ed2948e056e329c4cd7f1679bee56bf668d26 Mon Sep 17 00:00:00 2001 From: Paul Demeulenaere Date: Tue, 19 Nov 2024 06:28:07 +0000 Subject: [PATCH 46/85] [VFX] Exception Using ArcTorus & VFXParameter Controller Fix exception and failure of live edition from ArcShape properties in blackboard This algorithm was only working with one level of deep (and not ArcTorus => Torus => Transform => Position) --- .../Elements/Controllers/VFXParameterController.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/Controllers/VFXParameterController.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/Controllers/VFXParameterController.cs index d0fe3cdeb30..52f94a45eee 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/Controllers/VFXParameterController.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/Controllers/VFXParameterController.cs @@ -159,15 +159,15 @@ public object value } set { + object rootValue = m_Parameter.value; object val = m_Parameter.value; - List objectStack = new List(); foreach (var fieldInfo in m_FieldInfos.Take(m_FieldInfos.Length - 1)) { - objectStack.Add(fieldInfo.GetValue(val)); + val = fieldInfo.GetValue(val); + objectStack.Add(val); } - object targetValue = value; for (int i = objectStack.Count - 1; i >= 0; --i) { @@ -175,9 +175,8 @@ public object value targetValue = objectStack[i]; } - m_FieldInfos[0].SetValue(val, targetValue); - - m_Parameter.value = val; + m_FieldInfos[0].SetValue(rootValue, targetValue); + m_Parameter.value = rootValue; } } } @@ -498,6 +497,7 @@ public IPropertyRMProvider GetMemberController(string memberPath) } } + members.Reverse(); foreach (var member in members) { subParameterController = subParameterController.children.FirstOrDefault(t => t.name == member); From 350bc93af2a84ccdbd5dd4b208b973173aafb314 Mon Sep 17 00:00:00 2001 From: Ludovic Theobald Date: Tue, 19 Nov 2024 06:28:10 +0000 Subject: [PATCH 47/85] [VFX][Optimisation] Threaded LocalToWorld cache This PR leverages the `TransformChangeDispatch` functionalities to perform the caching of the LocalToWorld transform outside of the main thread. This has two performance advantages : - It frees up the main thread to perform the rest of the `VFX.Prepare` part of the update - The calculation and caching of the LocalToWorld transform will be done only on the Visual Effects that have actually moved. The visual effect component's transform access are registered when it's VisualEffectAsset is set and when it is being added to the manager : we register only the components that require caching the transform. It is unregistered when removing the component from the VFXManager. Performance comparison (orange : new, blue : old, 2048 instances) : ![image_480](https://media.github.cds.internal.unity3d.com/user/2768/files/139f694b-8e7e-4bfe-bb93-f9dec850895e) ![image](https://media.github.cds.internal.unity3d.com/user/2768/files/3ad7519e-77f8-406a-969a-5613ebc80f7c) --- .../PerformanceTests/Runtime/VFXPerformanceRuntimeTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/PerformanceTests/Runtime/VFXPerformanceRuntimeTests.cs b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/PerformanceTests/Runtime/VFXPerformanceRuntimeTests.cs index abddefe6f4e..db6aa935a34 100644 --- a/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/PerformanceTests/Runtime/VFXPerformanceRuntimeTests.cs +++ b/Tests/SRPTests/Packages/com.unity.testing.visualeffectgraph/PerformanceTests/Runtime/VFXPerformanceRuntimeTests.cs @@ -111,6 +111,7 @@ static IEnumerable allMarkerName yield return "VFX.ParticleSystem.RenderMesh"; yield return "VFX.ParticleSystem.RenderMeshIndirect"; yield return "VFX.Update"; + yield return "VFX.Prepare"; yield return "VFX.PrepareCamera"; yield return "VFX.ProcessCamera"; yield return "VFX.ProcessCommandList"; From b55494abcbbf81711425b04ba2307bcd2205e6fe Mon Sep 17 00:00:00 2001 From: Paul Demeulenaere Date: Tue, 19 Nov 2024 06:28:29 +0000 Subject: [PATCH 48/85] [VFX/SG] Fix FogNode usage in URP Missing requirement transform on FogNode, this fix is a oneliner only in ShaderGraph implementation. --- .../Editor/Data/Nodes/Input/Scene/FogNode.cs | 4 +- .../Assets/GraphicsTests/100_Fog.unity | 326 +- .../GraphicsTests/100_FogSettings.lighting | 63 + .../100_FogSettings.lighting.meta | 8 + .../GraphicsTests/100_SG_FogMesh.shadergraph | 799 +++ .../100_SG_FogMesh.shadergraph.meta | 10 + .../Assets/GraphicsTests/100_SG_FogMesh.vfx | 4446 +++++++++++++++++ .../GraphicsTests/100_SG_FogMesh.vfx.meta | 14 + 8 files changed, 5627 insertions(+), 43 deletions(-) create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_FogSettings.lighting create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_FogSettings.lighting.meta create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.shadergraph create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.shadergraph.meta create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.vfx create mode 100644 Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.vfx.meta diff --git a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Input/Scene/FogNode.cs b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Input/Scene/FogNode.cs index ad0822b8a3a..6e742854959 100644 --- a/Packages/com.unity.shadergraph/Editor/Data/Nodes/Input/Scene/FogNode.cs +++ b/Packages/com.unity.shadergraph/Editor/Data/Nodes/Input/Scene/FogNode.cs @@ -4,7 +4,7 @@ namespace UnityEditor.ShaderGraph { [Title("Input", "Scene", "Fog")] - class FogNode : CodeFunctionNode + class FogNode : CodeFunctionNode, IMayRequireTransform { public FogNode() { @@ -31,5 +31,7 @@ static string Unity_Fog( } "; } + + public NeededTransform[] RequiresTransform(ShaderStageCapability stageCapability = ShaderStageCapability.All) => new[] { NeededTransform.ObjectToWorld }; } } diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_Fog.unity b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_Fog.unity index 923d455aa21..cdbda0312ad 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_Fog.unity +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_Fog.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 1 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 11 - m_GIWorkflowMode: 1 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +66,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -98,13 +94,14 @@ LightmapSettings: m_TrainingDataDestination: TrainingData m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} - m_UseShadowmask: 1 + m_LightingSettings: {fileID: 4890085278179872738, guid: afc2c4206ad6e62478df7a767a3e7638, + type: 2} --- !u!196 &4 NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +114,9 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 debug: m_Flags: 0 m_NavMeshData: {fileID: 0} @@ -148,9 +147,17 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 258135519} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} --- !u!23 &258135521 @@ -164,10 +171,15 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -192,6 +204,7 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &258135522 MeshFilter: m_ObjectHideFlags: 0 @@ -207,12 +220,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 258135519} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -18.155, y: 5.969, z: 24.196} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &270514556 GameObject: @@ -256,9 +270,17 @@ Camera: m_projectionMatrixMode: 1 m_GateFitMode: 2 m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 m_SensorSize: {x: 36, y: 24} m_LensShift: {x: 0, y: 0} - m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -292,12 +314,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 270514556} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -15.42, y: 5.24, z: 15.99} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &270514560 MonoBehaviour: @@ -403,6 +426,7 @@ GameObject: m_IsActive: 1 --- !u!73398921 &488408418 VFXRenderer: + serializedVersion: 1 m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -412,13 +436,17 @@ VFXRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 0 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 - m_Materials: [] m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -452,6 +480,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ResourceVersion: 1 m_PropertySheet: m_Float: m_Array: [] @@ -488,12 +518,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 488408417} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -18.41, y: 5.19, z: 30} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 9 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &669050717 GameObject: @@ -522,11 +553,19 @@ MeshCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 669050717} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 3 + serializedVersion: 5 m_Convex: 0 - m_CookingOptions: 14 + m_CookingOptions: 30 m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!23 &669050719 MeshRenderer: @@ -539,10 +578,15 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -567,6 +611,7 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &669050720 MeshFilter: m_ObjectHideFlags: 0 @@ -582,12 +627,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 669050717} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -18.77, y: 1.59, z: 35.26} m_LocalScale: {x: 5, y: 5, z: 5} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 7 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &674445795 GameObject: @@ -620,6 +666,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ResourceVersion: 1 m_PropertySheet: m_Float: m_Array: [] @@ -656,15 +704,17 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 674445795} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -18.41, y: 5.19, z: 24} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!73398921 &674445798 VFXRenderer: + serializedVersion: 1 m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -674,21 +724,17 @@ VFXRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 0 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 - m_Materials: - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} - - {fileID: 0} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -736,9 +782,17 @@ SphereCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 770590750} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Radius: 0.5 m_Center: {x: 0, y: 0, z: 0} --- !u!23 &770590752 @@ -752,10 +806,15 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -780,6 +839,7 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &770590753 MeshFilter: m_ObjectHideFlags: 0 @@ -795,12 +855,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 770590750} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -18.32, y: 3.14, z: 28.52} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1208515697 GameObject: @@ -822,6 +883,7 @@ GameObject: m_IsActive: 1 --- !u!73398921 &1208515698 VFXRenderer: + serializedVersion: 1 m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -831,13 +893,17 @@ VFXRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 0 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 - m_Materials: [] m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -871,6 +937,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ResourceVersion: 1 m_PropertySheet: m_Float: m_Array: [] @@ -907,13 +975,128 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1208515697} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -18.41, y: 5.19, z: 33} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 10 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1319315866 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1319315869} + - component: {fileID: 1319315868} + - component: {fileID: 1319315867} + m_Layer: 0 + m_Name: SG + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!73398921 &1319315867 +VFXRenderer: + serializedVersion: 1 + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319315866} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 0 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!2083052967 &1319315868 +VisualEffect: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319315866} + m_Enabled: 1 + m_Asset: {fileID: 8926484042661614526, guid: 20e235b4f4e8aa94386bf3cbe42dbda6, type: 3} + m_InitialEventName: OnPlay + m_InitialEventNameOverriden: 0 + m_StartSeed: 0 + m_ResetSeedOnPlay: 1 + m_AllowInstancing: 1 + m_ResourceVersion: 1 + m_PropertySheet: + m_Float: + m_Array: [] + m_Vector2f: + m_Array: [] + m_Vector3f: + m_Array: [] + m_Vector4f: + m_Array: [] + m_Uint: + m_Array: [] + m_Int: + m_Array: [] + m_Matrix4x4f: + m_Array: [] + m_AnimationCurve: + m_Array: [] + m_Gradient: + m_Array: [] + m_NamedObject: + m_Array: [] + m_Bool: + m_Array: [] +--- !u!4 &1319315869 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1319315866} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -20, y: 3, z: 21} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} --- !u!1 &1426010828 GameObject: m_ObjectHideFlags: 0 @@ -941,9 +1124,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1426010828} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &1426010830 @@ -957,10 +1148,15 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -985,6 +1181,7 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &1426010831 MeshFilter: m_ObjectHideFlags: 0 @@ -1000,12 +1197,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1426010828} + serializedVersion: 2 m_LocalRotation: {x: -0.20829226, y: 0.32973933, z: 0.07485625, w: 0.9177597} m_LocalPosition: {x: -14.19, y: 5.72, z: 26.04} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: -25.575, y: 39.525, z: 0.002} --- !u!1 &1456767456 GameObject: @@ -1027,6 +1225,7 @@ GameObject: m_IsActive: 1 --- !u!73398921 &1456767457 VFXRenderer: + serializedVersion: 1 m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} @@ -1036,13 +1235,17 @@ VFXRenderer: m_CastShadows: 0 m_ReceiveShadows: 0 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 0 m_LightProbeUsage: 0 m_ReflectionProbeUsage: 0 m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 - m_Materials: [] m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1076,6 +1279,8 @@ VisualEffect: m_InitialEventNameOverriden: 0 m_StartSeed: 0 m_ResetSeedOnPlay: 0 + m_AllowInstancing: 1 + m_ResourceVersion: 1 m_PropertySheet: m_Float: m_Array: [] @@ -1112,12 +1317,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1456767456} + serializedVersion: 2 m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: -18.41, y: 5.19, z: 27} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 8 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1998512603 GameObject: @@ -1146,9 +1352,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1998512603} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 3.1415927 m_Range: 10 @@ -1197,8 +1402,13 @@ Light: m_UseColorTemperature: 0 m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &1998512605 Transform: m_ObjectHideFlags: 0 @@ -1206,12 +1416,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1998512603} + serializedVersion: 2 m_LocalRotation: {x: 0.22566822, y: 0.766568, z: -0.089079, w: 0.59456897} m_LocalPosition: {x: 0, y: 3, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 23.886002, y: 107.642006, z: 15.221001} --- !u!114 &1998512606 MonoBehaviour: @@ -1336,9 +1547,17 @@ BoxCollider: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2067038241} m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 m_IsTrigger: 0 + m_ProvidesContacts: 0 m_Enabled: 1 - serializedVersion: 2 + serializedVersion: 3 m_Size: {x: 1, y: 1, z: 1} m_Center: {x: 0, y: 0, z: 0} --- !u!23 &2067038243 @@ -1352,10 +1571,15 @@ MeshRenderer: m_CastShadows: 1 m_ReceiveShadows: 1 m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: @@ -1380,6 +1604,7 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} --- !u!33 &2067038244 MeshFilter: m_ObjectHideFlags: 0 @@ -1395,10 +1620,27 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2067038241} + serializedVersion: 2 m_LocalRotation: {x: -0.20829226, y: 0.32973933, z: 0.07485625, w: 0.9177597} m_LocalPosition: {x: -18.95, y: 4.17, z: 26.04} m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: -25.575, y: 39.525, z: 0.002} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 270514559} + - {fileID: 1998512605} + - {fileID: 674445797} + - {fileID: 2067038245} + - {fileID: 1426010832} + - {fileID: 770590754} + - {fileID: 258135523} + - {fileID: 669050721} + - {fileID: 1456767459} + - {fileID: 488408420} + - {fileID: 1208515700} + - {fileID: 1319315869} diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_FogSettings.lighting b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_FogSettings.lighting new file mode 100644 index 00000000000..12bff065735 --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_FogSettings.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 100_FogSettings + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_FogSettings.lighting.meta b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_FogSettings.lighting.meta new file mode 100644 index 00000000000..ef7f943ae48 --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_FogSettings.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afc2c4206ad6e62478df7a767a3e7638 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.shadergraph b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.shadergraph new file mode 100644 index 00000000000..7c7df3a5dfa --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.shadergraph @@ -0,0 +1,799 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "9ccc4f896a5d474db6b5c0ac55014c09", + "m_Properties": [ + { + "m_Id": "cd93f8cce1c940a29d937ca826962522" + }, + { + "m_Id": "5b16381f8d654de7bb6f4b7d13d1d7d8" + } + ], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "184ed17132ad492aacd720e8e2f71195" + } + ], + "m_Nodes": [ + { + "m_Id": "3798630d81c849a88da458b749fe72f1" + }, + { + "m_Id": "866137325fbb41d5bdb58cc40d213bce" + }, + { + "m_Id": "b48e7c43f2394d398d6af984e91c554e" + }, + { + "m_Id": "38cbb466051d49038603ccae3cd66d8c" + }, + { + "m_Id": "6ad73e556ede413fa3a039c16019631a" + }, + { + "m_Id": "a508a6302f5c4dc6bb1b0f4402274df2" + }, + { + "m_Id": "9923ccfff9854bdbaf6f10c589cd343a" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "6ad73e556ede413fa3a039c16019631a" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9923ccfff9854bdbaf6f10c589cd343a" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "6ad73e556ede413fa3a039c16019631a" + }, + "m_SlotId": 1 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9923ccfff9854bdbaf6f10c589cd343a" + }, + "m_SlotId": 2 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "9923ccfff9854bdbaf6f10c589cd343a" + }, + "m_SlotId": 3 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "38cbb466051d49038603ccae3cd66d8c" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "a508a6302f5c4dc6bb1b0f4402274df2" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "9923ccfff9854bdbaf6f10c589cd343a" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 0.0, + "y": 0.0 + }, + "m_Blocks": [ + { + "m_Id": "3798630d81c849a88da458b749fe72f1" + }, + { + "m_Id": "866137325fbb41d5bdb58cc40d213bce" + }, + { + "m_Id": "b48e7c43f2394d398d6af984e91c554e" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 0.0, + "y": 200.0 + }, + "m_Blocks": [ + { + "m_Id": "38cbb466051d49038603ccae3cd66d8c" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 1, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "605d11c9510f4f318e4d244c1de0716f" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "03616d410298401386199fd3b9f9e89d", + "m_Id": 1, + "m_DisplayName": "Density", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Density", + "m_StageCapability": 3, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "184ed17132ad492aacd720e8e2f71195", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "cd93f8cce1c940a29d937ca826962522" + }, + { + "m_Id": "5b16381f8d654de7bb6f4b7d13d1d7d8" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "3798630d81c849a88da458b749fe72f1", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Position", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "4a612efd0ae342dc8d28d4b3a5728338" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Position" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "38cbb466051d49038603ccae3cd66d8c", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.BaseColor", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "be936f0e28a043d698311534714d74f3" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.BaseColor" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "4a612efd0ae342dc8d28d4b3a5728338", + "m_Id": 0, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.ShaderGraph.Internal.Vector3ShaderProperty", + "m_ObjectId": "5b16381f8d654de7bb6f4b7d13d1d7d8", + "m_Guid": { + "m_GuidSerialized": "1b220023-a542-436b-aeb9-b899af4a52f1" + }, + "m_Name": "Vector3", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Vector3", + "m_DefaultReferenceName": "_Vector3", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "5e2bd16ca52f47cca525a00f025d4f55", + "m_Id": 0, + "m_DisplayName": "Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + +{ + "m_SGVersion": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "605d11c9510f4f318e4d244c1de0716f", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "f364e8ec1c264d1087f498a0220f9421" + }, + "m_AllowMaterialOverride": false, + "m_SurfaceType": 0, + "m_ZTestMode": 4, + "m_ZWriteControl": 0, + "m_AlphaMode": 0, + "m_RenderFace": 2, + "m_AlphaClip": false, + "m_CastShadows": true, + "m_ReceiveShadows": true, + "m_DisableTint": false, + "m_AdditionalMotionVectorMode": 0, + "m_AlembicMotionVectors": false, + "m_SupportsLODCrossFade": false, + "m_CustomEditorGUI": "", + "m_SupportVFX": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.FogNode", + "m_ObjectId": "6ad73e556ede413fa3a039c16019631a", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Fog", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -502.0000305175781, + "y": 312.66668701171877, + "width": 184.0, + "height": 102.66665649414063 + } + }, + "m_Slots": [ + { + "m_Id": "db7e33b6e7fd45f58405c2025ffd5b1a" + }, + { + "m_Id": "f7d2ad6921d748358ee7f60d097c6008" + }, + { + "m_Id": "03616d410298401386199fd3b9f9e89d" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "866137325fbb41d5bdb58cc40d213bce", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Normal", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "cb1dfedb4df04ed38abb2b5b31332bd4" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "8e67f3ef5c144c19a70e8e98ad90d8bb", + "m_Id": 0, + "m_DisplayName": "A", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "A", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.LerpNode", + "m_ObjectId": "9923ccfff9854bdbaf6f10c589cd343a", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Lerp", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -236.66668701171876, + "y": 290.66668701171877, + "width": 209.33331298828126, + "height": 328.0 + } + }, + "m_Slots": [ + { + "m_Id": "8e67f3ef5c144c19a70e8e98ad90d8bb" + }, + { + "m_Id": "cac0dfabc13c4eb381063f1788770e87" + }, + { + "m_Id": "b8e1e14d119a40fb97dd7abd7d491c77" + }, + { + "m_Id": "c7090fb9369241648a637a3fea312b01" + } + ], + "synonyms": [ + "mix", + "blend", + "linear interpolate" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "a508a6302f5c4dc6bb1b0f4402274df2", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -399.3333740234375, + "y": 38.000057220458987, + "width": 106.66665649414063, + "height": 36.000003814697269 + } + }, + "m_Slots": [ + { + "m_Id": "5e2bd16ca52f47cca525a00f025d4f55" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "cd93f8cce1c940a29d937ca826962522" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "b48e7c43f2394d398d6af984e91c554e", + "m_Group": { + "m_Id": "" + }, + "m_Name": "VertexDescription.Tangent", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": 0.0, + "y": 0.0, + "width": 0.0, + "height": 0.0 + } + }, + "m_Slots": [ + { + "m_Id": "f4cbe139d5684aea9db37bc96b5ee302" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Tangent" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "b8e1e14d119a40fb97dd7abd7d491c77", + "m_Id": 2, + "m_DisplayName": "T", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "T", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.019999999552965165 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.ColorRGBMaterialSlot", + "m_ObjectId": "be936f0e28a043d698311534714d74f3", + "m_Id": 0, + "m_DisplayName": "Base Color", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "BaseColor", + "m_StageCapability": 2, + "m_Value": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_DefaultValue": { + "x": 0.5, + "y": 0.5, + "z": 0.5 + }, + "m_Labels": [], + "m_ColorMode": 0, + "m_DefaultColor": { + "r": 0.5, + "g": 0.5, + "b": 0.5, + "a": 1.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "c7090fb9369241648a637a3fea312b01", + "m_Id": 3, + "m_DisplayName": "Out", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Out", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.DynamicVectorMaterialSlot", + "m_ObjectId": "cac0dfabc13c4eb381063f1788770e87", + "m_Id": 1, + "m_DisplayName": "B", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "B", + "m_StageCapability": 3, + "m_Value": { + "x": 1.0, + "y": 1.0, + "z": 1.0, + "w": 1.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.NormalMaterialSlot", + "m_ObjectId": "cb1dfedb4df04ed38abb2b5b31332bd4", + "m_Id": 0, + "m_DisplayName": "Normal", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Normal", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.Internal.ColorShaderProperty", + "m_ObjectId": "cd93f8cce1c940a29d937ca826962522", + "m_Guid": { + "m_GuidSerialized": "3bab0927-a75f-4dbc-a23a-170adb02708c" + }, + "m_Name": "Color", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Color", + "m_DefaultReferenceName": "_Color", + "m_OverrideReferenceName": "", + "m_GeneratePropertyBlock": true, + "m_UseCustomSlotLabel": false, + "m_CustomSlotLabel": "", + "m_DismissedVersion": 0, + "m_Precision": 0, + "overrideHLSLDeclaration": false, + "hlslDeclarationOverride": 0, + "m_Hidden": false, + "m_Value": { + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 0.0 + }, + "isMainColor": false, + "m_ColorMode": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PositionMaterialSlot", + "m_ObjectId": "db7e33b6e7fd45f58405c2025ffd5b1a", + "m_Id": 2, + "m_DisplayName": "Position", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Position", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalUnlitSubTarget", + "m_ObjectId": "f364e8ec1c264d1087f498a0220f9421" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "f4cbe139d5684aea9db37bc96b5ee302", + "m_Id": 0, + "m_DisplayName": "Tangent", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Tangent", + "m_StageCapability": 1, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0 + }, + "m_Labels": [], + "m_Space": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "f7d2ad6921d748358ee7f60d097c6008", + "m_Id": 0, + "m_DisplayName": "Color", + "m_SlotType": 1, + "m_Hidden": false, + "m_ShaderOutputName": "Color", + "m_StageCapability": 3, + "m_Value": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_DefaultValue": { + "x": 0.0, + "y": 0.0, + "z": 0.0, + "w": 0.0 + }, + "m_Labels": [] +} + diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.shadergraph.meta b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.shadergraph.meta new file mode 100644 index 00000000000..2f8f8c05a74 --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 209dbab2014420141b857eab06bdb72a +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.vfx b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.vfx new file mode 100644 index 00000000000..331eef92369 --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.vfx @@ -0,0 +1,4446 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &114340500867371532 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: d01270efd3285ea4a9d6c555cb0a8027, type: 3} + m_Name: VFXUI + m_EditorClassIdentifier: + groupInfos: [] + stickyNoteInfos: [] + categories: [] + uiBounds: + serializedVersion: 2 + x: -32 + y: -259 + width: 2172 + height: 1559 +--- !u!114 &114350483966674976 +MonoBehaviour: + m_ObjectHideFlags: 1 + 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: 7d4c867f6b72b714dbb5fd1780afe208, type: 3} + m_Name: 100_SG_FogMesh + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614541} + - {fileID: 8926484042661614547} + - {fileID: 8926484042661614562} + - {fileID: 8926484042661614564} + - {fileID: 8926484042661614580} + - {fileID: 8926484042661614582} + - {fileID: 8926484042661614597} + - {fileID: 8926484042661614603} + - {fileID: 8926484042661614625} + - {fileID: 8926484042661614627} + - {fileID: 8926484042661614663} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_UIInfos: {fileID: 114340500867371532} + m_CustomAttributes: [] + m_ParameterInfo: [] + m_ImportDependencies: [] + m_GraphVersion: 18 + m_ResourceVersion: 1 + m_SubgraphDependencies: [] + m_CategoryPath: +--- !u!2058629511 &8926484042661614527 +VisualEffectResource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 100_SG_FogMesh + m_Graph: {fileID: 114350483966674976} + m_Infos: + m_RendererSettings: + motionVectorGenerationMode: 0 + shadowCastingMode: 1 + rayTracingMode: 0 + receiveShadows: 0 + reflectionProbeUsage: 0 + lightProbeUsage: 0 + m_CullingFlags: 3 + m_UpdateMode: 0 + m_PreWarmDeltaTime: 0.05 + m_PreWarmStepCount: 0 + m_InitialEventName: OnPlay + m_InstancingMode: 0 + m_InstancingCapacity: 64 +--- !u!114 &8926484042661614541 +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: 73a13919d81fb7444849bae8b5c812a2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614543} + m_UIPosition: {x: 551, y: -259} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: Spawn System + m_Data: {fileID: 8926484042661614542} + m_InputFlowSlot: + - link: [] + - link: [] + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614547} + slotIndex: 0 + loopDuration: 0 + loopCount: 0 + delayBeforeLoop: 0 + delayAfterLoop: 0 +--- !u!114 &8926484042661614542 +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: f68759077adc0b143b6e1c101e82065e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: + m_Owners: + - {fileID: 8926484042661614541} +--- !u!114 &8926484042661614543 +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: 5e382412bb691334bb79457a6c127924, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614541} + m_Children: [] + m_UIPosition: {x: 655.3302, y: 1320.3799} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614544} + - {fileID: 8926484042661614545} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614546} + repeat: 0 + spawnMode: 0 + delayMode: 0 +--- !u!114 &8926484042661614544 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614544} + m_MasterData: + m_Owner: {fileID: 8926484042661614543} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 7 + m_Space: -1 + m_Property: + name: Count + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614545 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614545} + m_MasterData: + m_Owner: {fileID: 8926484042661614543} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: -1 + m_Property: + name: Delay + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614546 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614546} + m_MasterData: + m_Owner: {fileID: 8926484042661614543} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614547 +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: 9dfea48843f53fc438eabc12a3a30abc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614573} + m_UIPosition: {x: 551, y: 29} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614548} + m_OutputSlots: [] + m_Label: Initialize Particles + m_Data: {fileID: 8926484042661614561} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614541} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614562} + slotIndex: 0 +--- !u!114 &8926484042661614548 +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: 1b605c022ee79394a8a776c0869b3f9a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614549} + - {fileID: 8926484042661614553} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 8926484042661614547} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"center":{"x":0.0,"y":0.0,"z":0.0},"size":{"x":1.0,"y":1.0,"z":1.0}}' + m_Space: 0 + m_Property: + name: bounds + m_serializedType: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614549 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614548} + m_Children: + - {fileID: 8926484042661614550} + - {fileID: 8926484042661614551} + - {fileID: 8926484042661614552} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: center + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614550 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614549} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614551 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614549} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614552 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614549} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614553 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614548} + m_Children: + - {fileID: 8926484042661614554} + - {fileID: 8926484042661614555} + - {fileID: 8926484042661614556} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614553} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614553} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614553} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614548} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614561 +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: d78581a96eae8bf4398c282eb0b098bd, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: Minimal + m_Owners: + - {fileID: 8926484042661614547} + - {fileID: 8926484042661614562} + - {fileID: 8926484042661614564} + dataType: 0 + capacity: 7 + stripCapacity: 16 + particlePerStripCount: 16 + needsComputeBounds: 0 + boundsMode: 1 + m_Space: 0 +--- !u!114 &8926484042661614562 +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: 2dc095764ededfa4bb32fa602511ea4b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 551, y: 427} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: Update Particles + m_Data: {fileID: 8926484042661614561} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614547} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614564} + slotIndex: 0 + integration: 0 + angularIntegration: 0 + ageParticles: 1 + reapParticles: 1 + skipZeroDeltaUpdate: 0 +--- !u!114 &8926484042661614564 +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: 9956086b52aebe1449639a9ac65802c2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614569} + - {fileID: 8926484042661614714} + m_UIPosition: {x: 553, y: 649} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614567} + - {fileID: 8926484042661614568} + - {fileID: 8926484042661614592} + - {fileID: 8926484042661614655} + m_OutputSlots: [] + m_Label: + m_Data: {fileID: 8926484042661614561} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614562} + slotIndex: 0 + m_OutputFlowSlot: + - link: [] + blendMode: 1 + cullMode: 0 + zWriteMode: 0 + zTestMode: 0 + useAlphaClipping: 0 + generateMotionVector: 0 + excludeFromTUAndAA: 0 + sortingPriority: 0 + m_SubOutputs: + - {fileID: 8926484042661614572} + colorMapping: 0 + uvMode: 0 + flipbookLayout: 0 + flipbookBlendFrames: 0 + flipbookMotionVectors: 0 + useSoftParticle: 0 + vfxSystemSortPriority: 0 + sort: 0 + sortMode: 0 + revertSorting: 0 + indirectDraw: 0 + computeCulling: 0 + frustumCulling: 0 + castShadows: 1 + useExposureWeight: 0 + enableRayTracing: 0 + decimationFactor: 1 + raytracedScaleMode: 0 + needsOwnSort: 0 + needsOwnAabbBuffer: 0 + m_Topology: + rid: 1000 + m_Shading: + rid: 1001 + references: + version: 2 + RefIds: + - rid: 1000 + type: {class: ParticleTopologyMesh, ns: UnityEditor.VFX, asm: Unity.VisualEffectGraph.Editor} + data: + MeshCount: 1 + lod: 0 + - rid: 1001 + type: {class: ParticleShadingShaderGraph, ns: UnityEditor.VFX, asm: Unity.VisualEffectGraph.Editor} + data: + shaderGraph: {fileID: 4333940904281232215, guid: 209dbab2014420141b857eab06bdb72a, + type: 3} + materialSettings: + m_PropertyNames: [] + m_PropertyValues: [] + renderQueue: -1 +--- !u!114 &8926484042661614567 +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: b47b8679b468b7347a00cdd50589bc9f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614567} + m_MasterData: + m_Owner: {fileID: 8926484042661614564} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Mesh, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":10202,"guid":"0000000000000000e000000000000000","type":0}}' + m_Space: -1 + m_Property: + name: mesh + m_serializedType: + m_SerializableType: UnityEngine.Mesh, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614568 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614568} + m_MasterData: + m_Owner: {fileID: 8926484042661614564} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 4294967295 + m_Space: -1 + m_Property: + name: subMeshMask + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614569 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614564} + m_Children: [] + m_UIPosition: {x: 655.3302, y: 1320.3799} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614570} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614571} + attribute: size + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614570 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614570} + m_MasterData: + m_Owner: {fileID: 8926484042661614569} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0.5 + m_Space: -1 + m_Property: + name: _Size + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614571 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614571} + m_MasterData: + m_Owner: {fileID: 8926484042661614569} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614572 +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: 388ad3b1dc9c6ae45b630f914fab638f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 +--- !u!114 &8926484042661614573 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614547} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614574} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614579} + attribute: position + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614574 +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: 5265657162cc1a241bba03a3b0476d99, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614575} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614574} + m_MasterData: + m_Owner: {fileID: 8926484042661614573} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"position":{"x":0.0,"y":0.0,"z":0.0}}' + m_Space: 0 + m_Property: + name: _Position + m_serializedType: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614575 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614574} + m_Children: + - {fileID: 8926484042661614576} + - {fileID: 8926484042661614577} + - {fileID: 8926484042661614578} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614574} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: position + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614576 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614575} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614574} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614585} +--- !u!114 &8926484042661614577 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614575} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614574} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614575} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614574} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614579 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614579} + m_MasterData: + m_Owner: {fileID: 8926484042661614573} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614580 +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: 486e063e1ed58c843942ea4122829ab1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: -32, y: 175} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: + - {fileID: 8926484042661614581} + attribute: spawnIndex + location: 0 + mask: xyz +--- !u!114 &8926484042661614581 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614581} + m_MasterData: + m_Owner: {fileID: 8926484042661614580} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: -1 + m_Property: + name: Spawn Index + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661614586} +--- !u!114 &8926484042661614582 +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: b8ee8a7543fa09e42a7c8616f60d2ad7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 249.53331, y: 345.23334} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614586} + - {fileID: 8926484042661614584} + m_OutputSlots: + - {fileID: 8926484042661614585} + m_Operands: + - name: a + type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + - name: b + type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 +--- !u!114 &8926484042661614584 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614584} + m_MasterData: + m_Owner: {fileID: 8926484042661614582} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: -2.5 + m_Space: -1 + m_Property: + name: b + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614585 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614585} + m_MasterData: + m_Owner: {fileID: 8926484042661614582} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: + m_Space: -1 + m_Property: + name: + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 1 + m_LinkedSlots: + - {fileID: 8926484042661614576} +--- !u!114 &8926484042661614586 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614586} + m_MasterData: + m_Owner: {fileID: 8926484042661614582} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: -1 + m_Property: + name: a + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: + - {fileID: 8926484042661614581} +--- !u!114 &8926484042661614592 +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: c82227d5759e296488798b1554a72a15, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614593} + - {fileID: 8926484042661614594} + - {fileID: 8926484042661614595} + - {fileID: 8926484042661614596} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614592} + m_MasterData: + m_Owner: {fileID: 8926484042661614564} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Color, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"r":1.0,"g":1.0,"b":1.0,"a":0.0}' + m_Space: -1 + m_Property: + name: _Color + m_serializedType: + m_SerializableType: UnityEngine.Color, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614593 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614592} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614592} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: r + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614594 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614592} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614592} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: g + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614592} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614592} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: b + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614596 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614592} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614592} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: a + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614597 +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: 73a13919d81fb7444849bae8b5c812a2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614599} + m_UIPosition: {x: 1254, y: -180} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: Spawn System + m_Data: {fileID: 8926484042661614598} + m_InputFlowSlot: + - link: [] + - link: [] + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614603} + slotIndex: 0 + loopDuration: 0 + loopCount: 0 + delayBeforeLoop: 0 + delayAfterLoop: 0 +--- !u!114 &8926484042661614598 +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: f68759077adc0b143b6e1c101e82065e, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: + m_Owners: + - {fileID: 8926484042661614597} +--- !u!114 &8926484042661614599 +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: 5e382412bb691334bb79457a6c127924, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614597} + m_Children: [] + m_UIPosition: {x: 1504.8304, y: 1808.0043} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614600} + - {fileID: 8926484042661614601} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614602} + repeat: 0 + spawnMode: 0 + delayMode: 0 +--- !u!114 &8926484042661614600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614600} + m_MasterData: + m_Owner: {fileID: 8926484042661614599} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: -1 + m_Property: + name: Count + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614601 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614601} + m_MasterData: + m_Owner: {fileID: 8926484042661614599} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 0 + m_Space: -1 + m_Property: + name: Delay + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614602 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614602} + m_MasterData: + m_Owner: {fileID: 8926484042661614599} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614603 +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: 9dfea48843f53fc438eabc12a3a30abc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614618} + m_UIPosition: {x: 1254, y: 108} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614604} + m_OutputSlots: [] + m_Label: Initialize Particles + m_Data: {fileID: 8926484042661614617} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614597} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614625} + slotIndex: 0 +--- !u!114 &8926484042661614604 +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: 1b605c022ee79394a8a776c0869b3f9a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614605} + - {fileID: 8926484042661614609} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 8926484042661614603} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"center":{"x":0.0,"y":0.0,"z":0.0},"size":{"x":10.0,"y":10.0,"z":10.0}}' + m_Space: 0 + m_Property: + name: bounds + m_serializedType: + m_SerializableType: UnityEditor.VFX.AABox, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614604} + m_Children: + - {fileID: 8926484042661614606} + - {fileID: 8926484042661614607} + - {fileID: 8926484042661614608} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: center + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614605} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614605} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614605} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614604} + m_Children: + - {fileID: 8926484042661614610} + - {fileID: 8926484042661614611} + - {fileID: 8926484042661614612} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: size + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614609} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614609} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614612 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614609} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614604} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614617 +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: d78581a96eae8bf4398c282eb0b098bd, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + title: Minimal + m_Owners: + - {fileID: 8926484042661614603} + - {fileID: 8926484042661614625} + - {fileID: 8926484042661614663} + - {fileID: 8926484042661614627} + dataType: 0 + capacity: 7 + stripCapacity: 16 + particlePerStripCount: 16 + needsComputeBounds: 0 + boundsMode: 1 + m_Space: 0 +--- !u!114 &8926484042661614618 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614603} + m_Children: [] + m_UIPosition: {x: 849.50024, y: 487.62436} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614619} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614624} + attribute: position + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614619 +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: 5265657162cc1a241bba03a3b0476d99, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614620} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614619} + m_MasterData: + m_Owner: {fileID: 8926484042661614618} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"position":{"x":-13.539999961853028,"y":0.0,"z":8.380000114440918}}' + m_Space: 0 + m_Property: + name: _Position + m_serializedType: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614619} + m_Children: + - {fileID: 8926484042661614621} + - {fileID: 8926484042661614622} + - {fileID: 8926484042661614623} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614619} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: position + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614621 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614620} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614619} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614620} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614619} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614620} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614619} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614624 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614624} + m_MasterData: + m_Owner: {fileID: 8926484042661614618} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614625 +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: 2dc095764ededfa4bb32fa602511ea4b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: [] + m_UIPosition: {x: 1254, y: 506} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: [] + m_OutputSlots: [] + m_Label: Update Particles + m_Data: {fileID: 8926484042661614617} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614603} + slotIndex: 0 + m_OutputFlowSlot: + - link: + - context: {fileID: 8926484042661614663} + slotIndex: 0 + - context: {fileID: 8926484042661614627} + slotIndex: 0 + integration: 0 + angularIntegration: 0 + ageParticles: 1 + reapParticles: 1 + skipZeroDeltaUpdate: 0 +--- !u!114 &8926484042661614627 +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: 9956086b52aebe1449639a9ac65802c2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614695} + - {fileID: 8926484042661614641} + - {fileID: 8926484042661614637} + m_UIPosition: {x: 1689, y: 696} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614630} + - {fileID: 8926484042661614631} + - {fileID: 8926484042661614632} + - {fileID: 8926484042661614659} + m_OutputSlots: [] + m_Label: + m_Data: {fileID: 8926484042661614617} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614625} + slotIndex: 0 + m_OutputFlowSlot: + - link: [] + blendMode: 1 + cullMode: 0 + zWriteMode: 0 + zTestMode: 0 + useAlphaClipping: 0 + generateMotionVector: 0 + excludeFromTUAndAA: 0 + sortingPriority: 0 + m_SubOutputs: + - {fileID: 8926484042661614640} + colorMapping: 0 + uvMode: 0 + flipbookLayout: 0 + flipbookBlendFrames: 0 + flipbookMotionVectors: 0 + useSoftParticle: 0 + vfxSystemSortPriority: 0 + sort: 0 + sortMode: 0 + revertSorting: 0 + indirectDraw: 0 + computeCulling: 0 + frustumCulling: 0 + castShadows: 1 + useExposureWeight: 0 + enableRayTracing: 0 + decimationFactor: 1 + raytracedScaleMode: 0 + needsOwnSort: 0 + needsOwnAabbBuffer: 0 + m_Topology: + rid: 1000 + m_Shading: + rid: 1001 + references: + version: 2 + RefIds: + - rid: 1000 + type: {class: ParticleTopologyMesh, ns: UnityEditor.VFX, asm: Unity.VisualEffectGraph.Editor} + data: + MeshCount: 1 + lod: 0 + - rid: 1001 + type: {class: ParticleShadingShaderGraph, ns: UnityEditor.VFX, asm: Unity.VisualEffectGraph.Editor} + data: + shaderGraph: {fileID: 4333940904281232215, guid: 209dbab2014420141b857eab06bdb72a, + type: 3} + materialSettings: + m_PropertyNames: [] + m_PropertyValues: [] + renderQueue: -1 +--- !u!114 &8926484042661614630 +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: b47b8679b468b7347a00cdd50589bc9f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614630} + m_MasterData: + m_Owner: {fileID: 8926484042661614627} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Mesh, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":10202,"guid":"0000000000000000e000000000000000","type":0}}' + m_Space: -1 + m_Property: + name: mesh + m_serializedType: + m_SerializableType: UnityEngine.Mesh, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614631 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614631} + m_MasterData: + m_Owner: {fileID: 8926484042661614627} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 4294967295 + m_Space: -1 + m_Property: + name: subMeshMask + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614632 +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: c82227d5759e296488798b1554a72a15, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614633} + - {fileID: 8926484042661614634} + - {fileID: 8926484042661614635} + - {fileID: 8926484042661614636} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614632} + m_MasterData: + m_Owner: {fileID: 8926484042661614627} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Color, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"r":1.0,"g":1.0,"b":1.0,"a":0.0}' + m_Space: -1 + m_Property: + name: _Color + m_serializedType: + m_SerializableType: UnityEngine.Color, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614633 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614632} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614632} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: r + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614634 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614632} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614632} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: g + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614635 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614632} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614632} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: b + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614636 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614632} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614632} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: a + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614637 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614627} + m_Children: [] + m_UIPosition: {x: 1504.8304, y: 1808.0043} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614638} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614639} + attribute: size + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614638 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614638} + m_MasterData: + m_Owner: {fileID: 8926484042661614637} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: -1 + m_Property: + name: _Size + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614639 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614639} + m_MasterData: + m_Owner: {fileID: 8926484042661614637} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614640 +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: 388ad3b1dc9c6ae45b630f914fab638f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 +--- !u!114 &8926484042661614641 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614627} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614642} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614646} + attribute: scale + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614643} + - {fileID: 8926484042661614644} + - {fileID: 8926484042661614645} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614642} + m_MasterData: + m_Owner: {fileID: 8926484042661614641} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":30.0,"y":0.5,"z":0.5}' + m_Space: -1 + m_Property: + name: _Scale + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614642} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614642} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614642} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614642} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614645 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614642} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614642} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614646 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614646} + m_MasterData: + m_Owner: {fileID: 8926484042661614641} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614655 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614656} + - {fileID: 8926484042661614657} + - {fileID: 8926484042661614658} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614655} + m_MasterData: + m_Owner: {fileID: 8926484042661614564} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":0.0,"y":0.0,"z":0.0}' + m_Space: -1 + m_Property: + name: _Vector3 + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614656 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614655} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614655} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614657 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614655} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614655} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614658 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614655} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614655} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614659 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614660} + - {fileID: 8926484042661614661} + - {fileID: 8926484042661614662} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614659} + m_MasterData: + m_Owner: {fileID: 8926484042661614627} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":0.0,"y":0.0,"z":0.0}' + m_Space: -1 + m_Property: + name: _Vector3 + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614660 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614659} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614659} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614661 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614659} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614659} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614662 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614659} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614659} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614663 +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: e837ba02e1cb47d4394b6c186d164156, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 114350483966674976} + m_Children: + - {fileID: 8926484042661614670} + - {fileID: 8926484042661614673} + - {fileID: 8926484042661614707} + m_UIPosition: {x: 1212, y: 704} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614664} + - {fileID: 8926484042661614665} + - {fileID: 8926484042661614666} + m_OutputSlots: [] + m_Label: + m_Data: {fileID: 8926484042661614617} + m_InputFlowSlot: + - link: + - context: {fileID: 8926484042661614625} + slotIndex: 0 + m_OutputFlowSlot: + - link: [] + blendMode: 3 + cullMode: 0 + zWriteMode: 0 + zTestMode: 0 + useAlphaClipping: 0 + generateMotionVector: 0 + excludeFromTUAndAA: 0 + sortingPriority: 0 + m_SubOutputs: + - {fileID: 8926484042661614668} + colorMapping: 0 + uvMode: 0 + flipbookLayout: 0 + flipbookBlendFrames: 0 + flipbookMotionVectors: 0 + useSoftParticle: 0 + vfxSystemSortPriority: 0 + sort: 0 + sortMode: 0 + revertSorting: 0 + indirectDraw: 0 + computeCulling: 0 + frustumCulling: 0 + castShadows: 0 + useExposureWeight: 0 + enableRayTracing: 0 + decimationFactor: 1 + raytracedScaleMode: 0 + needsOwnSort: 0 + needsOwnAabbBuffer: 0 + shaderGraph: {fileID: 0} + materialSettings: + m_PropertyNames: [] + m_PropertyValues: [] + renderQueue: -1 + MeshCount: 1 + lod: 0 +--- !u!114 &8926484042661614664 +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: b47b8679b468b7347a00cdd50589bc9f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614664} + m_MasterData: + m_Owner: {fileID: 8926484042661614663} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Mesh, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":10202,"guid":"0000000000000000e000000000000000","type":0}}' + m_Space: -1 + m_Property: + name: mesh + m_serializedType: + m_SerializableType: UnityEngine.Mesh, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614665 +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: c52d920e7fff73b498050a6b3c4404ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614665} + m_MasterData: + m_Owner: {fileID: 8926484042661614663} + m_Value: + m_Type: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 4294967295 + m_Space: -1 + m_Property: + name: subMeshMask + m_serializedType: + m_SerializableType: System.UInt32, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614666 +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: 70a331b1d86cc8d4aa106ccbe0da5852, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614666} + m_MasterData: + m_Owner: {fileID: 8926484042661614663} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"obj":{"fileID":2800000,"guid":"127279d577f25ac4ea17dae3782e5074","type":3}}' + m_Space: -1 + m_Property: + name: mainTexture + m_serializedType: + m_SerializableType: UnityEngine.Texture2D, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614668 +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: 388ad3b1dc9c6ae45b630f914fab638f, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 +--- !u!114 &8926484042661614670 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614663} + m_Children: [] + m_UIPosition: {x: 1504.8304, y: 1808.0043} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614671} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614672} + attribute: size + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614671 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614671} + m_MasterData: + m_Owner: {fileID: 8926484042661614670} + m_Value: + m_Type: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: 1 + m_Space: -1 + m_Property: + name: _Size + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614672 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614672} + m_MasterData: + m_Owner: {fileID: 8926484042661614670} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614673 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614663} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614674} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614678} + attribute: scale + Composition: 0 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614674 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614675} + - {fileID: 8926484042661614676} + - {fileID: 8926484042661614677} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614674} + m_MasterData: + m_Owner: {fileID: 8926484042661614673} + m_Value: + m_Type: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"x":30.0,"y":0.5,"z":0.5}' + m_Space: -1 + m_Property: + name: _Scale + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614675 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614674} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614674} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614676 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614674} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614674} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614677 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614674} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614674} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614678 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614678} + m_MasterData: + m_Owner: {fileID: 8926484042661614673} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614695 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614627} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614696} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614701} + attribute: position + Composition: 1 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614696 +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: 5265657162cc1a241bba03a3b0476d99, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614697} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614696} + m_MasterData: + m_Owner: {fileID: 8926484042661614695} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"position":{"x":0.0,"y":0.0,"z":-0.75}}' + m_Space: 0 + m_Property: + name: _Position + m_serializedType: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614697 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614696} + m_Children: + - {fileID: 8926484042661614698} + - {fileID: 8926484042661614699} + - {fileID: 8926484042661614700} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614696} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: position + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614698 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614697} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614696} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614699 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614697} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614696} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614700 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614697} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614696} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614701 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614701} + m_MasterData: + m_Owner: {fileID: 8926484042661614695} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614707 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614663} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614708} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614713} + attribute: position + Composition: 1 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614708 +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: 5265657162cc1a241bba03a3b0476d99, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614709} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614708} + m_MasterData: + m_Owner: {fileID: 8926484042661614707} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"position":{"x":0.0,"y":0.0,"z":-2.75}}' + m_Space: 0 + m_Property: + name: _Position + m_serializedType: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614708} + m_Children: + - {fileID: 8926484042661614710} + - {fileID: 8926484042661614711} + - {fileID: 8926484042661614712} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614708} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: position + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614710 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614709} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614708} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614711 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614709} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614708} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614709} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614708} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614713 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614713} + m_MasterData: + m_Owner: {fileID: 8926484042661614707} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614714 +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: a971fa2e110a0ac42ac1d8dae408704b, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614564} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 0 + m_UISuperCollapsed: 0 + m_InputSlots: + - {fileID: 8926484042661614715} + m_OutputSlots: [] + m_Disabled: 0 + m_ActivationSlot: {fileID: 8926484042661614720} + attribute: position + Composition: 1 + Source: 0 + Random: 0 + channels: 6 +--- !u!114 &8926484042661614715 +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: 5265657162cc1a241bba03a3b0476d99, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: + - {fileID: 8926484042661614716} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614715} + m_MasterData: + m_Owner: {fileID: 8926484042661614714} + m_Value: + m_Type: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_SerializableObject: '{"position":{"x":0.0,"y":0.0,"z":4.25}}' + m_Space: 0 + m_Property: + name: _Position + m_serializedType: + m_SerializableType: UnityEditor.VFX.Position, Unity.VisualEffectGraph.Editor, + Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614716 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac39bd03fca81b849929b9c966f1836a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614715} + m_Children: + - {fileID: 8926484042661614717} + - {fileID: 8926484042661614718} + - {fileID: 8926484042661614719} + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614715} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: position + m_serializedType: + m_SerializableType: UnityEngine.Vector3, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614717 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614716} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614715} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: x + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614718 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614716} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614715} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: y + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614719 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f780aa281814f9842a7c076d436932e7, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 8926484042661614716} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614715} + m_MasterData: + m_Owner: {fileID: 0} + m_Value: + m_Type: + m_SerializableType: + m_SerializableObject: + m_Space: -1 + m_Property: + name: z + m_serializedType: + m_SerializableType: System.Single, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] +--- !u!114 &8926484042661614720 +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: b4c11ff25089a324daf359f4b0629b33, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UIIgnoredErrors: [] + m_Parent: {fileID: 0} + m_Children: [] + m_UIPosition: {x: 0, y: 0} + m_UICollapsed: 1 + m_UISuperCollapsed: 0 + m_MasterSlot: {fileID: 8926484042661614720} + m_MasterData: + m_Owner: {fileID: 8926484042661614714} + m_Value: + m_Type: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_SerializableObject: True + m_Space: -1 + m_Property: + name: _vfx_enabled + m_serializedType: + m_SerializableType: System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, + PublicKeyToken=b77a5c561934e089 + m_Direction: 0 + m_LinkedSlots: [] diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.vfx.meta b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.vfx.meta new file mode 100644 index 00000000000..ba5a1a008ba --- /dev/null +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Assets/GraphicsTests/100_SG_FogMesh.vfx.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 20e235b4f4e8aa94386bf3cbe42dbda6 +VisualEffectImporter: + externalObjects: {} + serializedVersion: 1 + template: + name: + category: + description: + icon: {instanceID: 0} + thumbnail: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 44aba847d322689d228afa01cf5e2072812baa2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Maia?= Date: Wed, 20 Nov 2024 06:14:54 +0000 Subject: [PATCH 49/85] HDRP Composition Layer fixes Fixes UUM-84610. The main issue is here: https://github.cds.internal.unity3d.com/unity/unity/blob/671a19ca55bb3d0eea4360949aa30d23ab69bf4a/Packages/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs#L245-L250 Removing the `!enabled` condition fixes the issue. If the layer position on the stack is 0, it should always clear, regardless of the value of `enabled`. Otherwise, the first image might have garbage values on some platforms, which can cause visual issues (in this case on MacOS). All the other changes are related to checking for null pointers, to avoid raising null pointer exceptions. I encountered several of these while fiddling around with the settings of the composition layer. --- .../Runtime/Compositor/CompositionLayer.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs index c75a63ad8e0..5e2e61e2809 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Compositor/CompositionLayer.cs @@ -247,7 +247,7 @@ public void Init(string layerID = "", bool allowUndo = false) // - is not shared between layers // - is not used in an mage/video layer (in this case the camera is not exposed at all, so it makes sense to let the compositor manage it) // - it does not force-clear the RT (the first layer of a stack, even if disabled by the user), still clears the RT - bool shouldClear = !enabled && m_LayerPositionInStack == 0 && m_Camera; + bool shouldClear = m_LayerPositionInStack == 0 && m_Camera; bool isImageOrVideo = (m_Type == LayerType.Image || m_Type == LayerType.Video); if (!isImageOrVideo && !hasLayerOverrides && !shouldClear && !compositor.IsThisCameraShared(m_Camera)) { @@ -287,7 +287,7 @@ public void Init(string layerID = "", bool allowUndo = false) if (m_OutputTarget != OutputTarget.CameraStack && m_RenderTarget == null) { // If we don't have a valid camera (zero width or height) avoid creating the RT - if (compositor.outputCamera.pixelWidth > 0 && compositor.outputCamera.pixelHeight > 0) + if (compositor.outputCamera && compositor.outputCamera.pixelWidth > 0 && compositor.outputCamera.pixelHeight > 0) { float resScale = EnumToScale(m_ResolutionScale); int scaledWidth = (int)(resScale * compositor.outputCamera.pixelWidth); @@ -615,15 +615,19 @@ public void SetupClearColor() { if (m_LayerCamera && m_Camera) { - m_LayerCamera.enabled = true; - m_LayerCamera.cullingMask = 0; var cameraData = m_LayerCamera.GetComponent(); var cameraDataOrig = m_Camera.GetComponent(); - cameraData.clearColorMode = cameraDataOrig.clearColorMode; - cameraData.clearDepth = true; + if (cameraData && cameraDataOrig) + { + m_LayerCamera.enabled = true; + m_LayerCamera.cullingMask = 0; + + cameraData.clearColorMode = cameraDataOrig.clearColorMode; + cameraData.clearDepth = true; - m_ClearsBackGround = true; + m_ClearsBackGround = true; + } } } From 9b33768a4b7118d6c8299c02a24a61528d6f9c6b Mon Sep 17 00:00:00 2001 From: Julien Amsellem Date: Wed, 20 Nov 2024 06:15:48 +0000 Subject: [PATCH 50/85] [VFX] Allow properties to be reordered inside a category Jira: UUM-83678 Steps to reproduce: 1. Import the provided package 2. Open the VFX VFXG_PropertyOrdering 3. Open the Blackboard. 4. On the blackboard, try to re-order the different inside the category Actual results: -Property inside the Category cannot be ordered. -Also, the Category displayed in the Inspector when selecting the output are not in sync with the Order of the blackboard. -a mismatch of category order appears to be possible between the "ALL" tab and the "Properties" tab. Expected results: -Property inside Category should be orderable like when outside of properties. -When reordering Categories inside the Blackboard, the order should be reflected in the instance Inspector. -The Category order should be in sync between the different tabs. Reproducible with versions: 6000.0.20f1 Not reproducible with versions: 2022.3LTS --- .../Editor/GraphView/Blackboard/VFXBlackboard.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Blackboard/VFXBlackboard.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Blackboard/VFXBlackboard.cs index c8da0903e86..6314210ce5c 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Blackboard/VFXBlackboard.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Blackboard/VFXBlackboard.cs @@ -430,8 +430,10 @@ private DragVisualMode OnHandleDrop(HandleDragAndDropArgs arg) var parentItem = m_Treeview.GetItemDataForId(arg.parentId); if (arg.parentId < 0 || parentItem is PropertyCategory { isRoot: true } and not OutputCategory) { + var parentItemData = m_ParametersController.Find(x => x.id == arg.parentId); + var rootPropertiesCount = parentItemData.children.Count(x => x.data is PropertyItem); fieldId.Add(category.id); - controller.MoveCategory(category.title, childIndex); + controller.MoveCategory(category.title, childIndex - rootPropertiesCount); } } } @@ -547,6 +549,10 @@ private DragVisualMode OnDragAndDropUpdate(HandleDragAndDropArgs arg) { return DragVisualMode.Move; } + else if (arg.dropPosition == DragAndDropPosition.BetweenItems && parentItem is PropertyCategory && m_Treeview.selectedItem is PropertyItem) + { + return DragVisualMode.Move; + } return DragVisualMode.Rejected; } From 015883b53a4a8f5b44ada80ec56fd68479019490 Mon Sep 17 00:00:00 2001 From: Pema Malling Date: Wed, 20 Nov 2024 06:16:09 +0000 Subject: [PATCH 51/85] Use correct per-eye world space position when sampling APV in HDRP https://jira.unity3d.com/browse/UUM-84382 This fix addresses a bug where the appearance of APV is noticeably different on each eye when using Single Pass Instanced XR rendering with Camera Relative Rendering enabled. It does not repro with Multi Pass XR rendering or with Camera Relative Rendering disabled. The cause is that most of HDRP's lightloop uses "center eye" position for applying lights, i.e. the position halfway between each eye. It does so by modifying the input worldspace camera-relative fragment position to be the center eye position. The code that samples APV then erroneously passes this center eye position to `GetAbsolutePositionWS(..)` and uses the resulting position to tap the 3D texture. This is just wrong, `GetAbsolutePositionWS(..)` expects per-eye worldspace camera-relative position as input, but we give it center eye position, yielding bogus results. Unlike the rest of the lightloop, APV doesn't need to use center eye position for sampling. It can use the actual per-eye worldspace (non-camera-relative) fragment position. My fix is to keep the unmodified camera-relative worldspace position around, pass it to `GetAbsolutePositionWS(..)` and use the result to sample APV. Here's a before and after. The difference is subtle, but notice that the penumbra width is quite different on each before the fix. ![gifmaker_me (1)](https://media.github.cds.internal.unity3d.com/user/2392/files/eb43dc4f-f6ac-4efb-9347-e1befb0c3898) --- .../Runtime/Lighting/LightLoop/LightLoop.hlsl | 5 +- .../Scenes/2x_Lighting/2124_APV_XR.meta | 8 + .../Scenes/2x_Lighting/2124_APV_XR.unity | 2460 +++++++++++++++++ .../Scenes/2x_Lighting/2124_APV_XR.unity.meta | 7 + ...4_APV_XR Baking Set-Default.CellData.bytes | Bin 0 -> 1048576 bytes ..._XR Baking Set-Default.CellData.bytes.meta | 7 + ... Baking Set-Default.CellOptionalData.bytes | 1 + ...ng Set-Default.CellOptionalData.bytes.meta | 7 + ...g Set-Default.CellProbeOcclusionData.bytes | Bin 0 -> 262144 bytes ...-Default.CellProbeOcclusionData.bytes.meta | 7 + ...124_APV_XR Baking Set.CellBricksData.bytes | Bin 0 -> 6368 bytes ...PV_XR Baking Set.CellBricksData.bytes.meta | 7 + ...124_APV_XR Baking Set.CellSharedData.bytes | Bin 0 -> 65536 bytes ...PV_XR Baking Set.CellSharedData.bytes.meta | 7 + ...24_APV_XR Baking Set.CellSupportData.bytes | Bin 0 -> 1310720 bytes ...V_XR Baking Set.CellSupportData.bytes.meta | 7 + .../2124_APV_XR/2124_APV_XR Baking Set.asset | 365 +++ .../2124_APV_XR Baking Set.asset.meta | 8 + .../2x_Lighting/2124_APV_XR/2124_LSA.lighting | 63 + .../2124_APV_XR/2124_LSA.lighting.meta | 8 + .../2124_APV_XR/2124_Profile.asset | 62 + .../2124_APV_XR/2124_Profile.asset.meta | 8 + .../ProjectSettings/EditorBuildSettings.asset | 3 + 23 files changed, 3039 insertions(+), 1 deletion(-) create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellData.bytes create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellData.bytes.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellOptionalData.bytes create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellOptionalData.bytes.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellProbeOcclusionData.bytes create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellProbeOcclusionData.bytes.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellBricksData.bytes create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellBricksData.bytes.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSharedData.bytes create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSharedData.bytes.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSupportData.bytes create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSupportData.bytes.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.asset create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.asset.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_LSA.lighting create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_LSA.lighting.meta create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_Profile.asset create mode 100644 Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_Profile.asset.meta diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.hlsl b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.hlsl index 1d161358578..bfc959234ea 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.hlsl +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Lighting/LightLoop/LightLoop.hlsl @@ -192,6 +192,9 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS // With XR single-pass and camera-relative: offset position to do lighting computations from the combined center view (original camera matrix). // This is required because there is only one list of lights generated on the CPU. Shadows are also generated once and shared between the instanced views. + // We keep the unmodified per-eye position around since we use it to sample APV. Passing the modified world space position to GetAbsolutePositionWS after + // this point would give incorrect results. + float3 unmodifiedPositionWS = posInput.positionWS; ApplyCameraRelativeXR(posInput.positionWS); LightLoopContext context; @@ -477,7 +480,7 @@ void LightLoop( float3 V, PositionInputs posInput, PreLightData preLightData, BS // Reflect normal to get lighting for reflection probe tinting float3 R = reflect(-V, bsdfData.normalWS); - EvaluateAdaptiveProbeVolume(GetAbsolutePositionWS(posInput.positionWS), + EvaluateAdaptiveProbeVolume(GetAbsolutePositionWS(unmodifiedPositionWS), bsdfData.normalWS, -bsdfData.normalWS, R, diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.meta new file mode 100644 index 00000000000..b889007a2a9 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2bad5a4b3fbc48449a05a1b0760c1e45 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity new file mode 100644 index 00000000000..24650b86aed --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity @@ -0,0 +1,2460 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000000, guid: 12c969d1541b9554b900fb360625e746, + type: 2} + m_LightingSettings: {fileID: 4890085278179872738, guid: 4dc45e48eab1c08459c53e21c2f1e157, + type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &64778219 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 64778223} + - component: {fileID: 64778222} + - component: {fileID: 64778221} + - component: {fileID: 64778220} + m_Layer: 0 + m_Name: Capsule + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!136 &64778220 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 64778219} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &64778221 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 64778219} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &64778222 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 64778219} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &64778223 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 64778219} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.423, y: 1.129, z: -0.436} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &153607300 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 153607304} + - component: {fileID: 153607303} + - component: {fileID: 153607302} + - component: {fileID: 153607301} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 126 + m_IsActive: 1 +--- !u!65 &153607301 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153607300} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &153607302 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153607300} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 2 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &153607303 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153607300} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &153607304 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 153607300} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.08} + m_LocalScale: {x: 5, y: 0.5, z: 5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &157207112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 157207114} + - component: {fileID: 157207113} + - component: {fileID: 157207115} + m_Layer: 0 + m_Name: Sun + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &157207113 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 157207112} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 0.26383924, g: 1, b: 0, a: 1} + m_Intensity: 3 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 1 + m_LightShadowCasterMode: 2 + m_AreaSize: {x: 0.5, y: 0.5} + m_BounceIntensity: 1 + m_ColorTemperature: 6500 + m_UseColorTemperature: 1 + m_BoundingSphereOverride: {x: 1.1081e-41, y: 2.524355e-29, z: 0, w: 3.9415303e+12} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 2.5 + m_LightUnit: 2 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 0 +--- !u!4 &157207114 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 157207112} + serializedVersion: 2 + m_LocalRotation: {x: 0.3752519, y: -0.1811887, z: 0.075050816, w: 0.90593827} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 45, y: -22.62, z: 0} +--- !u!114 &157207115 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 157207112} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a68c43fe1f2a47cfa234b5eeaa98012, type: 3} + m_Name: + m_EditorClassIdentifier: + m_PointlightHDType: 0 + m_SpotLightShape: 0 + m_AreaLightShape: 0 + m_EnableSpotReflector: 1 + m_LightUnit: 0 + m_LuxAtDistance: 1 + m_Intensity: 0 + m_InnerSpotPercent: 0 + m_SpotIESCutoffPercent: 100 + m_LightDimmer: 1 + m_VolumetricDimmer: 1 + m_FadeDistance: 10000 + m_VolumetricFadeDistance: 10000 + m_AffectDiffuse: 1 + m_AffectSpecular: 1 + m_NonLightmappedOnly: 0 + m_ShapeWidth: 0.5 + m_ShapeHeight: 0.5 + m_AspectRatio: 1 + m_ShapeRadius: 0.025 + m_SoftnessScale: 1 + m_UseCustomSpotLightShadowCone: 0 + m_CustomSpotLightShadowCone: 30 + m_MaxSmoothness: 0.99 + m_ApplyRangeAttenuation: 1 + m_DisplayAreaLightEmissiveMesh: 0 + m_AreaLightCookie: {fileID: 0} + m_IESPoint: {fileID: 0} + m_IESSpot: {fileID: 0} + m_IncludeForRayTracing: 1 + m_IncludeForPathTracing: 1 + m_AreaLightShadowCone: 120 + m_UseScreenSpaceShadows: 0 + m_InteractsWithSky: 1 + m_AngularDiameter: 0.5 + diameterMultiplerMode: 0 + diameterMultiplier: 1 + diameterOverride: 0.5 + celestialBodyShadingSource: 1 + sunLightOverride: {fileID: 0} + sunColor: {r: 1, g: 1, b: 1, a: 1} + sunIntensity: 130000 + moonPhase: 0.2 + moonPhaseRotation: 0 + earthshine: 1 + flareSize: 2 + flareTint: {r: 1, g: 1, b: 1, a: 1} + flareFalloff: 4 + flareMultiplier: 1 + surfaceTexture: {fileID: 0} + surfaceTint: {r: 1, g: 1, b: 1, a: 1} + m_Distance: 1.5e+11 + m_UseRayTracedShadows: 0 + m_NumRayTracingSamples: 4 + m_FilterTracedShadow: 1 + m_FilterSizeTraced: 16 + m_SunLightConeAngle: 0.5 + m_LightShadowRadius: 0.5 + m_SemiTransparentShadow: 0 + m_ColorShadow: 1 + m_DistanceBasedFiltering: 0 + m_EvsmExponent: 15 + m_EvsmLightLeakBias: 0 + m_EvsmVarianceBias: 0.00001 + m_EvsmBlurPasses: 0 + m_LightlayersMask: 1 + m_LinkShadowLayers: 1 + m_ShadowNearPlane: 0.1 + m_BlockerSampleCount: 24 + m_FilterSampleCount: 16 + m_MinFilterSize: 0.1 + m_DirLightPCSSBlockerSampleCount: 24 + m_DirLightPCSSFilterSampleCount: 16 + m_DirLightPCSSMaxPenumbraSize: 0.56 + m_DirLightPCSSMaxSamplingDistance: 0.5 + m_DirLightPCSSMinFilterSizeTexels: 1.5 + m_DirLightPCSSMinFilterMaxAngularDiameter: 10 + m_DirLightPCSSBlockerSearchAngularDiameter: 12 + m_DirLightPCSSBlockerSamplingClumpExponent: 2 + m_KernelSize: 5 + m_LightAngle: 1 + m_MaxDepthBias: 0.001 + m_ShadowResolution: + m_Override: 512 + m_UseOverride: 1 + m_Level: 0 + m_ShadowDimmer: 1 + m_VolumetricShadowDimmer: 1 + m_ShadowFadeDistance: 10000 + m_UseContactShadow: + m_Override: 0 + m_UseOverride: 1 + m_Level: 0 + m_RayTracedContactShadow: 0 + m_ShadowTint: {r: 0, g: 0, b: 0, a: 1} + m_PenumbraTint: 0 + m_NormalBias: 0.75 + m_SlopeBias: 0.5 + m_ShadowUpdateMode: 0 + m_AlwaysDrawDynamicShadows: 0 + m_UpdateShadowOnLightMovement: 0 + m_CachedShadowTranslationThreshold: 0.01 + m_CachedShadowAngularThreshold: 0.5 + m_BarnDoorAngle: 90 + m_BarnDoorLength: 0.05 + m_preserveCachedShadow: 0 + m_OnDemandShadowRenderOnPlacement: 1 + m_ShadowCascadeRatios: + - 0.05 + - 0.2 + - 0.3 + m_ShadowCascadeBorders: + - 0.2 + - 0.2 + - 0.2 + - 0.2 + m_ShadowAlgorithm: 0 + m_ShadowVariant: 0 + m_ShadowPrecision: 0 + useOldInspector: 0 + useVolumetric: 1 + featuresFoldout: 1 + m_AreaLightEmissiveMeshShadowCastingMode: 0 + m_AreaLightEmissiveMeshMotionVectorGenerationMode: 0 + m_AreaLightEmissiveMeshLayer: -1 + m_Version: 13 + m_ObsoleteShadowResolutionTier: 1 + m_ObsoleteUseShadowQualitySettings: 0 + m_ObsoleteCustomShadowResolution: 512 + m_ObsoleteContactShadows: 0 +--- !u!1 &233175593 +GameObject: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 233175595} + - component: {fileID: 233175594} + m_Layer: 0 + m_Name: SceneIDMap + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &233175594 +MonoBehaviour: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 233175593} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1585798124} + m_Name: + m_EditorClassIdentifier: + m_Entries: [] +--- !u!4 &233175595 +Transform: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 233175593} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &250828830 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 250828834} + - component: {fileID: 250828833} + - component: {fileID: 250828832} + - component: {fileID: 250828831} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &250828831 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250828830} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &250828832 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250828830} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 2 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &250828833 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250828830} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &250828834 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 250828830} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 2.49, y: 1.51, z: 0} + m_LocalScale: {x: 5, y: 0.5, z: 5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!1 &272372562 +GameObject: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 272372564} + - component: {fileID: 272372563} + m_Layer: 0 + m_Name: SceneIDMap + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &272372563 +MonoBehaviour: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272372562} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 757158781} + m_Name: + m_EditorClassIdentifier: + m_Entries: [] +--- !u!4 &272372564 +Transform: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 272372562} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &432432459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 432432461} + - component: {fileID: 432432460} + m_Layer: 0 + m_Name: Sky and Fog Volume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &432432460 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 432432459} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 172515602e62fb746b5d573b38a5fe58, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IsGlobal: 1 + priority: 0 + blendDistance: 0 + weight: 1 + sharedProfile: {fileID: 11400000, guid: 51187ee1b560cc346a47666e10d20c30, type: 2} +--- !u!4 &432432461 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 432432459} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!115 &569344474 +MonoScript: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 7 + m_DefaultReferences: {} + m_Icon: {fileID: 0} + m_Type: 0 + m_ExecutionOrder: 0 + m_ClassName: SceneObjectIDMapSceneAsset + m_Namespace: UnityEngine.Rendering.HighDefinition + m_AssemblyName: Unity.RenderPipelines.HighDefinition.Runtime +--- !u!1 &607219208 +GameObject: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 607219210} + - component: {fileID: 607219209} + m_Layer: 0 + m_Name: SceneIDMap + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &607219209 +MonoBehaviour: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 607219208} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 608457694} + m_Name: + m_EditorClassIdentifier: + m_Entries: [] +--- !u!4 &607219210 +Transform: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 607219208} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!115 &608457694 +MonoScript: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 7 + m_DefaultReferences: {} + m_Icon: {fileID: 0} + m_Type: 0 + m_ExecutionOrder: 0 + m_ClassName: SceneObjectIDMapSceneAsset + m_Namespace: UnityEngine.Rendering.HighDefinition + m_AssemblyName: Unity.RenderPipelines.HighDefinition.Runtime +--- !u!1001 &619640221 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1132393308280272, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_Name + value: HDRP_Test_Camera + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalPosition.x + value: 0.36 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalPosition.y + value: 2.06 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalPosition.z + value: -3.25 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalRotation.w + value: 0.8394664 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalRotation.y + value: 0.5434116 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 4209882255362944, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 65.832 + objectReference: {fileID: 0} + - target: {fileID: 20109210616973140, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: far clip plane + value: 15 + objectReference: {fileID: 0} + - target: {fileID: 114270329781043846, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: width + value: 853 + objectReference: {fileID: 0} + - target: {fileID: 114270329781043846, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: height + value: 480 + objectReference: {fileID: 0} + - target: {fileID: 114733060649624252, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: width + value: 853 + objectReference: {fileID: 0} + - target: {fileID: 114733060649624252, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: height + value: 480 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_Version + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: customRenderingSettings + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableSSR + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableSSAO + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.runSSRAsync + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableDecals + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableShadow + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.runSSAOAsync + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.shaderLitMode + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableDistortion + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableShadowMask + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableLightLayers + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enablePostprocess + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableVolumetrics + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.runLightListAsync + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableAsyncCompute + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableTransmission + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.diffuseGlobalDimmer + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableMotionVectors + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableOpaqueObjects + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableContactShadows + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.specularGlobalDimmer + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableRoughRefraction + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.runContactShadowsAsync + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableTransparentObjects + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableTransparentPrepass + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableObjectMotionVectors + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableTransparentPostpass + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_RenderingPathCustomFrameSettings.bitDatas.data1 + value: 70005818654557 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_RenderingPathCustomFrameSettings.bitDatas.data2 + value: 18374686479671623680 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableSubsurfaceScattering + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.runVolumeVoxelizationAsync + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableAtmosphericScattering + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableRealtimePlanarReflection + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.lightLoopSettings.isFptlEnabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: renderingPathCustomFrameSettingsOverrideMask.mask.data2 + value: 13835058055282163712 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.enableReprojectionForVolumetrics + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.lightLoopSettings.enableBigTilePrepass + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.lightLoopSettings.enableComputeLightVariants + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.lightLoopSettings.enableFptlForForwardOpaque + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.lightLoopSettings.enableComputeLightEvaluation + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.lightLoopSettings.enableDeferredTileAndCluster + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114777190906822814, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: m_ObsoleteFrameSettings.lightLoopSettings.enableComputeMaterialVariants + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: waitFrames + value: 120 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: renderPipelineAsset + value: + objectReference: {fileID: 11400000, guid: d8b02f45067c9ec4f8cc8b52e1e74f2f, + type: 2} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: xrThresholdMultiplier + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: forceCameraRenderDuringSetup + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: ImageComparisonSettings.TargetWidth + value: 400 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: ImageComparisonSettings.TargetHeight + value: 400 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: doBeforeTest.m_PersistentCalls.m_Calls.Array.size + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: ImageComparisonSettings.AverageCorrectnessThreshold + value: 0.001 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: doBeforeTest.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: doBeforeTest.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: doBeforeTest.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: doBeforeTest.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: AddBakeLabelOnActiveScene + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: doBeforeTest.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName + value: AddBakeLabel, Assembly-CSharp + objectReference: {fileID: 0} + - target: {fileID: 114995348509370400, guid: c07ace9ab142ca9469fa377877c2f1e7, + type: 3} + propertyPath: doBeforeTest.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName + value: UnityEngine.Object, UnityEngine + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c07ace9ab142ca9469fa377877c2f1e7, type: 3} +--- !u!115 &757158781 +MonoScript: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 7 + m_DefaultReferences: {} + m_Icon: {fileID: 0} + m_Type: 0 + m_ExecutionOrder: 0 + m_ClassName: SceneObjectIDMapSceneAsset + m_Namespace: UnityEngine.Rendering.HighDefinition + m_AssemblyName: Unity.RenderPipelines.HighDefinition.Runtime +--- !u!1 &810688772 +GameObject: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 810688774} + - component: {fileID: 810688773} + m_Layer: 0 + m_Name: SceneIDMap + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &810688773 +MonoBehaviour: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810688772} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 998764342} + m_Name: + m_EditorClassIdentifier: + m_Entries: [] +--- !u!4 &810688774 +Transform: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 810688772} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &849565835 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 849565838} + - component: {fileID: 849565837} + - component: {fileID: 849565836} + m_Layer: 0 + m_Name: Reflection Probe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &849565836 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849565835} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0ef8dc2c2eabfa4e8cb77be57a837c0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ProbeSettings: + frustum: + fieldOfViewMode: 1 + fixedValue: 90 + automaticScale: 1 + viewerScale: 1 + type: 0 + mode: 2 + realtimeMode: 0 + timeSlicing: 0 + lighting: + importance: 1 + multiplier: 1 + weight: 1 + lightLayer: 1 + fadeDistance: 10000 + rangeCompressionFactor: 1 + influence: + m_Shape: 0 + m_BoxSize: {x: 6.1606255, y: 4.7500715, z: 7.182937} + m_BoxBlendDistancePositive: {x: 0, y: 0, z: 0} + m_BoxBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_BoxBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_BoxBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_BoxSideFadePositive: {x: 1, y: 1, z: 1} + m_BoxSideFadeNegative: {x: 1, y: 1, z: 1} + m_SphereRadius: 3 + m_SphereBlendDistance: 0 + m_SphereBlendNormalDistance: 0 + m_EditorAdvancedModeBlendDistancePositive: {x: 0, y: 0, z: 0} + m_EditorAdvancedModeBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_EditorSimplifiedModeBlendDistance: 0 + m_EditorAdvancedModeBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_EditorAdvancedModeBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_EditorSimplifiedModeBlendNormalDistance: 0 + m_EditorAdvancedModeEnabled: 0 + m_EditorAdvancedModeFaceFadePositive: {x: 1, y: 1, z: 1} + m_EditorAdvancedModeFaceFadeNegative: {x: 1, y: 1, z: 1} + m_Version: 1 + m_ObsoleteSphereBaseOffset: {x: 0, y: 0, z: 0} + m_ObsoleteOffset: {x: 0, y: 0, z: 0} + proxy: + m_Shape: 0 + m_BoxSize: {x: 1, y: 1, z: 1} + m_SphereRadius: 1 + m_CSVersion: 2 + m_ObsoleteSphereInfiniteProjection: 0 + m_ObsoleteBoxInfiniteProjection: 0 + proxySettings: + useInfluenceVolumeAsProxyVolume: 1 + capturePositionProxySpace: {x: 0, y: 0, z: 0} + captureRotationProxySpace: {x: 0, y: 0, z: 0, w: 1} + mirrorPositionProxySpace: {x: 0, y: 0, z: 0} + mirrorRotationProxySpace: {x: 0, y: 0, z: 0, w: 0} + resolutionScalable: + m_Override: 512 + m_UseOverride: 0 + m_Level: 0 + resolution: 0 + cubeResolution: + m_Override: 128 + m_UseOverride: 0 + m_Level: 0 + cameraSettings: + customRenderingSettings: 0 + renderingPathCustomFrameSettings: + bitDatas: + data1: 5630526032379968 + data2: 12934340311651418136 + lodBias: 1 + lodBiasMode: 0 + lodBiasQualityLevel: 0 + maximumLODLevel: 0 + maximumLODLevelMode: 0 + maximumLODLevelQualityLevel: 0 + sssQualityMode: 0 + sssQualityLevel: 0 + sssCustomSampleBudget: 20 + sssCustomDownsampleSteps: 0 + msaaMode: 1 + materialQuality: 0 + renderingPathCustomFrameSettingsOverrideMask: + mask: + data1: 0 + data2: 0 + bufferClearing: + clearColorMode: 0 + backgroundColorHDR: {r: 0.023529412, g: 0.07058824, b: 0.1882353, a: 0} + clearDepth: 1 + volumes: + layerMask: + serializedVersion: 2 + m_Bits: 1 + anchorOverride: {fileID: 0} + frustum: + mode: 0 + aspect: 1 + farClipPlaneRaw: 1000 + nearClipPlaneRaw: 0.3 + fieldOfView: 90 + projectionMatrix: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + culling: + useOcclusionCulling: 1 + cullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + sceneCullingMaskOverride: 0 + invertFaceCulling: 0 + flipYMode: 0 + probeLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + defaultFrameSettings: 0 + m_ObsoleteRenderingPath: 0 + m_ObsoleteFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 + roughReflections: 1 + distanceBasedRoughness: 0 + m_ProbeSettingsOverride: + probe: 0 + camera: + camera: 0 + m_ProxyVolume: {fileID: 0} + m_BakedTexture: {fileID: 0} + m_CustomTexture: {fileID: 0} + m_BakedRenderData: + m_WorldToCameraRHS: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_ProjectionMatrix: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_CapturePosition: {x: 0, y: 0, z: 0} + m_CaptureRotation: {x: 0, y: 0, z: 0, w: 0} + m_FieldOfView: 0 + m_Aspect: 0 + m_CustomRenderData: + m_WorldToCameraRHS: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_ProjectionMatrix: + e00: 0 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 0 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 0 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 0 + m_CapturePosition: {x: 0, y: 0, z: 0} + m_CaptureRotation: {x: 0, y: 0, z: 0, w: 0} + m_FieldOfView: 0 + m_Aspect: 0 + m_HasValidSHForNormalization: 1 + m_SHForNormalization: + 'sh[ 0]': 0.0006846257 + 'sh[ 1]': -0.0001737916 + 'sh[ 2]': 0.0000025118006 + 'sh[ 3]': -0.00046557418 + 'sh[ 4]': 0.00008308636 + 'sh[ 5]': -0.000015249126 + 'sh[ 6]': -0.000023036435 + 'sh[ 7]': 0.000027101734 + 'sh[ 8]': 0.000046511737 + 'sh[ 9]': 0.0114121325 + 'sh[10]': -0.0028969508 + 'sh[11]': 0.000041869393 + 'sh[12]': -0.0077607054 + 'sh[13]': 0.0013849761 + 'sh[14]': -0.00025418933 + 'sh[15]': -0.00038399678 + 'sh[16]': 0.00045176124 + 'sh[17]': 0.0007753089 + 'sh[18]': 0 + 'sh[19]': 0 + 'sh[20]': 0 + 'sh[21]': 0 + 'sh[22]': 0 + 'sh[23]': 0 + 'sh[24]': 0 + 'sh[25]': 0 + 'sh[26]': 0 + m_SHValidForCapturePosition: {x: 0.08132696, y: 1.8656878, z: -1.2388031} + m_SHValidForSourcePosition: {x: 0.08132696, y: 1.8656878, z: -1.2388031} + m_HDProbeVersion: 9 + m_ObsoleteInfiniteProjection: 1 + m_ObsoleteInfluenceVolume: + m_Shape: 0 + m_BoxSize: {x: 6.1606255, y: 4.7500715, z: 7.182937} + m_BoxBlendDistancePositive: {x: 0, y: 0, z: 0} + m_BoxBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_BoxBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_BoxBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_BoxSideFadePositive: {x: 1, y: 1, z: 1} + m_BoxSideFadeNegative: {x: 1, y: 1, z: 1} + m_SphereRadius: 3 + m_SphereBlendDistance: 0 + m_SphereBlendNormalDistance: 0 + m_EditorAdvancedModeBlendDistancePositive: {x: 0, y: 0, z: 0} + m_EditorAdvancedModeBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_EditorSimplifiedModeBlendDistance: 0 + m_EditorAdvancedModeBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_EditorAdvancedModeBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_EditorSimplifiedModeBlendNormalDistance: 0 + m_EditorAdvancedModeEnabled: 0 + m_EditorAdvancedModeFaceFadePositive: {x: 1, y: 1, z: 1} + m_EditorAdvancedModeFaceFadeNegative: {x: 1, y: 1, z: 1} + m_Version: 1 + m_ObsoleteSphereBaseOffset: {x: 0, y: 0, z: 0} + m_ObsoleteOffset: {x: 0, y: 0, z: 0} + m_ObsoleteFrameSettings: + overrides: 0 + enableShadow: 0 + enableContactShadows: 0 + enableShadowMask: 0 + enableSSR: 0 + enableSSAO: 0 + enableSubsurfaceScattering: 0 + enableTransmission: 0 + enableAtmosphericScattering: 0 + enableVolumetrics: 0 + enableReprojectionForVolumetrics: 0 + enableLightLayers: 0 + enableExposureControl: 1 + diffuseGlobalDimmer: 0 + specularGlobalDimmer: 0 + shaderLitMode: 0 + enableDepthPrepassWithDeferredRendering: 0 + enableTransparentPrepass: 0 + enableMotionVectors: 0 + enableObjectMotionVectors: 0 + enableDecals: 0 + enableRoughRefraction: 0 + enableTransparentPostpass: 0 + enableDistortion: 0 + enablePostprocess: 0 + enableOpaqueObjects: 0 + enableTransparentObjects: 0 + enableRealtimePlanarReflection: 0 + enableMSAA: 0 + enableAsyncCompute: 0 + runLightListAsync: 0 + runSSRAsync: 0 + runSSAOAsync: 0 + runContactShadowsAsync: 0 + runVolumeVoxelizationAsync: 0 + lightLoopSettings: + overrides: 0 + enableDeferredTileAndCluster: 0 + enableComputeLightEvaluation: 0 + enableComputeLightVariants: 0 + enableComputeMaterialVariants: 0 + enableFptlForForwardOpaque: 0 + enableBigTilePrepass: 0 + isFptlEnabled: 0 + m_ObsoleteMultiplier: 1 + m_ObsoleteWeight: 1 + m_ObsoleteMode: 2 + m_ObsoleteLightLayers: 1 + m_ObsoleteCaptureSettings: + overrides: 0 + clearColorMode: 0 + backgroundColorHDR: {r: 0.023529412, g: 0.07058824, b: 0.1882353, a: 0} + clearDepth: 1 + cullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + useOcclusionCulling: 1 + volumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + volumeAnchorOverride: {fileID: 0} + projection: 0 + nearClipPlane: 0.3 + farClipPlane: 1000 + fieldOfView: 90 + orthographicSize: 5 + renderingPath: 0 + shadowDistance: 100 + m_ReflectionProbeVersion: 10 + m_ObsoleteInfluenceShape: 0 + m_ObsoleteInfluenceSphereRadius: 3 + m_ObsoleteBlendDistancePositive: {x: 0, y: 0, z: 0} + m_ObsoleteBlendDistanceNegative: {x: 0, y: 0, z: 0} + m_ObsoleteBlendNormalDistancePositive: {x: 0, y: 0, z: 0} + m_ObsoleteBlendNormalDistanceNegative: {x: 0, y: 0, z: 0} + m_ObsoleteBoxSideFadePositive: {x: 1, y: 1, z: 1} + m_ObsoleteBoxSideFadeNegative: {x: 1, y: 1, z: 1} +--- !u!215 &849565837 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849565835} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 2 + m_RefreshMode: 2 + m_TimeSlicingMode: 0 + m_Resolution: 128 + m_UpdateFrequency: 0 + m_BoxSize: {x: 6.1606255, y: 4.7500715, z: 7.182937} + m_BoxOffset: {x: 0, y: 0, z: 0} + m_NearClip: 0.3 + m_FarClip: 1000 + m_ShadowDistance: 100 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_IntensityMultiplier: 1 + m_BlendDistance: 0 + m_HDR: 1 + m_BoxProjection: 0 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 0} +--- !u!4 &849565838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 849565835} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.08132696, y: 1.8656878, z: -1.2388031} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &938816240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 938816244} + - component: {fileID: 938816243} + - component: {fileID: 938816242} + - component: {fileID: 938816241} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &938816241 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938816240} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &938816242 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938816240} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 2 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &938816243 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938816240} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &938816244 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 938816240} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: -2.35, y: 1.51, z: 0} + m_LocalScale: {x: 5, y: 0.5, z: 5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!115 &998764342 +MonoScript: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 7 + m_DefaultReferences: {} + m_Icon: {fileID: 0} + m_Type: 0 + m_ExecutionOrder: 0 + m_ClassName: SceneObjectIDMapSceneAsset + m_Namespace: UnityEngine.Rendering.HighDefinition + m_AssemblyName: Unity.RenderPipelines.HighDefinition.Runtime +--- !u!1 &1104218364 +GameObject: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1104218366} + - component: {fileID: 1104218365} + m_Layer: 0 + m_Name: SceneIDMap + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1104218365 +MonoBehaviour: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104218364} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1609922861} + m_Name: + m_EditorClassIdentifier: + m_Entries: [] +--- !u!4 &1104218366 +Transform: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1104218364} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1180924095 +GameObject: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1180924097} + - component: {fileID: 1180924096} + m_Layer: 0 + m_Name: SceneIDMap + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1180924096 +MonoBehaviour: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180924095} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 569344474} + m_Name: + m_EditorClassIdentifier: + m_Entries: [] +--- !u!4 &1180924097 +Transform: + m_ObjectHideFlags: 19 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1180924095} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1241479345 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1241479347} + - component: {fileID: 1241479346} + m_Layer: 0 + m_Name: ProbeVolumePerSceneData + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1241479346 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241479345} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a83d2f7ae04ab6f4f99b0d85377be998, type: 3} + m_Name: + m_EditorClassIdentifier: + serializedBakingSet: {fileID: 11400000, guid: e09b907a60f5ca74dabc99c5930d588a, + type: 2} + sceneGUID: 5c98be1d78ca13747a126953d4624c4f + obsoleteAsset: {fileID: 0} + obsoleteCellSharedDataAsset: {fileID: 0} + obsoleteCellSupportDataAsset: {fileID: 0} + obsoleteSerializedScenarios: [] +--- !u!4 &1241479347 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1241479345} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1418080299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1418080303} + - component: {fileID: 1418080302} + - component: {fileID: 1418080301} + - component: {fileID: 1418080300} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &1418080300 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418080299} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1418080301 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418080299} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 2 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1418080302 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418080299} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1418080303 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1418080299} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 3.66, z: 0} + m_LocalScale: {x: 5, y: 0.5, z: 5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1572673295 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1572673299} + - component: {fileID: 1572673298} + - component: {fileID: 1572673297} + - component: {fileID: 1572673296} + m_Layer: 0 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 2147483647 + m_IsActive: 1 +--- !u!65 &1572673296 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572673295} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1572673297 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572673295} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 73c176f402d2c2f4d929aa5da7585d17, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 2 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1572673298 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572673295} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1572673299 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1572673295} + serializedVersion: 2 + m_LocalRotation: {x: 0.5, y: 0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 0.04, y: 1.51, z: 2.31} + m_LocalScale: {x: 5, y: 0.5, z: 5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 90} +--- !u!115 &1585798124 +MonoScript: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 7 + m_DefaultReferences: {} + m_Icon: {fileID: 0} + m_Type: 0 + m_ExecutionOrder: 0 + m_ClassName: SceneObjectIDMapSceneAsset + m_Namespace: UnityEngine.Rendering.HighDefinition + m_AssemblyName: Unity.RenderPipelines.HighDefinition.Runtime +--- !u!115 &1609922861 +MonoScript: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 7 + m_DefaultReferences: {} + m_Icon: {fileID: 0} + m_Type: 0 + m_ExecutionOrder: 0 + m_ClassName: SceneObjectIDMapSceneAsset + m_Namespace: UnityEngine.Rendering.HighDefinition + m_AssemblyName: Unity.RenderPipelines.HighDefinition.Runtime +--- !u!1 &1953193181 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1953193183} + - component: {fileID: 1953193182} + m_Layer: 0 + m_Name: Adaptive Probe Volume + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1953193182 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953193181} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cded085d155cde949b60f67a11dbc3bd, type: 3} + m_Name: + m_EditorClassIdentifier: + mode: 1 + size: {x: 8.34, y: 8, z: 8.059999} + overrideRendererFilters: 0 + minRendererVolumeSize: 0.1 + objectLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + lowestSubdivLevelOverride: 0 + highestSubdivLevelOverride: 7 + overridesSubdivLevels: 0 + mightNeedRebaking: 0 + cachedTransform: + e00: 1 + e01: 0 + e02: 0 + e03: -0.06999993 + e10: 0 + e11: 1 + e12: 0 + e13: -1.51 + e20: 0 + e21: 0 + e22: 1 + e23: -0.029999971 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + cachedHashCode: -623696352 + fillEmptySpaces: 0 + version: 2 + globalVolume: 0 +--- !u!4 &1953193183 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1953193181} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.06999993, y: 1.51, z: 0.029999971} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2013410473 +GameObject: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2013410475} + - component: {fileID: 2013410474} + m_Layer: 0 + m_Name: StaticLightingSky + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2013410474 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2013410473} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 441482e8936e35048a1dffac814e3ef8, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Profile: {fileID: 0} + m_StaticLightingSkyUniqueID: 0 + m_StaticLightingCloudsUniqueID: 0 + m_StaticLightingVolumetricClouds: 0 + bounces: 1 +--- !u!4 &2013410475 +Transform: + m_ObjectHideFlags: 1 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2013410473} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 619640221} + - {fileID: 157207114} + - {fileID: 432432461} + - {fileID: 2013410475} + - {fileID: 153607304} + - {fileID: 250828834} + - {fileID: 938816244} + - {fileID: 1572673299} + - {fileID: 1418080303} + - {fileID: 1953193183} + - {fileID: 1241479347} + - {fileID: 64778223} + - {fileID: 849565838} + - {fileID: 1104218366} + - {fileID: 810688774} + - {fileID: 607219210} + - {fileID: 272372564} + - {fileID: 233175595} + - {fileID: 1180924097} diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity.meta new file mode 100644 index 00000000000..11a39305659 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5c98be1d78ca13747a126953d4624c4f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellData.bytes b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellData.bytes new file mode 100644 index 0000000000000000000000000000000000000000..2df4e7ae15dbb3214eee5b61e257ad4574090559 GIT binary patch literal 1048576 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 literal 0 HcmV?d00001 diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellData.bytes.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellData.bytes.meta new file mode 100644 index 00000000000..83ad669c4a0 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellData.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6ac63152e41bb5a47a3e8eb9c4b52ed7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellOptionalData.bytes b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellOptionalData.bytes new file mode 100644 index 00000000000..ebe6b6f4420 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellOptionalData.bytes @@ -0,0 +1 @@ +y{}~~~~tuvwwy|z~|}}z~~~|~~}~~~~{y{y{y{yzy{|}}~{{z~z~}y~}xz||~{{{z~z~~~{|~~~}tvw~~|~~z~|y~{}~z~~~~|}}~~y|y|y|y|y{y||~~~|~~|~}{~}z~~|~~~}|~{~}~~}tt}{yzyz~z}~z~~{{}~~y}y}y}y}y}y~}{|~~~}~}|~}}zy{~}~~}~~}tt}y~y}~y}~z~~{y}~~yyy~y~y~y{~~~~}~~}{~~~~~y|{{{{y{{{|||}~|}uvwwwz|y~~~}|z}}~|~~~{{{{{{z{zzz{}|~{{{~z~~y~}z{}|~{{{z~~z~~||||xz}~}{~~}|}{v}{{}~w~}w~|~{}z~{{|~}~~{~{}z|z{z||{|~~~}|~~{~~{{|~~}~|~~{~~|vr~~~~{}}{}{w{y~}z~|{~z~x~{|~{{~z}z|z}}{|~}~~|~~}{||~~~~~}~~}}{}~{}x~~}}~|{y{{~{{~z~z~z{~~~~~~~{~~~~~vv}{|zrzxxxyzz{}{~|vwwxxz|x~~}|z|}}|~~{}{}{|z~|z~|y{}|~{{{z~y~~{|}}~~{{{~z~~z~~wwww}~wvz~~x~~|}{{{~{xv{xx|~w~w~~z}y}{z|~~~~~~~|~||~|{~{{{{|~~~}|~{~~|x}|~~~}~|~~|~~vy~twz~|x~}z|z}{z{z~z~z~y~{~~~~~~|}~||~{}~|{~}~|~~z||~~~~~~}~~vxt}~yx~~z~y~{{~~~~~~zy{}~~~~|~~|~~{{~~~~{~~~~~t~~tx{|qwxksutuvwwy|z~|wxxxxz|w}~~~{y{|}}~{{z~z~}y~}xz||~{{{z~z~}}~}}~{{{~{~z}~tu{tuyuzZsutvw~~|~~z~|y~{z{ujv}}}}~x}~w}~y|y||~~~|~~|~}{~}z~~|~~~}|~{~~yz|~~~}~|~|~~tksuwxw}~tt}{yzyz~z|{z}~{~~y}y~}{|~~~}~}|~}}zy{~}~~}~~~~}|~~~~~~~~~~~~~tt}y~y}~y~~~~~yy{~~~~}~~}{~~~~~{~~~~~~y{}~~~~tuvwwy|z~|}}z~~~|~~}~~~~{y{y{y{yzy{|}}~{{z~z~}y~}xz||~{{{z~z~~~{|~~~}tvw~~|~~z~|y~{}~z~~~~|}}~~y|y|y|y|y{y||~~~|~~|~}{~}z~~|~~~}|~{~}~~}tt}{yzyz~z}~z~~{{}~~y}y}y}y}y}y~}{|~~~}~}|~}}zy{~}~~}~~}tt}y~y}~y}~z~~{y}~~yyy~y~y~y{~~~~}~~}{~~~~~y|{{{{y{{{|||}~|}uvwwwz|y~~~}|z}}~|~~~{{{{{{z{zzz{}|~{{{~z~~y~}z{}|~{{{z~~z~~||||xz}~}{~~}|}{v}{{}~w~}w~|~{}z~{{|~}~~{~{}z|z{z||{|~~~}|~~{~~{{|~~}~|~~{~~|vr~~~~{}}{}{w{y~}z~|{~z~x~{|~{{~z}z|z}}{|~}~~|~~}{||~~~~~}~~}}{}~{}x~~}}~|{y{{~{{~z~z~z{~~~~~~~{~~~~~vv}{|zrzxxxyzz{}{~|vwwxxz|x~~}|z|}}|~~{}{}{|z~|z~|y{}|~{{{z~y~~{|}}~~{{{~z~~z~~wwww}~wvz~~x~~|}{{{~{xv{xx|~w~w~~z}y}{z|~~~~~~~|~||~|{~{{{{|~~~}|~{~~|x}|~~~}~|~~|~~vy~twz~|x~}z|z}{z{z~z~z~y~{~~~~~~|}~||~{}~|{~}~|~~z||~~~~~~}~~vxt}~yx~~z~y~{{~~~~~~zy{}~~~~|~~|~~{{~~~~{~~~~~t~~tx{|qwxksutuvwwy|z~|wxxxxz|w}~~~{y{|}}~{{z~z~}y~}xz||~{{{z~z~}}~}}~{{{~{~z}~tu{tuyuzZsutvw~~|~~z~|y~{z{ujv}}}}~x}~w}~y|y||~~~|~~|~}{~}z~~|~~~}|~{~~yz|~~~}~|~|~~tksuwxw}~tt}{yzyz~z|{z}~{~~y}y~}{|~~~}~}|~}}zy{~}~~}~~~~}|~~~~~~~~~~~~~tt}y~y}~y~~~~~yy{~~~~}~~}{~~~~~{~~~~~~xxnnuuwwyy{{~~}}}}}}}}}}}}yyssllllrrxx~~~~~~~~~~||||||||͂͂́̀̀̀̀̀̀̀̀̀͋͆́||̀̀̀́́͒͊̓{{̀̀̀́́͂yyrrzz{{||}}̀~~}}}}}}~~~~͆͋||||||||~~~~~~~~~~}}}}}}}}͂́̀̀̀~~͇͉̀̀̀̀̀́}}͉̀̀́́́͌͂}}̀̀́́́̓~~{{~~~~~~~~̀̀~~~~~~~~͌uu͂̀̀̀̀́~~~~~~~~~~~~́́̀~~͔͔̀̀̀̀́̓̓̀̀́́́́ͅ~~͓͓͔̀̀́́́́͂́̀́̀́̀́͂~~~~~~~~̀̀̀̀́̀̀~~̀̀̀̀́̀̀̀̀́͂̀̀̀̀́͂lleeyywwuuss}}zzwwwwyy{{}}͆xxqqqquuyy~~~~́~~||͍͇́́̀̀̀̀̀̀́||̀̀̀́́͏͈͂||̀̀̀́́͂oojj{{wwhh||͂}}}}}}}}~~͈͒͋͋||~~̀~~~~́͋}}}}͉́̀̀́́́͋̀}}͉͉̀̀́́́̈́}}̀̀́́́͏͆yytt~~}}}}̈́̀~~~~~~͊̀́́~~~~̀͘zź͕̀̀̀́́̈́̀̀́́́̈́ͅ͏͓͇͇͆̀̀́́́͗́́́~~~~̀͌̀͂͂~~~~̀̀̀̀̀́́̀̀̀̀́͂̀̀̀́́͂͂cc||vvppjj{{vvrrrrvvzz~~͍ͅ}}uuuuxx{{~~͆̓||͉̀̀̀̀̀̀̀́͐͂||̀̀̀́́͌͆́||̀̀̀́́͊ggbb}}́ss{{̈́~~||||}}~~͕͋͛͒͒{{~~̀~~~~̈́͏ͅ}}̀̀̀́́́͊͌͂}}͇̀̀́́́͑̓}}̀̀́́́͆uu{{ll~~͈́̀~~~~~~͈̀̀̀́͂~~~~͂͑̈́̀̀̀́́́͐ͅ}}͓͓͍̀̀́́́̓̓̀̀́́́͂̀͂́̀͜͝~~~~~~̀́͆̀͂̓~~~~̀̀̀̀̀́́̀̀̀̀́͂̀̀̀́́͂cc^^uullbbyyssllllrrxx~~͔͋͂zzzz{{||~~̀̀̀̀͋͆́||̀̀̀́́͒͊̓{{͈̀̀̀́́̈́̀||̀̀̀́́̈́^^ͅppgg͆͋||||||||~~͍͈͈͗͜||~~̀̀~~͇͉̀́}}͉̀̀́́́͌͂}}͈̀̀́́́̓ͅ}}̀̀́́́͗bb͔zz~~͌uu͂̀̀̀̀́͆̀́͂~~͔͔̀̓̓̀̀́́́́ͅ~~͓͔̀̀́́́͂͑̈́̀̀́́́͂͂́̀́͂̀͂͂~~̀̀̀̀̀́͂̀̀̀̀́͂̀̀̀́́͂t~~tx{|qwxksuwxxxxz|w}~lyUjyWhxZfx\fx\l{jq}w{w}}~}}~{{{~{~z}~yvtzyxz||}{~{~{~|}|}|||||}|}|}zuwyxzx|}ww}w|xzxzxzyzyzy|||~|}|}|}|}|}}tu{tuyuzZsuz{ujv}}}}~x}~w}~r{cyvcpzTa~Ja~J}L|w{x~yz|~~~}~|~|~~{yxx~z}|~~}~}}}}}}}}}}}{xytzdoxuyy~y}y{y{y{z{z{z~}~|~|~|~|}|tksuwxw}~|{z}~{~~y}q~~}|~~~~~~~~~}|{y{}|}~~~~~~~}||rxZsyrzz~z}{|{|{|{|{||~}}}}}~~~~~~~~~{~~~~~~{~~~~|||~|}|}|}|}|}}~~avlvRxt~pn}wxh|~lazxxx|xyxy}z|||x{~k|Ni}Pg}Re}Te}Tghj{wl{|}}}~{~{~{~{}{}~yvuyyyy||~y}}}}}}|}|||||||}|}rxho|ply~i~i}n|s{x{x{xzyzysE|x~ufxc]yciL|z}vr|uqyvtyvt}{~y{~y|~q}^sCl?YrsXm]||y|}~~~~}~}}|}{yxx{}z~{~~~}~}~}~}~}}}vzplyYgz^~w~w}w|w|x|x{y{y{yswY^{Rp?{zlyUfx\{w}{~|||}x~o~~|z|~~~~~~~}||yzm{}|~~~~~}{}wszTU{l~x~x}x}y}z}z}z|z|z~{~~~~~~}}~~i}aa~oX}nPvyluxktxkrxkrxkuzsw}{yyiGgIeJcLcLbfbtbyz~|}|~{~{~{~{}{}zuvyyyy|}~x~}~}~|}||||||||}|}j{Ydg_t}Z}Z}d|n{w{w{x{xzy`|OSRp}k`zTJ_mBy{rsySqzRzuwzuwwzxzypZt@o?p@p@qDyatd{yy|}|~~~}}}}}{yyyvvy|~z~}~}~}~}}|}|q|fl}Gn{Mww}w|x|x|x|y{y|zxMx~ugAaDqW|}y|}|}}xl}}{|}~~~~~}||y}{~{~~}}~x~rnAu~G~y~y}y}z}z}z|{|{|{~{~~~~~}~~^{RTgI{p?lyUjyWhxZfx\fx\l{jq}w{wgAeBcCaDaD^d~[qWyvtzyxz||}{~{~{~|}|}||zuwyxzx|}w|||~|}|}|}|}|}}a~JZ]Sp}L}L|Z|i|w|w{w{x{x_GI[i}abo[|uTr{cyvcpzTa~Ja~J}L|w{xoVnVlWkXkXim~gve{yxx~z}|~~}~}}}{xytzdoxuy~}~|~|~|~|}|k~\ghbu}]}]}g}p}z}z}z|z|z^Tt~pqwm~zjy}qwjvkvkukuktvszr}|{y{}|}~~~}||rxZsyrz~}}}}}umstpz~n~n~s~x~|~|~|~}~}{~|~~t~~tx{|qwxksuwxxxxz|w}~lyUjyWhxZfx\fx\l{jq}w{w}}~}}~{{{~{~z}~yvtzyxz||}{~{~{~|}|}|||||}|}|}zuwyxzx|}ww}w|xzxzxzyzyzy|||~|}|}|}|}|}}tu{tuyuzZsuz{ujv}}}}~x}~w}~r{cyvcpzTa~Ja~J}L|w{x~yz|~~~}~|~|~~{yxx~z}|~~}~}}}}}}}}}}}{xytzdoxuyy~y}y{y{y{z{z{z~}~|~|~|~|}|tksuwxw}~|{z}~{~~y}q~~}|~~~~~~~~~}|{y{}|}~~~~~~~}||rxZsyrzz~z}{|{|{|{|{||~}}}}}~~~~~~~~~{~~~~~~{~~~~|||~|}|}|}|}|}}~~avlvRxt~pn}wxh|~lazxxx|xyxy}z|||x{~k|Ni}Pg}Re}Te}Tghj{wl{|}}}~{~{~{~{}{}~yvuyyyy||~y}}}}}}|}|||||||}|}rxho|ply~i~i}n|s{x{x{xzyzysE|x~ufxc]yciL|z}vr|uqyvtyvt}{~y{~y|~q}^sCl?YrsXm]||y|}~~~~}~}}|}{yxx{}z~{~~~}~}~}~}~}}}vzplyYgz^~w~w}w|w|x|x{y{y{yswY^{Rp?{zlyUfx\{w}{~|||}x~o~~|z|~~~~~~~}||yzm{}|~~~~~}{}wszTU{l~x~x}x}y}z}z}z|z|z~{~~~~~~}}~~i}aa~oX}nPvyluxktxkrxkrxkuzsw}{yyiGgIeJcLcLbfbtbyz~|}|~{~{~{~{}{}zuvyyyy|}~x~}~}~|}||||||||}|}j{Ydg_t}Z}Z}d|n{w{w{x{xzy`|OSRp}k`zTJ_mBy{rsySqzRzuwzuwwzxzypZt@o?p@p@qDyatd{yy|}|~~~}}}}}{yyyvvy|~z~}~}~}~}}|}|q|fl}Gn{Mww}w|x|x|x|y{y|zxMx~ugAaDqW|}y|}|}}xl}}{|}~~~~~}||y}{~{~~}}~x~rnAu~G~y~y}y}z}z}z|{|{|{~{~~~~~}~~^{RTgI{p?lyUjyWhxZfx\fx\l{jq}w{wgAeBcCaDaD^d~[qWyvtzyxz||}{~{~{~|}|}||zuwyxzx|}w|||~|}|}|}|}|}}a~JZ]Sp}L}L|Z|i|w|w{w{x{x_GI[i}abo[|uTr{cyvcpzTa~Ja~J}L|w{xoVnVlWkXkXim~gve{yxx~z}|~~}~}}}{xytzdoxuy~}~|~|~|~|}|k~\ghbu}]}]}g}p}z}z}z|z|z^Tt~pqwm~zjy}qwjvkvkukuktvszr}|{y{}|}~~~}||rxZsyrz~}}}}}umstpz~n~n~s~x~|~|~|~}~}{~|~~cc^^uullbb͔͋͂zzzz{{||~~͓͎͊͆͆̈́́~~͈̈́̀||͇̀̀̀́́͌́||͇́́́́́́́́́͌͂}}}}}}~~̀̀̀́́́́́́́̈́^^ͅppgg͍͈͈͗͜||~~͕̀͌͊͊͜yy͈̓ͅ}}͈̀̀́́́͒̀~~͇͇́́́́́́́͂͂||~~~~~~̀̀̀́͂͂͂́͂͂͗bb͔zz~~͔͆̀́͂͆͂͑̈́̀̀́́́̓͒̓̀̀́́́́͂͂͂̓̈́̀̀̀̀̀́́~~~~̀́͂͂̓͂̓͂͂̀͂͂̀̀̀́́͂́̀́́́͂͂͂̀̀́́́́́́́̀͂͂́͂̓rrbb́yyppgg͓͌ͅ~~~~~~~~~~͍͇͇͑͊̈́́~~͊̀ͅ||͇̀̀́́́͌͂||́́́́́́́́́͋͆́||||}}~~̀gǵͅwwll͍͙͌͌͜||͔͎͉̀͋́̓͆̀}}͈̀̀́͂́͋}}~~͇͎́́́́́́́́͂̈́~~~~~~̀̀̀͆͘rr͓̀͆~~͕͖͆́́́̓͑͆̀̀́͂́̓̓̀́́́͂͂͂̓ͅzz̀̀̀̀̀́͂̀̀̀́́͂́~~~~̀́͂͂́͂̓̈́||ttll͓͍͈͂͂́~~͏͇͇͌͊̈́́~~͋͆́||͇́́́́́͌͂}}́́́́́́́́́͊̀ͅzzzz||}}͉͇̀̀͂vvtt͌͒͌͌͘}}͉͓͈͇̀͌͒͒̀̓͊̈́}}͇͈́́́͂́́~~͓̀̀̀́͂͂́͂͂͆͐~~̀̀̀zź͍͈~~͕͆̀́́̈́̓͑́̀̀́́́̓̀̀͂͂͂͂͂͂̓͏͔̀̀̀̀́́͂̓́̀̀́́́́~~~~̀́́͂͂̓͆yyrr͓͎͊͆͆̈́́~~͍͉͈͈͋͂ͅ~~͇͌́||͇́́́́́͌͂}}̀̀́́́́́́́͊̈́~~yyyy{{}}͊zz̈́{{vv͕͌͊͊͜yy͈͇͈͆̓́͒̀ͅͅ~~͇͇́́́́́||~~́͂͂͂́͂͂͆͂{{{{||~~́́}}{{͔͆̈́̓͂͂͂́̀̓͒̓̀̀́́́̓̈́~~~~̀́͂͂̓͂̓̓́}}}}~~~~́̀́́̀̀͂͂́͂̓̓}~~~~~~~~~tt}y~y}~ytt}~z}}x~|}~z}z~{}}|||||}}~||}}}}~~~~~~~~~}~~yyy~y~y~y}~~zyyyy~y~}~~zyy~y~~z~~z}~~z~z~z~~y~}y}}x}}x~}y~}{~||}}~~~~~~~}~~}~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~}~}~~~~~~~~~~~~~~~~~~~}}q[cz}}}}}~|~|~||}}~t}}y~y~zw]|t|}}z~{~|~~}}}}}}}}~}{~{{{{|||||}}}~~zyyy~y~y}~~zyyyy~~y}~~zzz~~y~~y~~y~}~~~z~{~{~|~|}|}|}}}}~~{~~|~~|}~}}}}~|{~z~z~zzzzzzz~~~}~~}~~~~~~~~~~~~~~~~~~~~~}}}~}}}}}}~~~~~~~~~~~~~~~~}}}}}}`bdWnPF}||}|~{z~{||{}{}z}z~zzzt}~}y~~z~~{~{|~z}zzzz~yyy}z~{|}}~~~~~~~~}}~~~|z}z~zzzzzzz{{{}~~zyyyyy}~~zyyy~~y~~z}~~zzz~~y~~y~}y}}}~~~|}}~~~~~~{}~{}~{|{{{{}y~yyyyyyyyyy~~~}~~}~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}|~|{~yy}~~~~~~~~~~~~~~~~~~}}}}}||~{yy}QX~_HjA=yy{x}wu~~~~~~~~~z{{z|y|x|x}x~xxtt}~z}}x~|y}~y{~yzyyyy{y}xx}z~{}~||}}}}~~~~~~~~~|y|y}y~x~x~xxyyyyy}~~zyyyy~y~}~~zyy~y~~z~~z}~~z~z~z~~y~}y}}x|}}~~~z}z|z{zzzz{y}y~y~y~yyyyyyy~~~~~~~~}~~~~~~~~~~~~~~~~z~~z~~y~~x~x~z~|~~~~~~~~~~~~~~~~~~~~~~~~~z~z~yyy{|~~~}}{}~{}~{~~~}~x~~}}~|x~~~~}{y{z|{}||{{~{~{{|}~}}}~~~~~~~~~~~~~~{{~z~z~z~{{z~~z~~z~~~{~~{~~{}~z~~{~}~|}~|}~|}~|~}{~}{~}|~}|~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~}~}~~~~~~~~~~~~~~~~~}`l|jl|yx~~~~{}{|}}||}|~{~{|}~}~x~~}~~}z{z|z|{~~|||}}}}}~}|~zzzz{~{~{~{~{~{{~~{{zz~~z~{{z~~z~~{~~~{~~{~~{}~{~~{~~}~}}~}}~}}~}}~}}~}}~}}~}}~}|~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}~~~~~~~~~~~~~~~}~}}We|WWzut{}z{|xx{~}||}|~{|{{}y}y~yyyx~~~~~~~~||~~z~~x~x~~~~~{z|z|{~}}}}~~~~~|z}y~yyyyyyyyzz~{{z~z~z~{{~~z~~z~~{~~~|~~|}~{}~{~}{}~|}~|}~|}}|}}|}||}||}||}||}|{~~|~{}x|x|~|{{{{{{{{{{~~~~~~~~~~~~~~~~~~~}}}}}}~}|~|~{yy}~~~~~~~~~~~}}}}}||~{yy}K^zPP}^F~>x{zz}yy~{~~~}~z|zz{y{x{x}x~xxx~~~~}y}~y}~y|~y{y{{{}{z{z|{}|~}}}~~~~~~~~~~~~~{y|y}y~x~x~xyyyyyy~{{z~~z~~z~~~{~~{~~{}~z~~{~}~|}~|}~|}~|~}{}~z}z|z|y{y{{{}{~z~z~zzzzzz{~~~~~~~~~~~~~~~~~z~~z~~y~y~y~z~|~~~~~~~~~~~~~~~~~~~~~~z~z~yyy{|~~~vxt}~yx~~z~y~{x~~~}|}{~~~~~~{~}zyzz{z{{{z~z~y~y~z~|~}~~}~~~~~~~~~~~|~~|~~{~~~~}~~|~~|~~~~~~~~~}~~}~~}~~~~~~~}~~}~~}~~}~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~lxwcsyyyu}t~|x~zy{~z{}~||~|~|}~~{~~~~~|zyzz{z|{{|}}}~}~}|~zzzzz~zz~z~zzz~~~~}~|~~|~~~~~~}~~|~~|~~~~~~~~~~}~}~~}~~~~}}}}}}}}}~}}~}}}}~~~~~~~~~~~~~~~~~}}}}}}}~~~~~~~~~~}}}Lrvvz~ww~uz~~y}~yyxx~{z|}|z}~z{|y|y~xyy{~~}}|~z~yy~zz{z{{~~}}}~~~~~|{}y~xyyyyyyyyy~~~~}~|~|~~~~~~~}~~|~~}~~~~~~~~}~~~}}~~}}~}}}}}}}|}~|}~|}}{~~|~{~x~x~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}||{yy}~~~~~~~~~~}}}||~{yy}?ouEawxx~w~w}~y}~||~|x~~~}|}z|z{zzzyzy|x}xx{~}y~~y~~y}~y}~y}~{}}}}zz{z{{~~}~~~~~~~zz|y}y~y~y~yyyyyyy~~~~}~~|~~|~~~~~~~~~}~~}~~}~~~~~~~}~~}~~~z}~z}y}y}y}{|||~|~|~|||||||~~~~~~~~~~~~~~~~z~~z~~y~y~y~{~|~~~~~~~~~~~~~~~~~z~z~yyy{|~~~~~~~tt}y~y}~ytt}~z}}x~|~~~~~~yyzyzyz~z~z~~y~}y}}x}}x~}y~}{~|~~~~}~~}~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~}~}~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~htv^tv}~|~~t}}y~y~zw]|t|}~}zyzyzzz~{~{~|~|}|}|}}}}~~}}~|{~z~z~zzzzzzz~~~}~~}~~~~~~~~~~~~~~~~~~~~~}}}~}}}}}}~~~~~~~~~~~~~~~~}}}}}}~~~~~~}}Jtt}~u}}y~y~x~~t}~}y~~z~~{~{|~z}zzzz~yyy~{~|~z~yy~zyzyzz|}}~~~~~~{{}y~yyyyyyyyyy~~~}~~}~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}|~|{~yy}~~~~~~~~~~~~~~~~~~}}}}}||~{yy}~~~~~~~~}||~{yy}=t>tw}}v}y}|}~tt}~z}}x~|y}~y{~yzyyyy{y}xx~y~y~x~x~x~z~}~~zyzyz~zzz{y}y~y~y~yyyyyyy~~~~~~~~}~~~~~~~~~~~~~~~~z~~z~~y~~x~x~z~|~~~~~~~~~~~~~~~~~~~~~~~~~z~z~yyy{|~~~z~z~yyy{|~~~}~~~~~~~~~tt}y~y}~ytt}~z}}x~|}~z}z~{}}|||||}}~||}}}}~~~~~~~~~}~~yyy~y~y~y}~~zyyyy~y~}~~zyy~y~~z~~z}~~z~z~z~~y~}y}}x}}x~}y~}{~||}}~~~~~~~}~~}~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~}~}~~~~~~~~~~~~~~~~~~~}}q[cz}}}}}~|~|~||}}~t}}y~y~zw]|t|}}z~{~|~~}}}}}}}}~}{~{{{{|||||}}}~~zyyy~y~y}~~zyyyy~~y}~~zzz~~y~~y~~y~}~~~z~{~{~|~|}|}|}}}}~~{~~|~~|}~}}}}~|{~z~z~zzzzzzz~~~}~~}~~~~~~~~~~~~~~~~~~~~~}}}~}}}}}}~~~~~~~~~~~~~~~~}}}}}}`bdWnPF}||}|~{z~{||{}{}z}z~zzzt}~}y~~z~~{~{|~z}zzzz~yyy}z~{|}}~~~~~~~~}}~~~|z}z~zzzzzzz{{{}~~zyyyyy}~~zyyy~~y~~z}~~zzz~~y~~y~}y}}}~~~|}}~~~~~~{}~{}~{|{{{{}y~yyyyyyyyyy~~~}~~}~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}|~|{~yy}~~~~~~~~~~~~~~~~~~}}}}}||~{yy}QX~_HjA=yy{x}wu~~~~~~~~~z{{z|y|x|x}x~xxtt}~z}}x~|y}~y{~yzyyyy{y}xx}z~{}~||}}}}~~~~~~~~~|y|y}y~x~x~xxyyyyy}~~zyyyy~y~}~~zyy~y~~z~~z}~~z~z~z~~y~}y}}x|}}~~~z}z|z{zzzz{y}y~y~y~yyyyyyy~~~~~~~~}~~~~~~~~~~~~~~~~z~~z~~y~~x~x~z~|~~~~~~~~~~~~~~~~~~~~~~~~~z~z~yyy{|~~~}}{}~{}~{~~~}~x~~}}~|x~~~~}{y{z|{}||{{~{~{{|}~}}}~~~~~~~~~~~~~~{{~z~z~z~{{z~~z~~z~~~{~~{~~{}~z~~{~}~|}~|}~|}~|~}{~}{~}|~}|~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~}~}~~~~~~~~~~~~~~~~~}`l|jl|yx~~~~{}{|}}||}|~{~{|}~}~x~~}~~}z{z|z|{~~|||}}}}}~}|~zzzz{~{~{~{~{~{{~~{{zz~~z~{{z~~z~~{~~~{~~{~~{}~{~~{~~}~}}~}}~}}~}}~}}~}}~}}~}}~}|~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}~~~~~~~~~~~~~~~}~}}We|WWzut{}z{|xx{~}||}|~{|{{}y}y~yyyx~~~~~~~~||~~z~~x~x~~~~~{z|z|{~}}}}~~~~~|z}y~yyyyyyyyzz~{{z~z~z~{{~~z~~z~~{~~~|~~|}~{}~{~}{}~|}~|}~|}}|}}|}||}||}||}||}|{~~|~{}x|x|~|{{{{{{{{{{~~~~~~~~~~~~~~~~~~~}}}}}}~}|~|~{yy}~~~~~~~~~~~}}}}}||~{yy}K^zPP}^F~>x{zz}yy~{~~~}~z|zz{y{x{x}x~xxx~~~~}y}~y}~y|~y{y{{{}{z{z|{}|~}}}~~~~~~~~~~~~~{y|y}y~x~x~xyyyyyy~{{z~~z~~z~~~{~~{~~{}~z~~{~}~|}~|}~|}~|~}{}~z}z|z|y{y{{{}{~z~z~zzzzzz{~~~~~~~~~~~~~~~~~z~~z~~y~y~y~z~|~~~~~~~~~~~~~~~~~~~~~~z~z~yyy{|~~~vxt}~yx~~z~y~{x~~~}|}{~~~~~~{~}zyzz{z{{{z~z~y~y~z~|~}~~}~~~~~~~~~~~|~~|~~{~~~~}~~|~~|~~~~~~~~~}~~}~~}~~~~~~~}~~}~~}~~}~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~lxwcsyyyu}t~|x~zy{~z{}~||~|~|}~~{~~~~~|zyzz{z|{{|}}}~}~}|~zzzzz~zz~z~zzz~~~~}~|~~|~~~~~~}~~|~~|~~~~~~~~~~}~}~~}~~~~}}}}}}}}}~}}~}}}}~~~~~~~~~~~~~~~~~}}}}}}}~~~~~~~~~~}}}Lrvvz~ww~uz~~y}~yyxx~{z|}|z}~z{|y|y~xyy{~~}}|~z~yy~zz{z{{~~}}}~~~~~|{}y~xyyyyyyyyy~~~~}~|~|~~~~~~~}~~|~~}~~~~~~~~}~~~}}~~}}~}}}}}}}|}~|}~|}}{~~|~{~x~x~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}||{yy}~~~~~~~~~~}}}||~{yy}?ouEawxx~w~w}~y}~||~|x~~~}|}z|z{zzzyzy|x}xx{~}y~~y~~y}~y}~y}~{}}}}zz{z{{~~}~~~~~~~zz|y}y~y~y~yyyyyyy~~~~}~~|~~|~~~~~~~~~}~~}~~}~~~~~~~}~~}~~~z}~z}y}y}y}{|||~|~|~|||||||~~~~~~~~~~~~~~~~z~~z~~y~y~y~{~|~~~~~~~~~~~~~~~~~z~z~yyy{|~~~~~~~tt}y~y}~ytt}~z}}x~|~~~~~~yyzyzyz~z~z~~y~}y}}x}}x~}y~}{~|~~~~}~~}~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~}~}~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~htv^tv}~|~~t}}y~y~zw]|t|}~}zyzyzzz~{~{~|~|}|}|}}}}~~}}~|{~z~z~zzzzzzz~~~}~~}~~~~~~~~~~~~~~~~~~~~~}}}~}}}}}}~~~~~~~~~~~~~~~~}}}}}}~~~~~~}}Jtt}~u}}y~y~x~~t}~}y~~z~~{~{|~z}zzzz~yyy~{~|~z~yy~zyzyzz|}}~~~~~~{{}y~yyyyyyyyyy~~~}~~}~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}|~|{~yy}~~~~~~~~~~~~~~~~~~}}}}}||~{yy}~~~~~~~~}||~{yy}=t>tw}}v}y}|}~tt}~z}}x~|y}~y{~yzyyyy{y}xx~y~y~x~x~x~z~}~~zyzyz~zzz{y}y~y~y~yyyyyyy~~~~~~~~}~~~~~~~~~~~~~~~~z~~z~~y~~x~x~z~|~~~~~~~~~~~~~~~~~~~~~~~~~z~z~yyy{|~~~z~z~yyy{|~~~͓͔́͂́̀́̀͂́̀̀̀́̀́͂͛͂̀͝~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀́̀̀~~̀̀̀̀́͂́̀~~~~̀̀̀̀́́́̀~~̀̀̀͂́̀~~~~̀̀̀̀͂͂́̀̀̀̀̀̀̀̀̀̀̀̀̀̀́͂̀̀̀́́̀̀̀́́̀̀̀̀̀́́̀̀̀́͂̀̀̀́́̀̀̀||||}}}}~~~~̀̀̀}}́̀~~͖͔͔́̀̀́́̀́͂̀́͂͂̀̀̀̀̀~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀́́̀~~̀̀̀̀́͂́̀~~~~̀̀̀̀́͂́̀~~̀̀̀͂́̀̀̀~~~~~~~~͂́́̀̀̀̀̀̀̀̀̀̀̀́́̀̀̀́́̀̀̀́́}}}}~~̀̀́̀̀̀̀́́̀̀̀́́~~~~~~̀{{{{||||}}}}̀̀͋͂||wẃ̀~~͙́́̀̀́́̀͂́̀́͋̓͂~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀͂́̀~~̀̀̀̀́͂́̀~~̀̀́͂́̀~~~~̀̀̀͂́́̀̀~~͂́̀̀̀~~̀̀̀́́̀̀̀́́̀̀̀̀̀zzzz||~~~~~~̀́̓͂̀̀~~~~~~~~~~̀̀̀́́̀̀̀̀́}}}}~~~~||||yyzz||||}}́̓͂̀̀~~~~̈́xxssoò~~~~͂́̀̀̀́̀̀͛͂̀̓́̀͝~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀͂́̀~~~~̀̀̀̀́́́̀~~̀̀̀͂́̀~~~~̀̀̀͂͂́̀̀̀̀̀̀̀̀̀̀̀͂́̀~~~~~~~~̀̀̀́́̀̀̀́́̀̀̀̓́̀~~~~~~~~~~~~~~~~~~~~̀̀̀́́̀̀̀||||}}}}~~̓́̀~~~~~~~~~~~~~~~~~~~~͓͇͇͗́́́~~~~͓̀͋́̀̀͌̀͂͂̀́~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀́́́̀̀̀́́́̀̀̀́́́̀̀̀̀̀̀̀̀̀́̀̀̀́͂̀̀̀́́̀̀̀́́~~~~~~̀̀̀̀́̀̀́́͂̀̀̀́́~~~~̀{{{{||}}~~~~̀͒͏̀~~͈́͂̀́̀~~͈͎͍̀͂̀̀̀̀́͂~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀́́́̀̀̀́́́̀̀̀́̀́̀̀̀̀̀̀̀̀̀͂̀̀̀́́̀̀̀́́̀̀̀̀̀||||||~~̀̀̀̀̀́́́̀̀̀̀́}}}}~~}}}}{{||||||~~͎̀̈́~~}}͉́́́̀~~͈̀́̀͐̀́͂̓̓ͅ~~~~~~~~~~~~~~}}~~~~~~̀̀̀̀̀̀̀̀̀́̀̀̀́́́̀̀̀́́́̀̀̀́̀́̀̀͂̓͂̀̀~~~~~~~~~~~~~~~~~~~~~~̀̀̀́́̀̀̀́́̀̀̀yyyyzz||~~~~̀́̓̓̀̀~~~~̀̀́́́̀̀||||}}~~||||yy{{{{{{}}~~́̓̓̀̀~~~~ͅxxppkḱ~~}}͋́̀̀͂́̀~~~~͓̀́̓́̀~~~~~~~~}}~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀́̀̀̀́́́̀̀̀́́́̀̀̀̀̀́͂́̀~~~~~~~~~~~~~~~~~~~~̀̀̀́́̀̀̀́́~~~~~~̀̓́̀~~~~~~~~~~~~~~~~~~~~̀̀̀́́~~~~̀{{{{||}}~~̓͂̀~~~~~~~~~~~~~~~~~~~~͓͍͂̀͂́̀͜͝~~~~~~͔͉̀́͂̀̀͆̀͂̓||~~̀~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀́́̀̀̀̀́́̀̀̀̀́́̀̀̀̀̀̀̀̀̀̀̀̀̀̀́͂̀̀̀́́̀̀̀̀́||||}}~~̀̀̀̀́́͂̀̀̀́́}}}}~~̀{{{{||}}}}}}~~̀͗̀͜~~̀͝͏͂̀~~~~~~͎͇͇̀́͂́̀̀̀́͂~~~~}}~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀́́̀̀̀̀́́̀̀̀́́́̀̀̀̀̀̀̀̀́̀̀̀́́̀̀̀́́̀̀̀zzzz||||~~~~̀̀̀̀́́́̀̀̀}}}}}}~~~~~~{{}}}}}}}}~~̀̀͒̀}}{{́̓~~~~͑͂̀~~~~~~͈͈̀̀͂́̀́̈́̓ͅ~~~~~~}}~~}}~~~~~~̀~~̀̀̀̀̀̀̀̀̀̀́́̀̀̀̀́́̀̀̀́́̀̀{{{{~~~~̀̀͂̓̓̀̀~~~~~~~~~~~~~~~~~~~~~~̀̀̀́́̀̀̀́́~~~~~~zzzzyy{{}}}}~~̀́̓͂̀̀~~~~̀̀̀́́~~~~̀̀||||}}~~~~}}}}{{zz{{{{||}}́̓̓̀̀~~~~̈́vv{{zź~~||͔͂̀̀͂́̀~~~~~~͉||~~̀̓́̀~~~~~~~~}}~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀~~~~̀̀̀̀́́̀̀̀̀́́̀̀̀̀̀̀̀͂́̀~~~~~~~~~~~~~~~~~~~~̀̀̀́́̀̀̀̀́||||}}~~̓́̀~~~~~~~~~~~~~~~~~~~~̀̀̀́́}}}}~~̀{{{{||}}}}̓͂̀~~~~~~~~~~~~~~~~~~~~͓͔͂͂́̀́͂͛͂̀̀͂͂͝~~}}̀~~̀~~~~̀~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀́͂̀̀̀́́̀̀̀́́̀̀̀̀̀́́̀̀̀́͂̀̀̀́́̀̀̀||||}}}}~~~~̀̀̀̀́́͂̀́}}}}~~~~~~~~{{||}}}}~~̀͂͜͞{{͖͔͔̀̀́͂̀́͂͂̀̀̀̀̀́͂̀~~̀~~~~̀~~̀~~~~~~~~̀̀̀̀̀̀̀̀̀̀́́̀̀̀́́̀̀̀́́}}}}~~̀̀́̀̀̀̀́́̀̀̀́́~~~~~~̀{{{{||||}}}}̀̀̀̀́́́~~~~̀̀||||}}~~~~~~{{{{||||}}~~͓̀̀́}}zź̓~~}}͙͂́̀́͋̓͂~~}}́͂̈́̓~~~~~~~~̀~~~~~~̀~~̀~~̀̀̀́́̀̀̀́́̀̀̀̀̀zzzz||~~~~~~̀́̓͂̀̀~~~~~~~~~~̀̀̀́́̀̀̀̀́}}}}~~~~||||yyzz||||}}́̓͂̀̀~~~~̀̀̀́́~~~~~~̀}}}}||}}~~~~~~||||zzzz}}}}~~́̓̓̀̀~~~~ͅww{{yy͂̀}}{{͛͂̀̓́̀͝~~~~~~~~~~~~}}̀̓́̀~~~~~~}}}}~~~~̀~~~~~~̀̀̀̀̀̀̀̀̀̀~~~~~~~~̀̀̀́́̀̀̀́́̀̀̀̓́̀~~~~~~~~~~~~~~~~~~~~̀̀̀́́̀̀̀||||}}}}~~̓́̀~~~~~~~~~~~~~~~~~~~~̀́}}}}~~~~~~~~{{||}}̓͂̀~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~htv^tv}~|~~~}}}~~~~~~}}}~{{}~}}Jtt}~u}}y~y~x~~~{~|~z~yy~{~{|~x{wzyzy~}~~~~~~~~}||~{yy}{{~|~|~{yy}~~||||||~||~|{}y~y~}{{}{~~~~=t>tw}}v}y}|}~~y~y~x~x~x~z~}~~y~xy~yyzyzyz{|}}z~z~yyy{|~~~z~~z~~y~yyz|~~~z~{z~|y~}x~x~z~|~~~~zy{z}|~}~}~~~~~~~~~~~~~jwZf{Jzv|~}~}|~~}~}~}}~}KvcHyYw~zz~}y~xyz{~}|~~z~~yy~|z}v|v}w}w~{~~~~~~||{yy}|||~|~~{~yy}|||~{{~|y~y~}|{~z~|}}~~~~BvcDwgWxp~w~|z~}|~y~}y~}y~}x~}x~}{~~}~zwzxzyzyzy|{}}z~z~yyy{|~~~z~}z~}y~~y~y~z~|~~~z~zz{y{y|y|{}|}~~~~~~{x|z}{~}~}~}~~~~~~~~~p~CpL}}}~~|~}~~~~}~~}~}X}JYLd[~~{{{u|x{~||~zz~{x~x~~|y}u}u~x~x~z}~~~~~||{yy}}~}~~|~}|~}{~yy}|{}x{yx{x{}~}z~y~z||~|~R~Y^e{|xy{{}}y~{y~{y~{y|y|{}}~{v{w{x{y{y|{~}z~~z~~yyy{|~~~z~|z~}y~}y~y~z~|~~~~{xzyzzyzyz{|}}~~~~~~~|x}y}{~|~|~}}~~~~~tBy\}|~}~~}}~|~|~|~}~}~}~}~{{}~~|~}}}}}}}~|~}}~~~~`EdLo`{y}{~}{~{|~x{wzyzy~}}x}y}z}z}z~|~~{{~|~|~{yy}~~||||||~||~|{}y~y~}|z|z|z{{{{}{~~~~~z~{~|~}~}~}~~~~`Xkgzyzv{y}|y~xy~yyzyzyz{|}}{u|v|w|x|x}z~}z~~z~~y~yyz|~~~z~{z~|y~}x~x~z~|~~~~{w{xzxzyzy{z}|~}~}~~~}w}y~z~{~{~|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~htv^tv}~|~~~}}}~~~~~~}}}~{{}~}}Jtt}~u}}y~y~x~~~{~|~z~yy~{~{|~x{wzyzy~}~~~~~~~~}||~{yy}{{~|~|~{yy}~~||||||~||~|{}y~y~}{{}{~~~~=t>tw}}v}y}|}~~y~y~x~x~x~z~}~~y~xy~yyzyzyz{|}}z~z~yyy{|~~~z~~z~~y~yyz|~~~z~{z~|y~}x~x~z~|~~~~zy{z}|~}~}~~~~~~~~~~~~~jwZf{Jzv|~}~}|~~}~}~}}~}KvcHyYw~zz~}y~xyz{~}|~~z~~yy~|z}v|v}w}w~{~~~~~~||{yy}|||~|~~{~yy}|||~{{~|y~y~}|{~z~|}}~~~~BvcDwgWxp~w~|z~}|~y~}y~}y~}x~}x~}{~~}~zwzxzyzyzy|{}}z~z~yyy{|~~~z~}z~}y~~y~y~z~|~~~z~zz{y{y|y|{}|}~~~~~~{x|z}{~}~}~}~~~~~~~~~p~CpL}}}~~|~}~~~~}~~}~}X}JYLd[~~{{{u|x{~||~zz~{x~x~~|y}u}u~x~x~z}~~~~~||{yy}}~}~~|~}|~}{~yy}|{}x{yx{x{}~}z~y~z||~|~R~Y^e{|xy{{}}y~{y~{y~{y|y|{}}~{v{w{x{y{y|{~}z~~z~~yyy{|~~~z~|z~}y~}y~y~z~|~~~~{xzyzzyzyz{|}}~~~~~~~|x}y}{~|~|~}}~~~~~tBy\}|~}~~}}~|~|~|~}~}~}~}~{{}~~|~}}}}}}}~|~}}~~~~`EdLo`{y}{~}{~{|~x{wzyzy~}}x}y}z}z}z~|~~{{~|~|~{yy}~~||||||~||~|{}y~y~}|z|z|z{{{{}{~~~~~z~{~|~}~}~}~~~~`Xkgzyzv{y}|y~xy~yyzyzyz{|}}{u|v|w|x|x}z~}z~~z~~y~yyz|~~~z~{z~|y~}x~x~z~|~~~~{w{xzxzyzy{z}|~}~}~~~}w}y~z~{~{~|}~~~~͂͂̀͂͂~~}}̀̀̀́́͂̀́}}}}~~~~~~~~{{||}}}}~~̀̀́́́͂͂͂}}}}~~́́́͂͂}}}}||~~~~~~̀́~~~~~~}}||||}}~~̀͂͂́͂̓~~̀̀̀́͂~~~~}}}}̀̀}}~~||||}}~~͂͜͞{{̀̀́͂̀̀̀̀́́́~~~~̀̀||||}}~~~~~~{{{{||||}}~~̀̀~~~~̀́́́͂͂}}}}~~̀̀̀́͂~~~~}}~~~~~~~~̀~~||}}}}}}~~~~̀~~~~~~̀̀̀́̓̓~~~~~~~~~~~~̀́͂~~}}}}}}̀̀~~~~~~}}}}}}}}~~~~͓̀́}}zź̓~~}}}}́͂̈́̓~~~~~~́̓͂̀̀̀̀̀́́~~~~~~̀}}}}||}}~~~~~~||||zzzz}}}}~~́̓̓̀̀~~~~~~~~̀́́́͂͂~~~~~~~~̀̀́~~~~||}}}}}}~~~~~~||{{||||}}||}}́̓̓̀̀~~~~~~̀̀́͂͂~~~~~~~~̀́~~}}~~~~~~~~}}}}}}{{~~~~͂̓̓̀̀~~~~~~~~̀̀̀̀̀̀̀̀̀ͅww{{yy͂̀}}{{~~}}̀̓́̀~~~~~~}}}}̓́̀~~~~~~~~~~̀́}}}}~~~~~~~~{{||}}̓͂̀~~~~~~~~~~~~~~~~~~~~}}}}~~́́́͂͂}}}}||~~~~~~̀́~~~~~~}}||||}}~~̓͂̀~~~~~~~~~~~~~~~~~~~~~~̀̀̀́͂~~~~}}}}̀̀}}~~||||}}~~̓͂̀~~~~~~~~~~~~~~~~~~~~̀́͂~~||̀̀́́͂~~~~̀́~~~~}}~~~~~~zz}}}}}}~~̀~~~~̀́͂͂́͂̓~~~~~~̀̀̀͂͂~~~~}}~~~~~~̀́~~||}}}}}}~~͖́͜~~̀}}́͂̀̀̀̀̀́́}}}}~~̀~~~~}}~~~~~~~~{{||{{{{||~~̀}}}}̀́́͂͂̓~~~~}}~~̀͂͂~~~~~~}}~~~~~~||||}}}}}}}}~~̀̀͑͆}}{{́̓~~~~}}~~́͂̈́̓~~~~~~́͂͂̀̀̀̀̀̀̀́}}}}~~~~~~}}}}}}~~~~||{{{{{{||}}~~́̓͂̀̀~~~~~~~~~~̀̀́͂̓~~~~~~~~~~~~̀̀́}}}}~~~~}}~~̀~~~~||||{{{{}}}}}}́̓̓̀̀~~~~́̓̓̀̀~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀̈́xxjjzź̀~~||~~||̓́̀~~~~~~~~}}͂́̀~~~~~~~~̀́~~~~}}~~~~~~zz}}}}̓͂̀~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀͂͂~~~~}}~~~~~~̀́~~||}}}}}}~~̓͂̀~~~~~~~~~~~~~~~~~~~~̓͂̀~~~~~~~~~~~~~~~~~~~~̀̀͂̓||̀̀́́́~~~~~~́~~~~}}~~~~~~~~||||||}}~~~~~~̀́́͂͂̓||||~~̀̀̀́͂~~~~}}~~~~~~̀̀}}}}}}}}}}}}~~͕̈́}}̀̀͂̀̀̀́́}}}}~~̀~~~~}}~~~~~~~~||}}}}}}}}}}~~̀}}}}̀̀̀͂͂͂~~~~̀̀́~~~~~~}}~~~~~~~~}}}}}}||~~͍̀̀̈́yyrr̀́̀}}̀͂̈́̓~~~~~~́͂́̀̀̀̀̀~~~~̀́}}}}~~~~~~~~}}}}}}}}}}||{{{{{{||}}~~́̓̓̀̀~~~~~~~~~~̀̀́͂̓~~~~}}}}~~~~̀̀͂}}||~~~~~~̀}}}}||||||~~}}͂̓̓̀̀~~~~́̓̓̀̀~~~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀zzqqkḱ̀~~}}||̓́̀~~~~~~~~}}͂́̀~~~~~~́~~~~}}~~~~~~~~||||̓͂̀~~~~~~~~~~~~~~~~~~~~||||~~̀̀̀́͂~~~~}}~~~~~~̀̀}}}}}}}}}}}}~~̓͂̀~~~~~~~~~~~~~~~~~~~~͂́̀~~~~~~~~̀̀̀̀̀̀́́}}}}~~́}}}}||~~~~~~~~~~}}||||}}~~̀͂͂́͂̓~~̀̀̀́͂~~~~}}}}̀̀}}~~||||}}~~͉́̀̀̀̀~~~~̀́}}}}~~̀~~~~}}~~~~~~||}}}}}}~~~~̀~~~~~~̀̀̀́̓̓~~~~~~~~~~~~̀́͂~~}}}}}}̀̀~~~~~~}}}}}}}}~~~~͉̀̀̀̀͂{{xx̀̀~~́̓͂̀̀́̀̀̀̀~~~~̀́~~~~~~~~~~~~||}}}}~~~~||{{||||}}||}}́̓̓̀̀~~~~~~̀̀́͂͂~~~~~~~~̀́~~}}~~~~~~~~}}}}}}{{~~~~͂̓̓̀̀~~~~~~~~́́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀zzttrŕ̀~~̓́̀~~~~~~~~~~́́̀̀̀̀}}}}~~́}}}}||~~~~~~~~~~}}||̓͂̀~~~~~~~~~~~~~~~~~~~~~~̀̀̀́͂~~~~}}}}̀̀}}~~||||}}~~̓͂̀~~~~~~~~~~~~~~~~~~~~͂́́̀̀̀̀̀̀̀̀̀̀̀̀̀̀[_RT}}z{xy~~}}||{{{{zzyyyxz~|y~|x~{w~{w~{w~{w~{w~z~}}{|~{{~{z~{y~|y~|y~{y~{y~{}~{~~}~~~~~~|}z}z|z{zzyy~}x~}x~|x}|x}|x~}x~}x~}{~}{~}|~}|~}|~}z}z{z~y~}x~x}x}w}w}x~x~x~~{~{~{~{}{}z|{zz~~gb_VXK~}{zyx~}}}|||{|{{zzyzwy~{y~{|~{y~|y~|y~{x~zx~z~~}{}~}|~|{~|z~{z~{z~{y{yz}~z~~|}}}}z}z}z|z{yz~}y~}x}}y}}y}}z~~x~}x~}|~}|~}{}}z}{z}{u|x~|~{~}y~y~x}y}y}z~y~y~~|~|~{}z|z|t{~~|{~vfkJfB~||y{v~}~|}{|{|{|y{x{wz~z}~{~}z}zzyzyz~y~~~{~~~~}}|{{{{{zzzzz|~z}}|~}}}~~z~z~z}y|y{~}z~}y~|z~{z~{y~x~~y~}}~}}~}z}{y|zy|zv{u~~|~}z}z~y}{}{}yyy~}~}}{~|y~{y~{x~{~|~zW}Bz=~|~x}u}~|~{}z}z}y|x|v}~y|}y~|zz}y|x{x~~~{~~~|}z}z|z{zzy|}y}}|}}~|~|~zz~z~y}y|~}z}z{z~y~}}~}|}|{|z{{y{{ywzw~~~~}{}z|{zz}~}~}|~{|}{|}{y}z~~~{m~sT{fJz]y{x|~w}}w~{|}||{|z{z{yzyzxyy~~x~}x~}w~}w~}w~}w~|v~|~}}{{~|z~|y~|x~|x~|x~|x~|x~||~|}~}~~~~~z}y{{zzz{y~~x~}x~}x}}x}}x~}x~}x~}{~~{~~|~~|~~|~~y|}{z~z~}x~~x~}x~}x~}x~}x~x~x~{~~{~~{~|}|}y}{zz||ehQ~XN{S}~}y~|xzx~z}{~~}}{{{{zzyxyxw~|x~|y~}x}|x}|x~}w~|x~{}{|~}y~{x~zx~{x~{z~|y~|y~{|~{|~{|~||~||~|y}y~{}z{zz~~y~}x}}x}~x}~z~~y~~x~}|~~|~~{}|y||y||w{|~|~{~}y~y~x~}x~}x~}z~y~y~|~~|~~{~}y~|y~|w~|~|{vri^^H]}I~~{{yxzy}{~~~|{|{{x{w{wz~|{~}|~}y~}y~{z~{~{~~~z~{y~z{~z{~zy|y{y{}~{|~{|~||~||~|z}y{~z|z{~~z~}y}}z}}z}}yx~~y~}}~~|}}{||y|{y|{uzz~~|~}z}z~y~}z}z}yyy~}~~|~}|~}z~{z~{w~{~|~vy>x}D}}z|v|x}~~~{~{}x|w|w}~|}~}{{y~~}|~{{~z~{~z}y{{zzz{}~z}~|}~|}~|}~|{}z{~z}z|~~y|}{z~z~}}~~}~}||||{{|{{yzy~~~~}|}y}{zz~~}}~|}~||~{|~{z~{~~]vuIvnCwgrzxs|zt|~v~}{~|z~|y~|y~{y~{x~{x~zw~zx~x~w~v~v~v~v~~v~~~~~|}{z~|y~|y~|x~|x~|x~|x~|x~|{~||~}}~}~~~~~~z}{{~z~}z|x~~x~~x}~w}~w}~x~~x~~x~~{~~{~~{~|~|~y}}{zz~~x~~x~~x~}x~}x~}x~~x~x~{~~|~~|~~|~}|~}y~}{zzww}]xqExdDvfz~~v}|w~|x~}{~{}~}~~{|{|yzyyyyw~x~x~w}w}x~~w~~x~}~}{{~}y~{x~{x}|x}|z~}y~}y~||~||~||~|z}zz}zv|x~~|}{|y~~y}~x}~y}~y}~z~y~~y~~|~~|~~{}~y|~y|~v~{~|{~y~~y~~x~~x~}x~}z~y~y~|~~}~~{~}{~}{~}w~|~|{xyO{SXw\z~|w~{w~zz~|}{~~~}{}{{xzxzxz~{~{}zy~~y~}~~{|~}z~{y~{{~{{~{y~~x~|y~|}~||~|z}zy|xy|xy{w~~~}||{~z~~y}~z}}z}}yx~y~~}~|}{|~z{}z{}wz}~|~{~}z~~z~~{~}{~}yyy~}~~|~}|~}{~|{~|y}{~|}u}~vvxV}~yz{x|~|~{~~~{~{}x|w|w~~~}~|}{~~|~~{~}~}{~~~z}{{~z~}z|}~|}~|||z{|y{|yx{v~~~|~{|~y}}{zz~~}~}}|{~{~{~{~{~z~{~~~~|~}y~}{zz~~}}}}|}|{||{||w~z~~~~tet}Dt=tksunwxq{zu}z~|y~|x~{w~{w~{w~{w~{w~zw}~w}~v}~v}}v}}v~}v~~v~~~~|}zy~}x~}x~|x}|x}|x~}x~}x~}{~}{~}|~}|~}|~}z}z{z~y~}x~x}x}w}w}x~x~x~~{~{~{~{}{}z|{zzx}~x}~x}~x~}x~}x~~x~x~|~~|~~|~~|~}|~}z~}{zzu{tO|t?t}At~Zsut}}v~}w}y~{y~{|~{y~|y~|y~{x~zx~zw}~x}~x}~x~}x~}x~w~w~}}zz~}y~}x}}y}}y}}z~~x~}x~}|~}|~}{}}z}{z}{u|x~|~{~}y~y~x}y}y}z~y~y~~|~|~{}z|z|t{~~|{~z}}y~~y~~y~~y~~{~y~y~|~~|~~|~}{~}{~}v}|~|{ksuu}Ct~Rtw}~v}}v~y}z~z}~{~}z}zzyzyz~y{~~|~~|~}zy~y~}~~z{~}z~}y~|z~{z~{y~x~~y~}}~}}~}z}{y|zy|zv{u~~|~}z}z~y}{}{}yyy~}~}}{~|y~{y~{x~{~|~{~}z~~y~~z~}z~}yyy~}~~}~~|~}z}|z}|x}{~|~~{}}}ut~~{~{}}~y|}y~|zz}y|x{x~~~~}|}|~|~{~~|~z|~}z}z{z~y~}}~}|}|{|z{{y{{ywzw~~~~}{}z|{zz}~}~}|~{|}{|}{y}z~~~|~}z~}{zz~~}~~}}~||}||}|z|z~~[_RT}}z{xy~~}}||{{{{zzyyyxz~|y~|x~{w~{w~{w~{w~{w~z~}}{|~{{~{z~{y~|y~|y~{y~{y~{}~{~~}~~~~~~|}z}z|z{zzyy~}x~}x~|x}|x}|x~}x~}x~}{~}{~}|~}|~}|~}z}z{z~y~}x~x}x}w}w}x~x~x~~{~{~{~{}{}z|{zz~~gb_VXK~}{zyx~}}}|||{|{{zzyzwy~{y~{|~{y~|y~|y~{x~zx~z~~}{}~}|~|{~|z~{z~{z~{y{yz}~z~~|}}}}z}z}z|z{yz~}y~}x}}y}}y}}z~~x~}x~}|~}|~}{}}z}{z}{u|x~|~{~}y~y~x}y}y}z~y~y~~|~|~{}z|z|t{~~|{~vfkJfB~||y{v~}~|}{|{|{|y{x{wz~z}~{~}z}zzyzyz~y~~~{~~~~}}|{{{{{zzzzz|~z}}|~}}}~~z~z~z}y|y{~}z~}y~|z~{z~{y~x~~y~}}~}}~}z}{y|zy|zv{u~~|~}z}z~y}{}{}yyy~}~}}{~|y~{y~{x~{~|~zW}Bz=~|~x}u}~|~{}z}z}y|x|v}~y|}y~|zz}y|x{x~~~{~~~|}z}z|z{zzy|}y}}|}}~|~|~zz~z~y}y|~}z}z{z~y~}}~}|}|{|z{{y{{ywzw~~~~}{}z|{zz}~}~}|~{|}{|}{y}z~~~{m~sT{fJz]y{x|~w}}w~{|}||{|z{z{yzyzxyy~~x~}x~}w~}w~}w~}w~|v~|~}}{{~|z~|y~|x~|x~|x~|x~|x~||~|}~}~~~~~z}y{{zzz{y~~x~}x~}x}}x}}x~}x~}x~}{~~{~~|~~|~~|~~y|}{z~z~}x~~x~}x~}x~}x~}x~x~x~{~~{~~{~|}|}y}{zz||ehQ~XN{S}~}y~|xzx~z}{~~}}{{{{zzyxyxw~|x~|y~}x}|x}|x~}w~|x~{}{|~}y~{x~zx~{x~{z~|y~|y~{|~{|~{|~||~||~|y}y~{}z{zz~~y~}x}}x}~x}~z~~y~~x~}|~~|~~{}|y||y||w{|~|~{~}y~y~x~}x~}x~}z~y~y~|~~|~~{~}y~|y~|w~|~|{vri^^H]}I~~{{yxzy}{~~~|{|{{x{w{wz~|{~}|~}y~}y~{z~{~{~~~z~{y~z{~z{~zy|y{y{}~{|~{|~||~||~|z}y{~z|z{~~z~}y}}z}}z}}yx~~y~}}~~|}}{||y|{y|{uzz~~|~}z}z~y~}z}z}yyy~}~~|~}|~}z~{z~{w~{~|~vy>x}D}}z|v|x}~~~{~{}x|w|w}~|}~}{{y~~}|~{{~z~{~z}y{{zzz{}~z}~|}~|}~|}~|{}z{~z}z|~~y|}{z~z~}}~~}~}||||{{|{{yzy~~~~}|}y}{zz~~}}~|}~||~{|~{z~{~~]vuIvnCwgrzxs|zt|~v~}{~|z~|y~|y~{y~{x~{x~zw~zx~x~w~v~v~v~v~~v~~~~~|}{z~|y~|y~|x~|x~|x~|x~|x~|{~||~}}~}~~~~~~z}{{~z~}z|x~~x~~x}~w}~w}~x~~x~~x~~{~~{~~{~|~|~y}}{zz~~x~~x~~x~}x~}x~}x~~x~x~{~~|~~|~~|~}|~}y~}{zzww}]xqExdDvfz~~v}|w~|x~}{~{}~}~~{|{|yzyyyyw~x~x~w}w}x~~w~~x~}~}{{~}y~{x~{x}|x}|z~}y~}y~||~||~||~|z}zz}zv|x~~|}{|y~~y}~x}~y}~y}~z~y~~y~~|~~|~~{}~y|~y|~v~{~|{~y~~y~~x~~x~}x~}z~y~y~|~~}~~{~}{~}{~}w~|~|{xyO{SXw\z~|w~{w~zz~|}{~~~}{}{{xzxzxz~{~{}zy~~y~}~~{|~}z~{y~{{~{{~{y~~x~|y~|}~||~|z}zy|xy|xy{w~~~}||{~z~~y}~z}}z}}yx~y~~}~|}{|~z{}z{}wz}~|~{~}z~~z~~{~}{~}yyy~}~~|~}|~}{~|{~|y}{~|}u}~vvxV}~yz{x|~|~{~~~{~{}x|w|w~~~}~|}{~~|~~{~}~}{~~~z}{{~z~}z|}~|}~|||z{|y{|yx{v~~~|~{|~y}}{zz~~}~}}|{~{~{~{~{~z~{~~~~|~}y~}{zz~~}}}}|}|{||{||w~z~~~~tet}Dt=tksunwxq{zu}z~|y~|x~{w~{w~{w~{w~{w~zw}~w}~v}~v}}v}}v~}v~~v~~~~|}zy~}x~}x~|x}|x}|x~}x~}x~}{~}{~}|~}|~}|~}z}z{z~y~}x~x}x}w}w}x~x~x~~{~{~{~{}{}z|{zzx}~x}~x}~x~}x~}x~~x~x~|~~|~~|~~|~}|~}z~}{zzu{tO|t?t}At~Zsut}}v~}w}y~{y~{|~{y~|y~|y~{x~zx~zw}~x}~x}~x~}x~}x~w~w~}}zz~}y~}x}}y}}y}}z~~x~}x~}|~}|~}{}}z}{z}{u|x~|~{~}y~y~x}y}y}z~y~y~~|~|~{}z|z|t{~~|{~z}}y~~y~~y~~y~~{~y~y~|~~|~~|~}{~}{~}v}|~|{ksuu}Ct~Rtw}~v}}v~y}z~z}~{~}z}zzyzyz~y{~~|~~|~}zy~y~}~~z{~}z~}y~|z~{z~{y~x~~y~}}~}}~}z}{y|zy|zv{u~~|~}z}z~y}{}{}yyy~}~}}{~|y~{y~{x~{~|~{~}z~~y~~z~}z~}yyy~}~~}~~|~}z}|z}|x}{~|~~{}}}ut~~{~{}}~y|}y~|zz}y|x{x~~~~}|}|~|~{~~|~z|~}z}z{z~y~}}~}|}|{|z{{y{{ywzw~~~~}{}z|{zz}~}~}|~{|}{|}{y}z~~~|~}z~}{zz~~}~~}}~||}||}|z|z~~uu~~{{||}}~~}}}}~~~~~~~~~~~~̀̀̀~~̀̀̀~~͂́́́́̀̀̀̀́́͂͂͂́~~͂͂͂͂͂̀̀̀́͂͂̓̓́ͅ~~͂͂̓̓̓͆̀̀̀rrvv{{ͅ}}}}~~~~~~~~~~~~̀̀̀~~̀~~̀̀̀͂͂͂͂͂̀~~̀̀́͂̓̓̓~~~~͉͂͂̈́̀̀̀͂͂̓̓̓ͅͅ~~~~͇͇͂͂͊̀̀̀ͅ{{}}̈́͋~~̀̀̀́͂́̀̀́̀́̀̀̓̓̈́̈́̈́̀~~̀̀́͂̓̈́̈́~~͉͉͂̓͆͋̀̀̀͂͂̓̈́̈́~~͇͉̓̈́͊͊͋̀̀̀͂͐̀́́̀̀́͂̈́ͅ~~~~̀́͂̀́̀̀̀̀̈́̈́̀ͅͅͅ~~~~~~͇͍̀̀͂̀̀̀̓͊͊̀̀́̓͆̀̀̀̓͊͊͊͌̀̀ͅͅͅeeiipp{{sswwzz~~}}~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀~~͂͂́́́̀̀̀́́͂͂͂́ͅ~~͂͂͂͂͂̀̀̀́͂͂͂͂́ͅ~~͂̓̓̓̓͆̀̀̀jjqq||͇||}}~~̀̀́́͂͂~~̀̀~~́́͂̓̓~~~~͂͂͂͂͂͆̀̀̀́͂̓̓̓~~~~͇͇͉͂͂̀̀̀͂͂͂̓̓ͅ~~~~̓̓͆͆͊̀̀̀ͅttyy͆͐}}~~́̀̀̀́͂͂̀́́́~~́͂̓̈́̈́~~̓͂͂̓̓͆̀̀̀͂͂̓̈́̈́~~͇͂͊͊͌̀̀̀̓͂̓̈́̈́ͅ~~͍̓͆͊͊̀̀̀̀͐͗́͂̀̀̀́́͂̓͊́́͂́ͅ~~͉͎͇́̀̀̀̈́͂͂̓̓͆̀̀̀͂̀̀̀̓̓͋͋̀́̓͆̀̀̀̈́͊͊͊͋̀̀ͅͅffppyyjjqqww~~~~~~~~̀́́̀̀́̀̀́́́́̀~~͂͂͂͂͂̈́̀̀̀́́͂͂͂́~~͂͂͂̓̓͆̀̀̀́͂͂͂͂́~~͂̓̓̈́̈́̀̀̀ͅbbhh{{͊{{}}}}~~~~~~~~̀̀́́̓̓~~̀́~~́͂͂̓̓~~~~͈͂͂͂̀́̀͂͂̓̓̓ͅͅ~~~~͇͇͉͂͂̈́̀̀̀͂͂̓̓̓~~~~̓͂͆͆͊̀̀̀ͅ{{~~͈͖~~̀́̀̀~~~~̀̀́͂͂̓̀́́͂~~́͂̓̈́̈́~~͈͈͉̓͂͆̀̀̀͂͂̓̈́̈́~~͇͎̓̈́͊͊̀̀̀̓͂̓̈́̈́~~͇͈͈̈́͋̀̀̀́̓͂͜ͅ~~͂̓́́̀̀́́̓̓͊̀́͂̓~~͇͈͈͉͍͂̈́̀̀̀̓̓͋̀̀́̓͆̀̀̀̓̈́͊͋͋͋̀̀̈́̀̀̀͆͋͋̀̀ͅͅ^^``pp}}bbkktt}}~~~~̀̀̀~~̀́́̀̀́̀̀́́͂͂͂́~~͂͂͂͂͂̀̀̀́͂͂̓̓́ͅ~~͂͂̓̓̓͆̀̀̀́͂͂͂͂́~~͂̓̓̈́̈́̀̀̀ͅ^^iiyy͊gg~~}}̀̀~~̀̀́́͂͂~~̀͂̀~~́͂̓̓̓~~~~͉͂͂̈́̀̀̀͂͂̓̓̓ͅͅ~~~~͇͇͂͂͊̀̀̀͂͂͂̓̓ͅ}}~~~~͈̓̓͆͆̀̀̀ͅbb}}͌͗~~́́́͂́̀̀́͂͂̈́̀́́̈́̀~~́͂̓̈́̈́~~͉͉͂̓͆͋̀̀̀͂͂̓̈́̈́~~͇̓̈́͊͊͋̀̀̀̓͂̓̈́̈́~~͉͉̈́̈́͌̀̀̀͂̓̈́͂͂̓͂̈́͠ͅͅ~~~~̀́͂͂͋̀́͂̀ͅͅ~~~~͇͍͉͎͂̀̀̀̓͊͊̀̀́̓͆̀̀̀̓͊͊͊͌̀̀̈́̀̀̀͋͋̀̀ͅͅͅͅͅͅ~~tet}Dt=tksunwxq{zu}w}~w}~v}~v}}v}}v~}v~~v~{wzxyyxzxzxz~wz~wz~x}~x}~x}~x~}x~}x~~x~x~|~~|~~|~~|~}|~}z~}{zzy|~y}~y}~x}~x}~x}~x}~x~~|}|}|}|~|~|~~|~~|~~|~~{}~{zz~zyzzzzz{z{z{z{z{~z{~z{~y|~y|~y|~y|~x|~x{~}}}}}}}}}}}}}}}}}}||~{~z~y}~u{tO|t?t}At~Zsut}}v~}w}w}~x}~x}~x~}x~}x~w~w~{x{yzzz{z{yxxyy{~z}}y~~y~~y~~y~~{~y~y~|~~|~~|~}{~}{~}v}|~|{z}~z}~y}~y}~y}~{~~y~~x~~}}}}}~}~~}~~}}~|}~z}~z}~x|}~|{~{z{{{{{{{{{{{{{{{{z|~z|~z|~z|~z}~y|~y|~}|}|}|||||}|{{{z~{z~yy~~|~{}~ksuu}Ct~Rtw}~v}}v~y}{~~|~~|~}zy~y~zzz{z|~{~}z~~y~~z~}z~}yyy~}~~}~~|~}z}|z}|x}{~|{}~{}~z}~{~~{~~yy~y~~~~~~~~~~~~~~~~~}~z|}z|}yz}~|||||||||||||||||||{}~z}~{}~{}~y}x}~y}~}|}|~{~{~{|{}|}||}~~|~~~~{}}}ut~~{~{}~~~~}|}|~|~{~~}|}{}|~}z~}{zz~~}~~}}~||}||}|z|z~~|~~{}~{zz~~~~~~~~~~~~~}|z}|z}y|~~}}}}}}}}}}}}}}}}}}||~{~z~y}~~~}}}|~{}|~}|~}|~~~~~vRxfTxM`vBevlazlf|kj}ko~x{~x{~w|~w|~w|~v}~v}~v}~wlvotqssssuuvwxyy}~x}~x}~x}~x}~x~~x~~x~|~~|~~|~~|~~|~~z}}{zzy|~y|~y|~y}~y}~x}~x}~x}~|}|}|}}}}}|}|}~|}~|}~|}~{z~z~~zyzyzzzzzzzzzzz{z{z{z{y|~y|~y{~y{~yz~{~z}~z|sE|ZRyF^xDjviL|LW{wy~pt~y|~y|~y|~x}~x}~x~~w~~x~~m]mckhikik{wyxyzz}~y}~y~~y~~y~~z~y~y~}~~|~~|}~{~}{~}w||~|{z|~z|~y}~y}~y}~z~~y~~y}~}}}}}}}}}}}}{|~||~||~{~~~|{~{y{z{z{z{z{z{{{{{{z{z|~z|~z|~z{~y{~y{~~|~~{}p?VPMczSow{wxzwz~vy~|}|~|~~z~y~~y~~|x{z{{{~~{~~z~~{~~{~~yyy~}~~}~~}~}z||z||y~|~|{}~{}~z}~{~~{~~y~y~y~~}~}~}}}}}}}~}}~||~||~y{}~|~|z|{|{|{|{|{|{|{|{{|{||}~|}~y|x|~y|~~~|}}}vz|{}w{}|~~~~|z}~|~~{~~~||||||~~z}}{zz~~~}}}}}}|~||~|||{~~|}~|}~{z~z~~~~}~~~}~~~~||~||~}~~~~{~z}~z|~~~~~mAWJ~HYynPjUeZ`_~yyyzx{~w{~w{~w{~w{~w|~tbrephnlnlqputyxy}~y}~x}~x}~x}~x}~x~~x~~|~~|~~|~~|~~|~~{}}{zzz{~y|~y|~y|~y|~y|~x|~x|~|}}}}}}}}}}}}}}}~}}~{}~{z~y}~zyzyzy{z{zzzzzzzzzz{z{z|z|y{yzyy{|z{z{fBUNO\|mBZOywjizyz{z{~y|~y|~x{~w{~x|~tdqhqmpnpn|w{xzyz}~z}~y}~y}~y}~{~~y~~y~~}~~}~~|}~{|}{|}y~}~|{{|~y|~y}~y|~y|~z}~x}~y}~}|}}}}}}}}}|}}}}~}}~{}~~|~{~~|z{y{z{z{z{z{zz{z{z{z|z|z|{yyzyz~~|}{|xMkP`\_gqWidzwss}}}}}}y}~y}~z}~}x|y{{{}~{}~z}~{~~{~~yyy~~~~~}}~|}}z{|z{|x{|~|||~{}~z}~{}~{}~y~x~y}~~~}~}~}~}}}}|~{|~{|~||~~|~~|{|{|||||||||||||||||}|}|}yzyzz{~~~|}{rzyxy}|}}~}}|~~~~|~~{~~~{}{|||~~{}}{zz~~~~}~}}}}|}}|}z}|~~}}~{}~{z~y}~~}~}}}~|~||~||~{{~~~~~{|z{z{~~~~q>YKRO~p?gE_JVP{wzxyyxzxzxz~wz~wz~qWn\k`ididnktqzwy|~y}~y}~x}~x}~x}~x}~x~~|~|~~|~~|~~|~~{}~{zz~z{~z{~y|~y|~y|~y|~x|~x{~}}}}}}}}}}}}}}}}}}||~{~z~y}~{x{x{y{y{yzzzzzzzzzzz{z{z{zzzyyx}}||zzlDbLZZuToXi[c_{x{yzzz{z{yxxyy{~vetgrjpmpmtqwu{yz}~z}~y}~y}~y}~{~~y~~x~~}~~}}~|}~z}~z}~x|}~|{~{{z|~z|~z|~z|~z}~y|~y|~}|}|}|||||}|{{{z~{z~yy~~|~{}~|z|{|{|{|{|{|||||||||||}|}{{zzzy~~}|{{uYhgzjwktlpnzzz{z|~zrysxuxvxvywzy|z{}~{}~z}~{~~{~~yy~y~~~~~~~~~}~z|}z|}yz}~|||{}~z}~{}~{}~y}x}~y}~}|}|~{~{~{|{}|}||}~~|~~~}~}~}~}~}}}}}}}}}}}}~}~}~||{{zz~~}}||zy~~~}}}~}|}{}~~~}}||~~{}~{zz~~~~~~~}|z}|z}y|~~}}||~{~z~y}~~~}}}|~{}|~}|~}|~~~~~}}||zz~~~~}~~tet}Dt=tksunwxq{zu}w}~w}~v}~v}}v}}v~}v~~v~{wzxyyxzxzxz~wz~wz~x}~x}~x}~x~}x~}x~~x~x~|~~|~~|~~|~}|~}z~}{zzy|~y}~y}~x}~x}~x}~x}~x~~|}|}|}|~|~|~~|~~|~~|~~{}~{zz~zyzzzzz{z{z{z{z{~z{~z{~y|~y|~y|~y|~x|~x{~}}}}}}}}}}}}}}}}}}||~{~z~y}~u{tO|t?t}At~Zsut}}v~}w}w}~x}~x}~x~}x~}x~w~w~{x{yzzz{z{yxxyy{~z}}y~~y~~y~~y~~{~y~y~|~~|~~|~}{~}{~}v}|~|{z}~z}~y}~y}~y}~{~~y~~x~~}}}}}~}~~}~~}}~|}~z}~z}~x|}~|{~{z{{{{{{{{{{{{{{{{z|~z|~z|~z|~z}~y|~y|~}|}|}|||||}|{{{z~{z~yy~~|~{}~ksuu}Ct~Rtw}~v}}v~y}{~~|~~|~}zy~y~zzz{z|~{~}z~~y~~z~}z~}yyy~}~~}~~|~}z}|z}|x}{~|{}~{}~z}~{~~{~~yy~y~~~~~~~~~~~~~~~~~}~z|}z|}yz}~|||||||||||||||||||{}~z}~{}~{}~y}x}~y}~}|}|~{~{~{|{}|}||}~~|~~~~{}}}ut~~{~{}~~~~}|}|~|~{~~}|}{}|~}z~}{zz~~}~~}}~||}||}|z|z~~|~~{}~{zz~~~~~~~~~~~~~}|z}|z}y|~~}}}}}}}}}}}}}}}}}}||~{~z~y}~~~}}}|~{}|~}|~}|~~~~~vRxfTxM`vBevlazlf|kj}ko~x{~x{~w|~w|~w|~v}~v}~v}~wlvotqssssuuvwxyy}~x}~x}~x}~x}~x~~x~~x~|~~|~~|~~|~~|~~z}}{zzy|~y|~y|~y}~y}~x}~x}~x}~|}|}|}}}}}|}|}~|}~|}~|}~{z~z~~zyzyzzzzzzzzzzz{z{z{z{y|~y|~y{~y{~yz~{~z}~z|sE|ZRyF^xDjviL|LW{wy~pt~y|~y|~y|~x}~x}~x~~w~~x~~m]mckhikik{wyxyzz}~y}~y~~y~~y~~z~y~y~}~~|~~|}~{~}{~}w||~|{z|~z|~y}~y}~y}~z~~y~~y}~}}}}}}}}}}}}{|~||~||~{~~~|{~{y{z{z{z{z{z{{{{{{z{z|~z|~z|~z{~y{~y{~~|~~{}p?VPMczSow{wxzwz~vy~|}|~|~~z~y~~y~~|x{z{{{~~{~~z~~{~~{~~yyy~}~~}~~}~}z||z||y~|~|{}~{}~z}~{~~{~~y~y~y~~}~}~}}}}}}}~}}~||~||~y{}~|~|z|{|{|{|{|{|{|{|{{|{||}~|}~y|x|~y|~~~|}}}vz|{}w{}|~~~~|z}~|~~{~~~||||||~~z}}{zz~~~}}}}}}|~||~|||{~~|}~|}~{z~z~~~~}~~~}~~~~||~||~}~~~~{~z}~z|~~~~~mAWJ~HYynPjUeZ`_~yyyzx{~w{~w{~w{~w{~w|~tbrephnlnlqputyxy}~y}~x}~x}~x}~x}~x~~x~~|~~|~~|~~|~~|~~{}}{zzz{~y|~y|~y|~y|~y|~x|~x|~|}}}}}}}}}}}}}}}~}}~{}~{z~y}~zyzyzy{z{zzzzzzzzzz{z{z|z|y{yzyy{|z{z{fBUNO\|mBZOywjizyz{z{~y|~y|~x{~w{~x|~tdqhqmpnpn|w{xzyz}~z}~y}~y}~y}~{~~y~~y~~}~~}~~|}~{|}{|}y~}~|{{|~y|~y}~y|~y|~z}~x}~y}~}|}}}}}}}}}|}}}}~}}~{}~~|~{~~|z{y{z{z{z{z{zz{z{z{z|z|z|{yyzyz~~|}{|xMkP`\_gqWidzwss}}}}}}y}~y}~z}~}x|y{{{}~{}~z}~{~~{~~yyy~~~~~}}~|}}z{|z{|x{|~|||~{}~z}~{}~{}~y~x~y}~~~}~}~}~}}}}|~{|~{|~||~~|~~|{|{|||||||||||||||||}|}|}yzyzz{~~~|}{rzyxy}|}}~}}|~~~~|~~{~~~{}{|||~~{}}{zz~~~~}~}}}}|}}|}z}|~~}}~{}~{z~y}~~}~}}}~|~||~||~{{~~~~~{|z{z{~~~~q>YKRO~p?gE_JVP{wzxyyxzxzxz~wz~wz~qWn\k`ididnktqzwy|~y}~y}~x}~x}~x}~x}~x~~|~|~~|~~|~~|~~{}~{zz~z{~z{~y|~y|~y|~y|~x|~x{~}}}}}}}}}}}}}}}}}}||~{~z~y}~{x{x{y{y{yzzzzzzzzzzz{z{z{zzzyyx}}||zzlDbLZZuToXi[c_{x{yzzz{z{yxxyy{~vetgrjpmpmtqwu{yz}~z}~y}~y}~y}~{~~y~~x~~}~~}}~|}~z}~z}~x|}~|{~{{z|~z|~z|~z|~z}~y|~y|~}|}|}|||||}|{{{z~{z~yy~~|~{}~|z|{|{|{|{|{|||||||||||}|}{{zzzy~~}|{{uYhgzjwktlpnzzz{z|~zrysxuxvxvywzy|z{}~{}~z}~{~~{~~yy~y~~~~~~~~~}~z|}z|}yz}~|||{}~z}~{}~{}~y}x}~y}~}|}|~{~{~{|{}|}||}~~|~~~}~}~}~}~}}}}}}}}}}}}~}~}~||{{zz~~}}||zy~~~}}}~}|}{}~~~}}||~~{}~{zz~~~~~~~}|z}|z}y|~~}}||~{~z~y}~~~}}}|~{}|~}|~}|~~~~~}}||zz~~~~}^^``pp}}bbkktt}}~~̀́́̀̀~~̀́́̀̀́͂͂͂͂́~~͂̓̓̈́̈́̀̀̀́́͂͂͂́ͅ~~́͂͂͂͂͂͂̓̓̈́̀̀̀̀̀̀̀̀̀̀̀̀́͂͂͂́~~́́́͂͂͂͂͂͂̓̀̀̀^^iiyy͊gg~~}}̀́́͂͂~~̀̀́͂͂~~̀͂͂͂̓̓}}~~~~͈̓̓͆͆̀̀̀͂́͂̓̓ͅ}}~~~~͈͂͂͂̓̓͂̈́͆͆̀̀̀̀̀̀́́́́́́́͂͂͂}}~~͇͂̓̓̓̓̓̈́͆͆̀̀̀bb}}͌͗~~́́͂͂̈́̀́́̀́̓͂̓̈́̈́~~͉͉̈́̈́͌̀̀̀͂͂̓̓̓ͅ}}͈͈͂̓̓̈́̈́̈́͊̀̀̀́́́́́́́͂͂́͂̓̓ͅ}}͉͎͈͈͈͈̓̈́̈́̈́̈́̈́͆͆̀̀̀͂̓̈́͂͂̓͂͋̀́͂̀́́̈́̀̀̀͋͋̀̀̓̈́̀̀̀͂̓̈́͆͊͊͋̀̀́́́͂͂͂͂͂͂̓̀̀̀̓̓̓̈́̈́̓͆̀̀́͠ͅͅͅͅͅͅͅͅbbeemm||ggnnuu||~~̀́́̀̀~~̀͂̈́̈́͂̀́͂͂͂͂́~~͂͂̓̈́̈́̈́̀̀̀́́͂͂͂́~~́͂͂͂͂͂͂͂͂̈́̀̀̀̀̀̀̀̀̀̀́́́͂͂͂́~~̀̀̀ggkk{{͈ll{{}}~~̀́́͂͂~~͇̀̓͌͏͏~~̀͂́͂̓̓}}~~~~͈̓̓̓͆͆̀̀̀́͂͂̓̓}}~~~~͂͂͂͂͂̓̈́̈́̀̀̀̀̀́́́́́́́́͂͂͂ͅͅ}}~~~~̀́̀rrzz͉͓~~́̀́͂̓̀́́~~̀̓́̓̈́̈́~~͉̈́̈́͆͊͊̀̀̀͂́̓̓̓}}͇͇͂̓̓̈́̈́͊̀̀̀̀́́́́́́́́͂͂̓̓ͅͅ~~͇͉͍͇͇͈͈͈̀̀̀́͗́͂͂͊̀́͂̀́̈́̈́̀̀̀͊͊̀̀͂̈́̀̀̀̓͂̓̈́̈́̀̀̀̀̀̀̀̀͝ͅͅkkrr{{llqqvv{{~~̀́́̀̀~~́̈́͆͆̈́́́͂͂͂͂́~~͂͂̓̓̓͆̀̀̀́́͂͂͂́~~́́͂͂͂͂͂͂͂̓̀̀̀̀̀̀̀̀̀́́́́͂͂͂́~~̀̀̀qq{{͆tt~~~~}}̀̀̀͂͂~~͇͍͍̀̓͊~~͂͂̓̓̓}}~~~~͇̓̓̈́̀̀̀́͂͂͂͂ͅͅ}}~~~~͂͂͂̓̓̓̓̈́̈́̀̀̀̀̀̀́́́́͂͂͂͂͂͂ͅ}}~~~~̀̀̀zz}}͇͏~~͉́͂͂̀́́~~̀͂͂̓̓̓~~̈́̈́͆͋͋͋̀̀̀͂́̓̓̓}}͇͇͂̓͂̓̓̈́͆͆̀̀̀́́́͂͂͂͂͂͂͂͂̓̓~~͍͔͈̀̀̀͂̀͂̓̈́́́͂~~͉͈͉͉͈̀̓͆̀̀̀͆͋͋͌̀̀͂̓̀̀̀̓̓̓̈́̈́̀̀́̀̀̀̀̀̀ͅͅppzz{{rrttwwzz~~̀́́̀̀~~͉͉͂͂́́͂͂͂́ͅͅ~~͂͂͂̓̓̈́̀̀̀̀́͂͂͂́~~́́́͂͂͂͂͂͂̓̀̀̀̀̀̀̀́́́́́́͂͂̀~~ww||͆vvxxzz||̀́͂͂~~̀́̓͆͆̓́͂́͂̓̓}}~~~~͈̓͂̈́͆͆̀̀̀́́͂͂͂}}~~͇͂̓̓̓̓̓̈́͆͆̀̀̀̀̀̀̀̀̀̀̀́́́̀~~̀~~͌{{||}}̀́̀́͂͂́̀͂͂̓̓̓}}͈͈̈́̈́͊̀̀̀͂́͂̓̓ͅ}}͇͍͈͈͈͈̓̈́̈́̈́̈́̈́͆͆̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀́̀́́̀̀̓̈́̀̀̀͆͊͊͋̀̀͂̓̀̀̀̓̓̓̈́̈́̓͆̀̀́̀̀ͅͅͅzW}Bz=~|~x}u}~|~{}z}z}y|x|v~}~{~z~z~x}w}v}~y|}y~|zz}y|x{x~||||{{~y}x}x~~~{~|~{}~~~}{~~~~~~~~}}|{|z|}y}}|}}~|~|~zz~z~y}y~|x|{|||~zzzz~y}|y~|}~|~|~|~{{zzy~|}|}||||||~|||~{{z~y~yzz~z}y|y}~}|}|{|z{{y{{ywzw~~~~}~~}}}~{z~zy~zy~zw~~}~}~~}~~||}z|}z||yw~~}~}~}~}}}~}}~}|}~}~}||}||}{z~~~}~~~~}}~}~}|~{|}{|}{y}z~~~~}~}~{zz~z~}|~|~{~{{}}}}}~|}}||{~~~czfTfEp?|y~u}|~{~z~z~y~w~v}~}}|{|y|y|x|w|v~z~|x|zz~y~x}xzz|y|y}~x~~~{~|}{~~~|~{}}}}}|~|~|~|~||{{{z~}x~}|~|~|~|~zzz~y~y~|x~||~|||~zzzzy~|z~|}|||~{{zyy~~}}}~}~}~{~{~~|~|~~zz~z~y}yzzzzzzzzzz|}z}z|z|y|y~~}~|{}|{{{x{{x|{x~~~}~~}~~}~||~zx~zx|zx~~}~}~~}}~}}}zz}zz|{y~~}}}}}~}}}}~}}~}|~||||{}|{}|||~~~~}~~~}~}}}|~||z|z~{~~}~|~{}z}z{~}|~|zz~{}}}||||||~|~~~F}M^VO_Gz{|{y|v~}{zzywvzz}z{zyzyzx{w{v~~{}|y~|{{yxxyy~y~yzyz{y{y|~y~~{~|}{~~~~~|}z{{{~{~{~{~z~z}z}z|z{zy}x}||~|~|~zzz~y~y~|y~||~|~|~|~zzzzy|{|~|||~{{zy~y~~~~~zz~z}y}yyyyyyyy~y~y~y~y}{z{z{z{y{y~}~}~|}zwzwzu~~~}~~~~}|}||}{|}{|}{y~~}~}~||}|||}{{}{{{{{~~}}}}}}}~{|~{|~}}|}~||}||}|{|~~~~}~~~~~}}~|~}~|~{~}y~}y}y~~}~|~|zzz}|}|~z~z~{}}|}}~||{{{~~~~~~=AhJWSSuw|xyyv~}~{~z~z~x}w}vxx}x{xyxyyxyxzw~||||{{~y}x}xxx}y|y{y{zzz~y{~y~|~{~}{~~~~~~~~}}|{|zyy~y~y~y~y~y}y}y}y|yzyy~|x|{|||~zzzz~y}|y~|}~|~|~|~{{zzy|||~|||~{{z~y~yzz~z}y|yyyyy~y~y~y~y~y~y|y{yzyzzzzy{y~~}}}~{z~zy~zy~zw~~}~}~~}~~||}z|}z||yw~~}}}~}|}~}~}||}||}{z~~~}~~~~}~~~~~~~~~~~~~~~~~~~~~}}~|}~|~}~}~{zz~z~}|~|~{~{{}~|}}||{~~~~~~~~~~~~~vy>x}D}}z|v|x}~~~{~{}x|w|w~~~~{~{}x}v}v}~|}~}{{y~~}|~{{~z~}}}~}||~~}~~{~~z~{~{~{}~}~~~~~~~~~~~{~~~~~~}}}}z}~z}~|}~|}~|}~|{}z{~z}z~}z~~|~|}{}{~|y{zz~}{~~|~~|~}|~}|}}{{zz~~}}}}}|}|}~~}}}}}~}}~}}}{{~z~z~{}z}z}~~}~}||||{{|{{yzy~~~~}~~~~|}~|}}z|}z|}{{~~}~}~|~}|}|z||z|}z|~~}~}~}~}~}~}}|}|~}|}}|}|z}~~}~~~~}~~}}~|}~||~{|~{z~{~~~}~|~{}{}{~z}}{zzz}}}}}|||||xywiBs}D~~z}vy|~{~{~x~v~w}~}|}{z{z{w{w|w~~}~~}~zy~}~~{}~z~~}}~{}~{~~{~{~{~~~~~~~~{{~{{~{{{{{{z~z||z~}z~~|~~|~~|~~||}z{z~z~}z~|~|~~{~~{|x{zz~}{~~|}~|}~|}~||}y{zz}~}}~}}~}~~}~~}}~}}}|}~|}~|}}{{~z~z|{|z|z~~~~~~}{{|~{{|~{{}zy~~~}~}}~}{~~x|~x|}y{~~}~}}}~~|~{}~{}~z}~~}}~}~|}|}|}|}{}{~}{~|{~~~}~~~~}~}}|~{~~{~~{|~z~}~}~{~{~{~{}|{zz{}}}||}|||~|tE`TPc|Mxxyzw}y|~~{~{xvwyy}y|yyyyzxzw{w~~~~}~}z|~}~{~z~~~~~~~~}~||~{}~{~{~{~~{~~~~~~~~zzzzz~z~z~y~y}y}y}y{zz}z~|~|~}~}}|x{z~z~}z~~|~~}~}{~}{~}z{zz||~~}}~}~~}~~}}|{{z~z|}||}}|}||}||}||~|{}||}||}|||{~{~z}z{{{{{{{{~{~{~|~|||||z|z|z~~|}{}~z|~z|zy~~~}~}~}~}{~~z~~z~zy~~}~}}||{}{}~{|~~}~}~}~}~}~}}|}{}{~}{~|{~~~~}~~~~~}~}~}~|}{}{~{~}}|}{}{~{}||{{{}}}||}|||{~~~>DgO}\[zZyy}z{{y~~~~{~{}x}v}vxx}x{xzxzyyzxzw~}}}~}||~~}~~{~~zz{~{}{|{|{~||~{}~{~{~{~~{~~~~~~}}}}zyyy~y~y~y~y}y}y}y|y{yz~}z~~|~|}{}{~|y{zz~}{~~|~~|~}|~}|}}{{zz|}~~}}}}}~}}~}}}{{~z~z~{}z}z{{zzzz~z~z~z~{}{|{{{{{{{z|z~~~~|}~|}}z|}z|}{{~~}~}~|~}|}|z||z|}z|~~}~}}|}|~}|}}|}|z}~~}~~~~}~~~~~~~~~~~~~~~~~~}~~}}~}~}~|~{}{}{~z}}{zzz}|||||~~~~~}u}~vvxV}~yz{x|~|~{~~~{~{}x|w|w}~{{~w}w}w~~~}~|}{~~|~~{~}}}|~~}~}~}{}{}{~}~}}}}}}}}}}}~{~~~}~z}~|}~|||z{|y{|yx{v~~~|~{~}{~~|~}z}{x}{x{w~~||~}|~}}}}|}|y}|y|{v~~}|~~~~}~~}~~}~~}~}}}}}}||{||{|{w~~|~{~~~~}}|}~}}|{~{~{~{~{~z~{~~~~~}}~|~{~~{~|z~~}~|{}z}z{~}}}}}~|~{{{{~~~~~}}}}|}|{||{||w~z~~~~}|||z}}|||{~}}}}}|}}{uyv|~wvw\~|{}x~|{||~x~w}w~~~|z|z{w{w|x~~~}z~~~}}~}~~~~~~~}~}{}{}{~~~~~~~~~~zzzzzzzzzzzz}|z~~|~~|}}z}|z}|zzzt~~|~|~}|~~|~}{}{y}{y~zt~~||~}}~~}}}}}|{}|{~{y~~}|}}}}}~}}||}||}|}}}}}}{||{|||{z~~~|~|~~}~}}{~}|~{|~z|~z|}z|~~}~|}{~z~~z~~y~~}~|~{}{~}{~|z}~}~}}}}~|}{~|~|~{~~~~~~}~}~~}~}{~}{~~z~}||}{}{~z}}|{{{}}}|||}|||ux~{z~ynvaxy{{~y~~||{{wwwyy~y}yyyyzx{x|x~}~{~}~}~~~~~~~}~~}}{}{}{~~~~~~zyyyy~y~y~y~y~y~y}y|{z}{~|~}z~|z~|z~zu~~}~|~}|~}|~}|}|y}|y}zu~~}|~}}}}}}}}}|}}|}}{w~~}||}}|}~|}}{}}{}}|}~|}~y|{y|{{{y~~|~|~~~~~~~~~~~~~~~~~~}}|}{}|~{}~z}~z}z|~~}~{}{~z~~z~z~}|}{}z}z}z~}}|||~}}{~|~|}|~~~~~~~}~}}}||}z~}||{{{}}|{{{}}}|||||||~w~x~}cvkkvh||~~}~}}~|}~{{~w}w}wxx}x|yzyzyyzy{x}}|~~}~}}}~}~}~}}~}}~}}~}~~}}{}{}~{~~~}~zyyyy~y~y~y~y}y}y|y{yz~}{~~|~}z}{x}{x{w~~||~}|~}}}}|}|y}|y|{v~~}|~}~}}}}}}||{||{|{w~~|~{~~~~}}||||||||~|~|~|~|}|||||||{|~{~}}~|~{~~{~|z~~}~|{}z}z{~}~|~{{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~}|||z}}|||{}}|}}{~~~~{}}}ut~~{~{}}~y|}y~|zz}y|x{x~||||{{~y}x}x~~~~}|}|~|~{~~}|~~~|~z|~z~|~{~|}|}||||||~|||~{z}~}|}|{|z{{y{{ywzw~~~~}~~}}}~{z~zy~zy~zw~~}~}~~}~~||}z|}z||yw~~}~}~}~}}}~}}~}|}~}~}||}||}{z~~~}~~~~}}~}~}|~{|}{|}{y}z~~~~}~}~{zz~z~}|~|~{~{{}}}}}~|}}||{~~~~~}~~}}~||}||}|z|z~~~~~}}}|}|{}}|~|~|~|~}}}}|}||}~}}~t{~~}~z~|x|zz~y~x}xzz|y|y}~x~~~}|~~}~~~~|~z|~z|~{~~}}}~}~}~{~{~~|~|~~zzzzzzzzzzz|}z~~}~|{}|{{{x{{x|{x~~~}~~}~~}~||~zx~zx|zx~~}~}~~}}~}}}zz}zz|{y~~}}}}}~}}}}~}}~}|~||||{}|{}|||~~~~}~~~}~}}}|~||z|z~{~~}~|~{}z}z{~}|~|zz~{}}}||||||~|~~~~}~}}|~|~||~{~~~}~}||{}}||||}}}}}}}|||}}}~t}~~~}~~{}|y~|{{yxxyy~y~yzyz{y{y|~y~}~|~~~~~~|~z~|~z|~{~~~~~zyyyyyyy~y~y~y~y}{z~}~}~|}zwzwzu~~~}~~~~}|}||}{|}{|}{y~~}~}~||}|||}{{}{{{{{~~}}}}}}}~{|~{|~}}|}~||}||}|{|~~~~}~~~~~}}~|~}~|~{~}y~}y}y~~}~|~|zzz}|}|~z~z~{}}|}}~||{{{~~~~~~~~~}~{}{}{}{~~}{||~|}|}|||}}}}}}}||}~}}tt~~}}}~||||{{~y}x}xxx}y|y{y{zzz~y{~y~}|~~~~~~~~~~|~z~|~{|~{zyyyy~y~y~y~y~y~y|y{yz~~}}}~{z~zy~zy~zw~~}~}~~}~~||}z|}z||yw~~}}}~}|}~}~}||}||}{z~~~}~~~~}~~~~~~~~~~~~~~~~~~~~~}}~|}~|~}~}~{zz~z~}|~|~{~{{}~|}}||{~~~~~~~~~~~~~~~}}}|}|{}}|~|~|~|}|}||}~~zW}Bz=~|~x}u}~|~{}z}z}y|x|v~}~{~z~z~x}w}v}~y|}y~|zz}y|x{x~||||{{~y}x}x~~~{~|~{}~~~}{~~~~~~~~}}|{|z|}y}}|}}~|~|~zz~z~y}y~|x|{|||~zzzz~y}|y~|}~|~|~|~{{zzy~|}|}||||||~|||~{{z~y~yzz~z}y|y}~}|}|{|z{{y{{ywzw~~~~}~~}}}~{z~zy~zy~zw~~}~}~~}~~||}z|}z||yw~~}~}~}~}}}~}}~}|}~}~}||}||}{z~~~}~~~~}}~}~}|~{|}{|}{y}z~~~~}~}~{zz~z~}|~|~{~{{}}}}}~|}}||{~~~czfTfEp?|y~u}|~{~z~z~y~w~v}~}}|{|y|y|x|w|v~z~|x|zz~y~x}xzz|y|y}~x~~~{~|}{~~~|~{}}}}}|~|~|~|~||{{{z~}x~}|~|~|~|~zzz~y~y~|x~||~|||~zzzzy~|z~|}|||~{{zyy~~}}}~}~}~{~{~~|~|~~zz~z~y}yzzzzzzzzzz|}z}z|z|y|y~~}~|{}|{{{x{{x|{x~~~}~~}~~}~||~zx~zx|zx~~}~}~~}}~}}}zz}zz|{y~~}}}}}~}}}}~}}~}|~||||{}|{}|||~~~~}~~~}~}}}|~||z|z~{~~}~|~{}z}z{~}|~|zz~{}}}||||||~|~~~F}M^VO_Gz{|{y|v~}{zzywvzz}z{zyzyzx{w{v~~{}|y~|{{yxxyy~y~yzyz{y{y|~y~~{~|}{~~~~~|}z{{{~{~{~{~z~z}z}z|z{zy}x}||~|~|~zzz~y~y~|y~||~|~|~|~zzzzy|{|~|||~{{zy~y~~~~~zz~z}y}yyyyyyyy~y~y~y~y}{z{z{z{y{y~}~}~|}zwzwzu~~~}~~~~}|}||}{|}{|}{y~~}~}~||}|||}{{}{{{{{~~}}}}}}}~{|~{|~}}|}~||}||}|{|~~~~}~~~~~}}~|~}~|~{~}y~}y}y~~}~|~|zzz}|}|~z~z~{}}|}}~||{{{~~~~~~=AhJWSSuw|xyyv~}~{~z~z~x}w}vxx}x{xyxyyxyxzw~||||{{~y}x}xxx}y|y{y{zzz~y{~y~|~{~}{~~~~~~~~}}|{|zyy~y~y~y~y~y}y}y}y|yzyy~|x|{|||~zzzz~y}|y~|}~|~|~|~{{zzy|||~|||~{{z~y~yzz~z}y|yyyyy~y~y~y~y~y~y|y{yzyzzzzy{y~~}}}~{z~zy~zy~zw~~}~}~~}~~||}z|}z||yw~~}}}~}|}~}~}||}||}{z~~~}~~~~}~~~~~~~~~~~~~~~~~~~~~}}~|}~|~}~}~{zz~z~}|~|~{~{{}~|}}||{~~~~~~~~~~~~~vy>x}D}}z|v|x}~~~{~{}x|w|w~~~~{~{}x}v}v}~|}~}{{y~~}|~{{~z~}}}~}||~~}~~{~~z~{~{~{}~}~~~~~~~~~~~{~~~~~~}}}}z}~z}~|}~|}~|}~|{}z{~z}z~}z~~|~|}{}{~|y{zz~}{~~|~~|~}|~}|}}{{zz~~}}}}}|}|}~~}}}}}~}}~}}}{{~z~z~{}z}z}~~}~}||||{{|{{yzy~~~~}~~~~|}~|}}z|}z|}{{~~}~}~|~}|}|z||z|}z|~~}~}~}~}~}~}}|}|~}|}}|}|z}~~}~~~~}~~}}~|}~||~{|~{z~{~~~}~|~{}{}{~z}}{zzz}}}}}|||||xywiBs}D~~z}vy|~{~{~x~v~w}~}|}{z{z{w{w|w~~}~~}~zy~}~~{}~z~~}}~{}~{~~{~{~{~~~~~~~~{{~{{~{{{{{{z~z||z~}z~~|~~|~~|~~||}z{z~z~}z~|~|~~{~~{|x{zz~}{~~|}~|}~|}~||}y{zz}~}}~}}~}~~}~~}}~}}}|}~|}~|}}{{~z~z|{|z|z~~~~~~}{{|~{{|~{{}zy~~~}~}}~}{~~x|~x|}y{~~}~}}}~~|~{}~{}~z}~~}}~}~|}|}|}|}{}{~}{~|{~~~}~~~~}~}}|~{~~{~~{|~z~}~}~{~{~{~{}|{zz{}}}||}|||~|tE`TPc|Mxxyzw}y|~~{~{xvwyy}y|yyyyzxzw{w~~~~}~}z|~}~{~z~~~~~~~~}~||~{}~{~{~{~~{~~~~~~~~zzzzz~z~z~y~y}y}y}y{zz}z~|~|~}~}}|x{z~z~}z~~|~~}~}{~}{~}z{zz||~~}}~}~~}~~}}|{{z~z|}||}}|}||}||}||~|{}||}||}|||{~{~z}z{{{{{{{{~{~{~|~|||||z|z|z~~|}{}~z|~z|zy~~~}~}~}~}{~~z~~z~zy~~}~}}||{}{}~{|~~}~}~}~}~}~}}|}{}{~}{~|{~~~~}~~~~~}~}~}~|}{}{~{~}}|}{}{~{}||{{{}}}||}|||{~~~>DgO}\[zZyy}z{{y~~~~{~{}x}v}vxx}x{xzxzyyzxzw~}}}~}||~~}~~{~~zz{~{}{|{|{~||~{}~{~{~{~~{~~~~~~}}}}zyyy~y~y~y~y}y}y}y|y{yz~}z~~|~|}{}{~|y{zz~}{~~|~~|~}|~}|}}{{zz|}~~}}}}}~}}~}}}{{~z~z~{}z}z{{zzzz~z~z~z~{}{|{{{{{{{z|z~~~~|}~|}}z|}z|}{{~~}~}~|~}|}|z||z|}z|~~}~}}|}|~}|}}|}|z}~~}~~~~}~~~~~~~~~~~~~~~~~~}~~}}~}~}~|~{}{}{~z}}{zzz}|||||~~~~~}u}~vvxV}~yz{x|~|~{~~~{~{}x|w|w}~{{~w}w}w~~~}~|}{~~|~~{~}}}|~~}~}~}{}{}{~}~}}}}}}}}}}}~{~~~}~z}~|}~|||z{|y{|yx{v~~~|~{~}{~~|~}z}{x}{x{w~~||~}|~}}}}|}|y}|y|{v~~}|~~~~}~~}~~}~~}~}}}}}}||{||{|{w~~|~{~~~~}}|}~}}|{~{~{~{~{~z~{~~~~~}}~|~{~~{~|z~~}~|{}z}z{~}}}}}~|~{{{{~~~~~}}}}|}|{||{||w~z~~~~}|||z}}|||{~}}}}}|}}{uyv|~wvw\~|{}x~|{||~x~w}w~~~|z|z{w{w|x~~~}z~~~}}~}~~~~~~~}~}{}{}{~~~~~~~~~~zzzzzzzzzzzz}|z~~|~~|}}z}|z}|zzzt~~|~|~}|~~|~}{}{y}{y~zt~~||~}}~~}}}}}|{}|{~{y~~}|}}}}}~}}||}||}|}}}}}}{||{|||{z~~~|~|~~}~}}{~}|~{|~z|~z|}z|~~}~|}{~z~~z~~y~~}~|~{}{~}{~|z}~}~}}}}~|}{~|~|~{~~~~~~}~}~~}~}{~}{~~z~}||}{}{~z}}|{{{}}}|||}|||ux~{z~ynvaxy{{~y~~||{{wwwyy~y}yyyyzx{x|x~}~{~}~}~~~~~~~}~~}}{}{}{~~~~~~zyyyy~y~y~y~y~y~y}y|{z}{~|~}z~|z~|z~zu~~}~|~}|~}|~}|}|y}|y}zu~~}|~}}}}}}}}}|}}|}}{w~~}||}}|}~|}}{}}{}}|}~|}~y|{y|{{{y~~|~|~~~~~~~~~~~~~~~~~~}}|}{}|~{}~z}~z}z|~~}~{}{~z~~z~z~}|}{}z}z}z~}}|||~}}{~|~|}|~~~~~~~}~}}}||}z~}||{{{}}|{{{}}}|||||||~w~x~}cvkkvh||~~}~}}~|}~{{~w}w}wxx}x|yzyzyyzy{x}}|~~}~}}}~}~}~}}~}}~}}~}~~}}{}{}~{~~~}~zyyyy~y~y~y~y}y}y|y{yz~}{~~|~}z}{x}{x{w~~||~}|~}}}}|}|y}|y|{v~~}|~}~}}}}}}||{||{|{w~~|~{~~~~}}||||||||~|~|~|~|}|||||||{|~{~}}~|~{~~{~|z~~}~|{}z}z{~}~|~{{{{~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~}|||z}}|||{}}|}}{~~~~{}}}ut~~{~{}}~y|}y~|zz}y|x{x~||||{{~y}x}x~~~~}|}|~|~{~~}|~~~|~z|~z~|~{~|}|}||||||~|||~{z}~}|}|{|z{{y{{ywzw~~~~}~~}}}~{z~zy~zy~zw~~}~}~~}~~||}z|}z||yw~~}~}~}~}}}~}}~}|}~}~}||}||}{z~~~}~~~~}}~}~}|~{|}{|}{y}z~~~~}~}~{zz~z~}|~|~{~{{}}}}}~|}}||{~~~~~}~~}}~||}||}|z|z~~~~~}}}|}|{}}|~|~|~|~}}}}|}||}~}}~t{~~}~z~|x|zz~y~x}xzz|y|y}~x~~~}|~~}~~~~|~z|~z|~{~~}}}~}~}~{~{~~|~|~~zzzzzzzzzzz|}z~~}~|{}|{{{x{{x|{x~~~}~~}~~}~||~zx~zx|zx~~}~}~~}}~}}}zz}zz|{y~~}}}}}~}}}}~}}~}|~||||{}|{}|||~~~~}~~~}~}}}|~||z|z~{~~}~|~{}z}z{~}|~|zz~{}}}||||||~|~~~~}~}}|~|~||~{~~~}~}||{}}||||}}}}}}}|||}}}~t}~~~}~~{}|y~|{{yxxyy~y~yzyz{y{y|~y~}~|~~~~~~|~z~|~z|~{~~~~~zyyyyyyy~y~y~y~y}{z~}~}~|}zwzwzu~~~}~~~~}|}||}{|}{|}{y~~}~}~||}|||}{{}{{{{{~~}}}}}}}~{|~{|~}}|}~||}||}|{|~~~~}~~~~~}}~|~}~|~{~}y~}y}y~~}~|~|zzz}|}|~z~z~{}}|}}~||{{{~~~~~~~~~}~{}{}{}{~~}{||~|}|}|||}}}}}}}||}~}}tt~~}}}~||||{{~y}x}xxx}y|y{y{zzz~y{~y~}|~~~~~~~~~~|~z~|~{|~{zyyyy~y~y~y~y~y~y|y{yz~~}}}~{z~zy~zy~zw~~}~}~~}~~||}z|}z||yw~~}}}~}|}~}~}||}||}{z~~~}~~~~}~~~~~~~~~~~~~~~~~~~~~}}~|}~|~}~}~{zz~z~}|~|~{~{{}~|}}||{~~~~~~~~~~~~~~~}}}|}|{}}|~|~|~|}|}||}~~͉͂͐̀́́̀̀́̀̀̀̀̀̀́́͂̈́ͅ~~~~̀́͂̀͂~~~~̀́͂̀~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́̈́̀ͅͅͅ~~~~~~̀̀͆̈́̈́̀ͅͅ~~~~~~̀̀̈́̈́̈́̓̓̀~~~~~~̀̀̀̀̀̀́́͂͂̀~~~~~~͇͍͎͍͇͉͍͍͍͇͇͉͉͉͇̀̀̀̀̀̀̀̀̀̀̀̀̀̀̓͊͊̀̀́̓̈́͊͌͌̀̀͂̓͆͊͊̀̀́́͂͂͂̓̈́̀̀̀̀́̓͊͊͊͌̀̀̈́͆̀̀̓̀̀̀́́͂͂̓̈́̀̀̀̀̀ͅͅͅͅͅͅ}}͇͂͏~~̀́̀̀́̀̀́͂͆̈́~~~~̀́͂̀̀̀̀́́̀~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀ͅͅͅͅͅ~~~~~~̀̀̈́̈́̈́̀ͅͅ~~~~~~̀̀̓̓̓̓̓̀~~~~~~̀̀~~~~~~~~̀̀̀~~͇͈͍͇͍͉͉͉͇͇͇͎͎͈̀̀̀̀̀̀̀̀̀̀̀̀̀̓͌͌̀́͂͂͌͌̀̀͂̓̈́̀̀́́́́́͂̓͆͆͆̀̀̀̀̀̀̓͌͌͌̀̀̈́͊͊̀̀̓͆͊͊̀̀̀̀́͂͂͂̀̀̀̀̀ͅͅͅͅͅww{{͉́~~̀̀̀̀̀̀̀̀̀́̀̀́́̈́̓~~~~̀́͂~~̀̀́̀~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́̈́̀ͅͅͅ~~~~~~̀̀̈́̈́̈́̈́̀ͅ~~~~~~̀̀͂͂͂͂͂̀~~~~~~̀̀~~͇͎͎͍͇͈͈͇͇͇̀̀̀̀̓̓̀̀͂͋̀̀͂̓̀̀̀̀́́́́͂̓̓̀̀́ͅͅͅ~~~~~~~~~~~~~~͇͎͈͈͈͈͇̀̀̀̈́͊͐͐̀̀̓͌͌͋̀̀͂̈́̀̀̀́͂͂͂̓̓̓̀̀̀ͅͅ~~~~~~~~~~̀̀̀oosszz~~~~̀̀̀̀̀̀̀́́̀̀̀͂~~~~̀́͂~~~~~~~~~~̀́~~~~̀̀̀̀̀̀̀̀̀̀͆̈́̈́̀ͅͅ~~~~~~̀̀̈́̈́̈́̓̓̀~~~~~~̀̀̀́́͂͂̀~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀~~~~~~~~͎͍͇̀̀̓̈́͊͌͌̀̀͂̓͆͊͊̀̀͂̓̈́̀̀̀̀́ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͉͍͍͍͇͇͉͉͉͇̀̀̈́͆̀̀̓̀̀͂̓̈́̀̀̀̀̀ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀͐͗́͂̀̀̀́́̀̀̀́́͂̓͊́́͂́͂̀́͂́ͅ~~́~~~~́~~~~~~̀̀̀̀̀̀̀̀̀~~͇͉͎͈͍͍̀̀̀̀̀̀̀̀̀̈́͂͂̓̓͆̀̀̀͂̓̀̀̀̈́͂̓̓̓̀̀̀̀̀̀́́́͂͂͂̓̀̀̀̀̀̀̓̓͋͋̀́̓͆ͅͅͅͅ͏͈͇͎͉̀̀̓͆͊͊͌̀̀́́́͂͂̈́̈́͆͆̀̀̀̀́̈́͊͊͊͋̀̀̈́͆͊͋͋̀̀̓̈́͊͊͋̀̀̀́́͂͂̈́͆̀̀̀̀̀ͅͅͅͅ~~͍͕̀̀́́̀̀̀́́̀̀̀̀́͂̓͌̀́͂́́͂́~~~~́~~~~̀~~~~̀̀̀̀̀̀~~͈͎͉̀̀̀̀̀̀̀̀̀̈́͂͂͂͂͆̀̀̀̈́͂͂̈́̈́̀̀̀̓͂͂͂͂͆̀̀̀̀̀̀́́́́́́̓̀̀̀̀̀̀̓̓͊͌͌̀̀̓ͅ͏͏͍͉͉͍͍͍͈͉͉͇̀̀͂̈́͆͊̀̀̀́́͂͂̓̓̀̀̀̀̀̈́͆͋̀̀̈́͆͊͋͋͌̀̀̓̈́̀̀̀́͂͂͂̈́̈́̈́̀̀̀̀̀ͅͅͅͅ}}vv́͌̀́̀̀̀́́̀̀́͂͂͊̀́͂~~~~~~~~~~̀́́́~~~~́~~~~̀~~͈̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀̈́̓͂͂͂̀̀̀̈́͂͂̈́̈́͆̀̀̀͂́͂́́̀̀̀̀̀́̀̀́́͂͂̓̀̀̀ͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͇͍͍̀̀̀̓͊͏͇͇͇͈̀̀̓̈́͊͊͌̀̀͂̈́̈́̀̀̀̀́͂͂͂̓̈́̈́̀̀́ͅ~~~~~~~~~~͇͈͍͍͎͇͉͇͇͇̀̀̀̈́̀̀̈́͊͊̀̀͂̀̀̀̀́́͂̓̓̓̀̀̀ͅͅͅͅ~~~~~~~~~~̀̀̀kkppxx̀}}~~̀̀̀̀́́~~~~̀̀́͂̀́͂ͅ}}~~~~~~~~̀́́~~~~́~~~~~~̀~~͇̀̀̀̀̀̀̀̀̀͂̓̀̀̀̈́͂̓̓̓̀̀̀́́͂͂͂̓̀̀̀̀̀̀ͅͅͅͅ~~~~~~~~~~~~~~~~~~~~~~͈͍͍̀̀̓͆͏͈̀̀̓͆͊͊͌̀̀͂̈́̈́͆͆̀̀̀̀́ͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͎͉̀̀̈́͆͊͋͋̀̀̓̈́͊͊͋̀̀͂̈́͆̀̀̀̀̀ͅͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀́̓͂͜~~͂̓́́̀̀́́̀̀̀́́̓̓͊̀́͂̀͂̀́͂̓ͅ~~͂~~~~͂~~~~̀̀̀̀̀́́́~~͇͈͈͇͈͈͈͎͈͇͇͉͍͍͇͇͇͇̀̀̀̀̀̀̀̀̀̀̓̓͋̀̀́̈́̈́͋͋͋̀̀̀̓̓͋̀̀̀̀́́́́̓̓͆̀̀̀̀́́̓̈́͊͋͋͋̀̀̓͌͌̀̀̓͆͋͋͊̀̀̀́́͂͂̈́͆̀̀̀̀́͆͋͋̀̀̈́͆͊͊͊̀̀̈́͋̀̀̀́́͂͂̓̈́̈́̈́̀̀̀̀̀ͅͅͅͅͅͅͅ~~͙̀͂~~͂͂́́~~~~͍̀́́̀̀̀̀́́͂̈́̀́͂̀́͂̓~~~~͂~~~~͂~~~~~~͇͈͈͍͉͉͍͈͈͉͎͎̀̀̀̀̀̀̀̀̀̓̓̀̀̀̓̓̀̀̀͂͂̈́͆͆̀̀̀̀̀́͂͂͂͂̓̓͆̀̀̀̀̀̀̓ͅ͏͍͍͇͈͈͉͇͍͍͎͇͈͈͈͈̀̀̓͊͌̀̀̓̀̀̀́́́́̓̈́̈́̈́͆̀̀̀̀̀̈́͆̀̀̈́͌͌͌̀̀̓̈́̀̀̀̀̀͂͂̓̓̈́̀̀̀̀̀ͅͅͅͅͅ{{}}̀͏~~~~́́̀̀~~~~͉̀́́̀̀́́̓̀́͂~~~~~~~~~~̀́́̓~~~~͂~~~~́~~~~͉͉͍͈͈͍͇̀̀̀̀̀̀̀̀̀̀̓̓͆̀̀̀̓̓̈́̀̀̀͂͂̈́̈́̈́̀̀̀̀̀́́́́͂̓̓̈́̀̀̀~~~~~~~~~~~~~~~~~~~~~~~~͈͉͍͍̀̀̀̓͏͈͉͈͈͉̀̀̓͋͋͌̀̀͂͆̀̀̀̀́͂͂͂̈́̈́̈́̈́̀̀̀ͅ~~~~~~~~~~͇͎͇͇͈̀̀̀̈́͆͊͊̀̀̈́͊͊͊̀̀͂̈́͆͆̀̀̀̀͂͂͂͂͂͂̀̀̀ͅͅ~~~~~~~~~~̀̀̀zz{{vv̓||}}̀̀̀̀́́~~~~~~~~~~̀́̀͂̀́͂ͅ}}~~~~~~~~̀́͂~~~~͂~~~~́~~͇͈͈̀̀̀̀̀̀̀̀̀̀̈́̈́͋͋͋̀̀̀̓̓͋̀̀̀́̓̓͆̀̀̀̀́́ͅͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͈͎͈͇͇̀̀̓͌͌̀̀̓͆͋͋͊̀̀͂̈́͆̀̀̀̀́ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͍͇͇͇͇̀̀̈́͆͊͊͊̀̀̈́͋̀̀͂̓̈́̈́̈́̀̀̀̀̀ͅ~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀͂̓̈́͂͂̓͂̈́͠ͅ~~~~̀́͂̀͂~~~~̀́͂͂͋̀́͂̀͂̈́̀́͂̀ͅͅ~~~~̈́̀~~~~̓̀~~~~̀̀̀̀́́͂͂̀~~~~͇͍͎͍͇͉͍͍͍͇͇͉͉͉͇͉͎͇͈͍͈͈͈̀̀̀̀̀̀̀̀̀̀̓͊͊̀̀́̓̈́͊͌͌̀̀͂̓͆͊͊̀̀́́͂͂͂̓̈́̀̀̀̀́̓͊͊͊͌̀̀̈́͆̀̀̓̀̀̀́́͂͂̓̈́̀̀̀̀̀͋͋̀̀̈́͊͊̀̀̈́͆͆̀̀̀́́͂͂͂̈́̈́̀̀̀̀̀ͅͅͅͅͅͅͅͅͅͅ{{́̓͛̀͂͂͂͆̈́~~~~̀́͂̀̀̀̀́́͂̈́͊̀́͂̀́͂̀ͅ~~~~̈́̀~~~~̓̀~~~~~~~~~~~~̀̀̀~~͇͈͍͇͍͉͉͉͇͇͇͎͎͈͈͉͇͇͇͇̀̀̀̀̀̀̀̀̀̓͌͌̀́͂͂͌͌̀̀͂̓̈́̀̀́́́́́͂̓͆͆͆̀̀̀̀̀̀̓͌͌͌̀̀̈́͊͊̀̀̓͆͊͊̀̀̀̀́͂͂͂̀̀̀̀̀͋͋͋̀̀̈́͆͊͊͋̀̀̓̀̀̀́́́͂̓̈́̈́̈́̀̀̀̀̀ͅͅͅͅͅͅͅͅzz||͎̀}}~~́͂́̈́̓~~~~̀́͂~~͈̀̀́́̈́̀́͂~~~~~~~~~~̀́́̈́̀~~~~̈́̀~~~~͂̀~~~~~~͇͎͎͍͇͈͈͇͇͇̓̓̀̀͂͋̀̀͂̓̀̀̀̀́́́́͂̓̓̀̀́ͅͅͅ~~~~~~~~~~~~~~͇͎͈͈͈͈͇̀̀̀̈́͊͐͐̀̀̓͌͌͋̀̀͂̈́̀̀̀́͂͂͂̓̓̓̀̀̀ͅͅ~~~~~~~~~~͈͍͍͈͈͉̀̀̀̈́͋͌̀̀̈́͊̀̀͂͆̀̀ͅͅͅͅͅ~~̀́́́͂͂͂͂̀̀̀~~~~~~~~~~̀̀̀yy{{vv͂{{}}́̀͂~~~~̀́͂~~~~~~~~~~̀́̀͂̈́̀́͂}}}}~~~~~~̀́̈́̀~~~~̓̀~~~~͂̀~~~~̀̀̀̀̀̀̀̀̀̀~~~~~~~~͎͍͇̓̈́͊͌͌̀̀͂̓͆͊͊̀̀͂̓̈́̀̀̀̀́ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͉͍͍͍͇͇͉͉͉͇̀̀̈́͆̀̀̓̀̀͂̓̈́̀̀̀̀̀ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͇͈͍͈͈͈̀̀̈́͊͊̀̀̈́͆͆̀̀͂͂̈́̈́̀̀̀̀̀ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀~~{}}}ut~~{~{}~~~~}|}|~|~{~~}|~~~}|}{}~~}~~}}~||}||}|z|z~~~~~}}}|}|{}}|~|~|~|~}}}}|}||}~~~~~~~~~~~~}|z}|z}y|~~~~~~~}}}~~~}}}}~~~~~~}~~}}}|~{}|~}|~}|~~~~~~~~~~~~WVx~}}~t{~~}~~~}|~~}~~~~~~}~WVxWVx~}~}}|~|~||~{~~~}~}||{}}||||}}}}}}}|||~~~~~~~~|~|}|}}}|~~~~~}}}}~~~}}}}~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~rq}i@fe{}}}~t}~~~}~}~|~~~~~~~~~}~{}{}{}{~~}{||~|}|}|||}}}}}}}||}~~~~~}}}}~~~~~}}}}~~}}~~}~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~dczuu}}}tt~~}}}~}|~~~~~~~~~~~~~~~}}}|}|{}}|~|~|~|}|}||}~~~~~~~}}}~~~}}}}~~~~~~}~~~~~~~~~~~~WVx}}vz|{}w{}|~~~~|z}~|~~{~~~~~~~|||||~~~}}}}}}|~||~|||{~~~~}~|||~|~}}||}~~~}}}}}}|~~}~~~}~~~~||~||~}~~~~~~~~~~}~~~~~~~~~~~~~~~~~dcz~x~~}~~}~~~~~~~~~~~~}~}|~~|~~|~{~~}}|||~}}}}|~~}}}}}||}~~~~~}}~}}~}~~~}}}~~}}}~~~~~~}~~~~~~~vv}nn|~~v~~~}~~~~~~}~|~|~|}|~~}}|||}}}}}}~~}}}}|||}~~~~~}~}}~~~~~~}~~~~~~~~~~~~~}~~~~~~~~Bkmm|yy~~~vv~~~~~~~~~~~~~}~|||~|~}}||}}}}}}|~~~~~~~~}~~~~~~~~~~~~~~~dcz{rzyxy}|}}~}}|~~~~|~~{~~~~~~{}{||~~~~}~}}}}|}}|}z}|~~~~}~}~}~|~}}|||~~~~}}}}}~}~}}}~|~||~||~{{~~~~~~~~~~~~}~~~~~~~~~~~~rq}~~~~}~~~~~~~}~~~~~~~}|~|~|}||~~~}}}|~~}}}}~~~}}}~}}}~~~~}}~}~~}~~}~~~~~~~~~~~~~~~~~~~~~~{z~ww~~~~~~~~~~~}}~}~|~||~~~}}}|~}}}}}~~~}}}~}}}~~~~|~~~~~~~~~~~~~~~~~~~~vv}|~{|}z~~~~~~~~}~}~}~|~}}|||~}}}}}~~~~~~~~~}~~~~~~~~~~~rq}zy~~~}}}~}|}{}~~~}}|~~~~~~}|z}|z}y|~~~~~}}}~~}}}}~~~~~~}~~}}}|~{}|~}|~}|~~~~~~~~~~~~~~~~}~WVxWVxee{ts}~~~}~WVxWVx~~~~~~~~|~|}|}}}|~~~}}}}~~}}}}~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~rq}rq}wv~||~i@fe{fe{po|yy~~~~}}}}~~~}}}}~}}~~}~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~dczdcznm|xx~uu}uu}zz~~~zy~~~~~}}}~~}}}}~~~~~}~~~~~~~~~~~~~WVxWVxee{ts}~~{}}}ut~~{~{}~~~~}|}|~|~{~~}|~~~}|}{}~~}~~}}~||}||}|z|z~~~~~}}}|}|{}}|~|~|~|~}}}}|}||}~~~~~~~~~~~~}|z}|z}y|~~~~~~~}}}~~~}}}}~~~~~~}~~}}}|~{}|~}|~}|~~~~~~~~~~~~WVx~}}~t{~~}~~~}|~~}~~~~~~}~WVxWVx~}~}}|~|~||~{~~~}~}||{}}||||}}}}}}}|||~~~~~~~~|~|}|}}}|~~~~~}}}}~~~}}}}~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~rq}i@fe{}}}~t}~~~}~}~|~~~~~~~~~}~{}{}{}{~~}{||~|}|}|||}}}}}}}||}~~~~~}}}}~~~~~}}}}~~}}~~}~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~dczuu}}}tt~~}}}~}|~~~~~~~~~~~~~~~}}}|}|{}}|~|~|~|}|}||}~~~~~~~}}}~~~}}}}~~~~~~}~~~~~~~~~~~~WVx}}vz|{}w{}|~~~~|z}~|~~{~~~~~~~|||||~~~}}}}}}|~||~|||{~~~~}~|||~|~}}||}~~~}}}}}}|~~}~~~}~~~~||~||~}~~~~~~~~~~}~~~~~~~~~~~~~~~~~dcz~x~~}~~}~~~~~~~~~~~~}~}|~~|~~|~{~~}}|||~}}}}|~~}}}}}||}~~~~~}}~}}~}~~~}}}~~}}}~~~~~~}~~~~~~~vv}nn|~~v~~~}~~~~~~}~|~|~|}|~~}}|||}}}}}}~~}}}}|||}~~~~~}~}}~~~~~~}~~~~~~~~~~~~~}~~~~~~~~Bkmm|yy~~~vv~~~~~~~~~~~~~}~|||~|~}}||}}}}}}|~~~~~~~~}~~~~~~~~~~~~~~~dcz{rzyxy}|}}~}}|~~~~|~~{~~~~~~{}{||~~~~}~}}}}|}}|}z}|~~~~}~}~}~|~}}|||~~~~}}}}}~}~}}}~|~||~||~{{~~~~~~~~~~~~}~~~~~~~~~~~~rq}~~~~}~~~~~~~}~~~~~~~}|~|~|}||~~~}}}|~~}}}}~~~}}}~}}}~~~~}}~}~~}~~}~~~~~~~~~~~~~~~~~~~~~~{z~ww~~~~~~~~~~~}}~}~|~||~~~}}}|~}}}}}~~~}}}~}}}~~~~|~~~~~~~~~~~~~~~~~~~~vv}|~{|}z~~~~~~~~}~}~}~|~}}|||~}}}}}~~~~~~~~~}~~~~~~~~~~~rq}zy~~~}}}~}|}{}~~~}}|~~~~~~}|z}|z}y|~~~~~}}}~~}}}}~~~~~~}~~}}}|~{}|~}|~}|~~~~~~~~~~~~~~~~}~WVxWVxee{ts}~~~}~WVxWVx~~~~~~~~|~|}|}}}|~~~}}}}~~}}}}~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~rq}rq}wv~||~i@fe{fe{po|yy~~~~}}}}~~~}}}}~}}~~}~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~dczdcznm|xx~uu}uu}zz~~~zy~~~~~}}}~~}}}}~~~~~}~~~~~~~~~~~~~WVxWVxee{ts}͉͎͇͈͍͈͈͈͈͇͇͈͈͈͇͇͈̓̈́͂͂̓͂͋̀́͂̀͂̈́̀́͂̀́́̀́͂͋͋̀̀̈́͊͊̀̀̈́͆͆̀̀̀́́͂͂͂̈́̈́̀̀̀̀̀͂̓̈́͆͊͊͋̀̀͂̓̈́͆͊͊͋̀̀́͂͂̓̓̈́͆͆͆̀̀̀́͂͂͂̓̈́̈́̈́̀̀̀̀̀̓̓̓̈́̈́̓͆̀̀́͂̓̈́̈́̈́͆̀̀̀́͂͂͂̓̈́̈́̈́̀̀̀́́͂͂̓̓̈́̀̀̀̀́͠ͅͅͅͅͅͅͅͅͅͅͅjj{{́̓͛̀͂͂͂̈́͊̀́͂̀́͂̀́͂jjjj͈͉͇͇͇͇͈͇͉͈͈͈͇̀́́͋͋͋̀̀̈́͆͊͊͋̀̀̓̀̀̀́́́͂̓̈́̈́̈́̀̀̀̀̀͂̓̈́͆͊͊͌̀̀͂̓̈́̀̀̀́͂̓̓̀̀ͅͅͅͅͅͅͅͅͅͅͅ~~̀̀̀͂́͂͂̓̀̀̀̀̀̓̓͆͆͆͆͆̀́͂̓̓̈́̈́͆͆͆͆̀̀̀́͂̓̓͂̈́̈́̈́̀̀ͅͅͅͅͅ~~̀́́̀́́́͂̀̀́̀̀́xx͎qqzz||͎̀}}~~͈́͂́̈́̀́͂~~~~~~~~~~͈͍͍͈͈͉̀́́̀́͂̀̀́̈́͋͌̀̀̈́͊̀̀͂͆̀̀ͅͅͅͅͅ~~̀́́́͂͂͂͂̀̀̀~~~~~~~~~~͉͉͇͇͉̀̀̀͂̓̈́͆͊͊̀̀́͂̓̈́̈́͆͆̀̀̀́͂͂̓̈́̈́̈́̀̀ͅͅͅ}}~~̀̀̀́́́͂̀̀̀~~~~~~~~~~͇͇͇͈̀̀̀͂̓̀̀́͂̓̈́̈́̓͆̀̀̀́́́͂͂͂͂̓̀̀ͅͅͅͅͅͅͅ~~̀́́́͂̀̀́~~~~~~~~~~̀̀́qq̀̀̀̀̀̀̀̀̀xxyy{{vv͂{{}}́̀͂̈́̀́͂}}}}~~~~~~̀́̀́͂~~~~~~~~~~͇͈͍͈͈͈̀́̈́͊͊̀̀̈́͆͆̀̀͂͂̈́̈́̀̀̀̀̀ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͇͇̀̀͂̓̈́͆͊͊͋̀̀́͂͂̓̓̈́͆͆͆̀̀̀́͂͂͂̓̈́̈́̈́̀̀̀̀̀ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͇͇͈̀̀͂̓̈́̈́̈́͆̀̀̀́͂͂͂̓̈́̈́̈́̀̀̀́́͂͂̓̓̈́̀̀̀̀́ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀jj͇͉͍͉͈͈͉͇͇͈͈͈͇͉͉́͗́͂͂͊̀́͂͂̈́̀́͂̀́̀́͊͊̀̀̈́͆͋͋͋̀̀̈́̀̀̀̀́͂͂͂̈́̈́̈́̀̀̀̀̀̓͂̓̈́̈́̀̀͂̓̈́̈́̈́͆͊̀̀́́̓̓̓̈́͆͆͆̀̀̀́́́͂͂̈́̈́̈́̀̀̀̀́̀̀̀̀̀̀̀̀̀̀̀̀̀́̀͝ͅͅͅͅͅͅqq~~͙͍͇͉͈͈͇͈͈͇͇͇̀͂͂͂͂͊̀́͂̀́͂̀́̀́͋͋͋̀̀̈́͆͊͊̀̀̓̈́͆͆͆̀̀̀́́͂̓̈́̈́̓̀̀̀̀̀̓͂̈́͆͊͊͋̀̀͂̈́̈́̈́̈́̀̀́́̓̓̈́͆̀̀ͅͅͅͅͅͅͅ~~̀́́́͂͂͂̓̀̀̀̀́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀zzvv{{}}̀͐~~~~́́́̓͆̀́͂~~~~~~~~~~͉͇͈͈͉̀́́̀́̀̀̀̀̀̀̀́͆͊͊͌̀̀̈́͆̀̀͂̈́̈́͆̀̀ͅͅͅ~~̀́́́͂̓̓̓̀̀̀~~~~~~~~~~͇͉͉͈͈̀̀̀̓͂̈́̈́̈́͆̀̀́͂̓͆͆̀̀̀̀́͂͂͂̓̓̓̀̀ͅͅͅͅͅ}}~~́̀́́̓̀̀̀~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀~~~~~~~~~~~~~~̀̀̀nnvv̀̀̀̀̀̀̀̀̀̀̀{{zz||xx̓||}}̀͂̈́̀́͂}}~~~~~~~~̀́̀́~~~~~~͉͈͈͉̀̀̈́͆͋͋͋̀̀̈́̀̀͂͂̈́̈́̈́̀̀̀̀̀ͅͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͇͉͉̀̀͂̓̈́̈́̈́͆͊̀̀́́̓̓̓̈́͆͆͆̀̀̀́́́͂͂̈́̈́̈́̀̀̀̀́ͅ~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀́̀~~~~~~~~~~~~~~~~~~~~~~̀̀qq͍͔͈͂̀͂̓̈́́́͂́̓̀́͂~~͉͈͈͈͈͇͈͉͉͈͇͈͈͈̀́͆͋͋͌̀̀͆͊͊̀̀̓͆̀̀̀́͂͂̓̓̓̓̈́̀̀̀̀̀̓̓̓̈́̈́̀̀́͂̓̓̈́̀̀̀́͂̓̓̓͆͆͆͆̀̀ͅͅͅͅͅͅ~~̀͂͂́͂̓̓̓̀̀̀̀́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀xx}}͉͓͇̀̀́͂̈́̀́͂́́́̀̀~~͍͈͈͈̀͆͋͋͋̀̀̈́͊̀̀̓̈́͆͆̀̀ͅͅͅͅ~~͇͈͈͇̀́́͂͂̓̓̓̀̀̀̀̀͂̓̈́̈́̈́͆̀̀́͂̓͆͆͆̀̀́́̓̓̓̈́̀̀̀́́́͂͂͂̓̀̀̀̀̀́̀̀̀̀̀̀̀̀̀̀̀̀̀̀̀ͅͅͅͅͅͅͅ}}{{rryý͈̀́̀͂̈́̀́͂~~~~~~~~~~͇͉͇͇͇̀́́̀̀̀̀̀̀̀̀̀̀͋͋͊̀̀̈́͊̀̀͂̓͆̀̀ͅͅͅͅͅ~~~~̀̀́͂́́͂̀̀̀~~~~~~~~~~͇͉̀̀̀̓̓̈́̓̓̈́͊͊̀̀͂͂̈́̓̓̈́͆͆͆͆̀̀̀́͂͂́̓̓̀̀ͅͅ}}~~̀̀̀̀͂͂͂̀̀́~~~~~~~~~~̀̀́̀̀̀̀̀̀̀̀̀̀̀̀~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀zz̀̀̀̀̀̀̀̀̀̀̀}}kkppyy͂}}~~̀́̓̀́͂}}~~~~~~~~͈͈͈͈͇̀́́̀̀͆͊͊̀̀̓͆̀̀͂̓̓̓̓̈́̀̀̀̀̀ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͇͈͈͈̀̀͂̓̓̈́̀̀̀́͂̓̓̓͆͆͆͆̀̀ͅͅ~~̀͂͂́͂̓̓̓̀̀̀̀́~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀̀̀̀̀̀̀̀̀~~~~~~~~~~̀̀xx͇͍͈͇͇͈͈͈͇͇͈̀̀̀̀̀̀̀̀̀̀̀́̀́́̀́͂̀̀̀̀͆͊͊͋̀̀͆͊͊͋̀̀̓̈́͆͆͆̀̀̀́͂͂͂̓̈́̈́̈́̀̀̀̀̀̓̓̓̈́̈́̓͆̀̀́͂̓̈́̈́̈́͆̀̀̀́͂͂͂̓̈́̈́̈́̀̀̀́́͂͂̓̓̈́̀̀̀̀́̀̀̀̀̀̀ͅͅͅͅjjjjqqyỳ͎̓̀̀̀́͂ͅjjjj͈͇͉͈͈͈͇̀́́̀̀̀̀͆͊͊͌̀̀̀̀̓̀̀ͅͅͅͅͅͅ~~̀̀̀͂́͂͂̓̀̀̀̀̀̓̓͆͆͆͆͆̀́͂̓̓̈́̈́͆͆͆͆̀̀̀́͂̓̓͂̈́̈́̈́̀̀ͅͅͅͅͅ~~̀́́̀́́́͂̀̀́̀̀́̀̀̀̀xxxx{{}}͎̀qqqqvv{{̀xxzz̓͆~~͉͉͇͇͉̀̀̀́͂̀̀́̀̀̀̀͆͊͊̀̀̈́͆͆̀̀͂̓̈́̈́̈́̀̀ͅͅ}}~~̀̀̀́́́͂̀̀̀~~~~~~~~~~͇͇͇͈̀̀̀͂̓̀̀́͂̓̈́̈́̓͆̀̀̀́́́͂͂͂͂̓̀̀ͅͅͅͅͅͅͅ~~̀́́́͂̀̀́~~~~~~~~~~̀̀́̀̀̀̀̀qqqqvv{{̀̀̀̀̀̀̀̀̀̀xxxx{{}}̀̀̀̀̀̀̀̀̀̀̀̀̀rrrruu~~~~̀̀́͂~~~~~~~~~~͇͇̀́̀̀̀̀̀͆͊͊͋̀̀̓̈́͆͆͆̀̀͂͂̓̈́̈́̈́̀̀̀̀̀ͅ~~~~~~~~~~~~~~~~~~~~~~~~~~͇͇͈̀̀͂̓̈́̈́̈́͆̀̀̀́͂͂͂̓̈́̈́̈́̀̀̀́́͂͂̓̓̈́̀̀̀̀́ͅͅ~~~~~~~~~~~~~~~~~~~~~~~~~~̀̀̀̀̀̀jjjjqqyỳ̀̀̀̀̀̀̀̀̀̀̀̀̀̀ \ No newline at end of file diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellOptionalData.bytes.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellOptionalData.bytes.meta new file mode 100644 index 00000000000..8ec7fe8c6cb --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellOptionalData.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e219b60744db6fe4ba26d259b8f8e01a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellProbeOcclusionData.bytes b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set-Default.CellProbeOcclusionData.bytes new file mode 100644 index 0000000000000000000000000000000000000000..ddb5e37805123f80c936e49c34537e74f367bd6d GIT binary patch literal 262144 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 Ya?9q+2QTgF&EvE&y?$c#m+6=P0c$2z{r~^~ literal 0 HcmV?d00001 diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellBricksData.bytes.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellBricksData.bytes.meta new file mode 100644 index 00000000000..d74d09d8af6 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellBricksData.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f6e7e6362647afd4fad0feed0826c3b5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSharedData.bytes b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSharedData.bytes new file mode 100644 index 0000000000000000000000000000000000000000..abacaf963187d5cbbb897f74e1e4110d17802aea GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSupportData.bytes.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSupportData.bytes.meta new file mode 100644 index 00000000000..39782ca7799 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.CellSupportData.bytes.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c6f8fff910ba6c74c84404a81c9af7a1 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.asset b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.asset new file mode 100644 index 00000000000..e9a0f68114c --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.asset @@ -0,0 +1,365 @@ +%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: 4881f9a2c4d568047b316028d20a8dca, type: 3} + m_Name: 2124_APV_XR Baking Set + m_EditorClassIdentifier: + singleSceneMode: 1 + dialogNoProbeVolumeInSetShown: 0 + settings: + m_Version: 1 + dilationSettings: + enableDilation: 0 + dilationDistance: 1 + dilationValidityThreshold: 0.25 + dilationIterations: 1 + squaredDistWeighting: 1 + virtualOffsetSettings: + useVirtualOffset: 0 + validityThreshold: 0.25 + outOfGeoOffset: 0.01 + searchMultiplier: 0.2 + rayOriginBias: -0.001 + collisionMask: + serializedVersion: 2 + m_Bits: 4294967291 + m_SceneGUIDs: + - 5c98be1d78ca13747a126953d4624c4f + obsoleteScenesToNotBake: [] + m_LightingScenarios: + - Default + cellDescs: + m_Keys: 0000000009000000030000000c000000010000000a000000040000000d000000 + m_Values: + - position: {x: -1, y: -1, z: -1} + index: 0 + probeCount: 1216 + minSubdiv: 0 + indexChunkCount: 91 + shChunkCount: 1 + bricksCount: 19 + indirectionEntryInfo: + - positionInBricks: {x: -27, y: -27, z: -27} + minSubdiv: 0 + minBrickPos: {x: 0, y: 0, z: 0} + maxBrickPosPlusOne: {x: 28, y: 28, z: 28} + hasMinMax: 1 + hasOnlyBiggerBricks: 0 + - position: {x: -1, y: -1, z: 0} + index: 9 + probeCount: 1600 + minSubdiv: 0 + indexChunkCount: 91 + shChunkCount: 1 + bricksCount: 25 + indirectionEntryInfo: + - positionInBricks: {x: -27, y: -27, z: 0} + minSubdiv: 0 + minBrickPos: {x: 0, y: 0, z: 0} + maxBrickPosPlusOne: {x: 28, y: 28, z: 28} + hasMinMax: 1 + hasOnlyBiggerBricks: 0 + - position: {x: -1, y: 0, z: -1} + index: 3 + probeCount: 4480 + minSubdiv: 0 + indexChunkCount: 91 + shChunkCount: 1 + bricksCount: 70 + indirectionEntryInfo: + - positionInBricks: {x: -27, y: 0, z: -27} + minSubdiv: 0 + minBrickPos: {x: 0, y: 0, z: 0} + maxBrickPosPlusOne: {x: 28, y: 28, z: 28} + hasMinMax: 1 + hasOnlyBiggerBricks: 0 + - position: {x: -1, y: 0, z: 0} + index: 12 + probeCount: 5248 + minSubdiv: 0 + indexChunkCount: 91 + shChunkCount: 1 + bricksCount: 82 + indirectionEntryInfo: + - positionInBricks: {x: -27, y: 0, z: 0} + minSubdiv: 0 + minBrickPos: {x: 0, y: 0, z: 0} + maxBrickPosPlusOne: {x: 28, y: 28, z: 28} + hasMinMax: 1 + hasOnlyBiggerBricks: 0 + - position: {x: 0, y: -1, z: -1} + index: 1 + probeCount: 1408 + minSubdiv: 0 + indexChunkCount: 91 + shChunkCount: 1 + bricksCount: 22 + indirectionEntryInfo: + - positionInBricks: {x: 0, y: -27, z: -27} + minSubdiv: 0 + minBrickPos: {x: 0, y: 0, z: 0} + maxBrickPosPlusOne: {x: 28, y: 28, z: 28} + hasMinMax: 1 + hasOnlyBiggerBricks: 0 + - position: {x: 0, y: -1, z: 0} + index: 10 + probeCount: 1792 + minSubdiv: 0 + indexChunkCount: 91 + shChunkCount: 1 + bricksCount: 28 + indirectionEntryInfo: + - positionInBricks: {x: 0, y: -27, z: 0} + minSubdiv: 0 + minBrickPos: {x: 0, y: 0, z: 0} + maxBrickPosPlusOne: {x: 28, y: 28, z: 28} + hasMinMax: 1 + hasOnlyBiggerBricks: 0 + - position: {x: 0, y: 0, z: -1} + index: 4 + probeCount: 4480 + minSubdiv: 0 + indexChunkCount: 91 + shChunkCount: 1 + bricksCount: 70 + indirectionEntryInfo: + - positionInBricks: {x: 0, y: 0, z: -27} + minSubdiv: 0 + minBrickPos: {x: 0, y: 0, z: 0} + maxBrickPosPlusOne: {x: 28, y: 28, z: 28} + hasMinMax: 1 + hasOnlyBiggerBricks: 0 + - position: {x: 0, y: 0, z: 0} + index: 13 + probeCount: 5248 + minSubdiv: 0 + indexChunkCount: 91 + shChunkCount: 1 + bricksCount: 82 + indirectionEntryInfo: + - positionInBricks: {x: 0, y: 0, z: 0} + minSubdiv: 0 + minBrickPos: {x: 0, y: 0, z: 0} + maxBrickPosPlusOne: {x: 28, y: 28, z: 28} + hasMinMax: 1 + hasOnlyBiggerBricks: 0 + m_SerializedPerSceneCellList: + - sceneGUID: 5c98be1d78ca13747a126953d4624c4f + cellList: 0000000009000000030000000c000000010000000a000000040000000d000000 + cellSharedDataAsset: + m_AssetGUID: c26563230dc19324eb9ed1e2e066b493 + m_StreamableAssetPath: APVStreamingAssets\e09b907a60f5ca74dabc99c5930d588a\c26563230dc19324eb9ed1e2e066b493.bytes + m_ElementSize: 8192 + m_StreamableCellDescs: + m_Keys: 0000000009000000030000000c000000010000000a000000040000000d000000 + m_Values: + - offset: 0 + elementCount: 1 + - offset: 8192 + elementCount: 1 + - offset: 16384 + elementCount: 1 + - offset: 24576 + elementCount: 1 + - offset: 32768 + elementCount: 1 + - offset: 40960 + elementCount: 1 + - offset: 49152 + elementCount: 1 + - offset: 57344 + elementCount: 1 + m_Asset: {fileID: 4900000, guid: c26563230dc19324eb9ed1e2e066b493, type: 3} + scenarios: + m_Keys: + - Default + m_Values: + - sceneHash: 2143209767 + cellDataAsset: + m_AssetGUID: 6ac63152e41bb5a47a3e8eb9c4b52ed7 + m_StreamableAssetPath: APVStreamingAssets\e09b907a60f5ca74dabc99c5930d588a\6ac63152e41bb5a47a3e8eb9c4b52ed7.bytes + m_ElementSize: 131072 + m_StreamableCellDescs: + m_Keys: 0000000009000000030000000c000000010000000a000000040000000d000000 + m_Values: + - offset: 0 + elementCount: 1 + - offset: 131072 + elementCount: 1 + - offset: 262144 + elementCount: 1 + - offset: 393216 + elementCount: 1 + - offset: 524288 + elementCount: 1 + - offset: 655360 + elementCount: 1 + - offset: 786432 + elementCount: 1 + - offset: 917504 + elementCount: 1 + m_Asset: {fileID: 4900000, guid: 6ac63152e41bb5a47a3e8eb9c4b52ed7, type: 3} + cellOptionalDataAsset: + m_AssetGUID: e219b60744db6fe4ba26d259b8f8e01a + m_StreamableAssetPath: APVStreamingAssets\e09b907a60f5ca74dabc99c5930d588a\e219b60744db6fe4ba26d259b8f8e01a.bytes + m_ElementSize: 131072 + m_StreamableCellDescs: + m_Keys: 0000000009000000030000000c000000010000000a000000040000000d000000 + m_Values: + - offset: 0 + elementCount: 1 + - offset: 131072 + elementCount: 1 + - offset: 262144 + elementCount: 1 + - offset: 393216 + elementCount: 1 + - offset: 524288 + elementCount: 1 + - offset: 655360 + elementCount: 1 + - offset: 786432 + elementCount: 1 + - offset: 917504 + elementCount: 1 + m_Asset: {fileID: 4900000, guid: e219b60744db6fe4ba26d259b8f8e01a, type: 3} + cellProbeOcclusionDataAsset: + m_AssetGUID: 5403a2e1599dade419c19aa4a00cc612 + m_StreamableAssetPath: APVStreamingAssets\e09b907a60f5ca74dabc99c5930d588a\5403a2e1599dade419c19aa4a00cc612.bytes + m_ElementSize: 32768 + m_StreamableCellDescs: + m_Keys: 0000000009000000030000000c000000010000000a000000040000000d000000 + m_Values: + - offset: 0 + elementCount: 1 + - offset: 32768 + elementCount: 1 + - offset: 65536 + elementCount: 1 + - offset: 98304 + elementCount: 1 + - offset: 131072 + elementCount: 1 + - offset: 163840 + elementCount: 1 + - offset: 196608 + elementCount: 1 + - offset: 229376 + elementCount: 1 + m_Asset: {fileID: 4900000, guid: 5403a2e1599dade419c19aa4a00cc612, type: 3} + cellBricksDataAsset: + m_AssetGUID: f6e7e6362647afd4fad0feed0826c3b5 + m_StreamableAssetPath: APVStreamingAssets\e09b907a60f5ca74dabc99c5930d588a\f6e7e6362647afd4fad0feed0826c3b5.bytes + m_ElementSize: 16 + m_StreamableCellDescs: + m_Keys: 0000000009000000030000000c000000010000000a000000040000000d000000 + m_Values: + - offset: 0 + elementCount: 19 + - offset: 304 + elementCount: 25 + - offset: 704 + elementCount: 70 + - offset: 1824 + elementCount: 82 + - offset: 3136 + elementCount: 22 + - offset: 3488 + elementCount: 28 + - offset: 3936 + elementCount: 70 + - offset: 5056 + elementCount: 82 + m_Asset: {fileID: 4900000, guid: f6e7e6362647afd4fad0feed0826c3b5, type: 3} + cellSupportDataAsset: + m_AssetGUID: c6f8fff910ba6c74c84404a81c9af7a1 + m_StreamableAssetPath: APVStreamingAssets\e09b907a60f5ca74dabc99c5930d588a\c6f8fff910ba6c74c84404a81c9af7a1.bytes + m_ElementSize: 163840 + m_StreamableCellDescs: + m_Keys: 0000000009000000030000000c000000010000000a000000040000000d000000 + m_Values: + - offset: 0 + elementCount: 1 + - offset: 163840 + elementCount: 1 + - offset: 327680 + elementCount: 1 + - offset: 491520 + elementCount: 1 + - offset: 655360 + elementCount: 1 + - offset: 819200 + elementCount: 1 + - offset: 983040 + elementCount: 1 + - offset: 1146880 + elementCount: 1 + m_Asset: {fileID: 4900000, guid: c6f8fff910ba6c74c84404a81c9af7a1, type: 3} + chunkSizeInBricks: 128 + maxCellPosition: {x: 1, y: 1, z: 1} + minCellPosition: {x: -1, y: -1, z: -1} + globalBounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 24.300001, y: 24.300001, z: 24.300001} + bakedSimplificationLevels: 3 + bakedMinDistanceBetweenProbes: 0.3 + bakedProbeOcclusion: 1 + bakedSkyOcclusionValue: 0 + bakedSkyShadingDirectionValue: 0 + bakedProbeOffset: {x: 0, y: 0, z: 0} + bakedMaskCount: 1 + bakedLayerMasks: + x: 4294967295 + y: 0 + z: 0 + w: 0 + maxSHChunkCount: 1 + L0ChunkSize: 65536 + L1ChunkSize: 32768 + L2TextureChunkSize: 32768 + ProbeOcclusionChunkSize: 32768 + sharedValidityMaskChunkSize: 8192 + sharedSkyOcclusionL0L1ChunkSize: 0 + sharedSkyShadingDirectionIndicesChunkSize: 0 + sharedDataChunkSize: 8192 + supportPositionChunkSize: 98304 + supportValidityChunkSize: 32768 + supportTouchupChunkSize: 32768 + supportLayerMaskChunkSize: 0 + supportOffsetsChunkSize: 0 + supportDataChunkSize: 163840 + lightingScenario: Default + version: 2 + freezePlacement: 0 + probeOffset: {x: 0, y: 0, z: 0} + simplificationLevels: 3 + minDistanceBetweenProbes: 0.3 + renderersLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + minRendererVolumeSize: 0.1 + skyOcclusion: 0 + skyOcclusionBakingSamples: 2048 + skyOcclusionBakingBounces: 2 + skyOcclusionAverageAlbedo: 0.6 + skyOcclusionBackFaceCulling: 0 + skyOcclusionShadingDirection: 0 + useRenderingLayers: 0 + renderingLayerMasks: [] + m_SceneBakeData: + m_Keys: + - 5c98be1d78ca13747a126953d4624c4f + m_Values: + - hasProbeVolume: 1 + bakeScene: 1 + bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 24.300001, y: 24.300001, z: 24.300001} diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.asset.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.asset.meta new file mode 100644 index 00000000000..d2b00f62839 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_APV_XR Baking Set.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e09b907a60f5ca74dabc99c5930d588a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_LSA.lighting b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_LSA.lighting new file mode 100644 index 00000000000..092d113bfd8 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_LSA.lighting @@ -0,0 +1,63 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: 2124_LSA + serializedVersion: 9 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 2 + m_LightmapMaxSize: 1024 + m_LightmapSizeFixed: 0 + m_UseMipmapLimits: 1 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_EnableWorkerProcessBaking: 1 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 1 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_LSA.lighting.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_LSA.lighting.meta new file mode 100644 index 00000000000..db0a3fb888e --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_LSA.lighting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4dc45e48eab1c08459c53e21c2f1e157 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_Profile.asset b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_Profile.asset new file mode 100644 index 00000000000..6d5a5105bbf --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_Profile.asset @@ -0,0 +1,62 @@ +%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: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: 2124_Profile + m_EditorClassIdentifier: + components: + - {fileID: 3058726604032697100} +--- !u!114 &3058726604032697100 +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: 6bd486065ce11414fa40e631affc4900, type: 3} + m_Name: ProbeVolumesOptions + m_EditorClassIdentifier: + active: 1 + normalBias: + m_OverrideState: 1 + m_Value: 0 + viewBias: + m_OverrideState: 1 + m_Value: 0 + scaleBiasWithMinProbeDistance: + m_OverrideState: 0 + m_Value: 0 + samplingNoise: + m_OverrideState: 1 + m_Value: 0 + animateSamplingNoise: + m_OverrideState: 0 + m_Value: 1 + leakReductionMode: + m_OverrideState: 1 + m_Value: 2 + minValidDotProductValue: + m_OverrideState: 0 + m_Value: 0.1 + occlusionOnlyReflectionNormalization: + m_OverrideState: 0 + m_Value: 1 + intensityMultiplier: + m_OverrideState: 0 + m_Value: 1 + skyOcclusionIntensityMultiplier: + m_OverrideState: 0 + m_Value: 1 + worldOffset: + m_OverrideState: 0 + m_Value: {x: 0, y: 0, z: 0} diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_Profile.asset.meta b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_Profile.asset.meta new file mode 100644 index 00000000000..77f24b0c672 --- /dev/null +++ b/Tests/SRPTests/Projects/HDRP_Tests/Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR/2124_Profile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51187ee1b560cc346a47666e10d20c30 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset b/Tests/SRPTests/Projects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset index 59ae537ba73..21a44737e33 100644 --- a/Tests/SRPTests/Projects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset +++ b/Tests/SRPTests/Projects/HDRP_Tests/ProjectSettings/EditorBuildSettings.asset @@ -320,6 +320,9 @@ EditorBuildSettings: - enabled: 1 path: Assets/GraphicTests/Scenes/2x_Lighting/2123_APV_Baking_Shadowmask.unity guid: 852276b9a099f5f47bb91f7f3ae48c29 + - enabled: 1 + path: Assets/GraphicTests/Scenes/2x_Lighting/2124_APV_XR.unity + guid: 5c98be1d78ca13747a126953d4624c4f - enabled: 1 path: Assets/GraphicTests/Scenes/2x_Lighting/2201_ReflectionProbes_Priority.unity guid: d485acf0535eb4b42a9a3847f4a8274a From 79fa650ff1a9a098fae7e1cb130e53f6b0f7d005 Mon Sep 17 00:00:00 2001 From: Yvain Raeymaekers Date: Wed, 20 Nov 2024 06:16:32 +0000 Subject: [PATCH 52/85] =?UTF-8?q?UUM-86959:=20Fix=20environement=20lightin?= =?UTF-8?q?g=20not=20updated=20when=20running=20in=20play=E2=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JIRA: https://jira.unity3d.com/browse/UUM-86959 Slack: https://unity.slack.com/archives/C02FVPP6M34/p1731665800856559 Fix ambient probe not being updated when changing its intensity when running in play mode with static batching and GPU resident drawer enabled. Instances that are part of a static batch where explicitely discarded in the ProbesUpdateJob, which is incorrect since the ambient probe affects all gameobjects (static or not). The mistake probably happened because the job was written to be very similar to the TransformUpdateJob where it is valid to discard instances that are part of static batch --- .../GPUDriven/InstanceData/InstanceDataSystem.Jobs.cs | 8 +------- .../Runtime/GPUDriven/InstanceData/InstanceDataSystem.cs | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceDataSystem.Jobs.cs b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceDataSystem.Jobs.cs index 9909408ef61..27c3fd30ed1 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceDataSystem.Jobs.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceDataSystem.Jobs.cs @@ -379,7 +379,6 @@ private unsafe struct ProbesUpdateJob : IJobParallelForBatch { public const int k_BatchSize = 64; - [ReadOnly] public bool initialize; [NativeDisableContainerSafetyRestriction, NoAlias][ReadOnly] public NativeArray instances; [NativeDisableParallelForRestriction][NativeDisableContainerSafetyRestriction, NoAlias] public CPUInstanceData instanceData; [ReadOnly] public CPUSharedInstanceData sharedInstanceData; @@ -403,11 +402,6 @@ public void Execute(int startIndex, int count) int sharedInstanceIndex = sharedInstanceData.InstanceToIndex(instanceData, instance); TransformUpdateFlags flags = sharedInstanceData.flags[sharedInstanceIndex].transformUpdateFlags; - bool isStaticObject = (flags & TransformUpdateFlags.IsPartOfStaticBatch) != 0; - - if (!initialize && isStaticObject) - continue; - bool hasLightProbe = (flags & TransformUpdateFlags.HasLightProbeCombined) != 0; if (!hasLightProbe) @@ -976,7 +970,7 @@ public void Execute(int index) instanceData.editorData.selectedBits.Set(instanceData.InstanceToIndex(instance), true); } } - + #endif } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceDataSystem.cs b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceDataSystem.cs index 20525c1d85b..9ed79f922ae 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceDataSystem.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/GPUDriven/InstanceData/InstanceDataSystem.cs @@ -351,7 +351,6 @@ private unsafe void UpdateInstanceTransformsData(bool initialize, NativeArray instanc new ProbesUpdateJob() { - initialize = false, instances = instances, instanceData = m_InstanceData, sharedInstanceData = m_SharedInstanceData, From e39271fce24314a01bd383cbcf97cee5d1188b36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Carr=C3=A8re?= Date: Wed, 20 Nov 2024 06:16:56 +0000 Subject: [PATCH 53/85] https://jira.unity3d.com/browse/DOCG-4866 Address this piece of feedback: In the "Using Dynamic Resolution" section, there are 3 steps describing how to put it in place. While the first step is very precise, the 2 last are a bit more cryptic. 2. I'm guessing it's "in the inspector" of each Camera? It should be precise... cause the "General" section make me think it could be something in the project settings for an instant. Also because there is no "General" section on a Camera inspector. I found "HDRP Dynamic Resolution" in the "Rendering" section on my inspected Camera. 3. Where? Anywhere? Or should it be on each camera? Or just one component on a random GameObject in the scene is enough? --- .../Documentation~/Dynamic-Resolution.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Dynamic-Resolution.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Dynamic-Resolution.md index 8578689db89..4c764a0f016 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Dynamic-Resolution.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Dynamic-Resolution.md @@ -19,11 +19,13 @@ HDRP always uses a software method to upscale the result. The method HDRP uses i To use dynamic resolution in your Project, you must enable dynamic resolution in your [HDRP Asset](HDRP-Asset.md) and then enable it for each [Camera](hdrp-camera-component-reference.md) you want to use it with. To do this: -1. In the Inspector for your HDRP Asset, go to **Rendering** **> Dynamic Resolution** and enable the **Enable** checkbox. For information on how to customize the rest of the HDRP Asset’s global dynamic resolution properties, see the dynamic resolution section of the [HDRP Asset documentation](HDRP-Asset.md#DynamicResolution). -2. For every [Camera](hdrp-camera-component-reference.md) you want to perform dynamic resolution, go to the **General** section and enable **Allow Dynamic Resolution**. -3. Add a HD Dynamic Resolution component. +1. In the Inspector for your HDRP Asset, go to **Rendering** > **Dynamic Resolution** and enable the **Enable** checkbox. For information on how to customize the rest of the HDRP Asset’s global dynamic resolution properties, see the dynamic resolution section of the [HDRP Asset documentation](HDRP-Asset.md#DynamicResolution). -For information about the HD Dynamic Resolution component properties refer to [HD Dynamic Resolution component properties](reference-dynamic-resolution.md). +2. For each [Camera](hdrp-camera-component-reference.md) you want to perform dynamic resolution, go to the **Rendering** section of the Camera's Inspector and enable the **Allow Dynamic Resolution** checkbox. + +3. Add a **HD Dynamic Resolution** component to any GameObject in your scene. Adding this component once in the scene is sufficient, as it globally manages dynamic resolution settings. + +For information about the HD Dynamic Resolution component properties, refer to [HD Dynamic Resolution component properties](reference-dynamic-resolution.md). ## Custom dynamic resolution From 16cbdeeb7724f349bbde7f2f818b67e6b73171c1 Mon Sep 17 00:00:00 2001 From: Julien Amsellem Date: Thu, 21 Nov 2024 08:09:59 +0000 Subject: [PATCH 54/85] [VFX] Label are not visible when node is collapsed Jira: UUM-83852 - Open a VFX or create a new one - Create an operator like Noise 3D - Connect any input port - Collapse the node - Save and close the VFX - Reopen the VFX ![image-2024-10-08-11-50-42-583](https://media.github.cds.internal.unity3d.com/user/4003/files/6ac4f566-97ce-47f3-8cdf-72082e2ff3d2) Actual result: The port's label is not visible Expected result: The port's label is visible --- .../Editor/GraphView/Elements/VFXNodeUI.cs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/VFXNodeUI.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/VFXNodeUI.cs index cb07b17adea..f37fe2c98e5 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/VFXNodeUI.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Elements/VFXNodeUI.cs @@ -463,6 +463,10 @@ private void GetPreferredWidths(ref float labelWidth, ref float controlWidth) { foreach (var port in GetPorts(true, false).OfType()) { + // Skip because it's not visible + if (!port.connected && !expanded) + continue; + float portLabelWidth = port.GetPreferredLabelWidth(); float portControlWidth = port.GetPreferredControlWidth(); @@ -515,7 +519,9 @@ public void GetWidths(out float labelWidth, out float controlWidth) var settingsLabelWidth = 0f; var inputsLabelWidth = 0f; controlWidth = 50f; - GetPreferredSettingsWidths(ref settingsLabelWidth, ref controlWidth); + // Settings are only visible when node is expanded + if (expanded) + GetPreferredSettingsWidths(ref settingsLabelWidth, ref controlWidth); GetPreferredWidths(ref inputsLabelWidth, ref controlWidth); labelWidth = Mathf.Max(settingsLabelWidth, inputsLabelWidth); if (labelWidth > 0) @@ -524,12 +530,9 @@ public void GetWidths(out float labelWidth, out float controlWidth) protected virtual void RefreshLayout() { - if (expanded) - { - GetWidths(out var labelWidth, out var controlWidth); - ApplySettingsWidths(labelWidth); - ApplyWidths(labelWidth, controlWidth); - } + GetWidths(out var labelWidth, out var controlWidth); + ApplySettingsWidths(labelWidth); + ApplyWidths(labelWidth, controlWidth); } } } From 833b4717c98d9ba48ffb853f403d1205576796ae Mon Sep 17 00:00:00 2001 From: Adrien Moulin Date: Thu, 21 Nov 2024 08:10:59 +0000 Subject: [PATCH 55/85] Graphics/SRP/RPF - [UUM-87865] Make SetViewAndProjectionMatrices() available in RasterRenderPass This PR makes `SetViewAndProjectionMatrices(int, int, RasterCommandBuffer)` API public to users. They already have access to `SetViewAndProjectionMatrices(int, int, CommandBuffer)` which directly calls the internal overload mentioned above, but having direct access to the `RasterCommandBuffer` overload allows them to call it within their RasterRenderPass. This API being kept internal is an omission probably forgotten when releasing URP RG in Unity 6, there is no real reason of keeping it internal. --- .../Runtime/RenderingUtils.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RenderingUtils.cs b/Packages/com.unity.render-pipelines.universal/Runtime/RenderingUtils.cs index 3d2ec7a4d9d..26e860de5c8 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RenderingUtils.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RenderingUtils.cs @@ -125,7 +125,17 @@ static Material errorMaterial /// Projection matrix to be set. /// Set this to true if you also need to set inverse camera matrices. public static void SetViewAndProjectionMatrices(CommandBuffer cmd, Matrix4x4 viewMatrix, Matrix4x4 projectionMatrix, bool setInverseMatrices) { SetViewAndProjectionMatrices(CommandBufferHelpers.GetRasterCommandBuffer(cmd), viewMatrix, projectionMatrix, setInverseMatrices); } - internal static void SetViewAndProjectionMatrices(RasterCommandBuffer cmd, Matrix4x4 viewMatrix, Matrix4x4 projectionMatrix, bool setInverseMatrices) + + /// + /// Set view and projection matrices. + /// This function will set UNITY_MATRIX_V, UNITY_MATRIX_P, UNITY_MATRIX_VP to given view and projection matrices. + /// If setInverseMatrices is set to true this function will also set UNITY_MATRIX_I_V and UNITY_MATRIX_I_VP. + /// + /// RasterCommandBuffer to submit data to GPU. + /// View matrix to be set. + /// Projection matrix to be set. + /// Set this to true if you also need to set inverse camera matrices. + public static void SetViewAndProjectionMatrices(RasterCommandBuffer cmd, Matrix4x4 viewMatrix, Matrix4x4 projectionMatrix, bool setInverseMatrices) { Matrix4x4 viewAndProjectionMatrix = projectionMatrix * viewMatrix; cmd.SetGlobalMatrix(ShaderPropertyId.viewMatrix, viewMatrix); From 6e26f6c5b9c260a25620b5c02be5641a26867519 Mon Sep 17 00:00:00 2001 From: Arnaud Carre Date: Thu, 21 Nov 2024 08:11:52 +0000 Subject: [PATCH 56/85] reduce package list to minimal for BRG tests BRG tests recently failed because of random, not related, package loading errors. ( rider in our case) This PR removes as much as packages as possible in order to make our test mostly independant from BRG un-related packages --- .../Packages/manifest.json | 29 +---------------- .../Packages/manifest.json | 32 +------------------ 2 files changed, 2 insertions(+), 59 deletions(-) diff --git a/Tests/SRPTests/Projects/BatchRendererGroup_HDRP/Packages/manifest.json b/Tests/SRPTests/Projects/BatchRendererGroup_HDRP/Packages/manifest.json index 11617591923..de27410d1b5 100644 --- a/Tests/SRPTests/Projects/BatchRendererGroup_HDRP/Packages/manifest.json +++ b/Tests/SRPTests/Projects/BatchRendererGroup_HDRP/Packages/manifest.json @@ -2,15 +2,8 @@ "enableLockFile": false, "disableProjectUpdate": true, "dependencies": { - "com.unity.2d.sprite": "1.0.0", - "com.unity.2d.tilemap": "1.0.0", - "com.unity.addressables": "1.19.7", - "com.unity.analytics": "3.3.5", - "com.unity.collab-proxy": "2.0.4", "com.unity.collections": "2.1.0-pre.12", "com.unity.ext.nunit": "1.0.0", - "com.unity.ide.rider": "1.2.1", - "com.unity.ide.visualstudio": "2.0.1", "com.unity.mathematics": "1.2.1", "com.unity.render-pipelines.core": "file:../../../../../Packages/com.unity.render-pipelines.core", "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", @@ -23,12 +16,8 @@ "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", - "com.unity.modules.ai": "1.0.0", - "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.cloth": "1.0.0", "com.unity.modules.director": "1.0.0", "com.unity.modules.imageconversion": "1.0.0", "com.unity.modules.imgui": "1.0.0", @@ -36,24 +25,8 @@ "com.unity.modules.particlesystem": "1.0.0", "com.unity.modules.physics": "1.0.0", "com.unity.modules.physics2d": "1.0.0", - "com.unity.modules.screencapture": "1.0.0", - "com.unity.modules.terrain": "1.0.0", - "com.unity.modules.terrainphysics": "1.0.0", - "com.unity.modules.tilemap": "1.0.0", "com.unity.modules.ui": "1.0.0", - "com.unity.modules.uielements": "1.0.0", - "com.unity.modules.umbra": "1.0.0", - "com.unity.modules.unityanalytics": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.unitywebrequesttexture": "1.0.0", - "com.unity.modules.unitywebrequestwww": "1.0.0", - "com.unity.modules.vehicles": "1.0.0", - "com.unity.modules.video": "1.0.0", - "com.unity.modules.vr": "1.0.0", - "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0" + "com.unity.modules.uielements": "1.0.0" }, "testables": [ "com.unity.testing.xr" diff --git a/Tests/SRPTests/Projects/BatchRendererGroup_URP/Packages/manifest.json b/Tests/SRPTests/Projects/BatchRendererGroup_URP/Packages/manifest.json index d87a15c9561..8e576fcefc3 100644 --- a/Tests/SRPTests/Projects/BatchRendererGroup_URP/Packages/manifest.json +++ b/Tests/SRPTests/Projects/BatchRendererGroup_URP/Packages/manifest.json @@ -2,15 +2,7 @@ "enableLockFile": false, "disableProjectUpdate": true, "dependencies": { - "com.unity.2d.sprite": "1.0.0", - "com.unity.2d.tilemap": "1.0.0", - "com.unity.addressables": "1.21.8", - "com.unity.analytics": "3.8.1", - "com.unity.collab-proxy": "2.0.4", "com.unity.collections": "2.1.0-pre.12", - "com.unity.ext.nunit": "1.0.0", - "com.unity.ide.rider": "3.0.19", - "com.unity.ide.visualstudio": "2.0.17", "com.unity.mathematics": "1.2.1", "com.unity.render-pipelines.core": "file:../../../../../Packages/com.unity.render-pipelines.core", "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", @@ -23,37 +15,15 @@ "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", - "com.unity.modules.ai": "1.0.0", - "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.cloth": "1.0.0", - "com.unity.modules.director": "1.0.0", "com.unity.modules.imageconversion": "1.0.0", "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0", "com.unity.modules.particlesystem": "1.0.0", "com.unity.modules.physics": "1.0.0", "com.unity.modules.physics2d": "1.0.0", - "com.unity.modules.screencapture": "1.0.0", - "com.unity.modules.terrain": "1.0.0", - "com.unity.modules.terrainphysics": "1.0.0", - "com.unity.modules.tilemap": "1.0.0", "com.unity.modules.ui": "1.0.0", - "com.unity.modules.uielements": "1.0.0", - "com.unity.modules.umbra": "1.0.0", - "com.unity.modules.unityanalytics": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.unitywebrequesttexture": "1.0.0", - "com.unity.modules.unitywebrequestwww": "1.0.0", - "com.unity.modules.vehicles": "1.0.0", - "com.unity.modules.video": "1.0.0", - "com.unity.modules.vr": "1.0.0", - "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0" + "com.unity.modules.uielements": "1.0.0" }, "testables": [ "com.unity.testing.xr" From 6b702f221c1f8fa4c91bb01ff7c2226d3b3c4db9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antoine=20Leli=C3=A8vre?= Date: Thu, 21 Nov 2024 15:10:37 +0000 Subject: [PATCH 57/85] Fixed shader global state invalid when using override camera rendering in custom passes Rendering was broken after using the override camera rendering function in custom pass utils because of the state of the global CBuffer during render graph was in the future. --- .../RenderPass/CustomPass/CustomPass.cs | 4 +++- .../RenderPass/CustomPass/CustomPassContext.cs | 7 ++++++- .../RenderPass/CustomPass/CustomPassUtils.cs | 17 ++++++++++------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPass.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPass.cs index 8ad47ce0fe0..0c183738df1 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPass.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPass.cs @@ -179,6 +179,7 @@ class ExecutePassData public CullingResults cullingResult; public CullingResults cameraCullingResult; public HDCamera hdCamera; + public ShaderVariablesGlobal shaderVariablesGlobal; } RenderTargets ReadRenderTargets(in RenderGraphBuilder builder, in RenderTargets targets) @@ -225,6 +226,7 @@ virtual internal void ExecuteInternal(RenderGraph renderGraph, HDCamera hdCamera passData.cullingResult = cullingResult; passData.cameraCullingResult = cameraCullingResult; passData.hdCamera = hdCamera; + passData.shaderVariablesGlobal = HDRenderPipeline.currentPipeline.GetShaderVariablesGlobalCB(); this.currentRenderTarget = ReadRenderTargets(builder, targets); @@ -275,7 +277,7 @@ virtual internal void ExecuteInternal(RenderGraph renderGraph, HDCamera hdCamera customPass.currentRenderTarget.customColorBuffer, customPass.currentRenderTarget.customDepthBuffer, ctx.renderGraphPool.GetTempMaterialPropertyBlock(), - customPass.injectionPoint + customPass.injectionPoint, data.shaderVariablesGlobal ); customPass.isExecuting = true; diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassContext.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassContext.cs index 108654238cd..9199c662614 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassContext.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassContext.cs @@ -68,6 +68,10 @@ public struct CustomPassContext public readonly MaterialPropertyBlock propertyBlock; internal readonly CustomPassInjectionPoint injectionPoint; + // This represent the state of HDRP globals at the point of recording the custom passes. + // Using GetShaderVariablesGlobals() from HDRP inside the execute of the custom pass would give invalid result + // because the execute of custom passes is called during the render graph execution, after the recording of all passes. + internal readonly ShaderVariablesGlobal currentGlobalState; internal CustomPassContext( ScriptableRenderContext renderContext, CommandBuffer cmd, @@ -77,7 +81,7 @@ internal CustomPassContext( RTHandle cameraNormalBuffer, RTHandle cameraMotionVectorsBuffer, Lazy customColorBuffer, Lazy customDepthBuffer, MaterialPropertyBlock propertyBlock, - CustomPassInjectionPoint injectionPoint) + CustomPassInjectionPoint injectionPoint, ShaderVariablesGlobal currentGlobalState) { this.renderContext = renderContext; this.cmd = cmd; @@ -92,6 +96,7 @@ internal CustomPassContext( this.customDepthBuffer = customDepthBuffer; this.propertyBlock = propertyBlock; this.injectionPoint = injectionPoint; + this.currentGlobalState = currentGlobalState; } } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassUtils.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassUtils.cs index 82cbf4b4526..49df296133d 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassUtils.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/RenderPipeline/RenderPass/CustomPass/CustomPassUtils.cs @@ -561,7 +561,7 @@ public static void RenderFromCamera(in CustomPassContext ctx, ShaderTagId[] shad using (new ProfilingScope(ctx.cmd, renderFromCameraSampler)) { DrawRenderers(ctx, shaderTags, layerMask, renderQueueFilter, overrideMaterial, overrideMaterialIndex, overrideRenderState); - + if (GetRenderQueueRangeFromRenderQueueType(renderQueueFilter).Contains((int)RenderQueue.Transparent)) { int mode = 0; @@ -788,7 +788,8 @@ public struct OverrideCameraRendering : IDisposable HDCamera overrideHDCamera; float originalAspect; - static Stack overrideCameraStack = new Stack(); + static Stack overrideCameraStack = new(); + static Stack overrideGlobalVariablesStack = new(); /// /// With of the RTHandle. - /// Heigh of the RTHandle. + /// height of the RTHandle. /// GraphicsFormat of the color or a depth stencil buffer. /// U coordinate wrapping mode of the RTHandle. /// V coordinate wrapping mode of the RTHandle. @@ -735,7 +753,7 @@ public RTHandle Alloc( TextureWrapMode wrapModeU, TextureWrapMode wrapModeV, TextureWrapMode wrapModeW = TextureWrapMode.Repeat, - int slices = 1, + int slices = 1, FilterMode filterMode = FilterMode.Point, TextureDimension dimension = TextureDimension.Tex2D, bool enableRandomWrite = false, @@ -756,7 +774,7 @@ public RTHandle Alloc( var rt = CreateRenderTexture( width, height, format, slices, filterMode, wrapModeU, wrapModeV, wrapModeW, dimension, enableRandomWrite, useMipMap , autoGenerateMips, isShadowMap, anisoLevel, mipMapBias, msaaSamples, bindTextureMS - , useDynamicScale, useDynamicScaleExplicit, memoryless, vrUsage, name); + , useDynamicScale, useDynamicScaleExplicit, memoryless, vrUsage, false, name); var newRT = new RTHandle(this); newRT.SetRenderTexture(rt); @@ -793,6 +811,7 @@ private RenderTexture CreateRenderTexture( bool useDynamicScaleExplicit, RenderTextureMemoryless memoryless, VRTextureUsage vrUsage, + bool enableShadingRate, string name) { bool enableMSAA = msaaSamples != MSAASamples.None; @@ -811,6 +830,13 @@ private RenderTexture CreateRenderTexture( } bool isDepthStencilFormat = GraphicsFormatUtility.IsDepthStencilFormat(format); + + if (enableShadingRate && (isShadowMap || isDepthStencilFormat)) + { + Debug.LogWarning("RTHandle allocated with incompatible enableShadingRate, forcing enableShadingRate to false."); + enableShadingRate = false; + } + string fullName; GraphicsFormat colorFormat, depthStencilFormat, stencilFormat; ShadowSamplingMode shadowSamplingMode = ShadowSamplingMode.None; @@ -822,7 +848,7 @@ private RenderTexture CreateRenderTexture( int depthBits = GraphicsFormatUtility.GetDepthBits(format); if (depthBits < 16) depthBits = 16; - depthStencilFormat = GraphicsFormatUtility.GetDepthStencilFormat(depthBits, 0); + depthStencilFormat = GraphicsFormatUtility.GetDepthStencilFormat(depthBits, 0); colorFormat = GraphicsFormat.None; stencilFormat = GraphicsFormat.None; shadowSamplingMode = ShadowSamplingMode.CompareDepths; @@ -859,10 +885,11 @@ private RenderTexture CreateRenderTexture( memoryless = memoryless, useMipMap = useMipMap, autoGenerateMips = autoGenerateMips, - enableRandomWrite = enableRandomWrite, + enableRandomWrite = enableRandomWrite, bindMS = bindTextureMS, useDynamicScale = m_HardwareDynamicResRequested && useDynamicScale, - useDynamicScaleExplicit = m_HardwareDynamicResRequested && useDynamicScaleExplicit + useDynamicScaleExplicit = m_HardwareDynamicResRequested && useDynamicScaleExplicit, + enableShadingRate = enableShadingRate, }; var rt = new RenderTexture(desc); @@ -876,7 +903,7 @@ private RenderTexture CreateRenderTexture( rt.wrapModeU = wrapModeU; rt.wrapModeV = wrapModeV; - rt.wrapModeW = wrapModeW; + rt.wrapModeW = wrapModeW; rt.Create(); return rt; @@ -889,15 +916,16 @@ private RenderTexture CreateRenderTexture( /// Height of the RTHandle. /// Struct containing details of allocation /// A new RTHandle. + /// + /// Width and height are usually in pixels but if enableShadingRate is set to true, width and height are in tiles. + /// See also Variable Rate Shading. + /// public RTHandle Alloc(int width, int height, RTHandleAllocInfo info) { - bool isShadowMap = false; - bool useDynamicScaleExplicit = false; - var rt = CreateRenderTexture( width, height, info.format, info.slices, info.filterMode, info.wrapModeU, info.wrapModeV, info.wrapModeW, info.dimension, info.enableRandomWrite, info.useMipMap - , info.autoGenerateMips, isShadowMap, info.anisoLevel, info.mipMapBias, info.msaaSamples, info.bindTextureMS - , info.useDynamicScale, useDynamicScaleExplicit, info.memoryless, info.vrUsage, info.name); + , info.autoGenerateMips, info.isShadowMap, info.anisoLevel, info.mipMapBias, info.msaaSamples, info.bindTextureMS + , info.useDynamicScale, info.useDynamicScaleExplicit, info.memoryless, info.vrUsage, info.enableShadingRate, info.name); var newRT = new RTHandle(this); newRT.SetRenderTexture(rt); @@ -909,6 +937,14 @@ public RTHandle Alloc(int width, int height, RTHandleAllocInfo info) newRT.referenceSize = new Vector2Int(width, height); + if (info.enableShadingRate) + { + // even though allocation ask for an explicit size, it's possible the + // resize mode is changed afterward hence assigning the scaling function + // because shading rate image resolution is in tiles + newRT.scaleFunc = (refSize) => ShadingRateImage.GetAllocTileSize(refSize); + } + return newRT; } @@ -923,10 +959,15 @@ public RTHandle Alloc(int width, int height, RTHandleAllocInfo info) /// The scale factor to use when calculating the dimensions. The base unscaled size used, is the sizes passed to the last ResetReferenceSize call. /// The calculated dimensions. public Vector2Int CalculateDimensions(Vector2 scaleFactor) + { + return CalculateDimensions(scaleFactor, new Vector2Int(GetMaxWidth(), GetMaxHeight())); + } + + static Vector2Int CalculateDimensions(Vector2 scaleFactor, Vector2Int size) { return new Vector2Int( - Mathf.Max(Mathf.RoundToInt(scaleFactor.x * GetMaxWidth()), 1), - Mathf.Max(Mathf.RoundToInt(scaleFactor.y * GetMaxHeight()), 1) + Mathf.Max(Mathf.RoundToInt(scaleFactor.x * size.x), 1), + Mathf.Max(Mathf.RoundToInt(scaleFactor.y * size.y), 1) ); } @@ -956,7 +997,7 @@ public Vector2Int CalculateDimensions(Vector2 scaleFactor) public RTHandle Alloc( Vector2 scaleFactor, GraphicsFormat format, - int slices = 1, + int slices = 1, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, @@ -977,6 +1018,7 @@ public RTHandle Alloc( { var actualDimensions = CalculateDimensions(scaleFactor); + bool enableShadingRate = false; // Not supported, use RTHandleAllocInfo API instead. var rth = AllocAutoSizedRenderTexture(actualDimensions.x, actualDimensions.y, slices, @@ -996,12 +1038,13 @@ public RTHandle Alloc( useDynamicScaleExplicit, memoryless, vrUsage, + enableShadingRate, name ); rth.referenceSize = actualDimensions; - rth.scaleFactor = scaleFactor; + return rth; } @@ -1082,6 +1125,11 @@ public RTHandle Alloc( /// Constant scale for the RTHandle size computation. /// Struct containing details of allocation /// A new RTHandle. + /// + /// scaleFactor is expected to be based on the reference size in pixels. If enableShadingRate is set to true, + /// conversion in tiles is implicitly done prior to allocation. + /// See also Variable Rate Shading. + /// public RTHandle Alloc(Vector2 scaleFactor, RTHandleAllocInfo info) { int width = Mathf.Max(Mathf.RoundToInt(scaleFactor.x * GetMaxWidth()), 1); @@ -1089,7 +1137,18 @@ public RTHandle Alloc(Vector2 scaleFactor, RTHandleAllocInfo info) var rth = AllocAutoSizedRenderTexture(width, height, info); rth.referenceSize = new Vector2Int(width, height); - rth.scaleFactor = scaleFactor; + + if (info.enableShadingRate) + { + // shading rate image resolution is in tiles; adjust refSize + rth.scaleFunc = (refSize) => + { + var dimensions = CalculateDimensions(scaleFactor, refSize); + return ShadingRateImage.GetAllocTileSize(dimensions); + }; + } + else + rth.scaleFactor = scaleFactor; return rth; } @@ -1195,7 +1254,7 @@ public RTHandle Alloc( /// /// Function used for the RTHandle size computation. /// GraphicsFormat of a color or depth stencil buffer. - /// Number of slices of the RTHandle. + /// Number of slices of the RTHandle. /// Filtering mode of the RTHandle. /// Addressing mode of the RTHandle. /// Texture dimension of the RTHandle. @@ -1216,7 +1275,7 @@ public RTHandle Alloc( public RTHandle Alloc( ScaleFunc scaleFunc, GraphicsFormat format, - int slices = 1, + int slices = 1, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, @@ -1237,9 +1296,10 @@ public RTHandle Alloc( { var actualDimensions = CalculateDimensions(scaleFunc); + bool enableShadingRate = false; // Not supported, use RTHandleAllocInfo API instead. var rth = AllocAutoSizedRenderTexture(actualDimensions.x, actualDimensions.y, - slices, + slices, format, filterMode, wrapMode, @@ -1256,12 +1316,13 @@ public RTHandle Alloc( useDynamicScaleExplicit, memoryless, vrUsage, + enableShadingRate, name ); rth.referenceSize = actualDimensions; - rth.scaleFunc = scaleFunc; + return rth; } @@ -1271,6 +1332,11 @@ public RTHandle Alloc( /// Function used for the RTHandle size computation. /// Struct containing details of allocation /// A new RTHandle. + /// + /// scaleFunc is expected to receive pixel values. If enableShadingRate is set to true, + /// conversion in tiles is done prior to allocation so that scaleFunc does not have to handle it. + /// See also Variable Rate Shading. + /// public RTHandle Alloc(ScaleFunc scaleFunc, RTHandleAllocInfo info) { var scaleFactor = scaleFunc(new Vector2Int(GetMaxWidth(), GetMaxHeight())); @@ -1279,16 +1345,29 @@ public RTHandle Alloc(ScaleFunc scaleFunc, RTHandleAllocInfo info) var rth = AllocAutoSizedRenderTexture(width, height, info); rth.referenceSize = new Vector2Int(width, height); - rth.scaleFunc = scaleFunc; + + if (info.enableShadingRate) + { + rth.scaleFunc = (refSize) => + { + var dimensions = scaleFunc(refSize); + + // shading rate image resolution is in tiles and current values are in pixels. + // Alloc() with a scaling function is based on refSize which is in pixels. + // adjust dimensions + return ShadingRateImage.GetAllocTileSize(dimensions); + }; + } + else + rth.scaleFunc = scaleFunc; return rth; } - // Internal function - RTHandle AllocAutoSizedRenderTexture( + internal RTHandle AllocAutoSizedRenderTexture( int width, int height, - int slices, + int slices, GraphicsFormat format, FilterMode filterMode, TextureWrapMode wrapMode, @@ -1305,13 +1384,24 @@ RTHandle AllocAutoSizedRenderTexture( bool useDynamicScaleExplicit, RenderTextureMemoryless memoryless, VRTextureUsage vrUsage, + bool enableShadingRate, string name ) { + if (enableShadingRate) + { + // this function is called when auto scaling is needed and always expect size in pixels. + // shading rate image resolution is in tiles and current values are in pixels. + // then must adjust width and height + var actualDimensions = ShadingRateImage.GetAllocTileSize(width, height); + width = actualDimensions.x; + height = actualDimensions.y; + } + var rt = CreateRenderTexture( width, height, format, slices, filterMode, wrapMode, wrapMode, wrapMode, dimension, enableRandomWrite, useMipMap , autoGenerateMips, isShadowMap, anisoLevel, mipMapBias, msaaSamples, bindTextureMS - , useDynamicScale, useDynamicScaleExplicit, memoryless, vrUsage, name); + , useDynamicScale, useDynamicScaleExplicit, memoryless, vrUsage, enableShadingRate, name); var rth = new RTHandle(this); rth.SetRenderTexture(rt); @@ -1324,15 +1414,22 @@ string name return rth; } - RTHandle AllocAutoSizedRenderTexture(int width, int height, RTHandleAllocInfo info) + internal RTHandle AllocAutoSizedRenderTexture(int width, int height, RTHandleAllocInfo info) { - bool isShadowMap = false; - bool useDynamicScaleExplicit = false; + if (info.enableShadingRate) + { + // this function is called when auto scaling is needed and always expect size in pixels. + // shading rate image resolution is in tiles and current values are in pixels. + // then must adjust width and height + var actualDimensions = ShadingRateImage.GetAllocTileSize(width, height); + width = actualDimensions.x; + height = actualDimensions.y; + } var rt = CreateRenderTexture( width, height, info.format, info.slices, info.filterMode, info.wrapModeU, info.wrapModeV, info.wrapModeW, info.dimension, info.enableRandomWrite, info.useMipMap - , info.autoGenerateMips, isShadowMap, info.anisoLevel, info.mipMapBias, info.msaaSamples, info.bindTextureMS - , info.useDynamicScale, useDynamicScaleExplicit, info.memoryless, info.vrUsage, info.name); + , info.autoGenerateMips, info.isShadowMap, info.anisoLevel, info.mipMapBias, info.msaaSamples, info.bindTextureMS + , info.useDynamicScale, info.useDynamicScaleExplicit, info.memoryless, info.vrUsage, info.enableShadingRate, info.name); var rth = new RTHandle(this); rth.SetRenderTexture(rt); diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Textures/RTHandles.cs b/Packages/com.unity.render-pipelines.core/Runtime/Textures/RTHandles.cs index 35698efb05a..1cd7b308ea4 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Textures/RTHandles.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Textures/RTHandles.cs @@ -1,4 +1,5 @@ using System; +using System.Runtime.CompilerServices; using UnityEngine.Assertions; using UnityEngine.Experimental.Rendering; @@ -48,7 +49,7 @@ public static Vector2Int CalculateDimensions(ScaleFunc scaleFunc) /// Allocate a new fixed sized RTHandle with the default RTHandle System. /// /// With of the RTHandle. - /// Heigh of the RTHandle. + /// height of the RTHandle. /// Number of slices of the RTHandle. /// Bit depths of a depth buffer. /// GraphicsFormat of a color buffer. @@ -122,9 +123,9 @@ public static RTHandle Alloc( /// Allocate a new fixed sized RTHandle with the default RTHandle System. /// /// With of the RTHandle. - /// Heigh of the RTHandle. + /// height of the RTHandle. /// GraphicsFormat of a color or depth stencil buffer. - /// Number of slices of the RTHandle. + /// Number of slices of the RTHandle. /// Filtering mode of the RTHandle. /// Addressing mode of the RTHandle. /// Texture dimension of the RTHandle. @@ -146,7 +147,7 @@ public static RTHandle Alloc( int width, int height, GraphicsFormat format, - int slices = 1, + int slices = 1, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, @@ -169,7 +170,7 @@ public static RTHandle Alloc( width, height, format, - slices, + slices, filterMode, wrapMode, dimension, @@ -193,7 +194,7 @@ public static RTHandle Alloc( /// Allocate a new fixed sized RTHandle with the default RTHandle System. /// /// With of the RTHandle. - /// Heigh of the RTHandle. + /// height of the RTHandle. /// U coordinate wrapping mode of the RTHandle. /// V coordinate wrapping mode of the RTHandle. /// W coordinate wrapping mode of the RTHandle. @@ -302,38 +303,49 @@ public static RTHandle Alloc( string name = "" ) { - var format = GetFormat(descriptor.graphicsFormat, descriptor.depthStencilFormat); - - var result = s_DefaultInstance.Alloc( - descriptor.width, - descriptor.height, - format, - descriptor.volumeDepth, - filterMode, - wrapMode, - descriptor.dimension, - descriptor.enableRandomWrite, - descriptor.useMipMap, - descriptor.autoGenerateMips, - isShadowMap, - anisoLevel, - mipMapBias, - (MSAASamples)descriptor.msaaSamples, - descriptor.bindMS, - descriptor.useDynamicScale, - descriptor.useDynamicScaleExplicit, - descriptor.memoryless, - descriptor.vrUsage, - name - ); - return result; + return s_DefaultInstance.Alloc(descriptor.width, descriptor.height, + GetRTHandleAllocInfo(descriptor, filterMode, wrapMode, anisoLevel, mipMapBias, name)); } + [MethodImpl(MethodImplOptions.AggressiveInlining)] static internal GraphicsFormat GetFormat(GraphicsFormat colorFormat, GraphicsFormat depthStencilFormat) { return (depthStencilFormat==GraphicsFormat.None) ? colorFormat : depthStencilFormat; } + // Internal RtDesc to RtAllocInfo conversion utility function. + // Keep internal for future changes. + // + // NOTE: It has no default values to avoid param ambiguity of the flat RtHandleAlloc API. + // NOTE: There isn't 100% field to field mapping, so some fields might need manual adjustment afterwards. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static RTHandleAllocInfo GetRTHandleAllocInfo(in RenderTextureDescriptor desc, FilterMode filterMode, TextureWrapMode wrapMode, int anisoLevel, float mipMapBias, string name) + { + return new RTHandleAllocInfo(name) + { + slices = desc.volumeDepth, + format = RTHandles.GetFormat(desc.graphicsFormat, desc.depthStencilFormat), + filterMode = filterMode, + wrapModeU = wrapMode, + wrapModeV = wrapMode, + wrapModeW = wrapMode, + dimension = desc.dimension, + enableRandomWrite = desc.enableRandomWrite, + useMipMap = desc.useMipMap, + autoGenerateMips = desc.autoGenerateMips, + isShadowMap = desc.shadowSamplingMode != ShadowSamplingMode.None, + anisoLevel = anisoLevel, + mipMapBias = mipMapBias, + msaaSamples = (MSAASamples)desc.msaaSamples, + bindTextureMS = desc.bindMS, + useDynamicScale = desc.useDynamicScale, + useDynamicScaleExplicit = desc.useDynamicScaleExplicit, + memoryless = desc.memoryless, + vrUsage = desc.vrUsage, + enableShadingRate = desc.enableShadingRate, + }; + } + /// /// Allocate a new automatically sized RTHandle for the default RTHandle System. /// @@ -431,7 +443,7 @@ public static RTHandle Alloc( public static RTHandle Alloc( Vector2 scaleFactor, GraphicsFormat format, - int slices = 1, + int slices = 1, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, @@ -496,29 +508,8 @@ public static RTHandle Alloc( string name = "" ) { - var format = GetFormat(descriptor.graphicsFormat, descriptor.depthStencilFormat); - - return s_DefaultInstance.Alloc( - scaleFactor, - format, - descriptor.volumeDepth, - filterMode, - wrapMode, - descriptor.dimension, - descriptor.enableRandomWrite, - descriptor.useMipMap, - descriptor.autoGenerateMips, - isShadowMap, - anisoLevel, - mipMapBias, - (MSAASamples)descriptor.msaaSamples, - descriptor.bindMS, - descriptor.useDynamicScale, - descriptor.useDynamicScaleExplicit, - descriptor.memoryless, - descriptor.vrUsage, - name - ); + return s_DefaultInstance.Alloc(scaleFactor, + GetRTHandleAllocInfo(descriptor, filterMode, wrapMode, anisoLevel, mipMapBias, name)); } /// @@ -697,29 +688,8 @@ public static RTHandle Alloc( Assert.IsFalse(descriptor.graphicsFormat != GraphicsFormat.None && descriptor.depthStencilFormat != GraphicsFormat.None, "The RenderTextureDescriptor used to create RTHandle " + name + " contains both graphicsFormat and depthStencilFormat which is not allowed."); - var format = GetFormat( descriptor.graphicsFormat, descriptor.depthStencilFormat); - - return s_DefaultInstance.Alloc( - scaleFunc, - format, - descriptor.volumeDepth, - filterMode, - wrapMode, - descriptor.dimension, - descriptor.enableRandomWrite, - descriptor.useMipMap, - descriptor.autoGenerateMips, - isShadowMap, - anisoLevel, - mipMapBias, - (MSAASamples)descriptor.msaaSamples, - descriptor.bindMS, - descriptor.useDynamicScale, - descriptor.useDynamicScaleExplicit, - descriptor.memoryless, - descriptor.vrUsage, - name - ); + return s_DefaultInstance.Alloc(scaleFunc, + GetRTHandleAllocInfo(descriptor, filterMode, wrapMode, anisoLevel, mipMapBias, name)); } /// diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Utilities/CoreUtils.cs b/Packages/com.unity.render-pipelines.core/Runtime/Utilities/CoreUtils.cs index 141a63c62b1..c949dcb100d 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Utilities/CoreUtils.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Utilities/CoreUtils.cs @@ -772,6 +772,37 @@ public static void SetRenderTarget(CommandBuffer cmd, RTHandle colorBuffer, Rend SetViewportAndClear(cmd, colorBuffer, clearFlag, clearColor); } + /// + /// Set the current shading rate fragment size + /// + /// CommandBuffer used for rendering commands. + /// Shading rate fragment size to set + public static void SetShadingRateFragmentSize(CommandBuffer cmd, ShadingRateFragmentSize baseShadingRateFragmentSize) + { + cmd.SetShadingRateFragmentSize(baseShadingRateFragmentSize); + } + + /// + /// Set the current shading rate combiner + /// + /// CommandBuffer used for rendering commands. + /// Combiner stage to set + /// Combiner to set + public static void SetShadingRateCombiner(CommandBuffer cmd, ShadingRateCombinerStage stage, ShadingRateCombiner combiner) + { + cmd.SetShadingRateCombiner(stage, combiner); + } + + /// + /// Set the current shading rate image + /// + /// CommandBuffer used for rendering commands. + /// Shading rate image render target identifier to set + public static void SetShadingRateImage(CommandBuffer cmd, in RenderTargetIdentifier shadingRateImage) + { + cmd.SetShadingRateImage(shadingRateImage); + } + /// /// Set the current multiple render texture. /// diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs.meta new file mode 100644 index 00000000000..3bef098266f --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc1099d95a4ee3849a01da5826056b1f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/.buginfo b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/.buginfo new file mode 100644 index 00000000000..fbd5f8466e1 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/.buginfo @@ -0,0 +1 @@ +area: Post-processing and UI Features diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders.meta new file mode 100644 index 00000000000..eca032eb0e1 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 77658d0b0e15bb342a01e17ef1b2172a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl new file mode 100644 index 00000000000..e89a0c2e0d1 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl @@ -0,0 +1,21 @@ +#ifndef VRS_IMAGE_INCLUDED +#define VRS_IMAGE_INCLUDED + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + +RW_TEXTURE2D(uint, _ShadingRateImage); + +uniform float4 _VrsScaleBias; + +void ImageStore(uint shadingRateNativeValue, uint2 gid) +{ +#if !defined(APPLY_Y_FLIP) + // compute shader introduce a natural y-flip + // hence the reverse test + gid.y = _VrsScaleBias.w - 1 - gid.y; +#endif + + _ShadingRateImage[gid] = shadingRateNativeValue; +} + +#endif // VRS_IMAGE_INCLUDED diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl.meta new file mode 100644 index 00000000000..e3d8c0e5afc --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3cc7957ff84646bbbb849b88919e2109 +timeCreated: 1710958387 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl new file mode 100644 index 00000000000..545ccebbb52 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl @@ -0,0 +1,23 @@ +#ifndef VRS_MAINTEX_INCLUDED +#define VRS_MAINTEX_INCLUDED + +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureXR.hlsl" +#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl" +#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/GlobalSamplers.hlsl" + +TEXTURE2D_X(_VrsMainTex); + +StructuredBuffer _VrsMainTexLut; + +float4 LoadVrsMainTex(uint2 tid) +{ + return LOAD_TEXTURE2D_X(_VrsMainTex, tid); +} + +float4 SampleVrsMainTexFromCoords(float2 coords) +{ + return SAMPLE_TEXTURE2D_X_LOD(_VrsMainTex, sampler_PointClamp, coords, 0); +} + +#endif // VRS_MAINTEX_INCLUDED diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl.meta new file mode 100644 index 00000000000..2cda9558f7f --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 08b9525dab8d497cb640174e593275d1 +timeCreated: 1710958899 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl new file mode 100644 index 00000000000..a4dade3e996 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl @@ -0,0 +1,45 @@ +#ifndef VRS_SHADING_RATES_INCLUDED +#define VRS_SHADING_RATES_INCLUDED + +// Must be kept in sync with ShadingRateFragmentSize +#define SHADING_RATE_FRAGMENT_SIZE_1X1 0 // native value = 0b0000 -> 0 +#define SHADING_RATE_FRAGMENT_SIZE_1X2 1 // native value = 0b0001 -> 1 +#define SHADING_RATE_FRAGMENT_SIZE_2X1 2 // native value = 0b0100 -> 4 +#define SHADING_RATE_FRAGMENT_SIZE_2X2 3 // native value = 0b0101 -> 5 +#define SHADING_RATE_FRAGMENT_SIZE_1x4 4 // native value = 0b0010 -> 2 +#define SHADING_RATE_FRAGMENT_SIZE_4x1 5 // native value = 0b1000 -> 8 +#define SHADING_RATE_FRAGMENT_SIZE_2x4 6 // native value = 0b0110 -> 6 +#define SHADING_RATE_FRAGMENT_SIZE_4x2 7 // native value = 0b1001 -> 9 +#define SHADING_RATE_FRAGMENT_SIZE_4x4 8 // native value = 0b1010 -> 10 +#define SHADING_RATE_FRAGMENT_SIZE_COUNT 9 + +StructuredBuffer _ShadingRateNativeValues; + +/// +/// Unpack a shading rate native value into its horizontal and vertical components. +/// +/// Shading rate native value to unpack. +/// Unpacked value where x component is the horizontal shading rate and y is the vertical shading rate. +uint2 UnpackShadingRate(uint shadingRateNativeValue) +{ + return uint2((shadingRateNativeValue >> 2) & 0x03, shadingRateNativeValue & 0x03); +} + +/// +/// Pack an unpacked shading rates into its native value. +/// +/// Unpacked shading rate. +/// Shading rate native value. +uint PackShadingRate(uint2 unpackedShadingRate) +{ + // If using 4x4 rate, be careful to check for invalid rates + // if (shadingRate.x == 2 && shadingRate.y == 0) + // shadingRate.y = 1; + // + // if (shadingRate.x == 0 && shadingRate.y == 2) + // shadingRate.x = 1; + + return (unpackedShadingRate.x << 2) | unpackedShadingRate.y; +} + +#endif // VRS_SHADING_RATES_INCLUDED diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl.meta new file mode 100644 index 00000000000..303e9a6b16f --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dbb73cb4c1954036a32ce1ade17ac0fd +timeCreated: 1710965275 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTexture.compute b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTexture.compute new file mode 100644 index 00000000000..bcd6023263d --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTexture.compute @@ -0,0 +1,69 @@ +// #pragma enable_d3d11_debug_symbols + +#pragma only_renderers d3d11 xboxone vulkan + +#pragma multi_compile VRS_TILE_SIZE_8 VRS_TILE_SIZE_16 VRS_TILE_SIZE_32 +#pragma multi_compile _ DISABLE_TEXTURE2D_X_ARRAY +#pragma multi_compile _ APPLY_Y_FLIP + +#pragma kernel TextureCopy +#pragma kernel TextureReduce + + +#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl" +#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl" +#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl" +#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl" + + +uint GetShadingRateNativeValueFromColor(float3 color) +{ + for (uint i = 0; i < SHADING_RATE_FRAGMENT_SIZE_COUNT; ++i) + { + float3 delta = abs(color - _VrsMainTexLut[i].rgb); + if (all(delta < 0.01f)) + return _ShadingRateNativeValues[i]; + } + + return _ShadingRateNativeValues[SHADING_RATE_FRAGMENT_SIZE_1X1]; +} + +[numthreads(1, 1, 1)] +void TextureCopy(uint2 tid : SV_DispatchThreadID) +{ + float3 color = LoadVrsMainTex(tid).rgb; + uint shadingRateNativeValue = GetShadingRateNativeValueFromColor(color); + ImageStore(shadingRateNativeValue, tid); +} + + +groupshared uint2 ldsShadingRate; + +[numthreads(VRS_TILE_SIZE, VRS_TILE_SIZE, 1)] +void TextureReduce(uint2 tid : SV_DispatchThreadID, uint2 gid: SV_GroupID, uint gidx: SV_GroupIndex) +{ + // initialize lds: only 1st thread of group does it + if (gidx == 0) + ldsShadingRate = UnpackShadingRate(_ShadingRateNativeValues[SHADING_RATE_FRAGMENT_SIZE_4x4]); + + // read: 1 thread == 1 pixel in main tex, each thread in group must read + float3 color = SampleVrsMainTexFromCoords(tid * _VrsScaleBias.xy).rgb; + uint shadingRateNativeValue = GetShadingRateNativeValueFromColor(color); + uint2 shadingRate = UnpackShadingRate(shadingRateNativeValue); + + GroupMemoryBarrierWithGroupSync(); + + // parallel reduce: 1 group == 1 pixel in vrs image + // conservative reduce: pick highest rate (hence min) + InterlockedMin(ldsShadingRate.x, shadingRate.x); + InterlockedMin(ldsShadingRate.y, shadingRate.y); + + GroupMemoryBarrierWithGroupSync(); + + // store result: only 1st thread of group does it + if (gidx == 0) + { + shadingRateNativeValue = PackShadingRate(ldsShadingRate); + ImageStore(shadingRateNativeValue, gid); + } +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTexture.compute.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTexture.compute.meta new file mode 100644 index 00000000000..5fbb7b28e01 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTexture.compute.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cacb30de6c40c7444bbc78cb0a81fd2a +ComputeShaderImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl new file mode 100644 index 00000000000..2838b032183 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl @@ -0,0 +1,14 @@ +#ifndef VRS_TILE_SIZE_INCLUDED +#define VRS_TILE_SIZE_INCLUDED + +#if defined(VRS_TILE_SIZE_8) + #define VRS_TILE_SIZE 8 +#elif defined(VRS_TILE_SIZE_16) + #define VRS_TILE_SIZE 16 +#elif defined(VRS_TILE_SIZE_32) + #define VRS_TILE_SIZE 32 +#else + #error Unsupported tile size +#endif + +#endif // VRS_TILE_SIZE_INCLUDED diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl.meta new file mode 100644 index 00000000000..457e40f1147 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 234c0613ab6043a7852e6ab1a268352a +timeCreated: 1710957835 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsVisualization.shader b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsVisualization.shader new file mode 100644 index 00000000000..d8dccd83e6d --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsVisualization.shader @@ -0,0 +1,44 @@ +Shader "Hidden/Core/VrsVisualization" +{ + SubShader + { + Pass + { + Name "VrsVisualization" + ZTest Always + ZWrite Off + Cull Off + + HLSLPROGRAM + //#pragma enable_d3d11_debug_symbols + + #pragma only_renderers d3d11 xboxone vulkan + + #pragma vertex Vert + #pragma fragment Fragment + + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureXR.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Packing.hlsl" + #include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl" + + TYPED_TEXTURE2D(uint, _ShadingRateImage); + StructuredBuffer _VisualizationLut; + + uniform float4 _VisualizationParams; + + #define PixelToTileScale _VisualizationParams.xy + + float4 Fragment(Varyings input) : SV_Target + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); + + uint2 pixel = (uint2)(input.positionCS.xy * PixelToTileScale); + uint shadingRate = LOAD_TEXTURE2D_LOD(_ShadingRateImage, pixel, 0); + + return _VisualizationLut[shadingRate]; + } + ENDHLSL + } + } +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsVisualization.shader.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsVisualization.shader.meta new file mode 100644 index 00000000000..0f80dc6f42e --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsVisualization.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 620b55b8040a88d468e94abe55bed5ba +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Vrs.cs b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Vrs.cs new file mode 100644 index 00000000000..ea445398bbf --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Vrs.cs @@ -0,0 +1,259 @@ +using System; +using UnityEngine.Rendering.RenderGraphModule; + +namespace UnityEngine.Rendering +{ + /// + /// Encapsulates variable shading rate support (VRS) and texture conversion to shading rate image + /// + public static class Vrs + { + class ConversionPassData + { + public TextureHandle sriTextureHandle; + public TextureHandle mainTexHandle; + public TextureDimension mainTexDimension; + public BufferHandle mainTexLutHandle; + public BufferHandle validatedShadingRateFragmentSizeHandle; + public ComputeShader computeShader; + public int kernelIndex; + public Vector4 scaleBias; + public Vector2Int dispatchSize; + public bool yFlip; + } + + class VisualizationPassData + { + public Material material; + public TextureHandle source; + public BufferHandle lut; + public TextureHandle dummy; + public Vector4 visualizationParams; + } + + internal static readonly int shadingRateFragmentSizeCount = Enum.GetNames(typeof(ShadingRateFragmentSize)).Length; + + /// + /// Checks if shading rate is supported. + /// Convenience to abstract tier checks. + /// + /// True if shading rate is supported, false otherwise. + public static bool IsSupported() + { + return (ShadingRateInfo.supportsPerDrawCall || ShadingRateInfo.supportsPerImageTile); + } + + /// + /// Checks if shading rate images are supported. + /// Convenience to abstract tier checks + /// + /// True if shading rate images are supported, false otherwise. + public static bool IsShadingRateImageSupported() + { + return ShadingRateInfo.supportsPerImageTile; + } + + /// + /// Check if conversion of color texture to shading rate image is supported. + /// Convenience to abstract all capabilities checks. + /// + /// Returns true if conversion of color texture to shading rate image is supported, false otherwise. + public static bool IsColorMaskTextureConversionSupported() + { + return SystemInfo.supportsComputeShaders && + IsShadingRateImageSupported() && + s_VrsResources?.textureComputeShader != null; + } + + static VrsResources s_VrsResources; + + /// + /// Preprocess resources found in VrsRenderPipelineRuntimeResources for use at runtime. + /// + public static void InitializeResources() + { + if (IsSupported()) + { + var pipelineRuntimeResources = GraphicsSettings.GetRenderPipelineSettings(); + s_VrsResources = new VrsResources(pipelineRuntimeResources); + } + } + + /// + /// Cleanup resources. + /// + public static void DisposeResources() + { + s_VrsResources?.Dispose(); + s_VrsResources = null; + } + + /// + /// Converts a color mask texture to a shading rate image. + /// + /// Render graph to record conversion commands + /// Shading rate images to convert to. + /// Texture to convert from. + /// True if shading rate image should be generated flipped. + /// Shading rate image texture handle created. + /// + /// sriRtHandle and colorMaskRtHandle are imported with renderGraph before doing the conversion. + /// + public static TextureHandle ColorMaskTextureToShadingRateImage(RenderGraph renderGraph, RTHandle sriRtHandle, RTHandle colorMaskRtHandle, bool yFlip) + { + if (renderGraph == null || sriRtHandle == null || colorMaskRtHandle == null) + { + Debug.LogError($"TextureToShadingRateImage: invalid argument."); + return TextureHandle.nullHandle; + } + + var sriTextureHandle = renderGraph.ImportShadingRateImageTexture(sriRtHandle); + var colorMaskHandle = renderGraph.ImportTexture(colorMaskRtHandle); + + return ColorMaskTextureToShadingRateImage(renderGraph, + sriTextureHandle, + colorMaskHandle, + ((Texture)colorMaskRtHandle).dimension, + yFlip); + } + + /// + /// Converts a color mask texture to a shading rate image. + /// + /// Render graph to record conversion commands + /// Shading rate images to convert to. + /// Texture to convert from. + /// Texture's dimension. + /// True if shading rate image should be generated flipped. + /// Shading rate image texture handle created. + /// + /// sriRtHandle and colorMaskHandle are expected to be imported by renderGraph prior to this call. + /// + public static TextureHandle ColorMaskTextureToShadingRateImage(RenderGraph renderGraph, TextureHandle sriTextureHandle, TextureHandle colorMaskHandle, TextureDimension colorMaskDimension, bool yFlip) + { + if (!IsColorMaskTextureConversionSupported()) + { + Debug.LogError($"TextureToShadingRateImage: conversion not supported."); + return TextureHandle.nullHandle; + } + + var sriDesc = sriTextureHandle.GetDescriptor(renderGraph); + if (sriDesc.dimension != TextureDimension.Tex2D) + { + Debug.LogError($"TextureToShadingRateImage: Vrs image not a texture 2D."); + return TextureHandle.nullHandle; + } + + if (colorMaskDimension != TextureDimension.Tex2D && colorMaskDimension != TextureDimension.Tex2DArray) + { + Debug.LogError($"TextureToShadingRateImage: Input texture dimension not supported."); + return TextureHandle.nullHandle; + } + + using (var builder = renderGraph.AddComputePass("TextureToShadingRateImage", out var outerPassData, s_VrsResources.conversionProfilingSampler)) + { + outerPassData.sriTextureHandle = sriTextureHandle; + outerPassData.mainTexHandle = colorMaskHandle; + outerPassData.mainTexDimension = colorMaskDimension; + outerPassData.mainTexLutHandle = renderGraph.ImportBuffer(s_VrsResources.conversionLutBuffer); + outerPassData.validatedShadingRateFragmentSizeHandle = renderGraph.ImportBuffer(s_VrsResources.validatedShadingRateFragmentSizeBuffer); + + outerPassData.computeShader = s_VrsResources.textureComputeShader; + outerPassData.kernelIndex = s_VrsResources.textureReduceKernel; + outerPassData.scaleBias = new Vector4() + { + x = 1.0f / (sriDesc.width * s_VrsResources.tileSize.x), + y = 1.0f / (sriDesc.height * s_VrsResources.tileSize.y), + z = sriDesc.width, + w = sriDesc.height, + }; + outerPassData.dispatchSize = new Vector2Int(sriDesc.width, sriDesc.height); + outerPassData.yFlip = yFlip; + + builder.UseTexture(outerPassData.sriTextureHandle, AccessFlags.Write); + builder.UseTexture(outerPassData.mainTexHandle); + builder.UseBuffer(outerPassData.mainTexLutHandle); + + builder.AllowGlobalStateModification(true); + + builder.SetRenderFunc((ConversionPassData innerPassData, ComputeGraphContext context) => + { + ConversionDispatch(context.cmd, innerPassData); + }); + + return outerPassData.sriTextureHandle; + } + } + + /// + /// Converts a shading rate image to a color texture for visualization. + /// + /// Render graph to record conversion commands + /// Texture to convert from. + /// Output of conversion. + public static void ShadingRateImageToColorMaskTexture(RenderGraph renderGraph, in TextureHandle sriTextureHandle, in TextureHandle colorMaskHandle) + { + using (var builder = renderGraph.AddRasterRenderPass("ShadingRateImageToTexture", out var outerPassData, s_VrsResources.visualizationProfilingSampler)) + { + outerPassData.material = s_VrsResources.visualizationMaterial; + + if (sriTextureHandle.IsValid()) + outerPassData.source = sriTextureHandle; + else + outerPassData.source = renderGraph.defaultResources.blackTexture; + + outerPassData.lut = renderGraph.ImportBuffer(s_VrsResources.visualizationLutBuffer); + outerPassData.dummy = renderGraph.defaultResources.blackTexture; + outerPassData.visualizationParams = new Vector4( + 1.0f / s_VrsResources.tileSize.x, + 1.0f / s_VrsResources.tileSize.y, + 0, + 0);; + + builder.UseTexture(outerPassData.source); + builder.UseBuffer(outerPassData.lut); + builder.UseTexture(outerPassData.dummy); + builder.SetRenderAttachment(colorMaskHandle, 0); + + builder.AllowPassCulling(false); + + builder.SetRenderFunc((VisualizationPassData innerPassData, RasterGraphContext context) => + { + // must setup blitter source via the material: it's a typed texture (uint) + innerPassData.material.SetTexture(VrsShaders.s_ShadingRateImage, innerPassData.source); + innerPassData.material.SetBuffer(VrsShaders.s_VisualizationLut, innerPassData.lut); + innerPassData.material.SetVector(VrsShaders.s_VisualizationParams, innerPassData.visualizationParams); + + Blitter.BlitTexture(context.cmd, + innerPassData.dummy, + new Vector4(1, 1, 0, 0), + innerPassData.material, + 0); + }); + } + } + + static void ConversionDispatch(ComputeCommandBuffer cmd, ConversionPassData conversionPassData) + { + var disableTexture2dXArray = new LocalKeyword(conversionPassData.computeShader, VrsShaders.k_DisableTexture2dXArray); + if (conversionPassData.mainTexDimension == TextureDimension.Tex2DArray) + cmd.DisableKeyword(conversionPassData.computeShader, disableTexture2dXArray); + else + cmd.EnableKeyword(conversionPassData.computeShader, disableTexture2dXArray); + + var yFlip = new LocalKeyword(conversionPassData.computeShader, VrsShaders.k_YFlip); + if (conversionPassData.yFlip) + cmd.EnableKeyword(conversionPassData.computeShader, yFlip); + else + cmd.DisableKeyword(conversionPassData.computeShader, yFlip); + + cmd.SetComputeTextureParam(conversionPassData.computeShader, conversionPassData.kernelIndex, VrsShaders.s_MainTex, conversionPassData.mainTexHandle); + cmd.SetComputeBufferParam(conversionPassData.computeShader, conversionPassData.kernelIndex, VrsShaders.s_MainTexLut, conversionPassData.mainTexLutHandle); + cmd.SetComputeBufferParam(conversionPassData.computeShader, conversionPassData.kernelIndex, VrsShaders.s_ShadingRateNativeValues, conversionPassData.validatedShadingRateFragmentSizeHandle); + cmd.SetComputeTextureParam(conversionPassData.computeShader, conversionPassData.kernelIndex, VrsShaders.s_ShadingRateImage, conversionPassData.sriTextureHandle); + cmd.SetComputeVectorParam(conversionPassData.computeShader, VrsShaders.s_ScaleBias, conversionPassData.scaleBias); + + cmd.DispatchCompute(conversionPassData.computeShader, conversionPassData.kernelIndex, conversionPassData.dispatchSize.x, conversionPassData.dispatchSize.x, 1); + } + } +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Vrs.cs.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Vrs.cs.meta new file mode 100644 index 00000000000..828f6274104 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/Vrs.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a5153735ff79d6149a038ac6417b9301 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsLut.cs b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsLut.cs new file mode 100644 index 00000000000..7f53faf674e --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsLut.cs @@ -0,0 +1,124 @@ +using System; +using System.Runtime.InteropServices; + +namespace UnityEngine.Rendering +{ + /// + /// Variable rate shading lookup table. Use to convert shading rate fragment size and color back and forth. + /// + [Serializable] + public class VrsLut + { + /// + /// Get a new instance of default VrsLut + /// + /// New instance of default VrsLut + public static VrsLut CreateDefault() + { + return new VrsLut() + { + [ShadingRateFragmentSize.FragmentSize1x1] = Color.red, + [ShadingRateFragmentSize.FragmentSize1x2] = Color.yellow, + [ShadingRateFragmentSize.FragmentSize2x1] = Color.white, + [ShadingRateFragmentSize.FragmentSize2x2] = Color.green, + [ShadingRateFragmentSize.FragmentSize1x4] = new Color(0.75f, 0.75f, 0.00f, 1), + [ShadingRateFragmentSize.FragmentSize4x1] = new Color(0.00f, 0.75f, 0.55f, 1), + [ShadingRateFragmentSize.FragmentSize2x4] = new Color(0.50f, 0.00f, 0.50f, 1), + [ShadingRateFragmentSize.FragmentSize4x2] = Color.grey, + [ShadingRateFragmentSize.FragmentSize4x4] = Color.blue, + }; + } + + [SerializeField] + Color[] m_Data = new Color[Vrs.shadingRateFragmentSizeCount]; + + /// + /// Indexing data with ShadingRateFragmentSize enum. + /// + /// Shading rate fragment size to set/get + public Color this[ShadingRateFragmentSize fragmentSize] + { + get => m_Data[(int)fragmentSize]; + set => m_Data[(int)fragmentSize] = value; + } + + /// + /// Create a compute buffer from the lookup table. + /// + /// If true, the buffer will be created with the visualization shader in mind + /// Graphics buffer representing this lookup table + public GraphicsBuffer CreateBuffer(bool forVisualization = false) + { + GraphicsBuffer buffer; + Color[] bufferData; + + if (forVisualization) + { + // lookup table will be used to map shading rate native values to colors + var fragmentSizes = Enum.GetValues(typeof(ShadingRateFragmentSize)); + // Get the encoded binary value associated of the max shading rate supported by our LUT. + // The encoded value will not be sequential. For example, 4x4 is encoded as 0b1010 = 10. + // We do this manually as ShadingRateInfo.QueryNativeValue will return 0 for rates that are + // not supported, which can lead to overflow on devices that support only up to 2x2. + var maxNativeValue = MapFragmentShadingRateToBinary(ShadingRateFragmentSize.FragmentSize4x4); + + bufferData = new Color[maxNativeValue + 1]; + + for (int i = fragmentSizes.Length - 1; i >= 0; --i) + { + var fragmentSize = (ShadingRateFragmentSize)fragmentSizes.GetValue(i); + var nativeValue = ShadingRateInfo.QueryNativeValue(fragmentSize); + bufferData[nativeValue] = m_Data[(int) fragmentSize].linear; + } + } + else + { + // lookup table will be used to map colors to shading rate index + bufferData = new Color[m_Data.Length]; + for (int i = 0; i < m_Data.Length; ++i) + { + bufferData[i] = m_Data[i].linear; + } + } + + buffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, bufferData.Length, Marshal.SizeOf(typeof(Color))); + buffer.SetData(bufferData); + + return buffer; + } + + private const uint Rate1x = 0; + private const uint Rate2x = 1; + private const uint Rate4x = 2; + private uint MapFragmentShadingRateToBinary(ShadingRateFragmentSize fs) + { + switch (fs) + { + default: + case ShadingRateFragmentSize.FragmentSize1x1: + return EncodeShadingRate(Rate1x, Rate1x); + case ShadingRateFragmentSize.FragmentSize1x2: + return EncodeShadingRate(Rate1x, Rate2x); + case ShadingRateFragmentSize.FragmentSize2x1: + return EncodeShadingRate(Rate2x, Rate1x); + case ShadingRateFragmentSize.FragmentSize2x2: + return EncodeShadingRate(Rate2x, Rate2x); + case ShadingRateFragmentSize.FragmentSize1x4: + return EncodeShadingRate(Rate1x, Rate4x); + case ShadingRateFragmentSize.FragmentSize4x1: + return EncodeShadingRate(Rate4x, Rate1x); + case ShadingRateFragmentSize.FragmentSize2x4: + return EncodeShadingRate(Rate2x, Rate4x); + case ShadingRateFragmentSize.FragmentSize4x2: + return EncodeShadingRate(Rate4x, Rate2x); + case ShadingRateFragmentSize.FragmentSize4x4: + return EncodeShadingRate(Rate4x, Rate4x); + } + } + + private uint EncodeShadingRate(uint x, uint y) + { + return ((x << 2) | (y)); + } + } +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsLut.cs.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsLut.cs.meta new file mode 100644 index 00000000000..0842d30f959 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsLut.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 022af1b7cce79be46aec3272d72bf1f8 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsRenderPipelineRuntimeResources.cs b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsRenderPipelineRuntimeResources.cs new file mode 100644 index 00000000000..95b724b6094 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsRenderPipelineRuntimeResources.cs @@ -0,0 +1,72 @@ +using System; + +namespace UnityEngine.Rendering +{ + /// + /// Class that stores the Variable Rate Shading common global resources + /// + [Serializable] + [SupportedOnRenderPipeline] + [Categorization.CategoryInfo(Name = "R: VRS - Runtime Resources", Order = 1000), HideInInspector] + public sealed class VrsRenderPipelineRuntimeResources : IRenderPipelineResources + { + /// + /// Version of the Vrs Resources + /// + public int version => 0; + + bool IRenderPipelineGraphicsSettings.isAvailableInPlayerBuild => true; + + [SerializeField] + [ResourcePath("Runtime/Vrs/Shaders/VrsTexture.compute")] + ComputeShader m_TextureComputeShader; + + /// + /// General Vrs compute shader. + /// + public ComputeShader textureComputeShader + { + get => m_TextureComputeShader; + set => this.SetValueAndNotify(ref m_TextureComputeShader, value, nameof(m_TextureComputeShader)); + } + + [SerializeField] + [ResourcePath("Runtime/Vrs/Shaders/VrsVisualization.shader")] + Shader m_VisualizationShader; + + /// + /// Show resource shader. + /// + public Shader visualizationShader + { + get => m_VisualizationShader; + set => this.SetValueAndNotify(ref m_VisualizationShader, value, nameof(m_VisualizationShader)); + } + + [SerializeField] + [Tooltip("Colors to visualize the shading rates")] + VrsLut m_VisualizationLookupTable = VrsLut.CreateDefault(); + + /// + /// Shading rate visualization lookup table. + /// + public VrsLut visualizationLookupTable + { + get => m_VisualizationLookupTable; + set => this.SetValueAndNotify(ref m_VisualizationLookupTable, value, nameof(m_VisualizationLookupTable)); + } + + [SerializeField] + [Tooltip("Colors to convert between shading rates and textures")] + VrsLut m_ConversionLookupTable = VrsLut.CreateDefault(); + + /// + /// texture to/from Shading rate conversion lookup table. + /// + public VrsLut conversionLookupTable + { + get => m_ConversionLookupTable; + set => this.SetValueAndNotify(ref m_ConversionLookupTable, value, nameof(m_ConversionLookupTable)); + } + } +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsRenderPipelineRuntimeResources.cs.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsRenderPipelineRuntimeResources.cs.meta new file mode 100644 index 00000000000..8c90930ccb5 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsRenderPipelineRuntimeResources.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c75bfa9127302bc4cbc67983804a44ac \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsResources.cs b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsResources.cs new file mode 100644 index 00000000000..2652f87755a --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsResources.cs @@ -0,0 +1,145 @@ +using System; + +namespace UnityEngine.Rendering +{ + class VrsResources : IDisposable + { + internal ProfilingSampler conversionProfilingSampler = new ProfilingSampler("VrsConversion"); + internal ProfilingSampler visualizationProfilingSampler = new ProfilingSampler("VrsVisualization"); + internal GraphicsBuffer conversionLutBuffer; + internal GraphicsBuffer visualizationLutBuffer; + + internal ComputeShader textureComputeShader; + internal int textureReduceKernel = -1; + internal int textureCopyKernel = -1; + + internal Vector2Int tileSize; + + internal GraphicsBuffer validatedShadingRateFragmentSizeBuffer; + + Shader m_VisualizationShader; + Material m_VisualizationMaterial; + internal Material visualizationMaterial + { + get + { + // explicit check here: handle case where m_Material is set to null when editor reloads + if (m_VisualizationMaterial == null) + m_VisualizationMaterial = new Material(m_VisualizationShader); + + return m_VisualizationMaterial; + } + } + + internal VrsResources(VrsRenderPipelineRuntimeResources resources) + { + InitializeResources(resources); + +#if UNITY_EDITOR + GraphicsSettings.Unsubscribe(OnVrsResourcesChanged); + GraphicsSettings.Subscribe(OnVrsResourcesChanged); +#endif + } + +#if UNITY_EDITOR + void OnVrsResourcesChanged(VrsRenderPipelineRuntimeResources resources, string propertyName) + { + DisposeResources(); + InitializeResources(resources); + } +#endif + + ~VrsResources() + { + Dispose(); + GC.SuppressFinalize(this); + } + + public void Dispose() + { +#if UNITY_EDITOR + GraphicsSettings.Unsubscribe(OnVrsResourcesChanged); +#endif + DisposeResources(); + } + + void InitializeResources(VrsRenderPipelineRuntimeResources resources) + { + m_VisualizationShader = resources.visualizationShader; + conversionLutBuffer = resources.conversionLookupTable.CreateBuffer(); + visualizationLutBuffer = resources.visualizationLookupTable.CreateBuffer(true); + InitComputeShader(resources); + AllocFragmentSizeBuffer(); + } + + void DisposeResources() + { + conversionLutBuffer?.Dispose(); + conversionLutBuffer = null; + + visualizationLutBuffer?.Dispose(); + visualizationLutBuffer = null; + + validatedShadingRateFragmentSizeBuffer?.Dispose(); + validatedShadingRateFragmentSizeBuffer = null; + + m_VisualizationShader = null; + m_VisualizationMaterial = null; + } + + void AllocFragmentSizeBuffer() + { + // Get available shading rate fragment sizes; unsupported ones + // will be mapped to the closest supported one. + var fragmentSize = new uint[Vrs.shadingRateFragmentSizeCount]; + + var lastAvailableFragmentSize = ShadingRateFragmentSize.FragmentSize1x1; + uint fragmentSizeNativeValue = ShadingRateInfo.QueryNativeValue(lastAvailableFragmentSize); + + foreach (var availableFragmentSize in ShadingRateInfo.availableFragmentSizes) + { + Array.Fill(fragmentSize, + fragmentSizeNativeValue, + (int)lastAvailableFragmentSize, + availableFragmentSize - lastAvailableFragmentSize + 1); + + lastAvailableFragmentSize = availableFragmentSize; + fragmentSizeNativeValue = ShadingRateInfo.QueryNativeValue(lastAvailableFragmentSize); + } + + Array.Fill(fragmentSize, + fragmentSizeNativeValue, + (int)lastAvailableFragmentSize, + ShadingRateFragmentSize.FragmentSize4x4 - lastAvailableFragmentSize + 1); + + validatedShadingRateFragmentSizeBuffer = new GraphicsBuffer(GraphicsBuffer.Target.Structured, fragmentSize.Length, sizeof(uint)); + validatedShadingRateFragmentSizeBuffer.SetData(fragmentSize); + } + + void InitComputeShader(VrsRenderPipelineRuntimeResources resources) + { + // This Compute Shader resource is used for converting an RGB texture to an R8 SRI + // Don't initialize it if the device does not support image-based VRS + if (!ShadingRateInfo.supportsPerImageTile) + { + return; + } + + tileSize = ShadingRateInfo.imageTileSize; + var tileSizeOk = tileSize.x == tileSize.y && (tileSize.x == 8 || tileSize.x == 16 || tileSize.x == 32); + if (!tileSizeOk) + { + Debug.LogError($"VRS unsupported tile size: {tileSize.x}x{tileSize.y}."); + return; + } + + textureComputeShader = resources.textureComputeShader; + + // this keyword need only be set once + textureComputeShader.EnableKeyword($"{VrsShaders.k_TileSizePrefix}{tileSize.x}"); + + textureReduceKernel = textureComputeShader.FindKernel(VrsShaders.k_KernelTextureReduce); + textureCopyKernel = textureComputeShader.FindKernel(VrsShaders.k_KernelTextureCopy); + } + } +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsResources.cs.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsResources.cs.meta new file mode 100644 index 00000000000..86967c09c94 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsResources.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 785d30f91e90dd2448cb87e5f026e49a \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsShaders.cs b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsShaders.cs new file mode 100644 index 00000000000..ae683d60c25 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsShaders.cs @@ -0,0 +1,24 @@ +namespace UnityEngine.Rendering +{ + static class VrsShaders + { + internal const string k_TileSizePrefix = "VRS_TILE_SIZE_"; + + internal const string k_DisableTexture2dXArray = "DISABLE_TEXTURE2D_X_ARRAY"; + internal const string k_YFlip = "APPLY_Y_FLIP"; + + internal static readonly int s_ScaleBias = Shader.PropertyToID("_VrsScaleBias"); + + internal static readonly int s_MainTex = Shader.PropertyToID("_VrsMainTex"); + internal static readonly int s_MainTexLut = Shader.PropertyToID("_VrsMainTexLut"); + + internal static readonly int s_ShadingRateNativeValues = Shader.PropertyToID("_ShadingRateNativeValues"); + internal static readonly int s_ShadingRateImage = Shader.PropertyToID("_ShadingRateImage"); + + internal const string k_KernelTextureCopy = "TextureCopy"; + internal const string k_KernelTextureReduce = "TextureReduce"; + + internal static readonly int s_VisualizationLut = Shader.PropertyToID("_VisualizationLut"); + internal static readonly int s_VisualizationParams = Shader.PropertyToID("_VisualizationParams"); + } +} diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsShaders.cs.meta b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsShaders.cs.meta new file mode 100644 index 00000000000..21b075a571f --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsShaders.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4ba9dce31226373439673a105ffbaef2 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RTHandleUtils.cs b/Packages/com.unity.render-pipelines.universal/Runtime/RTHandleUtils.cs index ce87321a59d..10785882b1b 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RTHandleUtils.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RTHandleUtils.cs @@ -26,7 +26,7 @@ internal class RTHandleResourcePool protected static int s_StaleResourceMaxCapacity = 32; /// - /// Controls the resource pool's max stale resource capacity. + /// Controls the resource pool's max stale resource capacity. /// Increasing the capacity may have a negative impact on the memory usage. /// Increasing the capacity may reduce the runtime RTHandle realloc cost in multi view/multi camera setup. /// Setting capacity will purge the current pool. It is recommended to setup the capacity upfront and not changing it during the runtime. @@ -83,7 +83,7 @@ internal bool TryGetResource(in TextureDesc texDesc, out RTHandle resource, bool return false; } - // Release all resources in pool. + // Release all resources in pool. internal void Cleanup() { foreach (var kvp in m_ResourcePool) @@ -198,6 +198,7 @@ internal static TextureDesc CreateTextureDesc(RenderTextureDescriptor desc, rgDesc.memoryless = RenderTextureMemoryless.None; rgDesc.vrUsage = VRTextureUsage.None; rgDesc.name = name; + rgDesc.enableShadingRate = desc.enableShadingRate; return rgDesc; } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/RenderingUtils.cs b/Packages/com.unity.render-pipelines.universal/Runtime/RenderingUtils.cs index 26e860de5c8..4fb15c0c4f5 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/RenderingUtils.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/RenderingUtils.cs @@ -5,6 +5,7 @@ using UnityEngine.Experimental.Rendering; using UnityEngine.Rendering.RenderGraphModule; using System.Diagnostics; +using System.Runtime.CompilerServices; namespace UnityEngine.Rendering.Universal { @@ -436,8 +437,8 @@ public static bool SupportsRenderTextureFormat(RenderTextureFormat format) [Obsolete("Use SystemInfo.IsFormatSupported instead.", false)] public static bool SupportsGraphicsFormat(GraphicsFormat format, FormatUsage usage) { - GraphicsFormatUsage graphicsFormatUsage = (GraphicsFormatUsage)(1 << (int)usage); - return SystemInfo.IsFormatSupported(format, graphicsFormatUsage); + GraphicsFormatUsage graphicsFormatUsage = (GraphicsFormatUsage)(1 << (int)usage); + return SystemInfo.IsFormatSupported(format, graphicsFormatUsage); } /// @@ -602,11 +603,6 @@ internal static bool MultisampleDepthResolveSupported() /// /// RTHandle to check (can be null) /// Descriptor for the RTHandle to match - /// Filtering mode of the RTHandle. - /// Addressing mode of the RTHandle. - /// Anisotropic filtering level. - /// Bias applied to mipmaps during filtering. - /// Name of the RTHandle. /// Check if the RTHandle has auto scaling enabled if not, check the widths and heights /// internal static bool RTHandleNeedsReAlloc( @@ -620,18 +616,25 @@ internal static bool RTHandleNeedsReAlloc( return true; if (!scaled && (handle.rt.width != descriptor.width || handle.rt.height != descriptor.height)) return true; + if (handle.rt.enableShadingRate && handle.rt.graphicsFormat != descriptor.colorFormat) + return true; var rtHandleFormat = (handle.rt.descriptor.depthStencilFormat != GraphicsFormat.None) ? handle.rt.descriptor.depthStencilFormat : handle.rt.descriptor.graphicsFormat; + var isShadowMap = handle.rt.descriptor.shadowSamplingMode != ShadowSamplingMode.None; return rtHandleFormat != descriptor.format || handle.rt.descriptor.dimension != descriptor.dimension || + handle.rt.descriptor.volumeDepth != descriptor.slices || handle.rt.descriptor.enableRandomWrite != descriptor.enableRandomWrite || + handle.rt.descriptor.enableShadingRate != descriptor.enableShadingRate || handle.rt.descriptor.useMipMap != descriptor.useMipMap || handle.rt.descriptor.autoGenerateMips != descriptor.autoGenerateMips || + isShadowMap != descriptor.isShadowMap || (MSAASamples)handle.rt.descriptor.msaaSamples != descriptor.msaaSamples || handle.rt.descriptor.bindMS != descriptor.bindTextureMS || handle.rt.descriptor.useDynamicScale != descriptor.useDynamicScale || + handle.rt.descriptor.useDynamicScaleExplicit != descriptor.useDynamicScaleExplicit || handle.rt.descriptor.memoryless != descriptor.memoryless || handle.rt.filterMode != descriptor.filterMode || handle.rt.wrapMode != descriptor.wrapMode || @@ -847,28 +850,7 @@ public static bool ReAllocateHandleIfNeeded( return true; } - var actualFormat = descriptor.graphicsFormat != GraphicsFormat.None ? descriptor.graphicsFormat : descriptor.depthStencilFormat; - - RTHandleAllocInfo allocInfo = new RTHandleAllocInfo(); - allocInfo.slices = descriptor.volumeDepth; - allocInfo.format = actualFormat; - allocInfo.filterMode = filterMode; - allocInfo.wrapModeU = wrapMode; - allocInfo.wrapModeV = wrapMode; - allocInfo.wrapModeW = wrapMode; - allocInfo.dimension = descriptor.dimension; - allocInfo.enableRandomWrite = descriptor.enableRandomWrite; - allocInfo.useMipMap = descriptor.useMipMap; - allocInfo.autoGenerateMips = descriptor.autoGenerateMips; - allocInfo.anisoLevel = anisoLevel; - allocInfo.mipMapBias = mipMapBias; - allocInfo.msaaSamples = (MSAASamples)descriptor.msaaSamples; - allocInfo.bindTextureMS = descriptor.bindMS; - allocInfo.useDynamicScale = descriptor.useDynamicScale; - allocInfo.memoryless = descriptor.memoryless; - allocInfo.vrUsage = descriptor.vrUsage; - allocInfo.name = name; - + var allocInfo = CreateRTHandleAllocInfo(descriptor, filterMode, wrapMode, anisoLevel, mipMapBias, name); handle = RTHandles.Alloc(descriptor.width, descriptor.height, allocInfo); return true; } @@ -912,28 +894,7 @@ public static bool ReAllocateHandleIfNeeded( return true; } - var actualFormat = descriptor.graphicsFormat != GraphicsFormat.None ? descriptor.graphicsFormat : descriptor.depthStencilFormat; - - RTHandleAllocInfo allocInfo = new RTHandleAllocInfo(); - allocInfo.slices = descriptor.volumeDepth; - allocInfo.format = actualFormat; - allocInfo.filterMode = filterMode; - allocInfo.wrapModeU = wrapMode; - allocInfo.wrapModeV = wrapMode; - allocInfo.wrapModeW = wrapMode; - allocInfo.dimension = descriptor.dimension; - allocInfo.enableRandomWrite = descriptor.enableRandomWrite; - allocInfo.useMipMap = descriptor.useMipMap; - allocInfo.autoGenerateMips = descriptor.autoGenerateMips; - allocInfo.anisoLevel = anisoLevel; - allocInfo.mipMapBias = mipMapBias; - allocInfo.msaaSamples = (MSAASamples)descriptor.msaaSamples; - allocInfo.bindTextureMS = descriptor.bindMS; - allocInfo.useDynamicScale = descriptor.useDynamicScale; - allocInfo.memoryless = descriptor.memoryless; - allocInfo.vrUsage = descriptor.vrUsage; - allocInfo.name = name; - + var allocInfo = CreateRTHandleAllocInfo(descriptor, filterMode, wrapMode, anisoLevel, mipMapBias, name); handle = RTHandles.Alloc(scaleFactor, allocInfo); return true; } @@ -977,28 +938,7 @@ public static bool ReAllocateHandleIfNeeded( return true; } - var actualFormat = descriptor.graphicsFormat != GraphicsFormat.None ? descriptor.graphicsFormat : descriptor.depthStencilFormat; - - RTHandleAllocInfo allocInfo = new RTHandleAllocInfo(); - allocInfo.slices = descriptor.volumeDepth; - allocInfo.format = actualFormat; - allocInfo.filterMode = filterMode; - allocInfo.wrapModeU = wrapMode; - allocInfo.wrapModeV = wrapMode; - allocInfo.wrapModeW = wrapMode; - allocInfo.dimension = descriptor.dimension; - allocInfo.enableRandomWrite = descriptor.enableRandomWrite; - allocInfo.useMipMap = descriptor.useMipMap; - allocInfo.autoGenerateMips = descriptor.autoGenerateMips; - allocInfo.anisoLevel = anisoLevel; - allocInfo.mipMapBias = mipMapBias; - allocInfo.msaaSamples = (MSAASamples)descriptor.msaaSamples; - allocInfo.bindTextureMS = descriptor.bindMS; - allocInfo.useDynamicScale = descriptor.useDynamicScale; - allocInfo.memoryless = descriptor.memoryless; - allocInfo.vrUsage = descriptor.vrUsage; - allocInfo.name = name; - + var allocInfo = CreateRTHandleAllocInfo(descriptor, filterMode, wrapMode, anisoLevel, mipMapBias, name); handle = RTHandles.Alloc(scaleFunc, allocInfo); return true; } @@ -1138,5 +1078,38 @@ internal static Vector4 GetFinalBlitScaleBias(RTHandle source, RTHandle destinat return scaleBias; } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + internal static RTHandleAllocInfo CreateRTHandleAllocInfo(in RenderTextureDescriptor descriptor, FilterMode filterMode, TextureWrapMode wrapMode, int anisoLevel, float mipMapBias, string name) + { + var actualFormat = descriptor.graphicsFormat != GraphicsFormat.None ? descriptor.graphicsFormat : descriptor.depthStencilFormat; + + // NOTE: this calls default(RTHandleAllocInfo) not RTHandleAllocInfo(string = "") + RTHandleAllocInfo allocInfo = new RTHandleAllocInfo(); + allocInfo.slices = descriptor.volumeDepth; + allocInfo.format = actualFormat; + allocInfo.filterMode = filterMode; + allocInfo.wrapModeU = wrapMode; + allocInfo.wrapModeV = wrapMode; + allocInfo.wrapModeW = wrapMode; + allocInfo.dimension = descriptor.dimension; + allocInfo.enableRandomWrite = descriptor.enableRandomWrite; + allocInfo.enableShadingRate = descriptor.enableShadingRate; + allocInfo.useMipMap = descriptor.useMipMap; + allocInfo.autoGenerateMips = descriptor.autoGenerateMips; + allocInfo.anisoLevel = anisoLevel; + allocInfo.mipMapBias = mipMapBias; + allocInfo.isShadowMap = descriptor.shadowSamplingMode != ShadowSamplingMode.None; + allocInfo.msaaSamples = (MSAASamples)descriptor.msaaSamples; + allocInfo.bindTextureMS = descriptor.bindMS; + allocInfo.useDynamicScale = descriptor.useDynamicScale; + allocInfo.useDynamicScaleExplicit = descriptor.useDynamicScaleExplicit; + allocInfo.memoryless = descriptor.memoryless; + allocInfo.vrUsage = descriptor.vrUsage; + allocInfo.enableShadingRate = descriptor.enableShadingRate; + allocInfo.name = name; + + return allocInfo; + } } } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs index 331ec21d34e..a7aacf27919 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs @@ -300,11 +300,16 @@ public UniversalRenderPipeline(UniversalRenderPipelineAsset asset) #pragma warning restore 618 }); } + + // Initializes only if VRS is supported. + Vrs.InitializeResources(); } /// protected override void Dispose(bool disposing) { + Vrs.DisposeResources(); + if (apvIsEnabled) { ProbeReferenceVolume.instance.Cleanup(); @@ -437,7 +442,7 @@ protected override void Render(ScriptableRenderContext renderContext, Camera[] c #endif // For XR, HDR and no camera cases, UI Overlay ownership must be enforced AdjustUIOverlayOwnership(cameraCount); - + // Bandwidth optimization with Render Graph in some circumstances SetupScreenMSAASamplesState(cameraCount); diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs index 877bb5a30eb..7cee7e234e0 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs @@ -245,6 +245,7 @@ public static TextureHandle CreateRenderGraphTexture(RenderGraph renderGraph, Re rgDesc.wrapMode = wrapMode; rgDesc.isShadowMap = desc.shadowSamplingMode != ShadowSamplingMode.None && desc.depthStencilFormat != GraphicsFormat.None; rgDesc.vrUsage = desc.vrUsage; + rgDesc.enableShadingRate = desc.enableShadingRate; rgDesc.useDynamicScale = desc.useDynamicScale; rgDesc.useDynamicScaleExplicit = desc.useDynamicScaleExplicit; @@ -266,6 +267,7 @@ internal static TextureHandle CreateRenderGraphTexture(RenderGraph renderGraph, rgDesc.enableRandomWrite = desc.enableRandomWrite; rgDesc.filterMode = filterMode; rgDesc.wrapMode = wrapMode; + rgDesc.enableShadingRate = desc.enableShadingRate; rgDesc.useDynamicScale = desc.useDynamicScale; rgDesc.useDynamicScaleExplicit = desc.useDynamicScaleExplicit; diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/URPAssets/DefaultURPAsset.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/URPAssets/DefaultURPAsset.asset index ad57d55a3eb..da052f9a614 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/URPAssets/DefaultURPAsset.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/CommonAssets/URPAssets/DefaultURPAsset.asset @@ -56,6 +56,7 @@ MonoBehaviour: - {fileID: 11400000, guid: d69b98d34e911c549bca5db83137eb7f, type: 2} - {fileID: 11400000, guid: 89054f48c57da7c479fee17c7a703635, type: 2} - {fileID: 11400000, guid: 030c8301f2c12b94fa730f3f402b803e, type: 2} + - {fileID: 11400000, guid: 07cb18bb06b5e43c09f9c046804bde0d, type: 2} m_DefaultRendererIndex: 0 m_RequireDepthTexture: 1 m_RequireOpaqueTexture: 1 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS.meta new file mode 100644 index 00000000000..d87ef5fb6d6 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab2f81ce8c9bb44c2b6350ce735f191b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/UVGrid.mat b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/UVGrid.mat new file mode 100644 index 00000000000..649734126e2 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/UVGrid.mat @@ -0,0 +1,137 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2951255294177346103 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 9 +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: UVGrid + m_Shader: {fileID: 4800000, guid: bbccf65ecbc70eb408397fb11d406a67, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 9cfc8cf0e2eb64c2fab669f84752a8ea, type: 3} + m_Scale: {x: 1.6, y: 0.9} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 9cfc8cf0e2eb64c2fab669f84752a8ea, type: 3} + m_Scale: {x: 1.6, y: 0.9} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BlendOp: 0 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _SampleGI: 0 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/UVGrid.mat.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/UVGrid.mat.meta new file mode 100644 index 00000000000..0f69e7a6242 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/UVGrid.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0475450631f1e4472b4c129b0cc7806a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Debug_RendererFeature.cs b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Debug_RendererFeature.cs new file mode 100644 index 00000000000..499fa1af631 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Debug_RendererFeature.cs @@ -0,0 +1,117 @@ +using UnityEngine; +using UnityEngine.Experimental.Rendering; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using UnityEngine.Rendering.RenderGraphModule; + +public class VRS_Debug_RendererFeature : ScriptableRendererFeature +{ + public RenderPassEvent renderPassEvent = RenderPassEvent.AfterRendering; + public int renderPassEventOffset = 0; + public bool enabled = true; + public float debugDisplaySize = 0.25f; + + class VRS_Debug_CustomRenderPass : ScriptableRenderPass + { + internal bool enabled; + internal float debugDisplaySize; + + public VRS_Debug_CustomRenderPass() + { + profilingSampler = new ProfilingSampler("VRS_Debug_CustomRenderPass"); + } + + // This class stores the data needed by the RenderGraph pass. + // It is passed as a parameter to the delegate function that executes the RenderGraph pass. + private class PassData + { + public TextureHandle srDebugColorTextureHandle; + public Rect dstRect; + } + + // RecordRenderGraph is where the RenderGraph handle can be accessed, through which render passes can be added to the graph. + // FrameData is a context container through which URP resources can be accessed and managed. + public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData) + { + const string passName = "VRS Debug Pass"; + + UniversalCameraData cameraData = frameData.Get(); + + if (!enabled) + return; + + if (cameraData.historyManager == null) + return; + + VRSHistory vrsHistory = cameraData.historyManager.GetHistoryForRead(); + if (vrsHistory == null) + return; + + var sriTextureRTHandle = vrsHistory.GetSRITexture(); + if (sriTextureRTHandle.rt == null) + return; + + // Convert + var sriTextureHandle = vrsHistory.importedSRITextureHandle; + Debug.Assert(sriTextureHandle.IsValid(), "Debug imported sri is not valid."); + + var colorDesc = cameraData.cameraTargetDescriptor; + colorDesc.graphicsFormat = GraphicsFormat.B8G8R8A8_UNorm; + colorDesc.autoGenerateMips = false; + colorDesc.msaaSamples = 1; + colorDesc.depthBufferBits = 0; + colorDesc.depthStencilFormat = GraphicsFormat.None; + colorDesc.enableRandomWrite = true; + var srDebugColorTextureHandle = UniversalRenderer.CreateRenderGraphTexture(renderGraph, colorDesc, "Shading Rate Debug Color Texture", false); + + Vrs.ShadingRateImageToColorMaskTexture(renderGraph, sriTextureHandle, srDebugColorTextureHandle); + + // Blit to screen + using (var builder = renderGraph.AddRasterRenderPass(passName, out var passData, profilingSampler)) + { + passData.srDebugColorTextureHandle = srDebugColorTextureHandle; + + float dstScale = 1.0f / Mathf.Max(debugDisplaySize, 0.01f); + int dstWidth = (int)(cameraData.cameraTargetDescriptor.width / dstScale + 0.5f); + int dstHeight = (int)(cameraData.cameraTargetDescriptor.height / dstScale + 0.5f); + passData.dstRect = new Rect(cameraData.cameraTargetDescriptor.width - dstWidth, + cameraData.cameraTargetDescriptor.height - dstHeight, + dstWidth, dstHeight); + + UniversalResourceData resourceData = frameData.Get(); + + builder.SetRenderAttachment(resourceData.activeColorTexture, 0, AccessFlags.Write); + builder.SetRenderAttachmentDepth(resourceData.activeDepthTexture, AccessFlags.Write); + + builder.UseTexture(passData.srDebugColorTextureHandle); + + builder.AllowPassCulling(false); + builder.SetRenderFunc(static (PassData passData, RasterGraphContext context) => + { + context.cmd.SetViewport(passData.dstRect); + Blitter.BlitTexture(context.cmd, passData.srDebugColorTextureHandle, new Vector4(1,1,0,0), 0.0f, false); + }); + } + } + } + + VRS_Debug_CustomRenderPass m_ScriptablePass; + + /// + public override void Create() + { + m_ScriptablePass = new VRS_Debug_CustomRenderPass(); + m_ScriptablePass.renderPassEvent = renderPassEvent + renderPassEventOffset; + m_ScriptablePass.enabled = enabled; + m_ScriptablePass.debugDisplaySize = debugDisplaySize; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + renderer.EnqueuePass(m_ScriptablePass); + } + + protected override void Dispose(bool disposing) + { + } +} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Debug_RendererFeature.cs.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Debug_RendererFeature.cs.meta new file mode 100644 index 00000000000..94d577046bf --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Debug_RendererFeature.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 778243a42a744081a4eb9f660d4e5665 +timeCreated: 1730380921 \ No newline at end of file diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Draw_RendererFeature.cs b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Draw_RendererFeature.cs new file mode 100644 index 00000000000..c7ac1ab1183 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Draw_RendererFeature.cs @@ -0,0 +1,146 @@ +using System.Collections.Generic; +using Unity.Collections; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using UnityEngine.Rendering.RenderGraphModule; + +public class VRS_Draw_RendererFeature : ScriptableRendererFeature +{ + public RenderPassEvent renderPassEvent; + public int renderPassEventOffset = 1; + + class VRS_Draw_CustomRenderPass : ScriptableRenderPass + { + + public VRS_Draw_CustomRenderPass() + { + profilingSampler = new ProfilingSampler("VRS_Draw_CustomRenderPass"); + } + + private class PassData + { + public RendererList rendererList; + public RendererListHandle rendererListHandle; + } + + static List s_ShaderTagIdList = new List() + { + new ShaderTagId("VRS") + }; + private void InitRendererLists(UniversalCameraData cameraData, UniversalRenderingData renderingData, UniversalLightData lightData, + RenderGraph renderGraph, ref PassData passData) + { + SortingCriteria sortingCriteria = cameraData.defaultOpaqueSortFlags; + DrawingSettings drawingSettings = RenderingUtils.CreateDrawingSettings(s_ShaderTagIdList, renderingData, + cameraData, lightData, sortingCriteria); + + //int layerMask = 1 << 1; + FilteringSettings filteringSettings = new FilteringSettings(RenderQueueRange.opaque, ~0, uint.MaxValue, 0); + RenderStateBlock renderStateBlock = new RenderStateBlock(RenderStateMask.Nothing); + + NativeArray tagValues = new NativeArray(1, Allocator.Temp); + NativeArray stateBlocks = new NativeArray(1, Allocator.Temp); + tagValues[0] = ShaderTagId.none; + stateBlocks[0] = renderStateBlock; + var param = new RendererListParams(renderingData.cullResults, drawingSettings, filteringSettings) + { + tagValues = tagValues, + stateBlocks = stateBlocks, + isPassTagName = false + }; + passData.rendererListHandle = renderGraph.CreateRendererList(param); + } + + public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData) + { + const string passName = "VRS Render Custom Pass"; + + UniversalCameraData cameraData = frameData.Get(); + + if (cameraData.historyManager == null) + return; + + VRSHistory vrsHistory = cameraData.historyManager.GetHistoryForRead(); + if (vrsHistory == null) + return; + + var sriTextureRTHandle = vrsHistory.GetSRITexture(); + if (sriTextureRTHandle.rt == null) + return; + + // This adds a raster render pass to the graph, specifying the name and the data type that will be passed to the ExecutePass function. + using (var builder = renderGraph.AddRasterRenderPass(passName, out var passData, profilingSampler)) + { + + UniversalResourceData resourceData = frameData.Get(); + + builder.SetRenderAttachment(resourceData.activeColorTexture, 0, AccessFlags.Write); + builder.SetRenderAttachmentDepth(resourceData.activeDepthTexture, AccessFlags.Write); + + UniversalRenderingData renderingData = frameData.Get(); + UniversalLightData lightData = frameData.Get(); + + InitRendererLists(cameraData, renderingData, lightData, renderGraph, ref passData); + builder.UseRendererList(passData.rendererListHandle); + + builder.AllowGlobalStateModification(true); + + var sriTextureHandle = vrsHistory.importedSRITextureHandle; + Debug.Assert(sriTextureHandle.IsValid(), "Draws imported sri is not valid."); + //var sriTextureHandle = renderGraph.ImportTexture(sriTextureRTHandle); + + if (sriTextureHandle.IsValid()) + { + builder.SetShadingRateImageAttachment(sriTextureHandle); + builder.SetShadingRateCombiner(ShadingRateCombinerStage.Fragment, ShadingRateCombiner.Override); + } + + // Assigns the ExecutePass function to the render pass delegate. This will be called by the render graph when executing the pass. + builder.SetRenderFunc((PassData data, RasterGraphContext context) => ExecutePass(data, context)); + } + } + + // This static method is passed as the RenderFunc delegate to the RenderGraph render pass. + // It is used to execute draw commands. + static void ExecutePass(PassData data, RasterGraphContext context) + { + context.cmd.DrawRendererList(data.rendererListHandle); + } + } + + VRS_Draw_CustomRenderPass m_ScriptablePass; + + /// + public override void Create() + { + m_ScriptablePass = new VRS_Draw_CustomRenderPass(); + m_ScriptablePass.renderPassEvent = renderPassEvent + renderPassEventOffset; + } + + // Here you can inject one or multiple render passes in the renderer. + // This method is called when setting up the renderer once per-camera. + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + /*if (!GetMaterials()) + { + Debug.LogErrorFormat("{0}.AddRenderPasses(): Missing material. {1} render pass will not be added.", GetType().Name, name); + return; + } + + m_ScriptablePass.m_Material = m_Material;*/ + renderer.EnqueuePass(m_ScriptablePass); + } + + protected override void Dispose(bool disposing) + { + //CoreUtils.Destroy(m_Material); + } + + /*private bool GetMaterials() + { + if (m_Material == null && vrsShader != null) + m_Material = CoreUtils.CreateEngineMaterial(vrsShader); + return m_Material != null; + }*/ +} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Draw_RendererFeature.cs.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Draw_RendererFeature.cs.meta new file mode 100644 index 00000000000..0ca2ea6dc4e --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Draw_RendererFeature.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e50d3ac7fbb9d445082094a5da28ab17 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Renderer.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Renderer.asset new file mode 100644 index 00000000000..b23f02cab65 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Renderer.asset @@ -0,0 +1,104 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2182280758962237389 +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: 91a4d499ab31542e59fcf462dadc35ba, type: 3} + m_Name: VRS_Texture_RendererFeature + m_EditorClassIdentifier: + m_Active: 1 + renderPassEvent: 250 +--- !u!114 &-760100398193953853 +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: e50d3ac7fbb9d445082094a5da28ab17, type: 3} + m_Name: VRS_Draw_RendererFeature + m_EditorClassIdentifier: + m_Active: 1 + renderPassEvent: 250 + renderPassEventOffset: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: de640fe3d0db1804a85f9fc8f5cadab6, type: 3} + m_Name: VRS_Renderer + m_EditorClassIdentifier: + debugShaders: + debugReplacementPS: {fileID: 4800000, guid: cf852408f2e174538bcd9b7fda1c5ae7, + type: 3} + hdrDebugViewPS: {fileID: 4800000, guid: 573620ae32aec764abd4d728906d2587, type: 3} + probeVolumeSamplingDebugComputeShader: {fileID: 7200000, guid: 53626a513ea68ce47b59dc1299fe3959, + type: 3} + probeVolumeResources: + probeVolumeDebugShader: {fileID: 0} + probeVolumeFragmentationDebugShader: {fileID: 0} + probeVolumeOffsetDebugShader: {fileID: 0} + probeVolumeSamplingDebugShader: {fileID: 0} + probeSamplingDebugMesh: {fileID: 0} + probeSamplingDebugTexture: {fileID: 0} + probeVolumeBlendStatesCS: {fileID: 0} + m_RendererFeatures: + - {fileID: -2182280758962237389} + - {fileID: -760100398193953853} + - {fileID: 1660707092362020768} + m_RendererFeatureMap: 33d0e24136fbb6e1c333040cb79473f5a0c7353c4d040c17 + m_UseNativeRenderPass: 0 + xrSystemData: {fileID: 0} + postProcessData: {fileID: 0} + m_AssetVersion: 2 + m_OpaqueLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_TransparentLayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_DefaultStencilState: + overrideStencilState: 0 + stencilReference: 0 + stencilCompareFunction: 8 + passOperation: 2 + failOperation: 0 + zFailOperation: 0 + m_ShadowTransparentReceive: 1 + m_RenderingMode: 0 + m_DepthPrimingMode: 0 + m_CopyDepthMode: 1 + m_DepthAttachmentFormat: 0 + m_DepthTextureFormat: 0 + m_AccurateGbufferNormals: 0 + m_IntermediateTextureMode: 1 +--- !u!114 &1660707092362020768 +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: 778243a42a744081a4eb9f660d4e5665, type: 3} + m_Name: VRS_Debug_RendererFeature + m_EditorClassIdentifier: + m_Active: 1 + renderPassEvent: 1000 + renderPassEventOffset: 0 + enabled: 1 + debugDisplaySize: 0.25 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Renderer.asset.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Renderer.asset.meta new file mode 100644 index 00000000000..bc90bfbcab0 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Renderer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07cb18bb06b5e43c09f9c046804bde0d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Texture_RendererFeature.cs b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Texture_RendererFeature.cs new file mode 100644 index 00000000000..ba06cd8a525 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Texture_RendererFeature.cs @@ -0,0 +1,205 @@ +using UnityEngine; +using UnityEngine.Rendering; +using UnityEngine.Rendering.Universal; +using UnityEngine.Rendering.RenderGraphModule; +using UnityEngine.Experimental.Rendering; + +public class VRS_Texture_RendererFeature : ScriptableRendererFeature +{ + public RenderPassEvent renderPassEvent; + + class VRS_Texture_CustomRenderPass : ScriptableRenderPass + { + public VRS_Texture_CustomRenderPass() + { + profilingSampler = new ProfilingSampler("VRS_Texture_RendererFeature"); + } + + private class PassData + { + public VRSHistory vrsHistory; + } + + public override void RecordRenderGraph(RenderGraph renderGraph, ContextContainer frameData) + { + //const string passName = "Create VRS texture"; + + if (!ShadingRateInfo.supportsPerImageTile) return; + + UniversalResourceData resourceData = frameData.Get(); + UniversalCameraData cameraData = frameData.Get(); + + if (cameraData.historyManager == null) + return; + + cameraData.historyManager.RequestAccess(); + + VRSHistory vrsHistory = cameraData.historyManager.GetHistoryForWrite(); + if (vrsHistory == null) + return; + + vrsHistory.Update(ref cameraData.cameraTargetDescriptor); + + TextureHandle sriTextureHandle = renderGraph.ImportShadingRateImageTexture(vrsHistory.GetSRITexture()); + TextureHandle sriColorMask = renderGraph.ImportTexture(vrsHistory.GetSRIColorMask()); + + Vrs.ColorMaskTextureToShadingRateImage(renderGraph, sriTextureHandle, sriColorMask, TextureDimension.Tex2D, true); + + vrsHistory.importedSRITextureHandle = sriTextureHandle; + Debug.Assert(sriTextureHandle.IsValid(), "Create imported sri is not valid."); + } + } + + VRS_Texture_CustomRenderPass m_ScriptablePass; + + /// + public override void Create() + { + m_ScriptablePass = new VRS_Texture_CustomRenderPass(); + m_ScriptablePass.renderPassEvent = renderPassEvent; + } + + public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) + { + renderer.EnqueuePass(m_ScriptablePass); + } +} + +public class VRSHistory : CameraHistoryItem +{ + private int m_Id_SRIHandle; + private RTHandle m_SRIColorMask; + private RenderTextureDescriptor m_Descriptor; + private Hash128 m_DescKey; + + /// + /// Called internally on instance creation. + /// Sets up RTHandle ids. + /// + public override void OnCreate(BufferedRTHandleSystem owner, uint typeId) + { + base.OnCreate(owner, typeId); + m_Id_SRIHandle = MakeId(0); + } + + public RTHandle GetSRITexture() + { + return GetCurrentFrameRT(m_Id_SRIHandle); + } + + public RTHandle GetSRIColorMask() + { + return m_SRIColorMask; + } + + public TextureHandle importedSRITextureHandle + { + get;set; + } + + internal bool IsAllocated() + { + return GetSRITexture() != null; + } + + // True if the desc changed, graphicsFormat etc. + internal bool IsDirty(ref RenderTextureDescriptor desc) + { + return m_DescKey != Hash128.Compute(ref desc); + } + + RTHandle GenerateVRSColorMask(int width, int height) + { + uint Pack(Color32 c) + { + return (uint)(c.a << 24 | c.b << 16 | c.g << 8 | c.r); + } + + var vrsLut = VrsLut.CreateDefault(); + uint c1 = Pack(vrsLut[ShadingRateFragmentSize.FragmentSize1x1]); + uint c2 = Pack(vrsLut[ShadingRateFragmentSize.FragmentSize2x2]); + uint c4 = Pack(vrsLut[ShadingRateFragmentSize.FragmentSize4x4]); + + Texture2D CPUColorMask = new Texture2D(width, height, GraphicsFormat.R8G8B8A8_UNorm, + TextureCreationFlags.DontInitializePixels | TextureCreationFlags.DontUploadUponCreate); + var pixels = new uint[width * height]; + for(uint y = 0; y < height; y++) + { + for(uint x = 0; x < width; x++) + { + uint color = c1; + if (x <= y) + { + color = c4; + } + else if (x <= y + height) + { + color = c2; + } + + pixels[y * width + x] = color; + } + } + + CPUColorMask.SetPixelData(pixels, 0, 0); + CPUColorMask.Apply(false); + + return RTHandles.Alloc(CPUColorMask); + } + + private void Alloc(ref RenderTextureDescriptor desc) + { + Debug.Log("Allocating VRS history texture"); + + AllocHistoryFrameRT(m_Id_SRIHandle, 1, ref desc, FilterMode.Point, "SRITexture"); + + m_SRIColorMask = GenerateVRSColorMask(desc.width, desc.height); + + m_Descriptor = desc; + m_DescKey = Hash128.Compute(ref desc); + } + + /// + /// Release the history texture(s). + /// + public override void Reset() + { + Debug.Log("Release VRS history texture"); + ReleaseHistoryFrameRT(m_Id_SRIHandle); + m_SRIColorMask?.Release(); + } + + RenderTextureDescriptor GetVrsDesc(ref RenderTextureDescriptor cameraDesc) + { + var tileSize = ShadingRateImage.GetAllocTileSize(cameraDesc.width, cameraDesc.height); + RenderTextureDescriptor textureProperties = new RenderTextureDescriptor(tileSize.x, tileSize.y, GraphicsFormat.R8_UInt, 0); + textureProperties.enableRandomWrite = true; + textureProperties.enableShadingRate = true; + textureProperties.autoGenerateMips = false; + return textureProperties; + } + + // Return true if the RTHandles were reallocated. + internal bool Update(ref RenderTextureDescriptor cameraDesc) + { + if (cameraDesc.width > 0 && cameraDesc.height > 0 && cameraDesc.graphicsFormat != GraphicsFormat.None) + { + var vrsDesc = GetVrsDesc(ref cameraDesc); + + if (IsDirty(ref vrsDesc)) + Reset(); + + if (!IsAllocated()) + { + Alloc(ref vrsDesc); + return true; + } + } + + // Import is from the previous frame. Imports are not persistent. Clear it. + importedSRITextureHandle = TextureHandle.nullHandle; + + return false; + } +} + diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Texture_RendererFeature.cs.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Texture_RendererFeature.cs.meta new file mode 100644 index 00000000000..9109f75fa5f --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Texture_RendererFeature.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 91a4d499ab31542e59fcf462dadc35ba \ No newline at end of file diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Unlit.shader b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Unlit.shader new file mode 100644 index 00000000000..807fd07ef18 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Unlit.shader @@ -0,0 +1,305 @@ +Shader "Universal Render Pipeline/VRS_Unlit" +{ + Properties + { + [MainTexture] _BaseMap("Texture", 2D) = "white" {} + [MainColor] _BaseColor("Color", Color) = (1, 1, 1, 1) + _Cutoff("AlphaCutout", Range(0.0, 1.0)) = 0.5 + + // BlendMode + _Surface("__surface", Float) = 0.0 + _Blend("__mode", Float) = 0.0 + _Cull("__cull", Float) = 2.0 + [ToggleUI] _AlphaClip("__clip", Float) = 0.0 + [HideInInspector] _BlendOp("__blendop", Float) = 0.0 + [HideInInspector] _SrcBlend("__src", Float) = 1.0 + [HideInInspector] _DstBlend("__dst", Float) = 0.0 + [HideInInspector] _SrcBlendAlpha("__srcA", Float) = 1.0 + [HideInInspector] _DstBlendAlpha("__dstA", Float) = 0.0 + [HideInInspector] _ZWrite("__zw", Float) = 1.0 + [HideInInspector] _AlphaToMask("__alphaToMask", Float) = 0.0 + [HideInInspector] _AddPrecomputedVelocity("_AddPrecomputedVelocity", Float) = 0.0 + + // Editmode props + _QueueOffset("Queue offset", Float) = 0.0 + + // ObsoleteProperties + [HideInInspector] _MainTex("BaseMap", 2D) = "white" {} + [HideInInspector] _Color("Base Color", Color) = (0.5, 0.5, 0.5, 1) + [HideInInspector] _SampleGI("SampleGI", float) = 0.0 // needed from bakedlit + } + + SubShader + { + Tags + { + "RenderType" = "Opaque" + "IgnoreProjector" = "True" + "UniversalMaterialType" = "Unlit" + "RenderPipeline" = "UniversalPipeline" + } + LOD 100 + + // ------------------------------------- + // Render State Commands + Blend [_SrcBlend][_DstBlend], [_SrcBlendAlpha][_DstBlendAlpha] + ZWrite [_ZWrite] + Cull [_Cull] + + Pass + { + Name "VRS_Unlit" + Tags + { + "LightMode" = "VRS" + } + + // ------------------------------------- + // Render State Commands + AlphaToMask[_AlphaToMask] + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex UnlitPassVertex + #pragma fragment UnlitPassFragment + + // ------------------------------------- + // Material Keywords + //#pragma shader_feature_local_fragment _SURFACE_TYPE_TRANSPARENT + //#pragma shader_feature_local_fragment _ALPHATEST_ON + //#pragma shader_feature_local_fragment _ALPHAMODULATE_ON + + // Note: Not needed for the test case. + // ------------------------------------- + // Unity defined keywords + //#pragma multi_compile_fog + //#pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION + //#pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + //#pragma multi_compile _ DEBUG_DISPLAY + //#pragma multi_compile _ LOD_FADE_CROSSFADE + //#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + //-------------------------------------- + // GPU Instancing + //#pragma multi_compile_instancing + //#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitForwardPass.hlsl" + ENDHLSL + } + + // Note: Not needed for the test case. + /* + // Fill GBuffer data to prevent "holes", just in case someone wants to reuse GBuffer for non-lighting effects. + // Deferred lighting is stenciled out. + Pass + { + Name "GBuffer" + Tags + { + "LightMode" = "UniversalGBuffer" + } + + HLSLPROGRAM + #pragma target 4.5 + + // Deferred Rendering Path does not support the OpenGL-based graphics API: + // Desktop OpenGL, OpenGL ES 3.0, WebGL 2.0. + #pragma exclude_renderers gles3 glcore + + // ------------------------------------- + // Shader Stages + #pragma vertex UnlitPassVertex + #pragma fragment UnlitPassFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local_fragment _ALPHATEST_ON + #pragma shader_feature_local_fragment _ALPHAMODULATE_ON + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION + #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitGBufferPass.hlsl" + ENDHLSL + } + + Pass + { + Name "DepthOnly" + Tags + { + "LightMode" = "DepthOnly" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + ColorMask R + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthOnlyVertex + #pragma fragment DepthOnlyFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ALPHATEST_ON + + // ------------------------------------- + // Unity defined keywords + #pragma multi_compile _ LOD_FADE_CROSSFADE + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/DepthOnlyPass.hlsl" + ENDHLSL + } + + Pass + { + Name "DepthNormalsOnly" + Tags + { + "LightMode" = "DepthNormalsOnly" + } + + // ------------------------------------- + // Render State Commands + ZWrite On + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex DepthNormalsVertex + #pragma fragment DepthNormalsFragment + + // ------------------------------------- + // Material Keywords + #pragma shader_feature_local _ALPHATEST_ON + + // ------------------------------------- + // Universal Pipeline keywords + #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT // forward-only variant + #pragma multi_compile _ LOD_FADE_CROSSFADE + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + + //-------------------------------------- + // GPU Instancing + #pragma multi_compile_instancing + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitDepthNormalsPass.hlsl" + ENDHLSL + } + + // This pass it not used during regular rendering, only for lightmap baking. + Pass + { + Name "Meta" + Tags + { + "LightMode" = "Meta" + } + + // ------------------------------------- + // Render State Commands + Cull Off + + HLSLPROGRAM + #pragma target 2.0 + + // ------------------------------------- + // Shader Stages + #pragma vertex UniversalVertexMeta + #pragma fragment UniversalFragmentMetaUnlit + + // ------------------------------------- + // Unity defined keywords + #pragma shader_feature EDITOR_VISUALIZATION + + // ------------------------------------- + // Includes + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitMetaPass.hlsl" + ENDHLSL + } + + Pass + { + Name "MotionVectors" + Tags { "LightMode" = "MotionVectors" } + ColorMask RG + + HLSLPROGRAM + #pragma shader_feature_local _ALPHATEST_ON + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma shader_feature_local_vertex _ADD_PRECOMPUTED_VELOCITY + + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ObjectMotionVectors.hlsl" + ENDHLSL + } + + Pass + { + Name "XRMotionVectors" + Tags { "LightMode" = "XRMotionVectors" } + ColorMask RGBA + + // Stencil write for obj motion pixels + Stencil + { + WriteMask 1 + Ref 1 + Comp Always + Pass Replace + } + + HLSLPROGRAM + #pragma shader_feature_local _ALPHATEST_ON + #pragma multi_compile _ LOD_FADE_CROSSFADE + #pragma shader_feature_local_vertex _ADD_PRECOMPUTED_VELOCITY + #define APLICATION_SPACE_WARP_MOTION 1 + #include "Packages/com.unity.render-pipelines.universal/Shaders/UnlitInput.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ObjectMotionVectors.hlsl" + ENDHLSL + }*/ + } + + FallBack "Hidden/Universal Render Pipeline/FallbackError" + CustomEditor "UnityEditor.Rendering.Universal.ShaderGUI.UnlitShader" +} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Unlit.shader.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Unlit.shader.meta new file mode 100644 index 00000000000..c982ddd1aeb --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Unlit.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: bbccf65ecbc70eb408397fb11d406a67 +timeCreated: 1496762173 +licenseType: Pro +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS_CustomPass.unity b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS_CustomPass.unity new file mode 100644 index 00000000000..f00baf668a5 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS_CustomPass.unity @@ -0,0 +1,769 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 0 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 112000002, guid: fd8f2c6386dc54f158818f3b4ce8a20d, + type: 2} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &380492249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 380492254} + - component: {fileID: 380492253} + - component: {fileID: 380492252} + - component: {fileID: 380492255} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &380492252 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380492249} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 73231aa468d81ea49bc3d914080de185, type: 3} + m_Name: + m_EditorClassIdentifier: + ImageComparisonSettings: + TargetWidth: 960 + TargetHeight: 540 + TargetMSAASamples: 1 + PerPixelCorrectnessThreshold: 0.005 + PerPixelGammaThreshold: 0.003921569 + PerPixelAlphaThreshold: 0.003921569 + RMSEThreshold: 0 + AverageCorrectnessThreshold: 0.0005 + IncorrectPixelsThreshold: 0.0000038146973 + UseHDR: 0 + UseBackBuffer: 0 + ImageResolution: 3 + ActiveImageTests: 1 + ActivePixelTests: -1 + WaitFrames: 0 + XRCompatible: 0 + gpuDrivenCompatible: 0 + CheckMemoryAllocation: 1 + renderBackendCompatibility: 0 + SetBackBufferResolution: 0 +--- !u!20 &380492253 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380492249} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 1} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 0 + m_AllowMSAA: 0 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &380492254 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380492249} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &380492255 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 380492249} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: 39 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 +--- !u!1 &677415232 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 677415236} + - component: {fileID: 677415235} + - component: {fileID: 677415234} + - component: {fileID: 677415233} + m_Layer: 1 + m_Name: Quad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!64 &677415233 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677415232} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &677415234 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677415232} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 0475450631f1e4472b4c129b0cc7806a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &677415235 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677415232} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &677415236 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677415232} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.8} + m_LocalScale: {x: 1.6, y: 0.9, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &707831285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 707831287} + - component: {fileID: 707831286} + - component: {fileID: 707831288} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &707831286 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 707831285} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &707831287 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 707831285} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &707831288 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 707831285} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 3 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_RenderingLayers: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_ShadowRenderingLayers: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 1 +--- !u!1 &1159751076 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1159751078} + - component: {fileID: 1159751077} + m_Layer: 0 + m_Name: Resolution setter + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1159751077 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159751076} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b7a791aa4ee448a7a269341301b2063, type: 3} + m_Name: + m_EditorClassIdentifier: + customResolutionSettings: {fileID: 11400000, guid: 73b21b64e959149e3a2168f1ef286e21, + type: 2} +--- !u!4 &1159751078 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159751076} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1282555821 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1282555825} + - component: {fileID: 1282555824} + - component: {fileID: 1282555823} + - component: {fileID: 1282555822} + m_Layer: 0 + m_Name: Sphere + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!135 &1282555822 +SphereCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1282555821} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Radius: 0.5 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1282555823 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1282555821} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 6602e4dc96b9e49e4b91b974a55eaaf0, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1282555824 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1282555821} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1282555825 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1282555821} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.45, z: 1.25} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1396913726 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1396913728} + - component: {fileID: 1396913727} + m_Layer: 0 + m_Name: SelectQualitySetting + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1396913727 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1396913726} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f1decc188d2f3146ab93291a5c743e9, type: 3} + m_Name: + m_EditorClassIdentifier: + qualityLevelIndex: 0 + callbacks: [] +--- !u!4 &1396913728 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1396913726} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.5195698, y: 1.3765798, z: 0.5559635} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &2119664221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2119664223} + - component: {fileID: 2119664222} + m_Layer: 0 + m_Name: GotoNextScene + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &2119664222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119664221} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2e07ca4ee44dcb6428799d0de0c6f1aa, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &2119664223 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2119664221} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1396913728} + - {fileID: 380492254} + - {fileID: 707831287} + - {fileID: 2119664223} + - {fileID: 1159751078} + - {fileID: 677415236} + - {fileID: 1282555825} diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS_CustomPass.unity.meta b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS_CustomPass.unity.meta new file mode 100644 index 00000000000..62fee482591 --- /dev/null +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS_CustomPass.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 017307890e4a741e8acc882ddae1555d +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset index efed1366796..702dac48119 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset @@ -1253,3 +1253,103 @@ MonoBehaviour: XrSdk: StereoModes: 0 Reason: https://jira.unity3d.com/browse/UUM-85648 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 2 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support DX11 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 11 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support GLES3 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 16 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support Metal + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 25 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support XSX + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 24 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support X1 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 26 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support PS5 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 13 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support PS4 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 22 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support Switch + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: 13 + GraphicsDevice: 21 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support Android Vk + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 017307890e4a741e8acc882ddae1555d, type: 3} + ColorSpace: -1 + BuildPlatform: -2 + GraphicsDevice: 27 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: No support PS5 diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/ProjectSettings/EditorBuildSettings.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/ProjectSettings/EditorBuildSettings.asset index 92f60cbb0e3..d73d66012c0 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/ProjectSettings/EditorBuildSettings.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/ProjectSettings/EditorBuildSettings.asset @@ -542,5 +542,8 @@ EditorBuildSettings: - enabled: 1 path: Assets/Scenes/327_DepthCopy_Deferred.unity guid: 8c107b50d24369d44a7830358e05422a + - enabled: 1 + path: Assets/Scenes/350_VRS_CustomPass.unity + guid: 017307890e4a741e8acc882ddae1555d m_configObjects: {} m_UseUCBPForAssetBundles: 0 From 119ae9045f70d6feb580b0dc5399d1bac1fdb072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20V=C3=A1zquez?= Date: Tue, 26 Nov 2024 01:32:37 +0000 Subject: [PATCH 70/85] [SRPF] Hide test shaders for stripping Test shaders were selectable to users. --- .../Tests/Editor/ShaderStripping/DummyPipelineShader.shader | 2 +- .../Tests/Editor/ShaderStripping/ShaderExtensionsTests.cs | 2 +- .../Tests/Editor/ShaderStripping/ShaderStrippingTests.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/DummyPipelineShader.shader b/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/DummyPipelineShader.shader index 610d7e26803..de0c09abbce 100644 --- a/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/DummyPipelineShader.shader +++ b/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/DummyPipelineShader.shader @@ -1,4 +1,4 @@ -Shader "DummyPipeline/VariantStrippingTestsShader" +Shader "Hidden/DummyPipeline/VariantStrippingTestsShader" { Properties { diff --git a/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/ShaderExtensionsTests.cs b/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/ShaderExtensionsTests.cs index 94232d91cbd..9a51708fd6f 100644 --- a/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/ShaderExtensionsTests.cs +++ b/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/ShaderExtensionsTests.cs @@ -10,7 +10,7 @@ class ShaderExtensionsTests new TestCaseData(Shader.Find("Hidden/Internal-Colored")) .SetName("Given a shader from Built-in, the render pipeline tag is not found and is empty") .Returns((false,string.Empty)), - new TestCaseData(Shader.Find("DummyPipeline/VariantStrippingTestsShader")) + new TestCaseData(Shader.Find("Hidden/DummyPipeline/VariantStrippingTestsShader")) .SetName("Given a shader with a render pipeline tag, the pipeline is found") .Returns((true, "DummyPipeline")) }; diff --git a/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/ShaderStrippingTests.cs b/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/ShaderStrippingTests.cs index 661061cefb3..9fe634e399c 100644 --- a/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/ShaderStrippingTests.cs +++ b/Packages/com.unity.render-pipelines.core/Tests/Editor/ShaderStripping/ShaderStrippingTests.cs @@ -130,7 +130,7 @@ public void TearDown() new TestCaseData(typeof(StripHalf), Shader.Find("Hidden/Internal-Colored"), 6) .SetName("Given a stripper that reduces the variants to the half, just half of the variants are stripped") .Returns(3), - new TestCaseData(typeof(StripNothing), Shader.Find("DummyPipeline/VariantStrippingTestsShader"), 2) + new TestCaseData(typeof(StripNothing), Shader.Find("Hidden/DummyPipeline/VariantStrippingTestsShader"), 2) .SetName("Given a shader that is not from the current pipeline, all the variants are stripped") .Returns(0), }; From 3fde05129b856b595dd8b03f22bf82e746ba889b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Carr=C3=A8re?= Date: Tue, 26 Nov 2024 01:32:52 +0000 Subject: [PATCH 71/85] docg-4247: Fix broken link Put the "Conversion types and converters" section be at the beginning of the instructions. https://jira.unity3d.com/browse/DOCG-4247 --- .../Documentation~/VisualEffectComponent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/VisualEffectComponent.md b/Packages/com.unity.visualeffectgraph/Documentation~/VisualEffectComponent.md index e16a63edb69..90f848e8ac4 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/VisualEffectComponent.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/VisualEffectComponent.md @@ -1,6 +1,6 @@ # Visual Effect (Component) -The Visual Effect Component creates an instance of a Visual Effect in the scene, based on a Visual Effect Graph Asset. It controls how the effect plays, renders and let the user customize the instance by editing [Exposed Properties](Blackboard.md#creating-properties). +The Visual Effect Component creates an instance of a Visual Effect in the scene, based on a Visual Effect Graph Asset. It controls how the effect plays, renders and let the user customize the instance by editing [Exposed Properties](Blackboard.md). ## How to create a Visual Effect From d244235c7084a36e3dcdbd5db9c93c991443339e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Carr=C3=A8re?= Date: Tue, 26 Nov 2024 01:33:16 +0000 Subject: [PATCH 72/85] docg-5758: Remove link to AOV Recorder Remove reference to deprecated AOV Recorder. https://jira.unity3d.com/browse/DOCG-5758 --- .../Documentation~/AOVs.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/AOVs.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/AOVs.md index 249b938a182..03d17c75033 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/AOVs.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/AOVs.md @@ -8,7 +8,7 @@ Here is an example of three AOVs, containing from left to right the Albedo, Norm In HDRP, you can access and configure AOVs in the following ways: - Using the [HDRP Compositor tool](graphics-compositor.md). -- Using the [Unity Recorder](https://docs.unity3d.com/Packages/com.unity.recorder@latest/index.html) and the [AOV Recorder](https://docs.unity3d.com/Packages/com.unity.aovrecorder@latest/index.html) packages. +- Using the [Unity Recorder](https://docs.unity3d.com/Packages/com.unity.recorder@latest/index.html) package. - Using the scripting API to set up a custom AOV request in any HDRP Camera in your Scene. The first two options offer a limited selection of AOVs in their User Interface, while the third option allows for much more flexibility on what data an HDRP Camera can output. From 8c2a6effd6694874c42609cee259c969d3933ea0 Mon Sep 17 00:00:00 2001 From: Sumin Cho Date: Tue, 26 Nov 2024 01:33:30 +0000 Subject: [PATCH 73/85] Leak Detected message appears in Play Mode with High-Definition 3D Template Project This PR reverts [PR 55951](https://github.cds.internal.unity3d.com/unity/unity/pull/55951), which landed in the a5. --- .../Runtime/Sky/SkyManager.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/SkyManager.cs b/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/SkyManager.cs index 3510969b3ba..81a7a6a9ffd 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/SkyManager.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Runtime/Sky/SkyManager.cs @@ -534,6 +534,7 @@ public void Cleanup() for (int i = 0; i < m_CachedSkyContexts.size; ++i) m_CachedSkyContexts[i].Cleanup(); + m_StaticLightingSky.Cleanup(); lightingOverrideVolumeStack.Dispose(); #if UNITY_EDITOR From c8825495d1f57a1a2fdc480c4f67a7f0eba3c9bb Mon Sep 17 00:00:00 2001 From: Myeongseon Kim Date: Wed, 27 Nov 2024 03:59:09 +0000 Subject: [PATCH 74/85] [UUM-73947] Added SS Shadow coord transform to TransformWorldToShadowCoord Jira: [UUM-73947](https://jira.unity3d.com/browse/UUM-73947) This PR adds ScreenSpace Shadow coord transform to fix incorrect SS shadow sampling from some shaders, especially for ShaderGraph shaders. URP shaders support a correct SS shadow sampling by directly using `inputData.shadowCoord` which has a cascaded position or a screen position depending on `_MAIN_LIGHT_SHADOWS_SCREEN`. However, since we cannot use vertex output in ShaderGraph, it may be difficult to calculate a correct shadow coord using only `TransformWorldToShadowCoord` unless the user manually adds `_MAIN_LIGHT_SHADOWS_SCREEN` check if SS Shadow is enabled. | Before | After | | -- | -- | |![Before](https://media.github.cds.internal.unity3d.com/user/3842/files/abd5c548-74af-4fe0-82fc-2e3590f74758)|![After](https://media.github.cds.internal.unity3d.com/user/3842/files/5c80bc48-fcd8-41cb-9cb6-2402d4aa5146)| --- .../ShaderLibrary/Shadows.hlsl | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl index fb11f527707..552b022a989 100644 --- a/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl +++ b/Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl @@ -350,15 +350,18 @@ half ComputeCascadeIndex(float3 positionWS) float4 TransformWorldToShadowCoord(float3 positionWS) { -#ifdef _MAIN_LIGHT_SHADOWS_CASCADE - half cascadeIndex = ComputeCascadeIndex(positionWS); +#if defined(_MAIN_LIGHT_SHADOWS_SCREEN) && !defined(_SURFACE_TYPE_TRANSPARENT) + float4 shadowCoord = float4(ComputeNormalizedDeviceCoordinatesWithZ(positionWS, GetWorldToHClipMatrix()), 1.0); #else - half cascadeIndex = half(0.0); + #ifdef _MAIN_LIGHT_SHADOWS_CASCADE + half cascadeIndex = ComputeCascadeIndex(positionWS); + #else + half cascadeIndex = half(0.0); + #endif + + float4 shadowCoord = float4(mul(_MainLightWorldToShadow[cascadeIndex], float4(positionWS, 1.0)).xyz, 0.0); #endif - - float4 shadowCoord = mul(_MainLightWorldToShadow[cascadeIndex], float4(positionWS, 1.0)); - - return float4(shadowCoord.xyz, 0); + return shadowCoord; } half MainLightRealtimeShadow(float4 shadowCoord) From 2f6a854f9df7796bb446525504b994272ee3e601 Mon Sep 17 00:00:00 2001 From: Kazuki Matsumoto Date: Wed, 27 Nov 2024 03:59:29 +0000 Subject: [PATCH 75/85] Graphics: Remove the reflection code in runtime with the preprocessor Removed the reflection code in runtime with the `UNITY_EDITOR` preprocessor. --- .../Runtime/UniversalRenderPipeline.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs index a7aacf27919..810ab80a71e 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs @@ -152,6 +152,7 @@ public static int maxVisibleAdditionalLights } } +#if UNITY_EDITOR internal static bool UseDynamicBranchFogKeyword() { const string kMemberName = "k_UseDynamicBranchFogKeyword"; @@ -162,6 +163,7 @@ internal static bool UseDynamicBranchFogKeyword() int value = (int)((FieldInfo)memberInfo[0]).GetValue(null); return value == 1; } +#endif // Match with values in Input.hlsl internal static int lightsPerTile => ((maxVisibleAdditionalLights + 31) / 32) * 32; From 0d322a6c2d051afaba3de819ec04a6e9a1276819 Mon Sep 17 00:00:00 2001 From: Louis-Philippe Ledoux Date: Wed, 27 Nov 2024 03:59:33 +0000 Subject: [PATCH 76/85] Fix for complex lit base shader being interpreted as the wrong shader type *[See [this document](https://docs.google.com/document/d/1IREfh8I-uX8NUfyB3H8qjnzRxXIAkZNrtu6g8n4JZIE/edit#heading=h.al4rvw6ezmw6) for details on what can land in 6000.1.]* *[The PR comment commands commands and workflows to ready and land PR's can be found in the [pipeline documentation](https://internaldocs.unity.com/editor_and_runtime_development_guide/DevelopmentProcess/pr-process/evergreen-merge-queue/#rejoin-the-queue).]* *[Description of feature/change. Links to screenshots, design docs, user docs, etc. Link to Jira if applicable. Remember reviewers may be outside your team, and not know your feature/area that should be explained more.]* With the addition of the speedtree9 shader format last year, the complex lit base shader gets sometimes interpreted as the wrong type due to a missing shader path for the speedtree9 shader type. This results in complex lit being sometimes interpreted as speedtree9. --- .../com.unity.render-pipelines.universal/Runtime/ShaderUtils.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/ShaderUtils.cs b/Packages/com.unity.render-pipelines.universal/Runtime/ShaderUtils.cs index f32cd66e283..17ef53262b3 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/ShaderUtils.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/ShaderUtils.cs @@ -94,6 +94,7 @@ public static class ShaderUtils "Universal Render Pipeline/Nature/SpeedTree7", "Universal Render Pipeline/Nature/SpeedTree7 Billboard", "Universal Render Pipeline/Nature/SpeedTree8_PBRLit", + "SpeedTree9_Dummy_Path", // SpeedTree9 is shadergraph-only and does not have an HLSLF version, but this entry is still required "Universal Render Pipeline/Complex Lit", }; From e57e24d4a6e1473ff5c168909a403ea1685c320f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20V=C3=A1zquez?= Date: Wed, 27 Nov 2024 03:59:57 +0000 Subject: [PATCH 77/85] Add additional checks to show the HDRP wizard. When running tests on clean projects the HDRP wizard opens up. Avoid this behavior. --- .../Editor/Wizard/HDWizard.UserSettings.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.UserSettings.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.UserSettings.cs index 198b21763c8..f69d0c220c4 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.UserSettings.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Wizard/HDWizard.UserSettings.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using UnityEditorInternal; using UnityEngine; namespace UnityEditor.Rendering.HighDefinition @@ -81,7 +82,13 @@ public static bool wizardNeedRestartAfterChangingToDX12 public static bool wizardIsStartPopup { - get => instance.m_WizardPopupAtStart; + get + { + if (!InternalEditorUtility.isHumanControllingUs || AssetDatabase.IsAssetImportWorkerProcess()) + return false; + + return instance.m_WizardPopupAtStart; + } set { instance.m_WizardPopupAtStart = value; From ee948267a8304c19a2e91f9dcbdfe1db3ca2ade9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Carr=C3=A8re?= Date: Wed, 27 Nov 2024 04:00:00 +0000 Subject: [PATCH 78/85] Docs/graphics/docg 5180: fix typos Tix typos https://jira.unity3d.com/browse/DOCG-5180 --- .../Documentation~/Frame-Settings.md | 2 +- .../Documentation~/Physical-Light-Units.md | 2 +- .../Documentation~/Planar-Reflection-Probe.md | 2 +- .../Documentation~/SRPBatcher-Materials.md | 4 +- .../Documentation~/TableOfContents.md | 2 +- ...h-renderer-group-creating-draw-commands.md | 4 +- ...t-project-from-built-in-render-pipeline.md | 2 +- .../Documentation~/create-an-hdri-sky.md | 3 +- .../Documentation~/custom-pass-reference.md | 2 +- .../dots-instancing-shaders-access.md | 2 +- .../hdri-sky-volume-override-reference.md | 47 ++++++++++--------- .../Documentation~/reference-path-tracing.md | 2 +- .../Documentation~/render-graph.md | 2 +- .../rendering-and-post-processing.md | 2 +- .../Documentation~/water-vfx-interaction.md | 2 +- 15 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Frame-Settings.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Frame-Settings.md index c6580132ba0..7bd7e208da9 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Frame-Settings.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Frame-Settings.md @@ -2,7 +2,7 @@ Frame Settings are settings HDRP uses to render Cameras, real-time, baked, and custom reflections. To find the right balance between render quality and runtime performance, adjust the Frame Settings for your [Cameras](hdrp-camera-component-reference.md) to enable or disable effects at runtime on a per-Camera basis. -You can set the default values for Frame Settings for each of these three individually from within the the [HDRP Graphics settings window](Default-Settings-Window.md). +You can set the default values for Frame Settings for each of these three individually from within the [HDRP Graphics settings window](Default-Settings-Window.md). ![](Images/FrameSettings1.png) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Physical-Light-Units.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Physical-Light-Units.md index fc75271c170..015b5a03685 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Physical-Light-Units.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Physical-Light-Units.md @@ -30,7 +30,7 @@ The unit of [illuminance](Glossary.md#Illuminance). A light source that emits 1 #### Nits (candela per square meter): -The unit of luminance. Describes the surface power of a visible light source. When you use this unit, the overall power of a light source depends the size of the light source, meaning the the illumination level of a Scene changes depending on the size of the light source. Highlights that a light source produces conserve their intensity regardless of the size of the surface. +The unit of luminance. Describes the surface power of a visible light source. When you use this unit, the overall power of a light source depends the size of the light source, meaning the illumination level of a Scene changes depending on the size of the light source. Highlights that a light source produces conserve their intensity regardless of the size of the surface. A light source that emits 1 candela of [luminous intensity](Glossary.md#LuminousIntensity) onto an area of 1 square meter has a luminance of 1 candela per square meter. diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Planar-Reflection-Probe.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Planar-Reflection-Probe.md index 2e644aa0907..d5b8fef13c8 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Planar-Reflection-Probe.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Planar-Reflection-Probe.md @@ -4,7 +4,7 @@ The Planar Reflection Probe component is one of the types of [Reflection Probe]( ## Properties -Planar Reflection Probes share many properties with the the [built-in render pipeline Reflection Probe](https://docs.unity3d.com/Manual/class-ReflectionProbe.html), and the [HDRP cubemap Reflection Probe](Reflection-Probe.md). +Planar Reflection Probes share many properties with the [built-in render pipeline Reflection Probe](https://docs.unity3d.com/Manual/class-ReflectionProbe.html), and the [HDRP cubemap Reflection Probe](Reflection-Probe.md). Planar Reflection Probes use the same texture format than the one selected in [HDRP Asset](HDRP-Asset.md) for Color Buffer Format. diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/SRPBatcher-Materials.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/SRPBatcher-Materials.md index 8350d44af94..32896e226ee 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/SRPBatcher-Materials.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/SRPBatcher-Materials.md @@ -14,7 +14,7 @@ A GameObject must meet the following requirements to be compatible with the SRP ## Shader compatibility -All lit and unlit shaders in the the Universal Render Pipeline (URP) and the High Definition Render Pipeline (HDRP) fit this requirement (except for the particle versions of these shaders). +All lit and unlit shaders in the Universal Render Pipeline (URP) and the High Definition Render Pipeline (HDRP) fit this requirement (except for the particle versions of these shaders). For a custom shader to be compatible with the SRP Batcher it must meet the following requirements: @@ -23,4 +23,4 @@ For a custom shader to be compatible with the SRP Batcher it must meet the follo You can check the compatibility status of a shader in the Inspector panel. -![You can check the compatibility of your shaders in the Inspector panel for the specific shader.](Images/SRP_batcher_shader_compatibility.png) \ No newline at end of file +![You can check the compatibility of your shaders in the Inspector panel for the specific shader.](Images/SRP_batcher_shader_compatibility.png) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md index 5e67adb9849..29635fab904 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md @@ -305,7 +305,7 @@ * [Understand custom pass variables](AOVs.md) * [Manage a custom pass without a GameObject](Global-Custom-Pass-API.md) * [Injection points](Custom-Pass-Injection-Points.md) - * [Customize the the High Definition Render Pipeline (HDRP)](render-graph.md) + * [Customize the High Definition Render Pipeline (HDRP)](render-graph.md) * [Test and debug rendering and post-processing](rendering-troubleshoot.md) * [Troubleshoot a custom pass](Custom-Pass-Troubleshooting.md) * [View a custom pass in the Frame Debugger](Custom-Pass-Frame-Debugger.md) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/batch-renderer-group-creating-draw-commands.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/batch-renderer-group-creating-draw-commands.md index 3d2fe8ed04d..5ddef7d1a61 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/batch-renderer-group-creating-draw-commands.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/batch-renderer-group-creating-draw-commands.md @@ -8,7 +8,7 @@ To create draw commands, use the [BatchRendererGroup.OnPerformCulling](https://d Your `OnPerformCulling` implementation can generate as many or as few draw commands as you want. A simple implementation that only uses a single mesh and material could only output a single draw command, a more complex implementation could output thousands, each with different meshes and materials. -**Note**: To provide maximum flexibility, Unity doesn't preallocate the arrays in the `BatchCullingOutputDrawCommands` output struct and stores them as raw pointers so you can easily allocate them and use them from [Burst](https://docs.unity3d.com/Packages/com.unity.burst@latest) jobs. You must allocate the arrays using [UnsafeUtility.Malloc](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.UnsafeUtility.Malloc) with the the [Allocator.TempJob](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Unity.Collections.Allocator.TempJob) allocator. The callback shouldn't release the memory. Instead, Unity releases the memory after it finishes rendering using the draw commands. +**Note**: To provide maximum flexibility, Unity doesn't preallocate the arrays in the `BatchCullingOutputDrawCommands` output struct and stores them as raw pointers so you can easily allocate them and use them from [Burst](https://docs.unity3d.com/Packages/com.unity.burst@latest) jobs. You must allocate the arrays using [UnsafeUtility.Malloc](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Unity.Collections.LowLevel.Unsafe.UnsafeUtility.Malloc) with the [Allocator.TempJob](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Unity.Collections.Allocator.TempJob) allocator. The callback shouldn't release the memory. Instead, Unity releases the memory after it finishes rendering using the draw commands. See the following code sample for an example of how to create draw commands. This code sample builds on the one in [Creating batches](batch-renderer-group-creating-batches.md). @@ -256,4 +256,4 @@ public class SimpleBRGExample : MonoBehaviour } ``` -This is the final, complete, code sample for BRG. If you attach this Component to a GameObject, set a mesh and [DOTS Instancing](dots-instancing-shaders.md)-compatible material in the Inspector, and enter Play Mode, Unity renders three instances of the mesh using the material. \ No newline at end of file +This is the final, complete, code sample for BRG. If you attach this Component to a GameObject, set a mesh and [DOTS Instancing](dots-instancing-shaders.md)-compatible material in the Inspector, and enter Play Mode, Unity renders three instances of the mesh using the material. diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/convert-project-from-built-in-render-pipeline.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/convert-project-from-built-in-render-pipeline.md index fb91338ace9..c1f0bf75e32 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/convert-project-from-built-in-render-pipeline.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/convert-project-from-built-in-render-pipeline.md @@ -5,6 +5,6 @@ The High Definition Render Pipeline (HDRP) uses a new set of shaders and lightin | Topic | Description | |-|-| | [Convert post-processing scripts](convert-from-built-in-convert-post-processing-scripts.md) | Remove the Post-Processing Version 2 package from a project and update your scripts to work with HDRP's own implementation for post processing. | -| [Convert lighting and shadows](convert-from-built-in-convert-lighting-and-shadows.md) | Convert a project to physical Light units to control the intensity of Lights, instead of the the arbitrary units the Built-in Render Pipeline uses. | +| [Convert lighting and shadows](convert-from-built-in-convert-lighting-and-shadows.md) | Convert a project to physical Light units to control the intensity of Lights, instead of the arbitrary units the Built-in Render Pipeline uses. | | [Convert materials and shaders](convert-from-built-in-convert-materials-and-shaders.md) | Upgrade the materials in your scene to HDRP-compatible materials, either automatically or manually. | | [Convert project with HDRP wizard](convert-from-built-in-convert-project-with-hdrp-wizard.md) | Add the HDRP package to a Built-in Render Pipeline project and set up HDRP. | diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/create-an-hdri-sky.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/create-an-hdri-sky.md index 1f3b7fc0124..7114b93b2da 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/create-an-hdri-sky.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/create-an-hdri-sky.md @@ -15,7 +15,7 @@ Tip: [Unity HDRI Pack](https://assetstore.unity.com/packages/essentials/beta-pro After you add an **HDRI Sky** override, you must set the Volume to use **HDRI Sky**. The [Visual Environment](visual-environment-volume-override-reference.md) override controls which type of sky the Volume uses. To set the Volume to use **HDRI Sky**: -1. In the **Visual Environment** override, go to the **Sky** > **Sky Type** +1. In the **Visual Environment** override, go to **Sky** > **Sky Type**. 2. Set **Sky Type** to **HDRI Sky**. HDRP now renders an **HDRI Sky** for any Camera this Volume affects. @@ -23,4 +23,3 @@ HDRP now renders an **HDRI Sky** for any Camera this Volume affects. Refer to the [HDRI Sky Volume Override Reference](hdri-sky-volume-override-reference.md) for more information. [!include[](snippets/volume-override-api.md)] - diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/custom-pass-reference.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/custom-pass-reference.md index 8d13c48af61..655306dcae3 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/custom-pass-reference.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/custom-pass-reference.md @@ -35,7 +35,7 @@ Configure a draw renderers Custom Pass in the **Custom Passes** panel using the | Target Depth Buffer | | | The target buffer where Unity writes and tests the depth and stencil data:

    •**Camera:** Targets the current camera depth buffer that renders the Custom Pass.
    •**Custom:** Uses the Custom Pass buffer allocated in the HDRP Asset.
    •**None:** Doesn’t write the data to a buffer.

    This buffer does not contain transparent objects that have **Depth Write** enabled in the [shader properties](https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@10.2/manual/Lit-Shader.html). | | Clear Flags | | | Discards the contents of a buffer before Unity executes this Custom Pass.
    Assign a clear flag to one of the following buffers:

    •**None:** Doesn’t clear any buffers in this pass.
    •**Color:** Clears the depth buffer.
    •**Depth:** Clears the depth buffer and the stencil buffer.
    •**All:** Clears the data in the color, depth and stencil buffers. | | Filters | | | Properties in this section determine the GameObjects that Unity renders in this Custom Pass. | -| | Queue | | Determines the kind of materials that this Custom Pass renders:
    •**Opaque No Alpha test**: Opaque GameObjects without alpha test only.
    •**Opaque Alpha Test: **Opaque GameObjects with alpha test only.
    •**All Opaque**: All opaque GameObjects.
    •**After Post Process Opaque**: Opaque GameObjects that use the after post process render pass.
    •**Pre Refraction**: Transparent GameObjects that use the the pre refraction render pass.
    •**Transparent**: Transparent GameObjects that use the default render pass.
    •**Low Transparent**: Transparent GameObjects that use the low resolution render pass.
    •**All Transparent**: All Transparent GameObjects.
    •**All Transparent With Low Res**: Transparent GameObjects that use the Pre-refraction, Default, or Low resolution render pass.
    •**After Post Process Transparent**: Transparent GameObjects that use after post process render pass.
    •**Overlay**: All GameObjects that use the overlay render pass.
    •**All:** All GameObjects. | +| | Queue | | Determines the kind of materials that this Custom Pass renders:
    •**Opaque No Alpha test**: Opaque GameObjects without alpha test only.
    •**Opaque Alpha Test: **Opaque GameObjects with alpha test only.
    •**All Opaque**: All opaque GameObjects.
    •**After Post Process Opaque**: Opaque GameObjects that use the after post process render pass.
    •**Pre Refraction**: Transparent GameObjects that use the pre refraction render pass.
    •**Transparent**: Transparent GameObjects that use the default render pass.
    •**Low Transparent**: Transparent GameObjects that use the low resolution render pass.
    •**All Transparent**: All Transparent GameObjects.
    •**All Transparent With Low Res**: Transparent GameObjects that use the Pre-refraction, Default, or Low resolution render pass.
    •**After Post Process Transparent**: Transparent GameObjects that use after post process render pass.
    •**Overlay**: All GameObjects that use the overlay render pass.
    •**All:** All GameObjects. | | | Layer Mask | | Determines the GameObject layer that this Custom Pass applies to. | | Overrides | | | | | | Override Mode | | Determines what this Custom Pass volume uses to render GameObjects included in this Custom Pass:
    •**Material**
    •**Shader**
    •**Pass Name** | diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/dots-instancing-shaders-access.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/dots-instancing-shaders-access.md index b53992bda2d..81e2327f32e 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/dots-instancing-shaders-access.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/dots-instancing-shaders-access.md @@ -6,6 +6,6 @@ To access DOTS Instanced properties, your shader can use one of the access macro * If the most significant bit of the metadata value is `0`, every instance uses the value from instance index zero. This means each instance loads directly from the byte address in the metadata value. In this case, the buffer only needs to store a single value, instead of one value per instance. * If the most significant bit of the metadata value is `1`, the address should contain an array where you can find the value for instance index `instanceID` using `AddressOfInstance0 + sizeof(PropertyType) * instanceID`. In this case, you should ensure that every rendered instance index has valid data in buffer. Otherwise, out-of-bounds access and undefined behavior can occur. -You can also set the the metadata value directly which is useful if you want to use a custom data source that doesn't use the above layout, such as a texture. +You can also set the metadata value directly which is useful if you want to use a custom data source that doesn't use the above layout, such as a texture. For an example of how to use these macros, see [Access macro example](dots-instancing-shaders-samples.md). diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/hdri-sky-volume-override-reference.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/hdri-sky-volume-override-reference.md index 0f20a632f1f..d96406ed937 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/hdri-sky-volume-override-reference.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/hdri-sky-volume-override-reference.md @@ -1,6 +1,6 @@ # HDRI Sky Volume Override reference -The HDRI Sky Volume Override component exposes options that you can use to define how the High Definition Render Pipeline (HDRP) renders an HDRI sky. +The HDRI Sky Volume Override component provides options to define how the High Definition Render Pipeline (HDRP) renders an HDRI sky. Refer to [Create an HDRI sky](create-an-HDRI-sky.md) for more information. @@ -22,51 +22,52 @@ Refer to [Create an HDRI sky](create-an-HDRI-sky.md) for more information.
    /// Overrides the current camera, changing all the matrices and view parameters for the new one. @@ -878,12 +879,13 @@ void Init(CustomPassContext ctx, Camera overrideCamera, float overrideAspectRati overrideHDCamera.Update(overrideHDCamera.frameSettings, hdrp, XRSystem.emptyPass, allocateHistoryBuffers: false); // Reset the reference size as it could have been changed by the override camera ctx.hdCamera.SetReferenceSize(); - var globalCB = hdrp.GetShaderVariablesGlobalCB(); + var globalCB = ctx.currentGlobalState; overrideHDCamera.UpdateShaderVariablesGlobalCB(ref globalCB); ConstantBuffer.PushGlobal(ctx.cmd, globalCB, HDShaderIDs._ShaderVariablesGlobal); overrideCameraStack.Push(overrideHDCamera); + overrideGlobalVariablesStack.Push(globalCB); } static bool IsContextValid(CustomPassContext ctx, Camera overrideCamera) @@ -909,22 +911,23 @@ void IDisposable.Dispose() overrideCamera.aspect = originalAspect; // Set back the settings of the previous camera - var globalCB = HDRenderPipeline.currentPipeline.GetShaderVariablesGlobalCB(); overrideCameraStack.Pop(); if (overrideCameraStack.Count > 0) { var previousHDCamera = overrideCameraStack.Peek(); previousHDCamera.SetReferenceSize(); - previousHDCamera.UpdateShaderVariablesGlobalCB(ref globalCB); } else // If we don't have any nested override camera, then we go back to the original one. { // Reset the reference size as it could have been changed by the override camera ctx.hdCamera.SetReferenceSize(); - ctx.hdCamera.UpdateShaderVariablesGlobalCB(ref globalCB); } - ConstantBuffer.PushGlobal(ctx.cmd, globalCB, HDShaderIDs._ShaderVariablesGlobal); + overrideGlobalVariablesStack.Pop(); + if (overrideGlobalVariablesStack.Count > 0) + ConstantBuffer.PushGlobal(ctx.cmd, overrideGlobalVariablesStack.Peek(), HDShaderIDs._ShaderVariablesGlobal); + else + ConstantBuffer.PushGlobal(ctx.cmd, ctx.currentGlobalState, HDShaderIDs._ShaderVariablesGlobal); } } From f4a4f02f797c194a4035eeb718e846c0967b67e4 Mon Sep 17 00:00:00 2001 From: Gregory Mitrano Date: Thu, 21 Nov 2024 15:10:51 +0000 Subject: [PATCH 58/85] Fix Final Depth Copy Parameters & Unnecessary Scene View Prepass This PR updates the Final Depth Copy logic in URP to always source its depth data from the depth attachment rather than the depth texture. It also updates the logic that decides if we allocate a depth attachment or render to backbuffer to ensure that the depth attachment is always available in the cases where a final depth copy is required. In addition, this PR also removes conditions from the depth prepass logic that seem like they were intended to handle the final depth copy requirements. Now that the depth attachment allocation logic explicitly knows about the final depth copy use case, it's no longer necessary to force a prepass to indirectly allocate an attachment / intermediate depth texture. --- .../Runtime/UniversalRenderPipeline.cs | 1 - .../Runtime/UniversalRenderer.cs | 2 +- .../Runtime/UniversalRendererRenderGraph.cs | 70 ++++++++----------- 3 files changed, 29 insertions(+), 44 deletions(-) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs index d513785feeb..331ec21d34e 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderPipeline.cs @@ -1524,7 +1524,6 @@ static void InitializeAdditionalCameraData(Camera camera, UniversalAdditionalCam } cameraData.renderer = renderer; - cameraData.requiresDepthTexture |= isSceneViewCamera; cameraData.postProcessingRequiresDepthTexture = CheckPostProcessForDepth(cameraData); cameraData.resolveFinalTarget = resolveFinalTarget; diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs index 1c90fd6aeeb..076e5eef2f2 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRenderer.cs @@ -1921,7 +1921,7 @@ bool RequiresIntermediateColorTexture(UniversalCameraData cameraData, ref Render if (isOffscreenRender) return requiresBlitForOffscreenCamera; - return requiresBlitForOffscreenCamera || isSceneViewCamera || isScaledRender || cameraData.isHdrEnabled || + return requiresBlitForOffscreenCamera || isScaledRender || cameraData.isHdrEnabled || !isCompatibleBackbufferTextureDimension || isCapturing || cameraData.requireSrgbConversion || renderPassInputs.requiresColorTexture || renderPassInputs.requiresColorTextureCreated; } diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs index 02816c35c89..cf0778f34e9 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs @@ -282,25 +282,21 @@ bool CameraHasPostProcessingWithDepth(UniversalCameraData cameraData) return ShouldApplyPostProcessing(cameraData.postProcessEnabled) && cameraData.postProcessingRequiresDepthTexture; } - void RequiresColorAndDepthAttachments(RenderGraph renderGraph, out bool createColorTexture, out bool createDepthTexture, UniversalCameraData cameraData, ref RenderPassInputSummary renderPassInputs) + bool RequiresIntermediateAttachments(UniversalCameraData cameraData, ref RenderPassInputSummary renderPassInputs) { - bool isPreviewCamera = cameraData.isPreviewCamera; bool requiresDepthPrepass = RequireDepthPrepass(cameraData, ref renderPassInputs); var requireColorTexture = HasActiveRenderFeatures() && m_IntermediateTextureMode == IntermediateTextureMode.Always; requireColorTexture |= HasPassesRequiringIntermediateTexture(); requireColorTexture |= Application.isEditor && m_Clustering; requireColorTexture |= RequiresIntermediateColorTexture(cameraData, ref renderPassInputs); - requireColorTexture &= !isPreviewCamera; var requireDepthTexture = RequireDepthTexture(cameraData, requiresDepthPrepass, ref renderPassInputs); useDepthPriming = IsDepthPrimingEnabled(cameraData); // Intermediate texture has different yflip state than backbuffer. In case we use intermediate texture, we must use both color and depth together. - bool intermediateRenderTexture = (requireColorTexture || requireDepthTexture); - createDepthTexture = intermediateRenderTexture; - createColorTexture = intermediateRenderTexture; + return (requireColorTexture || requireDepthTexture); } // Gather history render requests and manage camera history texture life-time. @@ -437,8 +433,7 @@ void CreateRenderGraphCameraRenderTargets(RenderGraph renderGraph, bool isCamera // We configure this for the first camera of the stack and overlay camera will reuse create color/depth var // to pick the correct target, as if there is an intermediate texture, overlay cam should use them if (cameraData.renderType == CameraRenderType.Base) - RequiresColorAndDepthAttachments(renderGraph, out m_CreateColorAttachment, out m_CreateDepthAttachment, cameraData, ref renderPassInputs); - + m_RequiresIntermediateAttachments = RequiresIntermediateAttachments(cameraData, ref renderPassInputs); // The final output back buffer should be cleared by the graph on first use only if we have no final blit pass. // If there is a final blit, that blit will write the buffers so on first sight an extra clear should not be problem, @@ -446,7 +441,7 @@ void CreateRenderGraphCameraRenderTargets(RenderGraph renderGraph, bool isCamera // with a Viewport Rect smaller than the full screen. So the existing backbuffer contents need to be preserved in this case. // Finally for non-base cameras the backbuffer should never be cleared. (Note that there might still be two base cameras // rendering to the same screen. See e.g. test foundation 014 that renders a minimap) - bool clearBackbufferOnFirstUse = (cameraData.renderType == CameraRenderType.Base) && !m_CreateColorAttachment; + bool clearBackbufferOnFirstUse = (cameraData.renderType == CameraRenderType.Base) && !m_RequiresIntermediateAttachments; // force the clear if we are rendering to an offscreen depth texture clearBackbufferOnFirstUse |= isCameraTargetOffscreenDepth; @@ -457,9 +452,9 @@ void CreateRenderGraphCameraRenderTargets(RenderGraph renderGraph, bool isCamera // We cannot use directly !cameraData.rendersOverlayUI but this is similar logic bool isNativeUIOverlayRenderingAfterURP = !SupportedRenderingFeatures.active.rendersUIOverlay && cameraData.resolveToScreen; bool isNativeRenderingAfterURP = UnityEngine.Rendering.Watermark.IsVisible() || isNativeUIOverlayRenderingAfterURP; - // If MSAA > 1, no extra native rendering after SRP and we target the BB directly (!m_CreateColorAttachment) + // If MSAA > 1, no extra native rendering after SRP and we target the BB directly (!m_RequiresIntermediateAttachments) // then we can discard MSAA buffers and only resolve, otherwise we must store and resolve - bool noStoreOnlyResolveBBColor = !m_CreateColorAttachment && !isNativeRenderingAfterURP && (cameraData.cameraTargetDescriptor.msaaSamples > 1); + bool noStoreOnlyResolveBBColor = !m_RequiresIntermediateAttachments && !isNativeRenderingAfterURP && (cameraData.cameraTargetDescriptor.msaaSamples > 1); ImportResourceParams importBackbufferColorParams = new ImportResourceParams(); importBackbufferColorParams.clearOnFirstUse = clearBackbufferOnFirstUse; @@ -500,7 +495,7 @@ void CreateRenderGraphCameraRenderTargets(RenderGraph renderGraph, bool isCamera { // Backbuffer is the final render target, we obtain its number of MSAA samples through Screen API // in some cases we disable multisampling for optimization purpose - int numSamples = AdjustAndGetScreenMSAASamples(renderGraph, m_CreateColorAttachment); + int numSamples = AdjustAndGetScreenMSAASamples(renderGraph, m_RequiresIntermediateAttachments); //BuiltinRenderTextureType.CameraTarget so this is either system render target or camera.targetTexture if non null //NOTE: Careful what you use here as many of the properties bake-in the camera rect so for example @@ -560,7 +555,7 @@ void CreateRenderGraphCameraRenderTargets(RenderGraph renderGraph, bool isCamera #region Intermediate Camera Target - if (m_CreateColorAttachment && !isCameraTargetOffscreenDepth) + if (m_RequiresIntermediateAttachments && !isCameraTargetOffscreenDepth) { var cameraTargetDescriptor = cameraData.cameraTargetDescriptor; cameraTargetDescriptor.useMipMap = false; @@ -604,7 +599,7 @@ void CreateRenderGraphCameraRenderTargets(RenderGraph renderGraph, bool isCamera bool depthTextureIsDepthFormat = RequireDepthPrepass(cameraData, ref renderPassInputs) && (renderingModeActual != RenderingMode.Deferred); - if (m_CreateDepthAttachment) + if (m_RequiresIntermediateAttachments) { var depthDescriptor = cameraData.cameraTargetDescriptor; depthDescriptor.useMipMap = false; @@ -843,8 +838,7 @@ public override bool supportsGPUOcclusion } } - private static bool m_CreateColorAttachment; - private static bool m_CreateDepthAttachment; + private static bool m_RequiresIntermediateAttachments; private void OnOffscreenDepthTextureRendering(RenderGraph renderGraph, ScriptableRenderContext context, UniversalResourceData resourceData, UniversalCameraData cameraData) { @@ -1089,7 +1083,6 @@ private TextureCopySchedules CalculateTextureCopySchedules(UniversalCameraData c } bool requiresColorCopyPass = cameraData.requiresOpaqueTexture || renderPassInputs.requiresColorTexture; - requiresColorCopyPass &= !cameraData.isPreviewCamera; // Schedule a color copy pass if required ColorCopySchedule color = requiresColorCopyPass ? ColorCopySchedule.AfterSkybox @@ -1632,44 +1625,37 @@ private void OnAfterRendering(RenderGraph renderGraph) debugHandler.Render(renderGraph, cameraData, debugScreenTexture, overlayUITexture, debugHandlerColorTarget); } -#if UNITY_EDITOR - bool isGizmosEnabled = UnityEditor.Handles.ShouldRenderGizmos(); - - if (cameraData.isSceneViewCamera || cameraData.isPreviewCamera || (isGizmosEnabled && cameraData.resolveFinalTarget)) + if (cameraData.resolveFinalTarget) { - TextureHandle cameraDepthTexture = resourceData.cameraDepthTexture; - m_FinalDepthCopyPass.MssaSamples = 0; - m_FinalDepthCopyPass.CopyToBackbuffer = cameraData.isGameCamera; - m_FinalDepthCopyPass.Render(renderGraph, frameData, resourceData.activeDepthTexture, cameraDepthTexture, false, "Final Depth Copy"); - } +#if UNITY_EDITOR + // If we render to an intermediate depth attachment instead of the backbuffer, we need to copy the result to the backbuffer in cases where backbuffer + // depth data is required later in the frame. + bool backbufferDepthRequired = (cameraData.isSceneViewCamera || cameraData.isPreviewCamera || UnityEditor.Handles.ShouldRenderGizmos()); + if (m_RequiresIntermediateAttachments && backbufferDepthRequired) + { + m_FinalDepthCopyPass.MssaSamples = 0; + m_FinalDepthCopyPass.CopyToBackbuffer = cameraData.isGameCamera; + m_FinalDepthCopyPass.Render(renderGraph, frameData, resourceData.backBufferDepth, resourceData.cameraDepth, false, "Final Depth Copy"); + } #endif - if (cameraData.isSceneViewCamera) - DrawRenderGraphWireOverlay(renderGraph, frameData, resourceData.backBufferColor); + if (cameraData.isSceneViewCamera) + DrawRenderGraphWireOverlay(renderGraph, frameData, resourceData.backBufferColor); - if (drawGizmos) - DrawRenderGraphGizmos(renderGraph, frameData, resourceData.backBufferColor, resourceData.activeDepthTexture, GizmoSubset.PostImageEffects); + if (drawGizmos) + DrawRenderGraphGizmos(renderGraph, frameData, resourceData.backBufferColor, resourceData.activeDepthTexture, GizmoSubset.PostImageEffects); + } } bool RequireDepthPrepass(UniversalCameraData cameraData, ref RenderPassInputSummary renderPassInputs) { - bool applyPostProcessing = ShouldApplyPostProcessing(cameraData.postProcessEnabled); // If Camera's PostProcessing is enabled and if there any enabled PostProcessing requires depth texture as shader read resource (Motion Blur/DoF) bool cameraHasPostProcessingWithDepth = CameraHasPostProcessingWithDepth(cameraData); bool forcePrepass = (m_CopyDepthMode == CopyDepthMode.ForcePrepass); bool depthPrimingEnabled = IsDepthPrimingEnabled(cameraData); -#if UNITY_EDITOR - bool isGizmosEnabled = UnityEditor.Handles.ShouldRenderGizmos(); -#else - bool isGizmosEnabled = false; -#endif - bool requiresDepthTexture = cameraData.requiresDepthTexture || renderPassInputs.requiresDepthTexture || depthPrimingEnabled; bool requiresDepthPrepass = (requiresDepthTexture || cameraHasPostProcessingWithDepth) && (!CanCopyDepth(cameraData) || forcePrepass); - requiresDepthPrepass |= cameraData.isSceneViewCamera; - requiresDepthPrepass |= isGizmosEnabled; - requiresDepthPrepass |= cameraData.isPreviewCamera; requiresDepthPrepass |= renderPassInputs.requiresDepthPrepass; requiresDepthPrepass |= renderPassInputs.requiresNormalsTexture; // This must be checked explicitly because some features inject normal requirements later in the frame requiresDepthPrepass |= depthPrimingEnabled; @@ -1686,8 +1672,8 @@ bool RequireDepthTexture(UniversalCameraData cameraData, bool requiresDepthPrepa createDepthTexture |= !cameraData.resolveFinalTarget; // Deferred renderer always need to access depth buffer. createDepthTexture |= (renderingModeActual == RenderingMode.Deferred && !useRenderPassEnabled); - // Some render cases (e.g. Material previews) have shown we need to create a depth texture when we're forcing a prepass. - createDepthTexture |= depthPrimingEnabled || cameraData.isPreviewCamera; + // An intermediate depth target is required when depth priming is enabled because we can't copy out of backbuffer depth if it's needed later + createDepthTexture |= depthPrimingEnabled; // TODO: seems like with mrt depth is not taken from first target. Investigate if this is needed createDepthTexture |= m_RenderingLayerProvidesRenderObjectPass; From fccd3d42f7d9e16d765d342b165ca1c32e45209b Mon Sep 17 00:00:00 2001 From: Yohann Vaast Date: Fri, 22 Nov 2024 01:12:25 +0000 Subject: [PATCH 59/85] RenderGraph - Improve maximum number of resources allocated Cached data structure in NRP RG Compiler. Right now we rely on some hacky heuristics for the size of the static data structures. If users add more passes, they could break it badly. First fix : Functional + optimization fix to compute MaxVersions and MaxReader dynamically based on the existing graph. We can leverage RenderGraphRessource writeCount member variable, we might need another member variable for readCount. Doing so would allow us to avoid regenerating the graph to compute MaxReader. --- .../Compiler/CompilerContextData.cs | 4 +- .../Compiler/NativePassCompiler.Debug.cs | 2 +- .../Compiler/NativePassCompiler.cs | 2 +- .../RenderGraph/Compiler/ResourcesData.cs | 29 +++-- .../RenderGraph/RenderGraphBuilders.cs | 2 + .../RenderGraphResourceRegistry.cs | 6 + .../RenderGraph/RenderGraphResources.cs | 9 ++ .../NativePassCompilerRenderGraphTests.cs | 120 ++++++++++++++++++ 8 files changed, 161 insertions(+), 13 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/CompilerContextData.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/CompilerContextData.cs index 9c0e78b479d..324109f60b7 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/CompilerContextData.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/CompilerContextData.cs @@ -98,7 +98,7 @@ public ref ResourceVersionedData VersionedResourceData(ResourceHandle h) [MethodImpl(MethodImplOptions.AggressiveInlining)] public ReadOnlySpan Readers(ResourceHandle h) { - int firstReader = ResourcesData.IndexReader(h, 0); + int firstReader = resources.IndexReader(h, 0); int numReaders = resources[h].numReaders; return resources.readerData[h.iType].MakeReadOnlySpan(firstReader, numReaders); } @@ -114,7 +114,7 @@ public ref ResourceReaderData ResourceReader(ResourceHandle h, int i) throw new Exception("Invalid reader id"); } #endif - return ref resources.readerData[h.iType].ElementAt(ResourcesData.IndexReader(h, 0) + i); + return ref resources.readerData[h.iType].ElementAt(resources.IndexReader(h, 0) + i); } // Data per graph level renderpass diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs index 7a337e9e77d..a3b38f08b37 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs @@ -349,7 +349,7 @@ internal void GenerateNativeCompilerDebugData(ref RenderGraph.DebugData debugDat var numReaders = outputDataVersioned.numReaders; for (var i = 0; i < numReaders; ++i) { - var depIdx = ResourcesData.IndexReader(output.resource, i); + var depIdx = ctx.resources.IndexReader(output.resource, i); ref var dep = ref ctx.resources.readerData[output.resource.iType].ElementAt(depIdx); var outputDependencyPass = ctx.passData[dep.passId]; diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs index ff62aaf14c9..f835e8abbe2 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs @@ -597,7 +597,7 @@ void FindResourceUsageRanges() var numReaders = pointToVer.numReaders; for (var i = 0; i < numReaders; ++i) { - var depIdx = ResourcesData.IndexReader(outputResource, i); + var depIdx = ctx.resources.IndexReader(outputResource, i); ref var dep = ref ctx.resources.readerData[outputResource.iType].ElementAt(depIdx); ref var depPass = ref ctx.passData.ElementAt(dep.passId); if (pass.asyncCompute != depPass.asyncCompute) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/ResourcesData.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/ResourcesData.cs index a6e6e1f1245..fba9b1f2320 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/ResourcesData.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/ResourcesData.cs @@ -146,14 +146,14 @@ public void SetWritingPass(CompilerContextData ctx, ResourceHandle h, int passId public void RegisterReadingPass(CompilerContextData ctx, ResourceHandle h, int passId, int index) { #if DEVELOPMENT_BUILD || UNITY_EDITOR - if (numReaders >= ResourcesData.MaxReaders) + if (numReaders >= ctx.resources.MaxReaders) { string passName = ctx.GetPassName(passId); string resourceName = ctx.GetResourceName(h); - throw new Exception($"Maximum '{ResourcesData.MaxReaders}' passes can use a single graph output as input. Pass {passName} is trying to read {resourceName}."); + throw new Exception($"Maximum '{ctx.resources.MaxReaders}' passes can use a single graph output as input. Pass {passName} is trying to read {resourceName}."); } #endif - ctx.resources.readerData[h.iType][ResourcesData.IndexReader(h, numReaders)] = new ResourceReaderData + ctx.resources.readerData[h.iType][ctx.resources.IndexReader(h, numReaders)] = new ResourceReaderData { passId = passId, inputSlot = index @@ -167,13 +167,13 @@ public void RemoveReadingPass(CompilerContextData ctx, ResourceHandle h, int pas { for (int r = 0; r < numReaders;) { - ref var reader = ref ctx.resources.readerData[h.iType].ElementAt(ResourcesData.IndexReader(h, r)); + ref var reader = ref ctx.resources.readerData[h.iType].ElementAt(ctx.resources.IndexReader(h, r)); if (reader.passId == passId) { // It should be removed, switch with the end of the list if we're not already at the end of it if (r < numReaders - 1) { - reader = ctx.resources.readerData[h.iType][ResourcesData.IndexReader(h, numReaders - 1)]; + reader = ctx.resources.readerData[h.iType][ctx.resources.IndexReader(h, numReaders - 1)]; } numReaders--; @@ -193,8 +193,9 @@ internal class ResourcesData public NativeList[] unversionedData; // Flattened fixed size array storing info per resource id shared between all versions. public NativeList[] versionedData; // Flattened fixed size array storing up to MaxVersions versions per resource id. public NativeList[] readerData; // Flattened fixed size array storing up to MaxReaders per resource id per version. - public const int MaxVersions = 20; // A quite arbitrary limit should be enough for most graphs. Increasing it shouldn't be a problem but will use more memory as these lists use a fixed size upfront allocation. - public const int MaxReaders = 100; // A quite arbitrary limit should be enough for most graphs. Increasing it shouldn't be a problem but will use more memory as these lists use a fixed size upfront allocation. + + public int MaxVersions; + public int MaxReaders; public DynamicArray[] resourceNames; @@ -229,6 +230,9 @@ public void Clear() public void Initialize(RenderGraphResourceRegistry resources) { + uint maxReaders = 0; + uint maxWriters = 0; + for (int t = 0; t < (int)RenderGraphResourceType.Count; t++) { RenderGraphResourceType resourceType = (RenderGraphResourceType) t; @@ -287,8 +291,15 @@ public void Initialize(RenderGraphResourceRegistry resources) default: throw new Exception("Unsupported resource type: " + t); } + + maxReaders = Math.Max(maxReaders, rll.readCount); + maxWriters = Math.Max(maxWriters, rll.writeCount); } + // The first resource is a null resource, so we need to add 1 to the count. + MaxReaders = (int)maxReaders + 1; + MaxVersions = (int)maxWriters + 1; + // Clear the other caching structures, they will be filled later versionedData[t].Resize(MaxVersions * numResources, NativeArrayOptions.ClearMemory); readerData[t].Resize(MaxVersions * MaxReaders * numResources, NativeArrayOptions.ClearMemory); @@ -297,7 +308,7 @@ public void Initialize(RenderGraphResourceRegistry resources) // Flatten array index [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int Index(ResourceHandle h) + public int Index(ResourceHandle h) { #if UNITY_EDITOR // Hot path if (h.version < 0 || h.version >= MaxVersions) @@ -308,7 +319,7 @@ public static int Index(ResourceHandle h) // Flatten array index [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static int IndexReader(ResourceHandle h, int readerID) + public int IndexReader(ResourceHandle h, int readerID) { #if UNITY_EDITOR // Hot path if (h.version < 0 || h.version >= MaxVersions) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs index 80a65179171..8d68e74d2e6 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs @@ -219,6 +219,7 @@ private ResourceHandle UseResource(in ResourceHandle handle, AccessFlags flags, } m_RenderPass.AddResourceRead(versioned); + m_Resources.IncrementReadCount(handle); if ((flags & AccessFlags.Read) == 0) { @@ -232,6 +233,7 @@ private ResourceHandle UseResource(in ResourceHandle handle, AccessFlags flags, if ((flags & AccessFlags.Read) != 0) { m_RenderPass.AddResourceRead(m_Resources.GetZeroVersionedHandle(handle)); + m_Resources.IncrementReadCount(handle); } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceRegistry.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceRegistry.cs index c1aa76d80c7..b0bc2ef5613 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceRegistry.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceRegistry.cs @@ -349,6 +349,12 @@ internal void IncrementWriteCount(in ResourceHandle res) m_RenderGraphResources[res.iType].resourceArray[res.index].IncrementWriteCount(); } + internal void IncrementReadCount(in ResourceHandle res) + { + CheckHandleValidity(res); + m_RenderGraphResources[res.iType].resourceArray[res.index].IncrementReadCount(); + } + internal void NewVersion(in ResourceHandle res) { CheckHandleValidity(res); diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResources.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResources.cs index 5df755d4fe5..df4c4ccc562 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResources.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResources.cs @@ -128,6 +128,7 @@ class IRenderGraphResource public bool requestFallBack; public bool forceRelease; public uint writeCount; + public uint readCount; public int cachedHash; public int transientPassIndex; public int sharedResourceLastFrameUsed; @@ -145,6 +146,7 @@ public virtual void Reset(IRenderGraphResourcePool _ = null) requestFallBack = false; forceRelease = false; writeCount = 0; + readCount = 0; version = 0; } @@ -166,6 +168,13 @@ public virtual void IncrementWriteCount() writeCount++; } + // readCount is currently not used in the HDRP Compiler. + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public virtual void IncrementReadCount() + { + readCount++; + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] public virtual int NewVersion() { diff --git a/Packages/com.unity.render-pipelines.core/Tests/Editor/NativePassCompilerRenderGraphTests.cs b/Packages/com.unity.render-pipelines.core/Tests/Editor/NativePassCompilerRenderGraphTests.cs index 6664980c909..3ad5f36cfb1 100644 --- a/Packages/com.unity.render-pipelines.core/Tests/Editor/NativePassCompilerRenderGraphTests.cs +++ b/Packages/com.unity.render-pipelines.core/Tests/Editor/NativePassCompilerRenderGraphTests.cs @@ -785,6 +785,126 @@ public void FencesWork() Assert.False(passData[3].insertGraphicsFence); } + [Test] + public void MaxReadersAndMaxVersionsAreCorrectForBuffers() + { + var g = AllocateRenderGraph(); + var rendertargets = ImportAndCreateBuffers(g); + + var desc = new BufferDesc(1024, 16); + var buffer = g.CreateBuffer(desc); + var buffer2 = g.CreateBuffer(desc); + + // Render something to extra 0 and write uav + using (var builder = g.AddRasterRenderPass("TestPass0", out var passData)) + { + builder.UseBufferRandomAccess(buffer, 0, AccessFlags.Write); + builder.UseBufferRandomAccess(buffer2, 1, AccessFlags.Write); + builder.SetRenderFunc((RenderGraphTestPassData data, RasterGraphContext context) => { }); + } + + // Render extra bits to 0 reading from the uav + using (var builder = g.AddRasterRenderPass("TestPass1", out var passData)) + { + builder.UseBuffer(buffer, AccessFlags.Read); + builder.UseBufferRandomAccess(buffer2, 1, AccessFlags.ReadWrite); + builder.SetRenderFunc((RenderGraphTestPassData data, RasterGraphContext context) => { }); + } + + var result = g.CompileNativeRenderGraph(g.ComputeGraphHash()); + + // The resource with the biggest MaxReaders is buffer2: + // 1 implicit read (TestPass0) + 1 explicit read (TestPass1) + 1 for the offset. + Assert.AreEqual(result.contextData.resources.MaxReaders, 3); + + // The resource with the biggest MaxVersion is buffer2: + // 1 explicit write (TestPass0) + 1 explicit readwrite (TestPass1) + 1 for the offset + Assert.AreEqual(result.contextData.resources.MaxVersions, 3); + } + + [Test] + public void MaxReadersAndMaxVersionsAreCorrectForTextures() + { + var g = AllocateRenderGraph(); + var rendertargets = ImportAndCreateBuffers(g); + + // Render something to extra 0 and write uav + using (var builder = g.AddRasterRenderPass("TestPass0", out var passData)) + { + builder.SetRenderAttachmentDepth(rendertargets.depthBuffer, AccessFlags.Write); + builder.UseTexture(rendertargets.extraBuffers[0], AccessFlags.Write); + builder.SetRenderFunc((RenderGraphTestPassData data, RasterGraphContext context) => { }); + } + + // Render extra bits to 0 reading from the uav + using (var builder = g.AddRasterRenderPass("TestPass1", out var passData)) + { + builder.SetRenderAttachmentDepth(rendertargets.depthBuffer, AccessFlags.Read); + builder.UseTexture(rendertargets.extraBuffers[0], AccessFlags.ReadWrite); + builder.SetRenderFunc((RenderGraphTestPassData data, RasterGraphContext context) => { }); + } + + // Render extra bits to 0 reading from the uav + using (var builder = g.AddRasterRenderPass("TestPass2", out var passData)) + { + builder.AllowPassCulling(false); + builder.UseTexture(rendertargets.extraBuffers[0], AccessFlags.Read); + builder.SetRenderFunc((RenderGraphTestPassData data, RasterGraphContext context) => { }); + } + + var result = g.CompileNativeRenderGraph(g.ComputeGraphHash()); + + // Resources with the biggest MaxReaders are extraBuffers[0] and depthBuffer (both being equal): + // 1 implicit read (TestPass0) + 2 explicit read (TestPass1 & TestPass2) + 1 for the offset + Assert.AreEqual(result.contextData.resources.MaxReaders, 4); + + // The resource with the biggest MaxVersion is extraBuffers[0]: + // 1 explicit write (TestPass0) + 1 explicit read-write (TestPass1) + 1 for the offset + Assert.AreEqual(result.contextData.resources.MaxVersions, 3); + } + + [Test] + public void MaxReadersAndMaxVersionsAreCorrectForBuffersMultiplePasses() + { + var g = AllocateRenderGraph(); + var rendertargets = ImportAndCreateBuffers(g); + + var desc = new BufferDesc(1024, 16); + var buffer = g.CreateBuffer(desc); + var buffer2 = g.CreateBuffer(desc); + + int indexName = 0; + + for (int i = 0; i < 5; ++i) + { + // Render something to extra 0 and write uav + using (var builder = g.AddRasterRenderPass("TestPass" + indexName++, out var passData)) + { + builder.UseBufferRandomAccess(buffer, 0, AccessFlags.Write); + builder.UseBufferRandomAccess(buffer2, 1, AccessFlags.Write); + builder.SetRenderFunc((RenderGraphTestPassData data, RasterGraphContext context) => { }); + } + + // Render extra bits to 0 reading from the uav + using (var builder = g.AddRasterRenderPass("TestPass" + indexName++, out var passData)) + { + builder.UseBuffer(buffer, AccessFlags.Read); + builder.UseBufferRandomAccess(buffer2, 1, AccessFlags.ReadWrite); + builder.SetRenderFunc((RenderGraphTestPassData data, RasterGraphContext context) => { }); + } + } + + var result = g.CompileNativeRenderGraph(g.ComputeGraphHash()); + + // The resource with the biggest MaxReaders is buffer2: + // 5 implicit read (TestPass0-2-4-6-8) + 5 explicit read (TestPass1-3-5-7-9) + 1 for the offset. + Assert.AreEqual(result.contextData.resources.MaxReaders, 11); + + // The resource with the biggest MaxVersion is buffer2: + // 5 explicit write (TestPass0-2-4-6-8) + 5 explicit readwrite (TestPass1-3-5-7-9) + 1 for the offset + Assert.AreEqual(result.contextData.resources.MaxVersions, 11); + } + [Test] public void BuffersWork() { From 841fe0fe259981785a13c55b14906f4998e106ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20V=C3=A1zquez?= Date: Fri, 22 Nov 2024 09:35:46 +0000 Subject: [PATCH 60/85] [Render Graph Viewer]Properly show the values for clear and bindMs The values were always false despite they should be true. --- .../Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs | 2 ++ .../Runtime/RenderGraph/RenderGraph.cs | 1 + 2 files changed, 3 insertions(+) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs index a3b38f08b37..e05b1f418f8 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs @@ -206,6 +206,8 @@ internal void GenerateNativeCompilerDebugData(ref RenderGraph.DebugData debugDat debugResource.textureData.depth = resourceUnversioned.volumeDepth; debugResource.textureData.samples = resourceUnversioned.msaaSamples; debugResource.textureData.format = info.format; + debugResource.textureData.bindMS = resourceUnversioned.bindMS; + debugResource.textureData.clearBuffer = resourceUnversioned.clear; debugResource.memoryless = resourceUnversioned.memoryLess; debugResource.consumerList = new List(); diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs index 5903b45bba1..a59c8efba8c 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs @@ -2472,6 +2472,7 @@ void GenerateCompilerDebugData(ref DebugData debugData) textureData.depth = renderTargetInfo.volumeDepth; textureData.samples = renderTargetInfo.msaaSamples; textureData.format = renderTargetInfo.format; + textureData.bindMS = renderTargetInfo.bindMS; newResource.textureData = textureData; } From 77986f6421bc6b6bf4c169f7e5f7ecbdbecedff5 Mon Sep 17 00:00:00 2001 From: Rose Hirigoyen Date: Fri, 22 Nov 2024 09:35:54 +0000 Subject: [PATCH 61/85] Revert Changes from UUM-29958 I made a fix for https://jira.unity3d.com/browse/UUM-68986 that was too aggressive - clearing the material property block after each blit actually clears properties that are needed between blits, in the case for example of edge detection. This created another bug (https://jira.unity3d.com/browse/UUM-85970) where TexelSize property was cleared between two blits in the same pass. Luckily, in the meantime, a better fix was implemented in Unity 6 and 7 (https://github.cds.internal.unity3d.com/unity/unity/pull/51608) This works better because it doesn't clear property blocks after each blit, only when a RenderTargetIdentifier is used, which is less aggressive than the fix I had in the first place --- .../Runtime/Utilities/Blitter.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blitter.cs b/Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blitter.cs index a7464021326..27d7fa2be8d 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blitter.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blitter.cs @@ -249,7 +249,6 @@ static internal void DrawTriangle(RasterCommandBuffer cmd, Material material, in static internal void DrawTriangle(CommandBuffer cmd, Material material, int shaderPass) { DrawTriangle(cmd, material, shaderPass, s_PropertyBlock); - s_PropertyBlock.Clear(); } static internal void DrawTriangle(CommandBuffer cmd, Material material, int shaderPass, MaterialPropertyBlock propertyBlock) @@ -273,7 +272,6 @@ static internal void DrawQuad(RasterCommandBuffer cmd, Material material, int sh static internal void DrawQuad(CommandBuffer cmd, Material material, int shaderPass) { DrawQuad(cmd, material, shaderPass, s_PropertyBlock); - s_PropertyBlock.Clear(); } static internal void DrawQuad(CommandBuffer cmd, Material material, int shaderPass, MaterialPropertyBlock propertyBlock) From f5ae94f3e8f3d19be4c5eae0cab244179498bd5e Mon Sep 17 00:00:00 2001 From: Ludovic Theobald Date: Fri, 22 Nov 2024 14:24:28 +0000 Subject: [PATCH 62/85] [VFX] Compilation Optimisation - Change attributes manager to use dictionnaries https://jira.unity3d.com/browse/POI-1725 This PR modifies the attributes manager to use Dictionnaries instead of Lists to optimise the operations of finding attributes. This has an impact particularly on the `PrepareSubgraphs` marker, that is heavily relying on attributes lookups. See the Performance Testing status section for before/after comparisons. --- .../Editor/Models/VFXAttributesManager.cs | 104 +++++++++--------- 1 file changed, 53 insertions(+), 51 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/Models/VFXAttributesManager.cs b/Packages/com.unity.visualeffectgraph/Editor/Models/VFXAttributesManager.cs index 40364469192..a0fa32f7f47 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/Models/VFXAttributesManager.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/Models/VFXAttributesManager.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; - using UnityEditor.VFX.Block; using UnityEditor.VFX.UI; using UnityEngine; @@ -75,7 +74,7 @@ partial struct VFXAttribute class VFXAttributesManager : IVFXAttributesManager { - private readonly List m_CustomAttributes = new (); + private readonly Dictionary m_CustomAttributes = new (StringComparer.OrdinalIgnoreCase); private static readonly List s_BuiltInAttributes = new() { @@ -153,34 +152,46 @@ class VFXAttributesManager : IVFXAttributesManager public static VFXAttribute[] AffectingAABBAttributes => s_AffectingAABBAttributes.ToArray(); - /* To be removed when the VFXLibrary will not be static anymore */ - public static VFXAttribute FindBuiltInOnly(string name) + private static readonly Dictionary s_BuiltinAttributeNameMap; + + static VFXAttributesManager() { - var attribute = s_BuiltInAttributes.Find(x => string.Compare(name, x.name, StringComparison.OrdinalIgnoreCase) == 0); - if (!string.IsNullOrEmpty(attribute.name)) + s_BuiltinAttributeNameMap = new Dictionary(StringComparer.OrdinalIgnoreCase); + foreach (var attr in s_BuiltInAttributes) { - return attribute; + s_BuiltinAttributeNameMap.Add(attr.name, attr); } - attribute = s_VariadicAttribute.Find(x => string.Compare(name, x.name, StringComparison.OrdinalIgnoreCase) == 0); - if (!string.IsNullOrEmpty(attribute.name)) + foreach (var attr in s_VariadicAttribute) { - return attribute; + s_BuiltinAttributeNameMap.Add(attr.name, attr); } + } - return default; + /* To be removed when the VFXLibrary will not be static anymore */ + public static VFXAttribute FindBuiltInOnly(string name) + { + if (string.IsNullOrEmpty(name)) + return default; + s_BuiltinAttributeNameMap.TryGetValue(name, out var attribute); + return attribute; } public static bool ExistsBuiltInOnly(string name) { - var index = s_BuiltInAttributes.FindIndex(x => string.Compare(name, x.name, StringComparison.OrdinalIgnoreCase) == 0); - if (index != -1) - return true; - return s_VariadicAttribute.FindIndex(x => string.Compare(name, x.name, StringComparison.OrdinalIgnoreCase) == 0) != -1; + return !string.IsNullOrEmpty(name) && s_BuiltinAttributeNameMap.ContainsKey(name); } public static IEnumerable GetBuiltInAttributesOrCombination(bool includeVariadic, bool includeVariadicComponents, bool includeReadOnly, bool includeWriteOnly) { + if (includeVariadic && includeVariadicComponents && includeReadOnly && includeWriteOnly) + { + foreach (var attribute in s_BuiltInAttributes) + yield return attribute; + foreach (var attribute in s_VariadicAttribute) + yield return attribute; + yield break; + } foreach (var attribute in s_BuiltInAttributes) { if (!includeVariadicComponents && s_VariadicComponentsAttributes.Contains(attribute)) @@ -257,7 +268,7 @@ public IEnumerable GetAllAttributesOrCombination(bool includeVaria yield return attribute; } - foreach (var attribute in m_CustomAttributes) + foreach (var attribute in m_CustomAttributes.Values) { yield return attribute; } @@ -270,7 +281,7 @@ public IEnumerable GetAllAttributesAndCombination(bool includeVari yield return attribute; } - foreach (var attribute in m_CustomAttributes) + foreach (var attribute in m_CustomAttributes.Values) { yield return attribute; } @@ -294,9 +305,9 @@ public IEnumerable GetAllNamesAndCombination(bool includeVariadic, bool public IEnumerable GetCustomAttributeNames() { - foreach (var attribute in m_CustomAttributes) + foreach (var attribute in m_CustomAttributes.Keys) { - yield return attribute.name; + yield return attribute; } } @@ -315,7 +326,7 @@ public IEnumerable GetBuiltInAndVariadicNames() public IEnumerable GetCustomAttributes() { - foreach (var attribute in m_CustomAttributes) + foreach (var attribute in m_CustomAttributes.Values) { yield return attribute; } @@ -323,14 +334,11 @@ public IEnumerable GetCustomAttributes() public bool TryFind(string name, out VFXAttribute attribute) { - foreach (var attr in GetAllAttributesOrCombination(true, true, true, true)) - { - if (string.Compare(attr.name, name, StringComparison.OrdinalIgnoreCase) == 0) - { - attribute = attr; - return true; - } - } + if (s_BuiltinAttributeNameMap.TryGetValue(name, out attribute)) + return true; + + if (m_CustomAttributes.TryGetValue(name, out attribute)) + return true; attribute = default; return false; @@ -363,25 +371,19 @@ public bool TryFindWithMode(string name, VFXAttributeMode mode, out VFXAttribute public bool Exist(string name) { - foreach (var attribute in GetAllAttributesOrCombination(true, true, true, true)) - { - if (string.Compare(attribute.name, name, StringComparison.OrdinalIgnoreCase) == 0) - { - return true; - } - } - - return false; + return ExistsBuiltInOnly(name) || m_CustomAttributes.ContainsKey(name); } public bool TryUpdate(string name, CustomAttributeUtility.Signature type, string description) { - var customAttribute = m_CustomAttributes.Find(x => string.Compare(x.name, name, StringComparison.OrdinalIgnoreCase) == 0); + bool found = m_CustomAttributes.TryGetValue(name, out var customAttribute); + if (!found) + return false; var valueType = CustomAttributeUtility.GetValueType(type); if (!string.IsNullOrEmpty(customAttribute.name) && (valueType != customAttribute.type || description != customAttribute.description)) { - m_CustomAttributes.Remove(customAttribute); - m_CustomAttributes.Add(new VFXAttribute(name, valueType, description)); + m_CustomAttributes.Remove(customAttribute.name); + m_CustomAttributes.Add(name, new VFXAttribute(name, valueType, description)); return true; } @@ -391,7 +393,7 @@ public bool TryUpdate(string name, CustomAttributeUtility.Signature type, string public bool IsCustom(string name) { - return m_CustomAttributes.FindIndex(x => string.Compare(x.name, name, StringComparison.OrdinalIgnoreCase) == 0) != -1; + return !string.IsNullOrEmpty(name) && m_CustomAttributes.ContainsKey(name); } public void ClearCustomAttributes() @@ -409,31 +411,31 @@ public bool TryRegisterCustomAttribute(string name, CustomAttributeUtility.Signa } newAttribute.description = description; - m_CustomAttributes.Add(newAttribute); + m_CustomAttributes.Add(newAttribute.name, newAttribute); + return true; } public void UnregisterCustomAttribute(string name) { - m_CustomAttributes.RemoveAll(x => string.Compare(x.name, name, StringComparison.OrdinalIgnoreCase) == 0); + m_CustomAttributes.Remove(name); } public RenameStatus TryRename(string oldName, string newName) { - var existingCustomAttributeIndex = m_CustomAttributes.FindIndex(x => string.Compare(x.name, oldName, StringComparison.OrdinalIgnoreCase) == 0); - if (existingCustomAttributeIndex == -1) + bool oldFound = m_CustomAttributes.TryGetValue(oldName, out VFXAttribute existingCustomAttribute); + if (!oldFound) { return RenameStatus.NotFound; } - if (ExistsBuiltInOnly(newName)) + if(ExistsBuiltInOnly(newName)) { return RenameStatus.NameUsed; } - var existingCustomAttribute = m_CustomAttributes[existingCustomAttributeIndex]; - var existingCustomAttributeNewNameIndex = m_CustomAttributes.FindIndex(x => string.Compare(x.name, newName, StringComparison.OrdinalIgnoreCase) == 0); - if (existingCustomAttributeNewNameIndex != -1 && existingCustomAttributeNewNameIndex != existingCustomAttributeIndex) + bool newFound = m_CustomAttributes.TryGetValue(newName, out VFXAttribute existingCustomAttributeNewName); + if (newFound && !existingCustomAttributeNewName.Equals(existingCustomAttribute)) { return RenameStatus.NameUsed; } @@ -444,9 +446,9 @@ public RenameStatus TryRename(string oldName, string newName) return RenameStatus.InvalidName; } - m_CustomAttributes.Remove(existingCustomAttribute); + m_CustomAttributes.Remove(oldName); existingCustomAttribute.Rename(newName); - m_CustomAttributes.Add(existingCustomAttribute); + m_CustomAttributes.Add(newName, existingCustomAttribute); return RenameStatus.Success; } From 5fa6a37876661a95207c9b1ed1f9920edb501444 Mon Sep 17 00:00:00 2001 From: Pema Malling Date: Fri, 22 Nov 2024 14:24:44 +0000 Subject: [PATCH 63/85] UUM-78573: "Bake Probe Volumes" button does not store that lights are baked https://jira.unity3d.com/browse/UUM-78573 This fix addresses a bug that caused the various buttons for baking only Adaptive Probe Volumes to malfunction - they would update the lights in the scene to act as baked, to avoid double-contribution from realtime lighting, but would do so in a way that wasn't persistent across scene reloads. The root cause is not properly respecting the Lighting Data Asset (LDA). The baked state of each light is stored in the LDA, _not_ on the lights themselves. Changing only the state on the lights themselves will not make a persistent change, and reloading the scene will reload the old unmodified data. To make the change persistent, we need to modify the LDA. To fix this, I've taken an approach similar to what we do with reflection probes, which have the same issue: - When you bake only probe volumes, and the scene has no LDA, we create a new empty LDA, assign it to the scene, and fill in the up-to-date states. - When you bake only probes volumes, and the scene already has a LDA, we modify this LDA to contain up-to-date states for each light. I had to add a few pieces of public API to achieve this. --- .../ProbeGIBaking.LightTransport.cs | 62 +++++++++++++++++-- .../Lighting/ProbeVolume/ProbeGIBaking.cs | 2 +- .../ProbeVolume/ProbeVolumeLightingTab.cs | 5 +- 3 files changed, 63 insertions(+), 6 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.LightTransport.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.LightTransport.cs index a0be9e1a2b9..67d6182f5d9 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.LightTransport.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.LightTransport.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Runtime.CompilerServices; using Unity.Collections; using UnityEditor; @@ -8,7 +9,7 @@ using UnityEngine.LightTransport.PostProcessing; using UnityEngine.Rendering.Sampling; using UnityEngine.Rendering.UnifiedRayTracing; - +using UnityEngine.SceneManagement; using TouchupVolumeWithBoundsList = System.Collections.Generic.List<(UnityEngine.Rendering.ProbeReferenceVolume.Volume obb, UnityEngine.Bounds aabb, UnityEngine.Rendering.ProbeAdjustmentVolume volume)>; namespace UnityEngine.Rendering @@ -584,13 +585,16 @@ public void Dispose() } } + // The contribution from all Baked and Mixed lights in the scene should be disabled to avoid double contribution. static void UpdateLightStatus() { var lightingSettings = ProbeVolumeLightingTab.GetLightingSettings(); - // The contribution from all Baked and Mixed lights in the scene should be disabled to avoid double contribution. - var lights = Object.FindObjectsByType(FindObjectsSortMode.None); - foreach (var light in lights) + var sceneLights = new Dictionary>(); + + // Modify each baked light, take note of which scenes they belong to. + var allLights = Object.FindObjectsByType(FindObjectsSortMode.None); + foreach (var light in allLights) { if (light.lightmapBakeType != LightmapBakeType.Realtime) { @@ -600,6 +604,56 @@ static void UpdateLightStatus() bakingOutput.mixedLightingMode = lightingSettings.mixedBakeMode; light.bakingOutput = bakingOutput; } + + // Take note of the lights from each scene + var scene = light.gameObject.scene; + if (!sceneLights.TryGetValue(scene, out var sceneLightList)) + { + sceneLightList = new List(); + sceneLights.Add(scene, sceneLightList); + } + sceneLightList.Add(light); + } + + // Now we make the modifications persistent by modifying Lighting Data Assets (LDA) on disk. + string ldaFolderPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(m_BakingSet)); + for (int i = 0; i < m_BakingSet.sceneGUIDs.Count; i++) + { + string guid = m_BakingSet.sceneGUIDs[i]; + Scene scene = SceneManager.GetSceneByPath(AssetDatabase.GUIDToAssetPath(guid)); + if (!scene.isLoaded) + continue; + + LightingDataAsset prevLDA = Lightmapping.GetLightingDataAssetForScene(scene); + LightingDataAsset newLDA = prevLDA; + + // If the scene has no (modifiable) LDA, create a new one. + bool isDefaultLDA = prevLDA && prevLDA.hideFlags.HasFlag(HideFlags.NotEditable); + if (prevLDA == null || isDefaultLDA) + { + newLDA = new LightingDataAsset(scene); + } + + // Update the LDA with the new light settings + if (sceneLights.TryGetValue(scene, out var lights)) + newLDA.SetLights(lights.ToArray()); + else + newLDA.SetLights(Array.Empty()); + + // If the scene was using the builtin/default LDA before, copy over environment lighting, so it doesn't change. + if (prevLDA != null) + { + newLDA.SetAmbientProbe(prevLDA.GetAmbientProbe()); + newLDA.SetDefaultReflectionCubemap(prevLDA.GetDefaultReflectionCubemap()); + } + + // Save the LDA to disk and assign it to the scene. + if (newLDA != prevLDA) + { + string ldaPath = $"{ldaFolderPath}/LightingData-{i}.asset".Replace('\\', '/'); + AssetDatabase.CreateAsset(newLDA, ldaPath); + Lightmapping.SetLightingDataAssetForScene(scene, newLDA); + } } } diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs index e54acb2bfd8..922c77f8979 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeGIBaking.cs @@ -1234,7 +1234,7 @@ static void FixSeams(NativeArray positionRemap, NativeArray positi // the dilation process consits in doing a trilinear sample of the higher subdivision brick and override the lower subdiv with that // We have to mark the probes on the boundary as valid otherwise leak reduction at runtime will interfere with this method - + // Use an indirection structure to ensure mem usage stays reasonable VoxelToBrickCache cache = new VoxelToBrickCache(); diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs index 6da03237a47..fca2f9f3be1 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/ProbeVolumeLightingTab.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Reflection; using System.Collections.Generic; +using System.IO; using UnityEditor; using UnityEditor.Rendering; using UnityEditor.SceneManagement; @@ -510,7 +511,9 @@ void SaveTempBakingSetIfNeeded() string path = string.IsNullOrEmpty(scene.path) ? ProbeVolumeBakingSet.GetDirectory("Assets/", "Untitled") : ProbeVolumeBakingSet.GetDirectory(scene.path, scene.name); - path = System.IO.Path.Combine(path, activeSet.name + ".asset"); + if (!Directory.Exists(path)) + Directory.CreateDirectory(path); + path = Path.Combine(path, activeSet.name + ".asset"); path = AssetDatabase.GenerateUniqueAssetPath(path); AssetDatabase.CreateAsset(activeSet, path); From eb5649b4979e6f3b4f27483436a3adef3d845c62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Chapelain?= Date: Fri, 22 Nov 2024 14:25:16 +0000 Subject: [PATCH 64/85] [HDRP] Fix decal projector material creation Following recent QoL PR, for coherence we decided to add a new button also for the Decal Projector component. This material creation follows the UX pattern of the custom passes shaders, i.e: - Creating the asset in the current folder - Focus on renaming right after creation ![image](https://media.github.cds.internal.unity3d.com/user/1764/files/cc1d3ca1-d56c-43ea-98d5-a619235de601) also did the same on URP for feature parity. The only difference is that there's no URP/Decal material so we just create a material based on the default decal material SG located here : com.unity.render-pipelines.universal\Shaders\Decal.shadergraph ![image](https://media.github.cds.internal.unity3d.com/user/1764/files/136a33a3-1879-4428-82fa-b202f97528f6) --- .../Material/Decal/DecalProjectorEditor.cs | 91 ++++++++++++++++++- .../Decal/ShaderGraph/DecalSubTarget.cs | 33 +++++++ .../Editor/Decal/DecalProjectorEditor.Skin.cs | 2 + .../Editor/Decal/DecalProjectorEditor.cs | 40 +++++++- 4 files changed, 164 insertions(+), 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Decal/DecalProjectorEditor.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Decal/DecalProjectorEditor.cs index 302aa95b93f..78c94c8aa18 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Decal/DecalProjectorEditor.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Decal/DecalProjectorEditor.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; using UnityEditor.IMGUI.Controls; +using UnityEditor.Rendering.HighDefinition.ShaderGraph; using UnityEditor.ShaderGraph; using UnityEditor.ShortcutManagement; using UnityEngine; +using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; using static UnityEditorInternal.EditMode; using RenderingLayerMask = UnityEngine.RenderingLayerMask; @@ -17,6 +19,16 @@ partial class DecalProjectorEditor : Editor const float k_Limit = 100000; const float k_LimitInv = 1 / k_Limit; + + static public readonly GUIContent k_NewDecalMaterialButtonText = EditorGUIUtility.TrTextContent("New", "Creates a new Decal material."); + static public readonly string k_NewDecalText = "HDRP Decal"; + static public readonly string k_NewSGDecalText = "ShaderGraph Decal"; + + internal enum DefaultDecal + { + HDRPDecal, + SGDecal + } static Color fullColor { get @@ -715,7 +727,7 @@ public override void OnInspectorGUI() ReinitSavedRatioSizePivotPosition(); EditorGUI.EndProperty(); - EditorGUILayout.PropertyField(m_MaterialProperty, k_MaterialContent); + DecalMaterialFieldWithButton(m_MaterialProperty); bool decalLayerEnabled = false; if (hdrp != null) @@ -837,6 +849,54 @@ public override void OnInspectorGUI() } } + internal void DecalMaterialFieldWithButton(SerializedProperty prop) + { + const int k_NewFieldWidth = 70; + + var rect = EditorGUILayout.GetControlRect(); + rect.xMax -= k_NewFieldWidth + 2; + + EditorGUI.PropertyField(rect, prop); + + var newFieldRect = rect; + newFieldRect.x = rect.xMax + 2; + newFieldRect.width = k_NewFieldWidth; + + if (!EditorGUI.DropdownButton(newFieldRect, k_NewDecalMaterialButtonText, FocusType.Keyboard)) + return; + + GenericMenu menu = new GenericMenu(); + menu.AddItem(new GUIContent(k_NewDecalText), false, () => CreateDefaultDecalMaterial(target as MonoBehaviour, DefaultDecal.HDRPDecal)); + menu.AddItem(new GUIContent(k_NewSGDecalText), false, () => CreateDefaultDecalMaterial(target as MonoBehaviour, DefaultDecal.SGDecal)); + menu.DropDown(newFieldRect); + } + + public static void CreateDefaultDecalMaterial(MonoBehaviour obj, DefaultDecal defaultDecal) + { + string materialName = ""; + var materialIcon = AssetPreview.GetMiniTypeThumbnail(typeof(Material)); + + var action = ScriptableObject.CreateInstance(); + action.decalProjector = obj as DecalProjector; + + switch (defaultDecal) + { + case DefaultDecal.HDRPDecal: + materialName = "New " + k_NewDecalText; + action.isShaderGraph = false; + break; + case DefaultDecal.SGDecal: + materialName = "New " + k_NewSGDecalText; + action.isShaderGraph = true; + break; + default: + Debug.LogError("Decal creation failed."); + break; + } + + ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, action, materialName, materialIcon, null); + } + [Shortcut("HDRP/Decal: Handle changing size stretching UV", typeof(SceneView), KeyCode.Keypad1, ShortcutModifiers.Action)] static void EnterEditModeWithoutPreservingUV(ShortcutArguments args) { @@ -904,4 +964,33 @@ static void ExitEditMode(ShortcutArguments args) QuitEditMode(); } } + + class DoCreateDecalDefaultMaterial : ProjectWindowCallback.EndNameEditAction + { + public DecalProjector decalProjector; + public bool isShaderGraph = false; + public override void Action(int instanceId, string pathName, string resourceFile) + { + string shaderGraphName = AssetDatabase.GenerateUniqueAssetPath(pathName + ".shadergraph"); + string materialName = AssetDatabase.GenerateUniqueAssetPath(pathName + ".mat"); + Shader shader = null; + + if (isShaderGraph) + { + shader = DecalSubTarget.CreateDecalGraphAtPath(shaderGraphName); + } + else + { + shader = Shader.Find("HDRP/Decal"); + } + + if (shader != null) + { + var material = new Material(shader); + AssetDatabase.CreateAsset(material, materialName); + ProjectWindowUtil.ShowCreatedAsset(material); + decalProjector.material = material; + } + } + } } diff --git a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Decal/ShaderGraph/DecalSubTarget.cs b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Decal/ShaderGraph/DecalSubTarget.cs index a1b1e2317ec..dc4ee23b8da 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Decal/ShaderGraph/DecalSubTarget.cs +++ b/Packages/com.unity.render-pipelines.high-definition/Editor/Material/Decal/ShaderGraph/DecalSubTarget.cs @@ -8,6 +8,7 @@ using static UnityEngine.Rendering.HighDefinition.HDMaterial; using static UnityEngine.Rendering.HighDefinition.HDMaterialProperties; using static UnityEditor.Rendering.HighDefinition.HDFields; +using UnityEngine; namespace UnityEditor.Rendering.HighDefinition.ShaderGraph { @@ -224,6 +225,38 @@ void AddColorMaskProperty(string referenceName) } } + internal static Shader CreateDecalGraphAtPath(string path) + { + var target = (HDTarget)Activator.CreateInstance(typeof(HDTarget)); + target.TrySetActiveSubTarget(typeof(DecalSubTarget)); + + var blockDescriptors = new[] + { + BlockFields.VertexDescription.Position, + BlockFields.VertexDescription.Normal, + BlockFields.VertexDescription.Tangent, + BlockFields.SurfaceDescription.BaseColor, + BlockFields.SurfaceDescription.Alpha, + BlockFields.SurfaceDescription.NormalTS, + HDBlockFields.SurfaceDescription.NormalAlpha, + BlockFields.SurfaceDescription.Metallic, + BlockFields.SurfaceDescription.Occlusion, + BlockFields.SurfaceDescription.Smoothness, + HDBlockFields.SurfaceDescription.MAOSAlpha, + BlockFields.SurfaceDescription.Emission, + }; + + var graph = new GraphData(); + graph.AddContexts(); + graph.InitializeOutputs(new[] { target }, blockDescriptors); + + graph.path = "Shader Graphs"; + FileUtilities.WriteShaderGraphToDisk(path, graph); + AssetDatabase.Refresh(); + + return AssetDatabase.LoadAssetAtPath(path); + } + #region SubShaders static class SubShaders { diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.Skin.cs b/Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.Skin.cs index da10211d51e..2294730d57b 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.Skin.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.Skin.cs @@ -21,7 +21,9 @@ partial class DecalProjectorEditor static readonly GUIContent k_UVBiasContent = EditorGUIUtility.TrTextContent("Offset", "Sets the offset for the decal Material. Moves the decal along its UV axes."); static readonly GUIContent k_OpacityContent = EditorGUIUtility.TrTextContent("Opacity", "Controls the transparency of the decal."); static readonly GUIContent k_Offset = EditorGUIUtility.TrTextContent("Pivot", "Controls the position of the pivot point of the decal."); + static readonly GUIContent k_NewMaterialButtonText = EditorGUIUtility.TrTextContent("New", "Creates a new decal Material asset template."); + static readonly string k_NewDecalMaterialText = "New Decal"; static readonly string k_BaseSceneEditingToolText = "Decal Scene Editing Mode: "; static readonly string k_EditShapeWithoutPreservingUVName = k_BaseSceneEditingToolText + "Scale"; static readonly string k_EditShapePreservingUVName = k_BaseSceneEditingToolText + "Crop"; diff --git a/Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs b/Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs index 09b57f54482..cf7b308e277 100644 --- a/Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs +++ b/Packages/com.unity.render-pipelines.universal/Editor/Decal/DecalProjectorEditor.cs @@ -4,6 +4,7 @@ using UnityEditor.ShortcutManagement; using UnityEditorInternal; using UnityEngine; +using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; using static UnityEditorInternal.EditMode; @@ -626,7 +627,7 @@ public override void OnInspectorGUI() EditorGUILayout.Space(); EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(m_MaterialProperty, k_MaterialContent); + MaterialFieldWithButton(m_MaterialProperty, k_MaterialContent); materialChanged = EditorGUI.EndChangeCheck(); EditorUtils.DrawRenderingLayerMask(m_RenderingLayerMask, k_RenderingLayerMaskContent); @@ -729,6 +730,30 @@ public override void OnInspectorGUI() } } + internal void MaterialFieldWithButton(SerializedProperty prop, GUIContent label) + { + const int k_NewFieldWidth = 70; + + var rect = EditorGUILayout.GetControlRect(); + rect.xMax -= k_NewFieldWidth + 2; + + EditorGUI.PropertyField(rect, prop, label); + + var newFieldRect = rect; + newFieldRect.x = rect.xMax + 2; + newFieldRect.width = k_NewFieldWidth; + + if (GUI.Button(newFieldRect, k_NewMaterialButtonText)) + { + string materialName = k_NewDecalMaterialText + ".mat"; + var materialIcon = AssetPreview.GetMiniTypeThumbnail(typeof(Material)); + var action = ScriptableObject.CreateInstance(); + action.decalProjector = target as DecalProjector; + ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, action, materialName, materialIcon, null); + } + + } + [Shortcut("URP/Decal: Handle changing size stretching UV", typeof(SceneView), KeyCode.Keypad1, ShortcutModifiers.Action)] static void EnterEditModeWithoutPreservingUV(ShortcutArguments args) { @@ -796,4 +821,17 @@ static void ExitEditMode(ShortcutArguments args) QuitEditMode(); } } + + class DoCreateDecalDefaultMaterial : ProjectWindowCallback.EndNameEditAction + { + public DecalProjector decalProjector; + public override void Action(int instanceId, string pathName, string resourceFile) + { + var shader = DecalProjector.defaultMaterial.shader; + var material = new Material(shader); + AssetDatabase.CreateAsset(material, pathName); + ProjectWindowUtil.ShowCreatedAsset(material); + decalProjector.material = material; + } + } } From e33e6ae5289de3023702120d882abe5f5b20af8c Mon Sep 17 00:00:00 2001 From: Giorgos Petkakis Date: Fri, 22 Nov 2024 14:26:02 +0000 Subject: [PATCH 65/85] Move Graphics Test Framework to Standard Path This PR moves the Graphics Test Framework package to a path that includes the hyphen in the name. This is done in order to make the path standardized to the other existing paths we have. As discussed on Slack, renaming the package cannot happen right now, but moving it to a different path is okay. https://jira.unity3d.com/browse/GSDET-396 --- .../Projects/BatchRendererGroup_HDRP/Packages/manifest.json | 2 +- .../Projects/BatchRendererGroup_URP/Packages/manifest.json | 2 +- .../BuiltInGraphicsTest_Foundation/Packages/manifest.json | 2 +- .../BuiltInGraphicsTest_Lighting/Packages/manifest.json | 2 +- Tests/SRPTests/Projects/HDRP_DXR_Tests/Packages/manifest.json | 2 +- .../Projects/HDRP_PerformanceTests/Packages/manifest.json | 2 +- .../SRPTests/Projects/HDRP_RuntimeTests/Packages/manifest.json | 2 +- Tests/SRPTests/Projects/HDRP_Tests/Packages/manifest.json | 2 +- .../SRPTests/Projects/MultipleSRP_Tests/Packages/manifest.json | 2 +- Tests/SRPTests/Projects/ShaderGraph/Packages/manifest.json | 2 +- .../Projects/ShaderGraphUniversalStereo/Packages/manifest.json | 2 +- .../Projects/UniversalGraphicsTest_2D/Packages/manifest.json | 2 +- .../UniversalGraphicsTest_Foundation/Packages/manifest.json | 2 +- .../UniversalGraphicsTest_Lighting/Packages/manifest.json | 2 +- .../UniversalGraphicsTest_PostPro/Packages/manifest.json | 2 +- .../UniversalGraphicsTest_Terrain/Packages/manifest.json | 2 +- .../Projects/VisualEffectGraph_HDRP/Packages/manifest.json | 2 +- .../Projects/VisualEffectGraph_URP/Packages/manifest.json | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Tests/SRPTests/Projects/BatchRendererGroup_HDRP/Packages/manifest.json b/Tests/SRPTests/Projects/BatchRendererGroup_HDRP/Packages/manifest.json index de27410d1b5..1d16d4d4a25 100644 --- a/Tests/SRPTests/Projects/BatchRendererGroup_HDRP/Packages/manifest.json +++ b/Tests/SRPTests/Projects/BatchRendererGroup_HDRP/Packages/manifest.json @@ -11,7 +11,7 @@ "com.unity.render-pipelines.high-definition-config": "file:../../../../../Packages/com.unity.render-pipelines.high-definition-config", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.brg": "file:../../../Packages/com.unity.testing.brg", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", diff --git a/Tests/SRPTests/Projects/BatchRendererGroup_URP/Packages/manifest.json b/Tests/SRPTests/Projects/BatchRendererGroup_URP/Packages/manifest.json index 8e576fcefc3..8ccf0b8fb4c 100644 --- a/Tests/SRPTests/Projects/BatchRendererGroup_URP/Packages/manifest.json +++ b/Tests/SRPTests/Projects/BatchRendererGroup_URP/Packages/manifest.json @@ -10,7 +10,7 @@ "com.unity.render-pipelines.universal-config": "file:../../../../../Packages/com.unity.render-pipelines.universal-config", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.brg": "file:../../../Packages/com.unity.testing.brg", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", diff --git a/Tests/SRPTests/Projects/BuiltInGraphicsTest_Foundation/Packages/manifest.json b/Tests/SRPTests/Projects/BuiltInGraphicsTest_Foundation/Packages/manifest.json index c9dee4a4a98..09535cd322e 100644 --- a/Tests/SRPTests/Projects/BuiltInGraphicsTest_Foundation/Packages/manifest.json +++ b/Tests/SRPTests/Projects/BuiltInGraphicsTest_Foundation/Packages/manifest.json @@ -14,7 +14,7 @@ "com.unity.render-pipelines.universal-config": "file:../../../../../Packages/com.unity.render-pipelines.universal-config", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", "com.unity.modules.ai": "1.0.0", diff --git a/Tests/SRPTests/Projects/BuiltInGraphicsTest_Lighting/Packages/manifest.json b/Tests/SRPTests/Projects/BuiltInGraphicsTest_Lighting/Packages/manifest.json index c9dee4a4a98..09535cd322e 100644 --- a/Tests/SRPTests/Projects/BuiltInGraphicsTest_Lighting/Packages/manifest.json +++ b/Tests/SRPTests/Projects/BuiltInGraphicsTest_Lighting/Packages/manifest.json @@ -14,7 +14,7 @@ "com.unity.render-pipelines.universal-config": "file:../../../../../Packages/com.unity.render-pipelines.universal-config", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", "com.unity.modules.ai": "1.0.0", diff --git a/Tests/SRPTests/Projects/HDRP_DXR_Tests/Packages/manifest.json b/Tests/SRPTests/Projects/HDRP_DXR_Tests/Packages/manifest.json index edf49babc7f..4fe25f5cc37 100644 --- a/Tests/SRPTests/Projects/HDRP_DXR_Tests/Packages/manifest.json +++ b/Tests/SRPTests/Projects/HDRP_DXR_Tests/Packages/manifest.json @@ -10,7 +10,7 @@ "com.unity.rendering.denoising": "1.0.5", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.hdrp": "file:../../../Packages/com.unity.testing.hdrp", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", diff --git a/Tests/SRPTests/Projects/HDRP_PerformanceTests/Packages/manifest.json b/Tests/SRPTests/Projects/HDRP_PerformanceTests/Packages/manifest.json index 76c368f4d6c..11e398db685 100644 --- a/Tests/SRPTests/Projects/HDRP_PerformanceTests/Packages/manifest.json +++ b/Tests/SRPTests/Projects/HDRP_PerformanceTests/Packages/manifest.json @@ -10,7 +10,7 @@ "com.unity.shaderanalysis": "file:../../../../../Packages/com.unity.shaderanalysis", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.test-framework.graphics.performance": "file:../../../Packages/com.unity.test-framework.graphics.performance", "com.unity.ugui": "2.0.0", "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", diff --git a/Tests/SRPTests/Projects/HDRP_RuntimeTests/Packages/manifest.json b/Tests/SRPTests/Projects/HDRP_RuntimeTests/Packages/manifest.json index 9d96adc60ab..afbe701a602 100644 --- a/Tests/SRPTests/Projects/HDRP_RuntimeTests/Packages/manifest.json +++ b/Tests/SRPTests/Projects/HDRP_RuntimeTests/Packages/manifest.json @@ -8,7 +8,7 @@ "com.unity.render-pipelines.high-definition-config": "file:../../../../../Packages/com.unity.render-pipelines.high-definition-config", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.hdrp": "file:../../../Packages/com.unity.testing.hdrp", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", diff --git a/Tests/SRPTests/Projects/HDRP_Tests/Packages/manifest.json b/Tests/SRPTests/Projects/HDRP_Tests/Packages/manifest.json index 7fdad536677..3559e93766b 100644 --- a/Tests/SRPTests/Projects/HDRP_Tests/Packages/manifest.json +++ b/Tests/SRPTests/Projects/HDRP_Tests/Packages/manifest.json @@ -12,7 +12,7 @@ "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "local.code.coverage.references": "file:../../../Packages/local.code.coverage.references", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.hdrp": "file:../../../Packages/com.unity.testing.hdrp", "com.unity.testing.common-graphics": "file:../../../Packages/com.unity.testing.common-graphics", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", diff --git a/Tests/SRPTests/Projects/MultipleSRP_Tests/Packages/manifest.json b/Tests/SRPTests/Projects/MultipleSRP_Tests/Packages/manifest.json index b0c940abe23..d1d6b3c8d7b 100644 --- a/Tests/SRPTests/Projects/MultipleSRP_Tests/Packages/manifest.json +++ b/Tests/SRPTests/Projects/MultipleSRP_Tests/Packages/manifest.json @@ -11,7 +11,7 @@ "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.timeline": "1.8.0", "com.unity.ugui": "2.0.0", "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", diff --git a/Tests/SRPTests/Projects/ShaderGraph/Packages/manifest.json b/Tests/SRPTests/Projects/ShaderGraph/Packages/manifest.json index 21209001c0e..86c565c2678 100644 --- a/Tests/SRPTests/Projects/ShaderGraph/Packages/manifest.json +++ b/Tests/SRPTests/Projects/ShaderGraph/Packages/manifest.json @@ -7,7 +7,7 @@ "com.unity.render-pipelines.universal-config": "file:../../../../../Packages/com.unity.render-pipelines.universal-config", "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testtools.codecoverage": "1.1.0", "com.unity.ugui": "2.0.0", "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", diff --git a/Tests/SRPTests/Projects/ShaderGraphUniversalStereo/Packages/manifest.json b/Tests/SRPTests/Projects/ShaderGraphUniversalStereo/Packages/manifest.json index 1d11f12c7b5..2aafdcd2068 100644 --- a/Tests/SRPTests/Projects/ShaderGraphUniversalStereo/Packages/manifest.json +++ b/Tests/SRPTests/Projects/ShaderGraphUniversalStereo/Packages/manifest.json @@ -9,7 +9,7 @@ "com.unity.render-pipelines.universal-config": "file:../../../../../Packages/com.unity.render-pipelines.universal-config", "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", "com.unity.shadergraph": "file:../../../../../Packages/com.unity.shadergraph", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.ugui": "2.0.0", "com.unity.xr.mock-hmd": "1.1.1-preview.1", "local.utf.references": "file:../../../Packages/local.utf.references", diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Packages/manifest.json b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Packages/manifest.json index 1113b4e34fb..55525e9be08 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Packages/manifest.json +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_2D/Packages/manifest.json @@ -18,7 +18,7 @@ "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", "local.code.coverage.references": "file:../../../Packages/local.code.coverage.references", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", "com.unity.modules.ai": "1.0.0", diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Packages/manifest.json b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Packages/manifest.json index ee727725908..c1baedd7e35 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Packages/manifest.json +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Packages/manifest.json @@ -16,7 +16,7 @@ "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", "local.code.coverage.references": "file:../../../Packages/local.code.coverage.references", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.urp": "file:../../../Packages/com.unity.testing.urp", "com.unity.testing.common-graphics": "file:../../../Packages/com.unity.testing.common-graphics", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Packages/manifest.json b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Packages/manifest.json index 896aacb2e64..f27cc2f4baa 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Packages/manifest.json +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Lighting/Packages/manifest.json @@ -15,7 +15,7 @@ "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", "local.code.coverage.references": "file:../../../Packages/local.code.coverage.references", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.urp": "file:../../../Packages/com.unity.testing.urp", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_PostPro/Packages/manifest.json b/Tests/SRPTests/Projects/UniversalGraphicsTest_PostPro/Packages/manifest.json index 4bf1eaca36e..cb097897494 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_PostPro/Packages/manifest.json +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_PostPro/Packages/manifest.json @@ -16,7 +16,7 @@ "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", "local.code.coverage.references": "file:../../../Packages/local.code.coverage.references", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.urp": "file:../../../Packages/com.unity.testing.urp", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Terrain/Packages/manifest.json b/Tests/SRPTests/Projects/UniversalGraphicsTest_Terrain/Packages/manifest.json index eeea03ca6f8..dbbc5142609 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Terrain/Packages/manifest.json +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Terrain/Packages/manifest.json @@ -15,7 +15,7 @@ "com.unity.rendering.light-transport": "file:../../../../../Packages/com.unity.rendering.light-transport", "local.code.coverage.references": "file:../../../Packages/local.code.coverage.references", "local.utf.references": "file:../../../Packages/local.utf.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "com.unity.testing.urp": "file:../../../Packages/com.unity.testing.urp", "com.unity.testing.xr": "file:../../../Packages/com.unity.testing.xr", "com.unity.ugui": "2.0.0", diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Packages/manifest.json b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Packages/manifest.json index f68604d8432..be316a849c2 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Packages/manifest.json +++ b/Tests/SRPTests/Projects/VisualEffectGraph_HDRP/Packages/manifest.json @@ -19,7 +19,7 @@ "com.unity.ugui": "2.0.0", "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", "local.code.coverage.references": "file:../../../Packages/local.code.coverage.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "local.utf.references": "file:../../../Packages/local.utf.references", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", diff --git a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Packages/manifest.json b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Packages/manifest.json index 858ab5e9dca..489f0dc505a 100644 --- a/Tests/SRPTests/Projects/VisualEffectGraph_URP/Packages/manifest.json +++ b/Tests/SRPTests/Projects/VisualEffectGraph_URP/Packages/manifest.json @@ -18,7 +18,7 @@ "com.unity.visualeffectgraph": "file:../../../../../Packages/com.unity.visualeffectgraph", "com.unity.xr.legacyinputhelpers": "2.1.2", "local.code.coverage.references": "file:../../../Packages/local.code.coverage.references", - "com.unity.testframework.graphics": "file:../../../Packages/com.unity.testframework.graphics", + "com.unity.testframework.graphics": "8.9.1-exp.1", "local.utf.references": "file:../../../Packages/local.utf.references", "com.unity.modules.ai": "1.0.0", "com.unity.modules.androidjni": "1.0.0", From f1491725e10299eed9ae1a419e48452c5fd31dc1 Mon Sep 17 00:00:00 2001 From: Julien Amsellem Date: Sat, 23 Nov 2024 06:00:11 +0000 Subject: [PATCH 66/85] [VFX] In some specific circumstances, an exception can prevent opening a VFX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jira: UUM-85231 How to reproduce: 1. Open the attached “IN-82864” project 2. In the Assets folder open the “EnemyDeath” VFX Graph file 3. Observe the Console log and the Windows prompt Expected result: VFX Graph window opens as intended without any errors Actual result: VFX Graph window doesn’t open, a Windows prompt “Select an app to open this .vfx file” appears and an error is logged into the console Reproducible in: 2022.3.38f1, 6000.0.22f1 Reproducible on: Windows 11 Not reproducible on: No other environments tested Note: Not reproduced internally by CQA ![](https://jira.unity3d.com/secure/attachment/1568365/image_2024-10-11_214015432.png) [Provided file](https://jira.unity3d.com/secure/attachment/1568363/EnemyDeath.vfx) --- .../Editor/GraphView/VFXComponentBoard.cs | 2 +- .../Editor/GraphView/Views/VFXView.cs | 6 ------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXComponentBoard.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXComponentBoard.cs index 4842b75048b..91995775635 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXComponentBoard.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/VFXComponentBoard.cs @@ -338,7 +338,7 @@ void DeleteBoundsRecorder() void UpdateBoundsRecorder() { - if (controller != null && m_AttachedComponent != null && m_View.controller.graph != null) + if (controller != null && m_AttachedComponent != null && m_View.controller?.graph != null) { bool wasRecording = false; if (m_BoundsRecorder != null) diff --git a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/VFXView.cs b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/VFXView.cs index 9e175ededa2..0a16d099879 100644 --- a/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/VFXView.cs +++ b/Packages/com.unity.visualeffectgraph/Editor/GraphView/Views/VFXView.cs @@ -696,12 +696,6 @@ public VFXView() m_ComponentBoard = new VFXComponentBoard(this); m_ProfilingBoard = new VFXProfilingBoard(this); -#if _ENABLE_RESTORE_BOARD_VISIBILITY - bool componentBoardVisible = BoardPreferenceHelper.IsVisible(BoardPreferenceHelper.Board.componentBoard, false); - if (componentBoardVisible) - ShowComponentBoard(); - toggleComponentBoard.value = componentBoardVisible; -#endif Add(m_LockedElement); Add(m_NoAssetElement); From f56798babf19c7ecfc43e71c6d71ca495e71b48c Mon Sep 17 00:00:00 2001 From: Alexey Orlov Date: Sat, 23 Nov 2024 06:01:05 +0000 Subject: [PATCH 67/85] [editor] Fixed scene filtering with rendergraph not working on metal Editor: when doing scene filter we reuse depth from the "normal" render pass to draw selection highlights in "filter" pass, so it needs to be preserved in render graph --- .../Runtime/UniversalRendererRenderGraph.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs index cf0778f34e9..877bb5a30eb 100644 --- a/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs +++ b/Packages/com.unity.render-pipelines.universal/Runtime/UniversalRendererRenderGraph.cs @@ -622,6 +622,12 @@ void CreateRenderGraphCameraRenderTargets(RenderGraph renderGraph, bool isCamera RenderingUtils.ReAllocateHandleIfNeeded(ref m_RenderGraphCameraDepthHandle, depthDescriptor, FilterMode.Point, TextureWrapMode.Clamp, name: "_CameraDepthAttachment"); importDepthParams.discardOnLastUse = lastCameraInTheStack; + #if UNITY_EDITOR + // scene filtering will reuse "camera" depth from the normal pass for the "filter highlight" effect + if (cameraData.isSceneViewCamera && CoreUtils.IsSceneFilteringEnabled()) + importDepthParams.discardOnLastUse = false; + #endif + resourceData.cameraDepth = renderGraph.ImportTexture(m_RenderGraphCameraDepthHandle, importDepthParams); resourceData.activeDepthID = UniversalResourceData.ActiveID.Camera; From 9869ee0f59f7bb268bea57037951c525e5e62157 Mon Sep 17 00:00:00 2001 From: Adrian Smith Date: Sat, 23 Nov 2024 06:01:16 +0000 Subject: [PATCH 68/85] Fixed compute shader for baking probe volumes To fix an issue where baking for probe volumes would fail in the Editor when Switch was selected as a runtime platform Although the shader is used in Editor, the asset import mechanism requires that the shader is valid for the selected runtime platform. We add support for Nintendo Switch in the same way that other runtime platforms are supported by the shader --- .../ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader index 879857d256c..f15265fdf19 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader +++ b/Packages/com.unity.render-pipelines.core/Editor/Lighting/ProbeVolume/VirtualOffset/TraceVirtualOffset.urtshader @@ -1,4 +1,4 @@ -#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal webgpu +#pragma only_renderers d3d11 playstation xboxone xboxseries vulkan metal webgpu switch #define UNIFIED_RT_GROUP_SIZE_X 64 #define UNIFIED_RT_GROUP_SIZE_Y 1 From 29d77215d6e0aeebcddf09adcbf668facb8a410f Mon Sep 17 00:00:00 2001 From: Erik Hakala Date: Mon, 25 Nov 2024 16:24:17 +0000 Subject: [PATCH 69/85] Variable Rate Shading SRP Core + URP Variable Rate Shading (VRS) Tier2 support for the SRP. VRS is supported on DX12 and Vulkan only (and additionally depends on the device support). SRP Core: 1. RenderGraph API 2. RenderGraph Compiler updates. 3. CommandBuffer API. 4. Shading Rate support for RTHandles. 5. VRS color to shading rate <-> color conversion utility functions and shaders. 6. VRS color/shading rate look-up-table (LUT). URP: 1. Integration for URP custom passes (ScriptableRendererFeatures). 2. Init/Dispose VRS utility functions and shaders. **Jira:** https://jira.unity3d.com/browse/PLATGRAPH-3329 **POI:** https://jira.unity3d.com/browse/POI-1041 --- .../CommandBufferGenerator.cs | 4 +- .../Editor/PropertyDrawers.meta | 8 + .../Editor/PropertyDrawers/VrsLutDrawer.cs | 60 ++ .../PropertyDrawers/VrsLutDrawer.cs.meta | 2 + .../Runtime/Camera/CameraHistory.cs | 22 +- .../CommandBuffers/ComputeCommandBuffer.cs | 8 + .../CommandBuffers/IComputeCommandBuffer.cs | 8 + .../CommandBuffers/IRasterCommandBuffer.cs | 9 + .../CommandBuffers/RasterCommandBuffer.cs | 9 + .../CommandBuffers/UnsafeCommandBuffer.cs | 17 + .../Compiler/NativePassCompiler.Debug.cs | 6 + .../Compiler/NativePassCompiler.cs | 46 +- .../RenderGraph/Compiler/PassesData.cs | 92 ++- .../RenderGraph/IRenderGraphBuilder.cs | 19 + .../Runtime/RenderGraph/RenderGraph.cs | 42 +- .../RenderGraph/RenderGraphBuilders.cs | 21 + .../Runtime/RenderGraph/RenderGraphPass.cs | 68 ++ .../RenderGraphResourceRegistry.cs | 2 +- .../RenderGraph/RenderGraphResourceTexture.cs | 51 +- .../Textures/BufferedRTHandleSystem.cs | 33 +- .../Runtime/Textures/RTHandleSystem.cs | 169 +++- .../Runtime/Textures/RTHandles.cs | 126 ++- .../Runtime/Utilities/CoreUtils.cs | 31 + .../Runtime/Vrs.meta | 8 + .../Runtime/Vrs/.buginfo | 1 + .../Runtime/Vrs/Shaders.meta | 8 + .../Runtime/Vrs/Shaders/VrsImage.hlsl | 21 + .../Runtime/Vrs/Shaders/VrsImage.hlsl.meta | 3 + .../Runtime/Vrs/Shaders/VrsMainTex.hlsl | 23 + .../Runtime/Vrs/Shaders/VrsMainTex.hlsl.meta | 3 + .../Runtime/Vrs/Shaders/VrsShadingRates.hlsl | 45 + .../Vrs/Shaders/VrsShadingRates.hlsl.meta | 3 + .../Runtime/Vrs/Shaders/VrsTexture.compute | 69 ++ .../Vrs/Shaders/VrsTexture.compute.meta | 7 + .../Runtime/Vrs/Shaders/VrsTileSize.hlsl | 14 + .../Runtime/Vrs/Shaders/VrsTileSize.hlsl.meta | 3 + .../Vrs/Shaders/VrsVisualization.shader | 44 + .../Vrs/Shaders/VrsVisualization.shader.meta | 9 + .../Runtime/Vrs/Vrs.cs | 259 ++++++ .../Runtime/Vrs/Vrs.cs.meta | 2 + .../Runtime/Vrs/VrsLut.cs | 124 +++ .../Runtime/Vrs/VrsLut.cs.meta | 2 + .../Vrs/VrsRenderPipelineRuntimeResources.cs | 72 ++ .../VrsRenderPipelineRuntimeResources.cs.meta | 2 + .../Runtime/Vrs/VrsResources.cs | 145 ++++ .../Runtime/Vrs/VrsResources.cs.meta | 2 + .../Runtime/Vrs/VrsShaders.cs | 24 + .../Runtime/Vrs/VrsShaders.cs.meta | 2 + .../Runtime/RTHandleUtils.cs | 5 +- .../Runtime/RenderingUtils.cs | 119 ++- .../Runtime/UniversalRenderPipeline.cs | 7 +- .../Runtime/UniversalRendererRenderGraph.cs | 2 + .../URPAssets/DefaultURPAsset.asset | 1 + .../Assets/Scenes/350_VRS.meta | 8 + .../Assets/Scenes/350_VRS/UVGrid.mat | 137 ++++ .../Assets/Scenes/350_VRS/UVGrid.mat.meta | 8 + .../350_VRS/VRS_Debug_RendererFeature.cs | 117 +++ .../350_VRS/VRS_Debug_RendererFeature.cs.meta | 3 + .../350_VRS/VRS_Draw_RendererFeature.cs | 146 ++++ .../350_VRS/VRS_Draw_RendererFeature.cs.meta | 2 + .../Assets/Scenes/350_VRS/VRS_Renderer.asset | 104 +++ .../Scenes/350_VRS/VRS_Renderer.asset.meta | 8 + .../350_VRS/VRS_Texture_RendererFeature.cs | 205 +++++ .../VRS_Texture_RendererFeature.cs.meta | 2 + .../Assets/Scenes/350_VRS/VRS_Unlit.shader | 305 +++++++ .../Scenes/350_VRS/VRS_Unlit.shader.meta | 9 + .../Assets/Scenes/350_VRS_CustomPass.unity | 769 ++++++++++++++++++ .../Scenes/350_VRS_CustomPass.unity.meta | 7 + .../Test/TestFilters/TestCaseFilters.asset | 100 +++ .../ProjectSettings/EditorBuildSettings.asset | 3 + 70 files changed, 3576 insertions(+), 239 deletions(-) create mode 100644 Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers.meta create mode 100644 Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers/VrsLutDrawer.cs create mode 100644 Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers/VrsLutDrawer.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/.buginfo create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTexture.compute create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTexture.compute.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsVisualization.shader create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsVisualization.shader.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Vrs.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/Vrs.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsLut.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsLut.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsRenderPipelineRuntimeResources.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsRenderPipelineRuntimeResources.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsResources.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsResources.cs.meta create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsShaders.cs create mode 100644 Packages/com.unity.render-pipelines.core/Runtime/Vrs/VrsShaders.cs.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/UVGrid.mat create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/UVGrid.mat.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Debug_RendererFeature.cs create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Debug_RendererFeature.cs.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Draw_RendererFeature.cs create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Draw_RendererFeature.cs.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Renderer.asset create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Renderer.asset.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Texture_RendererFeature.cs create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Texture_RendererFeature.cs.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Unlit.shader create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS/VRS_Unlit.shader.meta create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS_CustomPass.unity create mode 100644 Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Scenes/350_VRS_CustomPass.unity.meta diff --git a/Packages/com.unity.render-pipelines.core/Editor/CommandBuffers/CommandBufferGenerator/CommandBufferGenerator.cs b/Packages/com.unity.render-pipelines.core/Editor/CommandBuffers/CommandBufferGenerator/CommandBufferGenerator.cs index a0fe400df12..74075bafa61 100644 --- a/Packages/com.unity.render-pipelines.core/Editor/CommandBuffers/CommandBufferGenerator/CommandBufferGenerator.cs +++ b/Packages/com.unity.render-pipelines.core/Editor/CommandBuffers/CommandBufferGenerator/CommandBufferGenerator.cs @@ -110,7 +110,9 @@ class CommandBufferGenerator new FunctionInfo("SetFoveatedRenderingMode", textureArg: "", modifiesGlobalState: true), new FunctionInfo("ConfigureFoveatedRendering", textureArg: "", modifiesGlobalState: true), new FunctionInfo("SetWireframe", textureArg: "", modifiesGlobalState: true), - }; + new FunctionInfo("SetShadingRateFragmentSize", textureArg: "", modifiesGlobalState: false), + new FunctionInfo("SetShadingRateCombiner", textureArg: "", modifiesGlobalState: false), + }; // Functions for unsafe (wrapper around Commandbuffer) only static List unsafeFunctions = new List { diff --git a/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers.meta b/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers.meta new file mode 100644 index 00000000000..c2f69514a6e --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5f6f204246726d84a87fac671dba9b53 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers/VrsLutDrawer.cs b/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers/VrsLutDrawer.cs new file mode 100644 index 00000000000..7a6675e1044 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers/VrsLutDrawer.cs @@ -0,0 +1,60 @@ +using System; +using System.Reflection; +using UnityEngine; +using UnityEngine.Rendering; +using UnityEditor.UIElements; +using UnityEngine.UIElements; + +namespace UnityEditor.Rendering +{ + /// + /// Displays UI for a VrsLut lookup table. Each entry is a + /// ShadingRateFragmentSize enum value that maps to a Color. + /// + [CustomPropertyDrawer(typeof(VrsLut))] + sealed class VrsLutDrawer : PropertyDrawer + { + /// + public override VisualElement CreatePropertyGUI(SerializedProperty property) + { + var foldout = new Foldout() + { + text = property.displayName, + value = property.isExpanded, + }; + + var vrsLutData = GetVrsLutData(property); + VrsLutDataGUI(foldout.contentContainer, vrsLutData); + + VisualElement root = new(); + root.Add(foldout); + return root; + } + + /// + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + if (property.isExpanded) + return (GetVrsLutData(property).arraySize + 1) * EditorGUIUtility.singleLineHeight; + + return EditorGUIUtility.singleLineHeight; + } + + void VrsLutDataGUI(VisualElement contentContainer, SerializedProperty vrsLutData) + { + foreach (var fragmentSizeInfo in shadingRateFragmentSizeFields) + { + var fragmentSizeValue = (ShadingRateFragmentSize) fragmentSizeInfo.GetValue(null); + var inspectorNameAttribute = fragmentSizeInfo.GetCustomAttribute(); + var displayName = inspectorNameAttribute == null ? ObjectNames.NicifyVariableName(fragmentSizeValue.ToString()) : inspectorNameAttribute.displayName; + var lutProp = vrsLutData.GetArrayElementAtIndex((int) fragmentSizeValue); + var propertyField = new PropertyField(lutProp, displayName); + contentContainer.Add(propertyField); + } + } + + static SerializedProperty GetVrsLutData(SerializedProperty property) => property.FindPropertyRelative("m_Data"); + + static FieldInfo[] shadingRateFragmentSizeFields => typeof(ShadingRateFragmentSize).GetFields(BindingFlags.Static | BindingFlags.Public); + } +} diff --git a/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers/VrsLutDrawer.cs.meta b/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers/VrsLutDrawer.cs.meta new file mode 100644 index 00000000000..4eb1244d094 --- /dev/null +++ b/Packages/com.unity.render-pipelines.core/Editor/PropertyDrawers/VrsLutDrawer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f271dd66b05804343bbd8ff052f767a0 \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Camera/CameraHistory.cs b/Packages/com.unity.render-pipelines.core/Runtime/Camera/CameraHistory.cs index 8c45638e9bb..d21c93177cd 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Camera/CameraHistory.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Camera/CameraHistory.cs @@ -151,11 +151,29 @@ protected int MakeId(uint index) protected RTHandle AllocHistoryFrameRT(int id, int count, ref RenderTextureDescriptor desc, string name = "") { - RenderTextureDescriptor d = desc; // Simplified for typical history textures: // Sampling is usually bilinear & clamp. Point sample can be a texture.Load() or done with inline samplers. + return AllocHistoryFrameRT(id, count, ref desc, FilterMode.Bilinear, name); + } + + /// + /// Allocate a history frame RTHandle[] using a descriptor. + /// + /// Id for the history RTHandle storage. + /// Number of RTHandles allocated for the id. + /// Texture descriptor used for each RTHandle in the allocation. + /// Filtering mode of the texture. + /// User visible debug name of the texture. + /// Current frame RTHandle in the allocation. + protected RTHandle AllocHistoryFrameRT(int id, int count, + ref RenderTextureDescriptor desc, + FilterMode filterMode, + string name = "") + { + RenderTextureDescriptor d = desc; + // Simplified for typical history textures: // No shadows, no mipmaps, no aniso. - m_owner.AllocBuffer(id, count, ref desc, FilterMode.Bilinear, TextureWrapMode.Clamp, false, 0, 0, name); + m_owner.AllocBuffer(id, count, ref desc, filterMode, TextureWrapMode.Clamp, false, 0, 0, name); return GetCurrentFrameRT(0); } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/ComputeCommandBuffer.cs b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/ComputeCommandBuffer.cs index 05a98a3c35d..f074eca5418 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/ComputeCommandBuffer.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/ComputeCommandBuffer.cs @@ -763,6 +763,14 @@ internal ComputeCommandBuffer(CommandBuffer wrapped, RenderGraphPass executingPa /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) public void DispatchRays(RayTracingShader rayTracingShader, string rayGenName, uint width, uint height, uint depth, Camera camera) { m_WrappedCommandBuffer.DispatchRays(rayTracingShader, rayGenName, width, height, depth, camera); } + /// Wraps [DispatchRays](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + public void DispatchRays(RayTracingShader rayTracingShader, string rayGenName, GraphicsBuffer argsBuffer, uint argsOffset, Camera camera) { m_WrappedCommandBuffer.DispatchRays(rayTracingShader, rayGenName, argsBuffer, argsOffset, camera); } + /// Wraps [CopyCounterValue](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.CopyCounterValue.html) on a CommandBuffer. /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.CopyCounterValue.html) /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.CopyCounterValue.html) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/IComputeCommandBuffer.cs b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/IComputeCommandBuffer.cs index 061e776c416..a3c7066828b 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/IComputeCommandBuffer.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/IComputeCommandBuffer.cs @@ -588,6 +588,14 @@ public interface IComputeCommandBuffer : IBaseCommandBuffer /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) public void DispatchRays(RayTracingShader rayTracingShader, string rayGenName, uint width, uint height, uint depth, Camera camera) ; + /// Wraps [DispatchRays](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + public void DispatchRays(RayTracingShader rayTracingShader, string rayGenName, GraphicsBuffer argsBuffer, uint argsOffset, Camera camera) ; + /// Wraps [CopyCounterValue](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.CopyCounterValue.html) on a CommandBuffer. /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.CopyCounterValue.html) /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.CopyCounterValue.html) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/IRasterCommandBuffer.cs b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/IRasterCommandBuffer.cs index 853393be47f..07fea04ef9c 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/IRasterCommandBuffer.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/IRasterCommandBuffer.cs @@ -83,6 +83,15 @@ public interface IRasterCommandBuffer : IBaseCommandBuffer /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.ConfigureFoveatedRendering.html) public void ConfigureFoveatedRendering(IntPtr platformData) ; + /// Wraps [SetShadingRateFragmentSize](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateFragmentSize.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateFragmentSize.html) + public void SetShadingRateFragmentSize(ShadingRateFragmentSize shadingRateFragmentSize) ; + + /// Wraps [SetShadingRateCombiner](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) + public void SetShadingRateCombiner(ShadingRateCombinerStage stage, ShadingRateCombiner combiner) ; + /// Wraps [DrawMesh](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) on a CommandBuffer. /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/RasterCommandBuffer.cs b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/RasterCommandBuffer.cs index bba9327e2a1..9adcb5aa6e6 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/RasterCommandBuffer.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/RasterCommandBuffer.cs @@ -258,6 +258,15 @@ internal RasterCommandBuffer(CommandBuffer wrapped, RenderGraphPass executingPas public void InvokeOnRenderObjectCallbacks() { m_WrappedCommandBuffer.InvokeOnRenderObjectCallbacks(); } + /// Wraps [SetShadingRateFragmentSize](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateFragmentSize.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateFragmentSize.html) + public void SetShadingRateFragmentSize(ShadingRateFragmentSize shadingRateFragmentSize) { m_WrappedCommandBuffer.SetShadingRateFragmentSize(shadingRateFragmentSize); } + + /// Wraps [SetShadingRateCombiner](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) + public void SetShadingRateCombiner(ShadingRateCombinerStage stage, ShadingRateCombiner combiner) { m_WrappedCommandBuffer.SetShadingRateCombiner(stage, combiner); } + /// Wraps [DrawMesh](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) on a CommandBuffer. /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/UnsafeCommandBuffer.cs b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/UnsafeCommandBuffer.cs index 6141d802b43..bbea01e9676 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/UnsafeCommandBuffer.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/CommandBuffers/UnsafeCommandBuffer.cs @@ -598,6 +598,15 @@ internal UnsafeCommandBuffer(CommandBuffer wrapped, RenderGraphPass executingPas public void InvokeOnRenderObjectCallbacks() { m_WrappedCommandBuffer.InvokeOnRenderObjectCallbacks(); } + /// Wraps [SetShadingRateFragmentSize](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateFragmentSize.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateFragmentSize.html) + public void SetShadingRateFragmentSize(ShadingRateFragmentSize shadingRateFragmentSize) { m_WrappedCommandBuffer.SetShadingRateFragmentSize(shadingRateFragmentSize); } + + /// Wraps [SetShadingRateCombiner](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetShadingRateCombiner.html) + public void SetShadingRateCombiner(ShadingRateCombinerStage stage, ShadingRateCombiner combiner) { m_WrappedCommandBuffer.SetShadingRateCombiner(stage, combiner); } + /// Wraps [SetComputeFloatParam](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetComputeFloatParam.html) on a CommandBuffer. /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetComputeFloatParam.html) /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.SetComputeFloatParam.html) @@ -1022,6 +1031,14 @@ internal UnsafeCommandBuffer(CommandBuffer wrapped, RenderGraphPass executingPas /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) public void DispatchRays(RayTracingShader rayTracingShader, string rayGenName, uint width, uint height, uint depth, Camera camera) { m_WrappedCommandBuffer.DispatchRays(rayTracingShader, rayGenName, width, height, depth, camera); } + /// Wraps [DispatchRays](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) on a CommandBuffer. + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DispatchRays.html) + public void DispatchRays(RayTracingShader rayTracingShader, string rayGenName, GraphicsBuffer argsBuffer, uint argsOffset, Camera camera) { m_WrappedCommandBuffer.DispatchRays(rayTracingShader, rayGenName, argsBuffer, argsOffset, camera); } + /// Wraps [DrawMesh](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) on a CommandBuffer. /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) /// [See CommandBuffer documentation](https://docs.unity3d.com/ScriptReference/Rendering.CommandBuffer.DrawMesh.html) diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs index e05b1f418f8..25c61409a1c 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.Debug.cs @@ -93,6 +93,12 @@ internal static string MakePassMergeMessage(CompilerContextData ctx, in PassData case PassBreakReason.EndOfGraph: message += "The pass is the last pass in the graph."; break; + case PassBreakReason.DifferentShadingRateImages: + message += $"{prevPassName} uses a different shading rate image than {passName}."; + break; + case PassBreakReason.DifferentShadingRateStates: + message += $"{prevPassName} uses different shading rate states than {passName}."; + break; default: throw new ArgumentOutOfRangeException(); } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs index f835e8abbe2..dbcaca53392 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/NativePassCompiler.cs @@ -197,6 +197,14 @@ void BuildGraph() } } + // shading rate + if (inputPass.hasShadingRateImage && + inputPass.shadingRateAccess.textureHandle.handle.IsValid()) + { + ctxPass.shadingRateImageIndex = ctx.fragmentData.Length; + ctx.AddToFragmentList(inputPass.shadingRateAccess, ctxPass.shadingRateImageIndex, 0); + } + // Grab offset in context fragment list to begin building the fragment input list ctxPass.firstFragmentInput = ctx.fragmentData.Length; @@ -292,7 +300,7 @@ void BuildGraph() for (var i = 0; i < resourceTransCount; ++i) { - var resource = resourceTrans[i]; + var resource = resourceTrans[i]; // Mark this pass as reading from this version of the resource ctx.resources[resource].RegisterReadingPass(ctx, resource, passId, ctxPass.numInputs); @@ -1097,12 +1105,24 @@ private void ValidateNativePass(in NativePassData nativePass, int width, int hei } [Conditional("DEVELOPMENT_BUILD"), Conditional("UNITY_EDITOR")] - private void ValidateAttachmentRenderTarget(in RenderTargetInfo attRenderTargetInfo, RenderGraphResourceRegistry resources, int nativePassWidth, int nativePassHeight, int nativePassMSAASamples) + private void ValidateAttachment(in RenderTargetInfo attRenderTargetInfo, RenderGraphResourceRegistry resources, int nativePassWidth, int nativePassHeight, int nativePassMSAASamples, bool isVrs) { if(RenderGraph.enableValidityChecks) { - if (attRenderTargetInfo.width != nativePassWidth || attRenderTargetInfo.height != nativePassHeight || attRenderTargetInfo.msaaSamples != nativePassMSAASamples) - throw new Exception("Low level rendergraph error: Attachments in renderpass do not match!"); + if (isVrs) + { + var tileSize = ShadingRateImage.GetAllocTileSize(nativePassWidth, nativePassHeight); + + if (attRenderTargetInfo.width != tileSize.x || attRenderTargetInfo.height != tileSize.y || attRenderTargetInfo.msaaSamples != 1) + { + throw new Exception("Low level rendergraph error: Shading rate image attachment in renderpass does not match!"); + } + } + else + { + if (attRenderTargetInfo.width != nativePassWidth || attRenderTargetInfo.height != nativePassHeight || attRenderTargetInfo.msaaSamples != nativePassMSAASamples) + throw new Exception("Low level rendergraph error: Attachments in renderpass do not match!"); + } } } @@ -1135,6 +1155,13 @@ internal unsafe void ExecuteBeginRenderPass(InternalRenderGraphContext rgContext rgContext.cmd.SetFoveatedRenderingMode(FoveatedRenderingMode.Enabled); } + if (nativePass.hasShadingRateStates) + { + rgContext.cmd.SetShadingRateFragmentSize(nativePass.shadingRateFragmentSize); + rgContext.cmd.SetShadingRateCombiner(ShadingRateCombinerStage.Primitive, nativePass.primitiveShadingRateCombiner); + rgContext.cmd.SetShadingRateCombiner(ShadingRateCombinerStage.Fragment, nativePass.fragmentShadingRateCombiner); + } + // Filling the attachments array to be sent to the rendering command buffer m_BeginRenderPassAttachments.Resize(attachmentCount, NativeArrayOptions.UninitializedMemory); for (var i = 0; i < attachmentCount; ++i) @@ -1142,7 +1169,9 @@ internal unsafe void ExecuteBeginRenderPass(InternalRenderGraphContext rgContext ref var currAttachmentHandle = ref attachments[i].handle; resources.GetRenderTargetInfo(currAttachmentHandle, out var renderTargetInfo); - ValidateAttachmentRenderTarget(renderTargetInfo, resources, w, h, s); + + bool isVrs = (i == nativePass.shadingRateImageIndex); + ValidateAttachment(renderTargetInfo, resources, w, h, s, isVrs); ref var currBeginAttachment = ref m_BeginRenderPassAttachments.ElementAt(i); currBeginAttachment = new AttachmentDescriptor(renderTargetInfo.format); @@ -1231,7 +1260,7 @@ internal unsafe void ExecuteBeginRenderPass(InternalRenderGraphContext rgContext } #endif - rgContext.cmd.BeginRenderPass(w, h, d, s, attachmentDescArray, depthAttachmentIndex, nativeSubPassArray, graphPassNamesForDebugSpan); + rgContext.cmd.BeginRenderPass(w, h, d, s, attachmentDescArray, depthAttachmentIndex, nativePass.shadingRateImageIndex, nativeSubPassArray, graphPassNamesForDebugSpan); #if ENABLE_UNITY_COLLECTIONS_CHECKS AtomicSafetyHandle.Release(safetyHandle); @@ -1463,6 +1492,11 @@ public void ExecuteGraph(InternalRenderGraphContext rgContext, RenderGraphResour rgContext.cmd.SetFoveatedRenderingMode(FoveatedRenderingMode.Disabled); } + if (nativePass.hasShadingRateStates || nativePass.hasShadingRateImage) + { + rgContext.cmd.ResetShadingRate(); + } + rgContext.cmd.EndRenderPass(); CommandBuffer.ThrowOnSetRenderTarget = false; inRenderPass = false; diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassesData.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassesData.cs index 082293d57c4..f82c151f6b7 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassesData.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/Compiler/PassesData.cs @@ -86,6 +86,10 @@ internal struct PassData public bool hasFoveatedRasterization; public int tag; // Arbitrary per node int used by various graph analysis tools + public ShadingRateFragmentSize shadingRateFragmentSize; + public ShadingRateCombiner primitiveShadingRateCombiner; + public ShadingRateCombiner fragmentShadingRateCombiner; + public PassMergeState mergeState; public int nativePassIndex; // Index of the native pass this pass belongs to public int nativeSubPassIndex; // Index of the native subpass this pass belongs to @@ -104,6 +108,7 @@ internal struct PassData public int numCreated; public int firstDestroy; //base+offset in CompilerContextData.destroyData (use the InputNodes iterator to iterate this more easily) public int numDestroyed; + public int shadingRateImageIndex; //base+offset in CompilerContextData.fragmentData (there is no iterator, there are always 2 if shading rate is used) public int fragmentInfoWidth; public int fragmentInfoHeight; @@ -118,7 +123,9 @@ internal struct PassData public bool beginNativeSubpass; // If true this is the first graph pass of a merged native subpass public bool fragmentInfoValid; public bool fragmentInfoHasDepth; + public bool fragmentInfoHasShadingRateImage => shadingRateImageIndex > 0; public bool insertGraphicsFence; // Whether this pass should insert a fence into the command buffer + public bool hasShadingRateStates; [MethodImpl(MethodImplOptions.AggressiveInlining)] public Name GetName(CompilerContextData ctx) => ctx.GetFullPassName(passId); @@ -162,6 +169,12 @@ public PassData(in RenderGraphPass pass, int passIndex) insertGraphicsFence = false; waitOnGraphicsFencePassId = -1; + + hasShadingRateStates = pass.hasShadingRateStates; + shadingRateFragmentSize = pass.shadingRateFragmentSize; + primitiveShadingRateCombiner = pass.primitiveShadingRateCombiner; + fragmentShadingRateCombiner = pass.fragmentShadingRateCombiner; + shadingRateImageIndex = -1; } // Helper func to reset and initialize existing PassData struct directly in a data container without costly deep copy (~120bytes) when adding it @@ -205,6 +218,12 @@ public void ResetAndInitialize(in RenderGraphPass pass, int passIndex) insertGraphicsFence = false; waitOnGraphicsFencePassId = -1; + + hasShadingRateStates = pass.hasShadingRateStates; + shadingRateFragmentSize = pass.shadingRateFragmentSize; + primitiveShadingRateCombiner = pass.primitiveShadingRateCombiner; + fragmentShadingRateCombiner = pass.fragmentShadingRateCombiner; + shadingRateImageIndex = -1; } [MethodImpl(MethodImplOptions.AggressiveInlining)] @@ -219,6 +238,10 @@ public readonly ReadOnlySpan Inputs(CompilerContextData ctx) public readonly ReadOnlySpan Fragments(CompilerContextData ctx) => ctx.fragmentData.MakeReadOnlySpan(firstFragment, numFragments); + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public PassFragmentData ShadingRateImage(CompilerContextData ctx) + => ctx.fragmentData[shadingRateImageIndex]; + [MethodImpl(MethodImplOptions.AggressiveInlining)] public readonly ReadOnlySpan FragmentInputs(CompilerContextData ctx) => ctx.fragmentData.MakeReadOnlySpan(firstFragmentInput, numFragmentInputs); @@ -473,6 +496,8 @@ internal enum PassBreakReason SubPassLimitReached, // Addind the next pass would have generated more subpasses than allowed EndOfGraph, // The last pass in the graph was reached FRStateMismatch, // One pass is using foveated rendering and the other not + DifferentShadingRateImages, // The next pass uses a different shading rate image (and we only allow one in a whole NRP) + DifferentShadingRateStates, // The next pass uses different shading rate states (and we only allow one set in a whole NRP) PassMergingDisabled, // Wasn't merged because pass merging is disabled Merged, // I actually got merged @@ -505,7 +530,9 @@ public PassBreakAudit(PassBreakReason reason, int breakPass) $"The limit of {FixedAttachmentArray.MaxAttachments} native pass attachments would be exceeded when merging with the next pass.", $"The limit of {NativePassCompiler.k_MaxSubpass} native subpasses would be exceeded when merging with the next pass.", "This is the last pass in the graph, there are no other passes to merge.", - "The the next pass uses a different foveated rendering state", + "The next pass uses a different foveated rendering state", + "The next pass uses a different shading rate image", + "The next pass uses a different shading rate rendering state", "Pass merging is disabled so this pass was not merged", "The next pass got merged into this pass.", }; @@ -532,8 +559,16 @@ internal struct NativePassData public int height; public int volumeDepth; public int samples; + public int shadingRateImageIndex; + public bool hasDepth; public bool hasFoveatedRasterization; + public bool hasShadingRateImage => shadingRateImageIndex >= 0; + public bool hasShadingRateStates; + + public ShadingRateFragmentSize shadingRateFragmentSize; + public ShadingRateCombiner primitiveShadingRateCombiner; + public ShadingRateCombiner fragmentShadingRateCombiner; public NativePassData(ref PassData pass, CompilerContextData ctx) { @@ -567,6 +602,21 @@ public NativePassData(ref PassData pass, CompilerContextData ctx) fragments.Add(fragment); } + // Shading rate and foveation are distinct systems and mutually exclusive. + // Foveation always taking precedence over VRS. + if (pass.fragmentInfoHasShadingRateImage && !hasFoveatedRasterization) + { + shadingRateImageIndex = fragments.size; + fragments.Add(pass.ShadingRateImage(ctx)); + } + else + shadingRateImageIndex = -1; + + hasShadingRateStates = pass.hasShadingRateStates && !hasFoveatedRasterization; + shadingRateFragmentSize = pass.shadingRateFragmentSize; + primitiveShadingRateCombiner = pass.primitiveShadingRateCombiner; + fragmentShadingRateCombiner = pass.fragmentShadingRateCombiner; + // Graph pass is added as the first native subpass TryMergeNativeSubPass(ctx, ref this, ref pass); } @@ -668,6 +718,38 @@ public static PassBreakAudit CanMerge(CompilerContextData contextData, int activ { return new PassBreakAudit(PassBreakReason.FRStateMismatch, passIdToMerge); } + + // Different shading rate images; only allow one per NRP + if (nativePass.hasShadingRateImage != passToMerge.fragmentInfoHasShadingRateImage) + { + return new PassBreakAudit(PassBreakReason.DifferentShadingRateImages, passIdToMerge); + } + + if (nativePass.hasShadingRateImage) + { + var passToMergeSRI = passToMerge.ShadingRateImage(contextData); + var nativePassSRI = nativePass.fragments[nativePass.shadingRateImageIndex]; + if (nativePassSRI.resource.index != passToMergeSRI.resource.index) + { + return new PassBreakAudit(PassBreakReason.DifferentShadingRateImages, passIdToMerge); + } + } + + // Different shading rate states; only allow one set per NRP + if (nativePass.hasShadingRateStates != passToMerge.hasShadingRateStates) + { + return new PassBreakAudit(PassBreakReason.DifferentShadingRateStates, passIdToMerge); + } + + if (nativePass.hasShadingRateStates) + { + if (nativePass.shadingRateFragmentSize != passToMerge.shadingRateFragmentSize || + nativePass.primitiveShadingRateCombiner != passToMerge.primitiveShadingRateCombiner || + nativePass.fragmentShadingRateCombiner != passToMerge.fragmentShadingRateCombiner) + { + return new PassBreakAudit(PassBreakReason.DifferentShadingRateStates, passIdToMerge); + } + } } // Check the non-fragment inputs of this pass, if they are generated by the current open native pass we can't merge @@ -976,6 +1058,14 @@ public static void TryMergeNativeSubPass(CompilerContextData contextData, ref Na } } + // Shading rate images + { + if (passToMerge.fragmentInfoHasShadingRateImage) + { + desc.flags |= SubPassFlags.UseShadingRateImage; + } + } + if (nativePass.numNativeSubPasses == 0 || !NativePassCompiler.IsSameNativeSubPass(ref desc, ref contextData.nativeSubPassData.ElementAt( nativePass.firstNativeSubPass + diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphBuilder.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphBuilder.cs index 932cfdde1b0..cb9e6d8e235 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphBuilder.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/IRenderGraphBuilder.cs @@ -327,6 +327,25 @@ void SetRenderAttachmentDepth(TextureHandle tex, AccessFlags flags = AccessFlags /// The value passed to 'input'. You should not use the returned value it will be removed in the future. BufferHandle UseBufferRandomAccess(BufferHandle tex, int index, bool preserveCounterValue, AccessFlags flags = AccessFlags.Read); + /// + /// Enables Variable Rate Shading (VRS) on the current rasterization pass. Rasterization will use the texture to determine the rate of fragment shader invocation. + /// + /// Shading rate image (SRI) Texture to use during this pass. + void SetShadingRateImageAttachment(in TextureHandle tex); + + /// + /// Set shading rate fragment size. + /// + /// Shading rate fragment size to set. + void SetShadingRateFragmentSize(ShadingRateFragmentSize shadingRateFragmentSize); + + /// + /// Set shading rate combiner. + /// + /// Shading rate combiner stage to apply combiner to. + /// Shading rate combiner to set. + void SetShadingRateCombiner(ShadingRateCombinerStage stage, ShadingRateCombiner combiner); + /// /// Specify the render function to use for this pass. /// A call to this is mandatory for the pass to be valid. diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs index a59c8efba8c..409da6758d1 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraph.cs @@ -284,6 +284,8 @@ internal struct CompiledPassInfo public bool culledByRendererList; public bool hasSideEffect; public bool enableFoveatedRasterization; + public bool hasShadingRateImage; + public bool hasShadingRateStates; public void Reset(RenderGraphPass pass, int index) { @@ -293,6 +295,8 @@ public void Reset(RenderGraphPass pass, int index) enableAsyncCompute = pass.enableAsyncCompute; allowPassCulling = pass.allowPassCulling; enableFoveatedRasterization = pass.enableFoveatedRasterization; + hasShadingRateImage = pass.hasShadingRateImage && !pass.enableFoveatedRasterization; + hasShadingRateStates = pass.hasShadingRateStates && !pass.enableFoveatedRasterization; if (resourceCreateList == null) { @@ -601,6 +605,20 @@ public TextureHandle ImportTexture(RTHandle rt) return m_Resources.ImportTexture(rt); } + /// + /// Import an external Variable Rate Shading (VRS) textures to the RenderGraph. + /// Any pass writing to an imported texture will be considered having side effects and can't be automatically culled. + /// + /// External shading rate image RTHandle that needs to be imported. + /// New TextureHandle that represents the imported shading rate images in the context of this rendergraph. + public TextureHandle ImportShadingRateImageTexture(RTHandle rt) + { + if (Vrs.IsShadingRateImageSupported()) + return m_Resources.ImportTexture(rt); + + return TextureHandle.nullHandle; + } + /// /// Import an external texture to the Render Graph. /// Any pass writing to an imported texture will be considered having side effects and can't be automatically culled. @@ -1096,7 +1114,7 @@ public RenderGraphBuilder AddRenderPass(string passName, out PassData [CallerLineNumber] int line = 0) where PassData : class, new() #endif { - var renderPass = m_RenderGraphPool.Get>(); + var renderPass = m_RenderGraphPool.Get>(); renderPass.Initialize(m_RenderPasses.Count, m_RenderGraphPool.Get(), passName, RenderGraphPassType.Legacy, sampler); renderPass.AllowGlobalState(true);// Old pass types allow global state by default as HDRP relies on it @@ -2149,6 +2167,18 @@ void ExecuteRenderGraph() void PreRenderPassSetRenderTargets(in CompiledPassInfo passInfo, RenderGraphPass pass, InternalRenderGraphContext rgContext) { + if (passInfo.hasShadingRateImage) + { +#if DEVELOPMENT_BUILD || UNITY_EDITOR + if (!pass.shadingRateAccess.textureHandle.IsValid()) + { + throw new InvalidOperationException("MRT setup with invalid variable rate shading images."); + } +#endif + + CoreUtils.SetShadingRateImage(rgContext.cmd, m_Resources.GetTexture(pass.shadingRateAccess.textureHandle)); + } + var depthBufferIsValid = pass.depthAccess.textureHandle.IsValid(); if (depthBufferIsValid || pass.colorBufferMaxIndex != -1) { @@ -2219,6 +2249,13 @@ void PreRenderPassExecute(in CompiledPassInfo passInfo, RenderGraphPass pass, In if (passInfo.enableFoveatedRasterization) rgContext.cmd.SetFoveatedRenderingMode(FoveatedRenderingMode.Enabled); + if (passInfo.hasShadingRateStates) + { + rgContext.cmd.SetShadingRateFragmentSize(pass.shadingRateFragmentSize); + rgContext.cmd.SetShadingRateCombiner(ShadingRateCombinerStage.Primitive, pass.primitiveShadingRateCombiner); + rgContext.cmd.SetShadingRateCombiner(ShadingRateCombinerStage.Fragment, pass.fragmentShadingRateCombiner); + } + PreRenderPassSetRenderTargets(passInfo, pass, rgContext); if (passInfo.enableAsyncCompute) @@ -2253,6 +2290,9 @@ void PreRenderPassExecute(in CompiledPassInfo passInfo, RenderGraphPass pass, In void PostRenderPassExecute(ref CompiledPassInfo passInfo, RenderGraphPass pass, InternalRenderGraphContext rgContext) { + if (passInfo.hasShadingRateStates || passInfo.hasShadingRateImage) + rgContext.cmd.ResetShadingRate(); + foreach (var tex in pass.setGlobalsList) { rgContext.cmd.SetGlobalTexture(tex.Item2, tex.Item1); diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs index 8d68e74d2e6..c5248f752fc 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphBuilders.cs @@ -513,5 +513,26 @@ void CheckResource(in ResourceHandle res, bool checkTransientReadWrite = false) } } } + + public void SetShadingRateImageAttachment(in TextureHandle sriTextureHandle) + { + CheckNotUseFragment(sriTextureHandle); + + // shading rate image access flag is always read, only 1 mip and 1 slice + var newSriTextureHandle = new TextureHandle(); + newSriTextureHandle.handle = UseResource(sriTextureHandle.handle, AccessFlags.Read); + + m_RenderPass.SetShadingRateImage(newSriTextureHandle, AccessFlags.Read, 0, 0); + } + + public void SetShadingRateFragmentSize(ShadingRateFragmentSize shadingRateFragmentSize) + { + m_RenderPass.SetShadingRateFragmentSize(shadingRateFragmentSize); + } + + public void SetShadingRateCombiner(ShadingRateCombinerStage stage, ShadingRateCombiner combiner) + { + m_RenderPass.SetShadingRateCombiner(stage, combiner); + } } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs index c2d1f933887..f5049691ac0 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphPass.cs @@ -29,6 +29,14 @@ abstract class RenderGraphPass public TextureAccess[] colorBufferAccess { get; protected set; } = new TextureAccess[RenderGraph.kMaxMRTCount]; public int colorBufferMaxIndex { get; protected set; } = -1; + public bool hasShadingRateImage { get; protected set; } + public TextureAccess shadingRateAccess { get; protected set; } + + public bool hasShadingRateStates { get; protected set; } + public ShadingRateFragmentSize shadingRateFragmentSize { get; protected set; } + public ShadingRateCombiner primitiveShadingRateCombiner { get; protected set; } + public ShadingRateCombiner fragmentShadingRateCombiner { get; protected set; } + // Used by native pass compiler only public TextureAccess[] fragmentInputAccess { get; protected set; } = new TextureAccess[RenderGraph.kMaxMRTCount]; public int fragmentInputMaxIndex { get; protected set; } = -1; @@ -100,6 +108,12 @@ public void Clear() // We do not need to clear colorBufferAccess and fragmentInputAccess as we have the colorBufferMaxIndex and fragmentInputMaxIndex // which are reset above so we only clear depthAccess here. depthAccess = default(TextureAccess); + + hasShadingRateImage = false; + hasShadingRateStates = false; + shadingRateFragmentSize = ShadingRateFragmentSize.FragmentSize1x1; + primitiveShadingRateCombiner = ShadingRateCombiner.Keep; + fragmentShadingRateCombiner = ShadingRateCombiner.Keep; } // Check if the pass has any render targets set-up @@ -435,6 +449,22 @@ public void ComputeHash(ref HashFNV1A32 generator, RenderGraphResourceRegistry r generator.Append(colorBufferMaxIndex); + generator.Append(hasShadingRateImage); + if (hasShadingRateImage) + { + var handle = shadingRateAccess.textureHandle.handle; + if (handle.IsValid()) + { + ComputeTextureHash(ref generator, handle, resources); + ComputeHashForTextureAccess(ref generator, handle, shadingRateAccess); + } + } + + generator.Append(hasShadingRateStates); + generator.Append((int)shadingRateFragmentSize); + generator.Append((int)primitiveShadingRateCombiner); + generator.Append((int)fragmentShadingRateCombiner); + for (int i = 0; i < fragmentInputMaxIndex + 1; ++i) { var fragmentInputAccessElement = fragmentInputAccess[i]; @@ -492,6 +522,44 @@ public void ComputeHash(ref HashFNV1A32 generator, RenderGraphResourceRegistry r generator.Append(GetRenderFuncHash()); } + public void SetShadingRateImage(in TextureHandle shadingRateImage, AccessFlags accessFlags, int mipLevel, int depthSlice) + { + if (Vrs.IsShadingRateImageSupported()) + { + hasShadingRateImage = true; + shadingRateAccess = new TextureAccess(shadingRateImage, accessFlags, mipLevel, depthSlice); + AddResourceRead(shadingRateAccess.textureHandle.handle); + } + } + + public void SetShadingRateFragmentSize(ShadingRateFragmentSize shadingRateFragmentSize) + { + if (Vrs.IsSupported()) + { + hasShadingRateStates = true; + this.shadingRateFragmentSize = shadingRateFragmentSize; + } + } + + public void SetShadingRateCombiner(ShadingRateCombinerStage stage, ShadingRateCombiner combiner) + { + if (Vrs.IsShadingRateImageSupported()) + { + switch (stage) + { + case ShadingRateCombinerStage.Primitive: + hasShadingRateStates = true; + primitiveShadingRateCombiner = combiner; + break; + + case ShadingRateCombinerStage.Fragment: + hasShadingRateStates = true; + fragmentShadingRateCombiner = combiner; + break; + } + } + } + [MethodImpl(MethodImplOptions.AggressiveInlining)] static void ComputeHashForTextureAccess(ref HashFNV1A32 generator, in ResourceHandle handle, in TextureAccess textureAccess) { diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceRegistry.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceRegistry.cs index b0bc2ef5613..d34c6212f04 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceRegistry.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceRegistry.cs @@ -686,7 +686,7 @@ internal TextureHandle ImportBackbuffer(RenderTargetIdentifier rt, in RenderTarg return texHandle; } - static RenderTargetIdentifier emptyId = new RenderTargetIdentifier(); + static RenderTargetIdentifier emptyId = RenderTargetIdentifier.Invalid; static RenderTargetIdentifier builtinCameraRenderTarget = new RenderTargetIdentifier(BuiltinRenderTextureType.CameraTarget); [Conditional("DEVELOPMENT_BUILD"), Conditional("UNITY_EDITOR")] diff --git a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceTexture.cs b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceTexture.cs index ce22c2e771d..ec00acf40ae 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceTexture.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/RenderGraph/RenderGraphResourceTexture.cs @@ -200,6 +200,16 @@ public struct TextureDesc public RenderTextureMemoryless memoryless; ///Special treatment of the VR eye texture used in stereoscopic rendering. public VRTextureUsage vrUsage; + + /// + /// Set to true if the texture is to be used as a shading rate image. + /// + /// + /// Width and height are usually in pixels but if enableShadingRate is set to true, width and height are in tiles. + /// See also Variable Rate Shading. + /// + public bool enableShadingRate; + ///Texture name. public string name; #if UNITY_2020_2_OR_NEWER @@ -229,7 +239,7 @@ public DepthBits depthBufferBits { get { return (DepthBits)GraphicsFormatUtility.GetDepthBits(format); } set - { + { if (value == DepthBits.None) { if( !GraphicsFormatUtility.IsDepthStencilFormat(format) ) @@ -240,7 +250,7 @@ public DepthBits depthBufferBits else { format = GraphicsFormatUtility.GetDepthStencilFormat((int)value); - } + } } } @@ -372,6 +382,7 @@ public TextureDesc(RenderTextureDescriptor input) clearBuffer = true; clearColor = Color.black; discardBuffer = false; + enableShadingRate = input.enableShadingRate; } /// @@ -429,6 +440,7 @@ public override int GetHashCode() #if UNITY_2020_2_OR_NEWER hashCode.Append(fastMemoryDesc.inFastMemory); #endif + hashCode.Append(enableShadingRate); return hashCode.value; } @@ -474,21 +486,42 @@ public override void CreateGraphicsResource() // Textures are going to be reused under different aliases along the frame so we can't provide a specific name upon creation. // The name in the desc is going to be used for debugging purpose and render graph visualization. if (name == "") - name = $"RenderGraphTexture_{m_TextureCreationIndex++}"; + name = $"RenderGraphTexture_{m_TextureCreationIndex++}"; + + RTHandleAllocInfo rtAllocInfo = new RTHandleAllocInfo(name) + { + slices = desc.slices, + format = desc.format, + filterMode = desc.filterMode, + wrapModeU = desc.wrapMode, + wrapModeV = desc.wrapMode, + wrapModeW = desc.wrapMode, + dimension = desc.dimension, + enableRandomWrite = desc.enableRandomWrite, + useMipMap = desc.useMipMap, + autoGenerateMips = desc.autoGenerateMips, + anisoLevel = desc.anisoLevel, + mipMapBias = desc.mipMapBias, + isShadowMap = desc.isShadowMap, + msaaSamples = (MSAASamples)desc.msaaSamples, + bindTextureMS = desc.bindTextureMS, + useDynamicScale = desc.useDynamicScale, + useDynamicScaleExplicit = desc.useDynamicScaleExplicit, + memoryless = desc.memoryless, + vrUsage = desc.vrUsage, + enableShadingRate = desc.enableShadingRate, + }; switch (desc.sizeMode) { case TextureSizeMode.Explicit: - graphicsResource = RTHandles.Alloc(desc.width, desc.height, desc.format, desc.slices, desc.filterMode, desc.wrapMode, desc.dimension, desc.enableRandomWrite, - desc.useMipMap, desc.autoGenerateMips, desc.isShadowMap, desc.anisoLevel, desc.mipMapBias, desc.msaaSamples, desc.bindTextureMS, desc.useDynamicScale, desc.useDynamicScaleExplicit, desc.memoryless, desc.vrUsage, name); + graphicsResource = RTHandles.Alloc(desc.width, desc.height, rtAllocInfo); break; case TextureSizeMode.Scale: - graphicsResource = RTHandles.Alloc(desc.scale, desc.format, desc.slices, desc.filterMode, desc.wrapMode, desc.dimension, desc.enableRandomWrite, - desc.useMipMap, desc.autoGenerateMips, desc.isShadowMap, desc.anisoLevel, desc.mipMapBias, desc.msaaSamples, desc.bindTextureMS, desc.useDynamicScale, desc.useDynamicScaleExplicit, desc.memoryless, desc.vrUsage, name); + graphicsResource = RTHandles.Alloc(desc.scale, rtAllocInfo); break; case TextureSizeMode.Functor: - graphicsResource = RTHandles.Alloc(desc.func, desc.format, desc.slices, desc.filterMode, desc.wrapMode, desc.dimension, desc.enableRandomWrite, - desc.useMipMap, desc.autoGenerateMips, desc.isShadowMap, desc.anisoLevel, desc.mipMapBias, desc.msaaSamples, desc.bindTextureMS, desc.useDynamicScale, desc.useDynamicScaleExplicit, desc.memoryless, desc.vrUsage, name); + graphicsResource = RTHandles.Alloc(desc.func, rtAllocInfo); break; } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Textures/BufferedRTHandleSystem.cs b/Packages/com.unity.render-pipelines.core/Runtime/Textures/BufferedRTHandleSystem.cs index 0a8ae2c0d88..96a948556e8 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Textures/BufferedRTHandleSystem.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Textures/BufferedRTHandleSystem.cs @@ -156,40 +156,17 @@ public void AllocBuffer(int bufferId, int bufferCount, var buffer = new RTHandle[bufferCount]; m_RTHandles.Add(bufferId, buffer); - var format = RTHandles.GetFormat(descriptor.graphicsFormat, descriptor.depthStencilFormat); - - RTHandle Alloc(ref RenderTextureDescriptor d, FilterMode fMode, TextureWrapMode wMode, bool isShadow, int aniso, float mipBias, string n) - { - return m_RTHandleSystem.Alloc( - d.width, - d.height, - format, - d.volumeDepth, - fMode, - wMode, - d.dimension, - d.enableRandomWrite, - d.useMipMap, - d.autoGenerateMips, - isShadow, - aniso, - mipBias, - (MSAASamples)d.msaaSamples, - d.bindMS, - d.useDynamicScale, - d.useDynamicScaleExplicit, - d.memoryless, - d.vrUsage, - n); - } + RTHandleAllocInfo allocInfo = RTHandles.GetRTHandleAllocInfo(descriptor, filterMode, + wrapMode, anisoLevel, mipMapBias, name); + allocInfo.isShadowMap = isShadowMap; // First is autoresized - buffer[0] = Alloc(ref descriptor, filterMode, wrapMode, isShadowMap, anisoLevel, mipMapBias, name); + buffer[0] = m_RTHandleSystem.Alloc(descriptor.width, descriptor.height, allocInfo); // Other are resized on demand for (int i = 1, c = buffer.Length; i < c; ++i) { - buffer[i] = Alloc(ref descriptor, filterMode, wrapMode, isShadowMap, anisoLevel, mipMapBias, name); + buffer[i] = m_RTHandleSystem.Alloc(descriptor.width, descriptor.height, allocInfo); m_RTHandleSystem.SwitchResizeMode(buffer[i], RTHandleSystem.ResizeMode.OnDemand); } } diff --git a/Packages/com.unity.render-pipelines.core/Runtime/Textures/RTHandleSystem.cs b/Packages/com.unity.render-pipelines.core/Runtime/Textures/RTHandleSystem.cs index 8f3745d791e..cc04a46523d 100644 --- a/Packages/com.unity.render-pipelines.core/Runtime/Textures/RTHandleSystem.cs +++ b/Packages/com.unity.render-pipelines.core/Runtime/Textures/RTHandleSystem.cs @@ -79,6 +79,9 @@ public struct RTHandleAllocInfo /// Set to true to automatically generate mipmaps. public bool autoGenerateMips { get; set; } + /// Set to true if the texture is sampled as a shadow map. + public bool isShadowMap { get; set; } + /// Anisotropic filtering level. public int anisoLevel { get; set; } @@ -94,12 +97,24 @@ public struct RTHandleAllocInfo /// See Dynamic Resolution documentation](https://docs.unity3d.com/Manual/DynamicResolution.html) public bool useDynamicScale { get; set; } + /// See Dynamic Resolution documentation](https://docs.unity3d.com/Manual/DynamicResolution-control-when-occurs.html) + public bool useDynamicScaleExplicit { get; set; } + /// Use this property to set the render texture memoryless modes. public RenderTextureMemoryless memoryless { get; set; } /// Special treatment of the VR eye texture used in stereoscopic rendering. public VRTextureUsage vrUsage { get; set; } + /// + /// Set to true if the texture is to be used as a shading rate image. + /// + /// + /// Width and height are usually in pixels but if enableShadingRate is set to true, width and height are in tiles. + /// See also Variable Rate Shading. + /// + public bool enableShadingRate { get; set; } + /// Name of the RTHandle. public string name { get; set; } @@ -119,13 +134,16 @@ public RTHandleAllocInfo(string name = "") this.enableRandomWrite = false; this.useMipMap = false; this.autoGenerateMips = true; + this.isShadowMap = false; this.anisoLevel = 1; this.mipMapBias = 0f; this.msaaSamples = MSAASamples.None; this.bindTextureMS = false; this.useDynamicScale = false; + this.useDynamicScaleExplicit = false; this.memoryless = RenderTextureMemoryless.None; this.vrUsage = VRTextureUsage.None; + this.enableShadingRate = false; this.name = name; } } @@ -519,7 +537,7 @@ void Resize(int width, int height, bool sizeChanged) /// Allocate a new fixed sized RTHandle. /// /// With of the RTHandle. - /// Heigh of the RTHandle. + /// height of the RTHandle. /// Number of slices of the RTHandle. /// Bit depths of a depth buffer. /// GraphicsFormat of a color buffer. @@ -574,7 +592,7 @@ public RTHandle Alloc( /// Allocate a new fixed sized RTHandle. /// /// With of the RTHandle. - /// Heigh of the RTHandle. + /// height of the RTHandle. /// GraphicsFormat of a color or depth stencil buffer. /// Number of slices of the RTHandle. /// Filtering mode of the RTHandle. @@ -598,7 +616,7 @@ public RTHandle Alloc( int width, int height, GraphicsFormat format, - int slices = 1, + int slices = 1, FilterMode filterMode = FilterMode.Point, TextureWrapMode wrapMode = TextureWrapMode.Repeat, TextureDimension dimension = TextureDimension.Tex2D, @@ -625,7 +643,7 @@ public RTHandle Alloc( /// Allocate a new fixed sized RTHandle. /// /// With of the RTHandle. - /// Heigh of the RTHandle. + /// height of the RTHandle. /// U coordinate wrapping mode of the RTHandle. /// V coordinate wrapping mode of the RTHandle. /// W coordinate wrapping mode of the RTHandle. @@ -683,7 +701,7 @@ public RTHandle Alloc( wrapModeU, wrapModeV, wrapModeW, - slices, + slices, filterMode, dimension, enableRandomWrite, @@ -706,7 +724,7 @@ public RTHandle Alloc( /// Allocate a new fixed sized RTHandle. ///
    - + - + - + - + - + - + - + - + - + + - + @@ -78,10 +79,10 @@ Refer to [Create an HDRI sky](create-an-HDRI-sky.md) for more information. - + - + @@ -91,7 +92,7 @@ Refer to [Create an HDRI sky](create-an-HDRI-sky.md) for more information. - +
    Shadow Matte Indicates whether or not the Shader receives shadows. Shadow matte only supports shadow maps. It does not support Screen Space Shadows, Ray-Traced Shadows, or Contact Shadows.Indicates whether the shader receives shadows. Shadow matte only supports shadow maps. +It doesn't support screen-space shadows, ray-traced Shadows, or contact shadows.
    +Enable **Shadow Matte** if you add a custom Node that samples shadow maps, otherwise shadows might not render correctly. +
    HDRI Sky Assign a HDRI Texture that HDRP uses to render the sky.Assign an HDRI texture to render the sky in HDRP.
    Distortion Mode Use the drop-down to select the method that HDRP uses to calculate the sky distortion.
    None: No distortion.
    Procedural: HDRP distorts the sky using a uniform wind direction.
    Flowmap: HDRP distorts the sky with a user provided flowmap.
    Select how HDRP calculates sky distortion:
    None: No distortion.
    Procedural: Distorts the sky using uniform wind direction.
    Flowmap: Uses a user-provided flowmap for distortion.
    OrientationThe orientation of the distortion relative to the X world vector (in degrees).
    This value can be relative to the Global Wind Orientation defined in the Visual Environment.
    Set the distortion orientation relative to the X-world vector (degrees).
    This can be relative to the Global Wind Orientation in the Visual Environment.
    SpeedThe speed at which HDRP scrolls the distortion texture.
    This value can be relative to the Global Wind Speed defined in the Visual Environment.
    Define how fast HDRP scrolls the distortion texture.
    This value can be relative to the Global Wind Speed defined in the Visual Environment.
    FlowmapAssign a flowmap, in LatLong layout, that HDRP uses to distort UVs when rendering the sky.
    This property only appears when you select Flowmap from the Distortion Mode drop-down.
    Assign a LatLong flowmap for sky UV distortion.
    Visible only when you select Flowmap from the Distortion Mode drop-down.
    Upper Hemisphere OnlyCheck the box if the flowmap contains distortion for the sky above the horizon only.
    This property only appears when you select Flowmap from the Distortion Mode drop-down.
    Enable if the flowmap distorts only the sky above the horizon.
    Visible only when you select Flowmap from the Distortion Mode drop-down.
    Intensity Mode Use the drop-down to select the method that HDRP uses to calculate the sky intensity.
    Exposure: HDRP calculates intensity from an exposure value in EV100.
    Multiplier: HDRP calculates intensity from a flat multiplier.
    Lux: HDRP calculates intensity in terms of a target Lux value.
    Choose how HDRP calculates sky intensity:
    Exposure: Based on EV100 exposure.
    Multiplier: Applies a flat multiplier.
    Lux: Targets a specific Lux value.
    ExposureSet the amount of light per unit area that HDRP applies to the HDRI Sky cubemap.
    This property only appears when you select Exposure from the Intensity Mode drop-down.
    Set the light per unit area applied to the HDRI Sky cubemap.
    Visible only when you set Exposure in Intensity Mode from the Intensity Mode drop-down.
    MultiplierSet the multiplier for HDRP to apply to the Scene as environmental light. HDRP multiplies the environment light in your Scene by this value.
    This property only appears when you select Multiplier from the Intensity Mode drop-down.
    Set a multiplier for environment light in the scene.
    Visible only when you select Multiplier from the Intensity Mode drop-down.
    Desired Lux ValueSet an absolute intensity for the HDR Texture you set in HDRI Sky, in Lux. This value represents the light received in a direction perpendicular to the ground. This is similar to the Lux unit you use to represent the Sun, so it's complimentary.
    This property only appears when you select Lux from the Intensity Mode drop-down.
    Set an absolute intensity for the HDR Texture you set in HDRI Sky, in Lux. This value represents the light received in a direction perpendicular to the ground. This is similar to the Lux unit you use to represent the Sun, so it's complimentary.
    Visible only when you select Lux from the Intensity Mode drop-down.
    Use the slider to set the angle to rotate the cubemap, in degrees.
    Lock SunMake the Sun rotate automatically when you move the HDRI Sky, and the HDRI Sky rotate automatically when you rotate the Sun.Make the Sun rotate automatically when you move the HDRI Sky, and the HDRI Sky rotate automatically when you rotate the sun.
    Update Mode
    Update PeriodSet the period (in seconds) for HDRP to update the sky environment. Set the value to 0 if you want HDRP to update the sky environment every frame. This property only appears when you set the Update Mode to Realtime.Set the update interval in seconds. Use 0 for per-frame updates. Visible only when you set the Update Mode to Realtime.
    @@ -116,19 +117,19 @@ These properties only appear if you enable [advanced properties](https://docs.un Backplate - Indicates whether to project the bottom part of the HDRI onto a plane with various shapes such as a Rectangle, Circle, Ellipse, or Infinite plane. + Projects the lower hemisphere of the HDRI onto a selected shape (Rectangle, Circle, Ellipse, or Infinite plane). Type - Specifies the shape of the backplate.

    Disc: Projects the bottom of the HDRI texture onto a disc.

    Rectangle: rojects the bottom of the HDRI texture onto a rectangle.

    Ellipse: Projects the bottom of the HDRI texture onto an ellipse.

    Infinite: Projects the bottom of the HDRI texture onto an infinite plane. + Specifies the shape of the backplate.

    Disc: Projects the bottom of the HDRI texture onto a disc.

    Rectangle: Projects the bottom of the HDRI texture onto a rectangle.

    Ellipse: Projects the bottom of the HDRI texture onto an ellipse.

    Infinite: Projects the bottom of the HDRI texture onto an infinite plane. Ground Level - The height of the ground level in the scene. + Specifies the height of the ground in the scene. @@ -140,25 +141,25 @@ These properties only appear if you enable [advanced properties](https://docs.un Projection - HDRP uses this number to control the projection of the bottom hemisphere of the HDRI on the backplate. Small projection distance implies higher pixels density with more distortion, large projection distance implies less pixels density with less distortion. + HDRP uses this number to control the projection of the bottom hemisphere of the HDRI on the backplate. Small projection distance implies higher pixel density with more distortion, large projection distance implies less pixel density with less distortion. Rotation - The rotation of the physical backplate. + Rotates the physical backplate. Texture Rotation - The rotation of the HDRI texture HDRP projects onto the backplate. + Rotates the HDRI texture projected onto the backplate. Texture Offset - The offset value to apply to the texture HDRP projects onto the backplate. + Offsets the texture projected onto the backplate. @@ -176,7 +177,7 @@ These properties only appear if you enable [advanced properties](https://docs.un Directional Shadow - Indicates whether the backplate receives shadows from the main directional Light. + Enables shadows from the main directional light on the backplate. @@ -201,4 +202,4 @@ These properties only appear if you enable [advanced properties](https://docs.un **Note**: To use ambient occlusion in the backplate, increase the value of the **Direct Lighting Strength** property on the [Ambient Occlusion](Override-Ambient-Occlusion.md) component override. As the backplate doesn't have global illumination, it can only get ambient occlusion from direct lighting. -**Limitation**: The backplate only appears in local reflection probes and it doesn't appear in the default sky reflection. This is because the default sky reflection is a cubemap projected at infinity which is incompatible with how Unity renders the backplate. +**Limitation**: The backplate only appears in local reflection probes and doesn't appear in the default sky reflection. This is because the default sky reflection is a cubemap projected at infinity which is incompatible with how Unity renders the backplate. diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/reference-path-tracing.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/reference-path-tracing.md index 0c1c65de963..fdb2786fdde 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/reference-path-tracing.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/reference-path-tracing.md @@ -12,7 +12,7 @@ | **Maximum Intensity** | Set a value to clamp the intensity of the light value each bounce returns. This avoids bright, isolated pixels in the final result.
    **Note**: This property can make the final image dimmer, so if the result looks dark, increase the value of this property. | | **Sky Importance Sampling** | Set the sky sampling mode. Importance sampling favors the brightest directions, which is beneficial when using a sky model with high contrast and intense spots (like a sun, or street lights). On the other hand, it can be slightly detrimental when using a smooth, uniform sky. It's active by default for HDRI skies only, but can also be turned On and Off, regardless of the type of sky in use. | | **Seed Mode** | Set how the path tracer generates random numbers. The seed is the pattern the noise has. When accumulating samples, every frame needs a different seed. Otherwise, the same noisy image gets accumulated over and over. **Seed Mode** has the following options:
    • **Non Repeating**: This is the default option. The seed is chosen based on the camera frame count. When the accumulation resets, it is not reset to zero.
    • **Repeating**: The seed is reset every time the accumulation is reset. Rendering of every image is done using the same random numbers.
    • **Custom**: Set the seed using a custom script. For more information, see the example in [Understand path tracing](path-tracing-understand.md).| -| **Denoising** | Denoises the output of the the path tracer. This setting is only available when you install the **Unity Denoising** Package. **Denoising** has the following options:
    • **None**: Does not denoise (this is the default option).
    • **Intel Open Image Denoise** : Uses the Intel Open Image Denoise library to denoise the frame.
    • **NVIDIA OptiX** : Uses NVIDIA OptiX to denoise the frame.

    You can also enable the following additional settings:
    • **Use AOVs** (Arbitrary Output Variables): Increases the amount of detail kept in the frame after HDRP denoises it.
    • **Temporal**: Improves the temporal consistency of denoised frame sequences.
    • **Separate Volumetrics**: Denoises the volumetric scattering effect separately for a smoother fog. When Separate Volumetrics is enabled, the Temporal setting will not improve volumetric fog temporal stability. | +| **Denoising** | Denoises the output of the path tracer. This setting is only available when you install the **Unity Denoising** Package. **Denoising** has the following options:
    • **None**: Does not denoise (this is the default option).
    • **Intel Open Image Denoise** : Uses the Intel Open Image Denoise library to denoise the frame.
    • **NVIDIA OptiX** : Uses NVIDIA OptiX to denoise the frame.

    You can also enable the following additional settings:
    • **Use AOVs** (Arbitrary Output Variables): Increases the amount of detail kept in the frame after HDRP denoises it.
    • **Temporal**: Improves the temporal consistency of denoised frame sequences.
    • **Separate Volumetrics**: Denoises the volumetric scattering effect separately for a smoother fog. When Separate Volumetrics is enabled, the Temporal setting will not improve volumetric fog temporal stability. | ![](Images/RayTracingPathTracing4.png) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/render-graph.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/render-graph.md index 1caa8dff8b1..1b63f398632 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/render-graph.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/render-graph.md @@ -1,4 +1,4 @@ -# Customize the the High Definition Render Pipeline (HDRP) +# Customize the High Definition Render Pipeline (HDRP) The High Definition Render Pipeline (HDRP) uses the [render graph system](https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@latest/index.html?subfolder=/manual/render-graph-system.html) in its implementation. This means that if you want to extend HDRP and implement your own render pipeline features, you need to learn how the render graph system works and how to write rendering code using it. For information on the render graph system and how to use it to write render pipeline features, see the [render graph system](https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@latest/index.html?subfolder=/manual/render-graph-system.html) documentation. diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-and-post-processing.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-and-post-processing.md index 6514c19389b..e5bd1fced6f 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-and-post-processing.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-and-post-processing.md @@ -16,6 +16,6 @@ Control how the High Definition Render Pipeline (HDRP) renders a scene and apply |[Motion effects](motion-effects.md)|Apply effects to simulate the appearance of objects moving at speed.| |[Runtime effects](runtime-effects.md)|Use HDRP's API to control properties in a script at runtime.| |[Custom rendering effects](Custom-rendering.md)|Create an effect in a script and control when and how HDRP renders it.| -|[Customize the the High Definition Render Pipeline (HDRP)](render-graph.md)|Uses the [render graph system](https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@latest/index.html?subfolder=/manual/render-graph-system.html) to add render pipeline features to HDRP.| +|[Customize the High Definition Render Pipeline (HDRP)](render-graph.md)|Uses the [render graph system](https://docs.unity3d.com/Packages/com.unity.render-pipelines.core@latest/index.html?subfolder=/manual/render-graph-system.html) to add render pipeline features to HDRP.| |[Troubleshoot rendering and post-processing issues]()|Fix common issues with custom effects.| diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-vfx-interaction.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-vfx-interaction.md index e3f4224c56e..396ac631f6f 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-vfx-interaction.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/water-vfx-interaction.md @@ -1,6 +1,6 @@ # Interaction between the water system and the VFX Graph -The water system supports being evaluated from the VFX Graph, to access data such as the the water height at a given point, the surface normal, or the current value. +The water system supports being evaluated from the VFX Graph, to access data such as the water height at a given point, the surface normal, or the current value. ![](Images/SampleWaterVFX.png) From 07159331e2589ee692e05354d5b062c74bc77282 Mon Sep 17 00:00:00 2001 From: Oleksandr Kokoshyn Date: Wed, 27 Nov 2024 08:09:43 +0000 Subject: [PATCH 79/85] DOCG-5973 linear gradient, DOCG-4959 VFX snippet "position" capitalization DOCG-5973 updated the linear gradient image (shows the correct linear gradient now), edited the caption. DOCG-4959 VFX code snippet "position" capitalization fix. --- .../com.unity.visualeffectgraph/Documentation~/ComponentAPI.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/ComponentAPI.md b/Packages/com.unity.visualeffectgraph/Documentation~/ComponentAPI.md index 5e4d361ae06..4531a6787e9 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/ComponentAPI.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/ComponentAPI.md @@ -179,7 +179,7 @@ If you want to manage multiple Visual Effect instances in the same Scene and wan VisualEffect visualEffect; VFXEventAttribute eventAttribute; -static readonly ExposedProperty positionAttribute = "Position" +static readonly ExposedProperty positionAttribute = "position" static readonly ExposedProperty enteredTriggerEvent = "EnteredTrigger" void Start() From 08268fb33c22ae3faf1f1c44825a8eea3ae23a79 Mon Sep 17 00:00:00 2001 From: Mark Green Date: Thu, 28 Nov 2024 01:19:45 +0000 Subject: [PATCH 80/85] Graphics docs feedback fixes November 2024 (part 1) Fix various small docs issues raised by feedback tickets. Jira tickets: - https://jira.unity3d.com/browse/DOCG-5058 - fix HDRP table of contents title - no review needed - https://jira.unity3d.com/browse/DOCG-5825 - Add compatibility for VFX Graph 17.x - **Julien please review** - https://jira.unity3d.com/browse/DOCG-6219 - Clarify render graph code sample in Core SRP docs - no review needed - https://jira.unity3d.com/browse/DOCG-6029 - Remove note about no custom post-processing in URP - no review needed - https://jira.unity3d.com/browse/DOCG-5094 - Clarify properties in compound property types - **Julien please review** --- .../render-graph-writing-a-render-pipeline.md | 6 +++++- .../Documentation~/TableOfContents.md | 2 +- .../Documentation~/Properties.md | 2 ++ .../Documentation~/System-Requirements.md | 3 ++- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Packages/com.unity.render-pipelines.core/Documentation~/render-graph-writing-a-render-pipeline.md b/Packages/com.unity.render-pipelines.core/Documentation~/render-graph-writing-a-render-pipeline.md index 4c1f399ae7f..4856c311442 100644 --- a/Packages/com.unity.render-pipelines.core/Documentation~/render-graph-writing-a-render-pipeline.md +++ b/Packages/com.unity.render-pipelines.core/Documentation~/render-graph-writing-a-render-pipeline.md @@ -7,6 +7,7 @@ This page covers the process of how to use the RenderGraph API to write a render To begin, your render pipeline needs to maintain at least one instance of [RenderGraph](../api/UnityEngine.Rendering.RenderGraphModule.RenderGraph.html). This is the main entry point for the API. You can use more than one instance of a render graph, but be aware that Unity does not share resources across `RenderGraph` instances so for optimal memory usage, only use one instance. ```c# +using UnityEngine.Rendering; using UnityEngine.Rendering.RenderGraphModule; public class MyRenderPipeline : RenderPipeline @@ -21,8 +22,11 @@ public class MyRenderPipeline : RenderPipeline void CleanupRenderGraph() { m_RenderGraph.Cleanup(); - m_RenderGraph = null; + m_RenderGraph = null; } + + ... + } ``` diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md index 29635fab904..adfb0f48d9e 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/TableOfContents.md @@ -1,4 +1,4 @@ -* [HDRP Packge](index.md) +* [HDRP Package](index.md) * [What's new](whats-new.md) * [What's new in HDRP 17](whats-new-17.md) * [What's new in HDRP 16](whats-new-16.md) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Properties.md b/Packages/com.unity.visualeffectgraph/Documentation~/Properties.md index 98f2aea80af..1d28bcbb211 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/Properties.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Properties.md @@ -45,6 +45,8 @@ Compound Property Types are made from base data types. These types describe more Expand Compound Property Types to access their components. +To access components in a script, add an underscore before the component name. For example to access the `radius` component of `MySphere`, use `MySphere_radius`. + ![](Images/PropertyCompound.png) diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/System-Requirements.md b/Packages/com.unity.visualeffectgraph/Documentation~/System-Requirements.md index 87d33fedf6e..32b809aae1d 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/System-Requirements.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/System-Requirements.md @@ -8,6 +8,7 @@ The following table shows the compatibility of the Visual Effect Graph versions | **Package version** | **Minimum Unity version** | **Maximum Unity version** | | ------------------- | ------------------------- | ------------------------- | +| 17.x | Unity 6 | Unity 6.1 | | 16.x | 2023.2 | 2023.2 | | 15.x | 2023.1 | 2023.1 | | 14.x | 2022.2 | 2022.2 | @@ -25,7 +26,7 @@ The Visual Effect Graph varies in compatibility between the High Definition Rend | **Package version** | **HDRP** | **URP** | | ------------------- | ---------- | ------------- | -| 16.x | Supported | Supported | +| 17.x | Supported | Supported | | 16.x | Supported | Supported | | 14.x | Supported | Supported | | 13.x | Supported | Supported | From 1636e87a1fba54b4d7b42df54e870d3986a3b65a Mon Sep 17 00:00:00 2001 From: Mark Green Date: Thu, 28 Nov 2024 01:19:49 +0000 Subject: [PATCH 81/85] Graphics docs feedback fixes November 2024 (part 2) Part 2 of minor fixes from feedback tickets Jira tickets: - DOCG-5090 Fix double 'the' in title - DOCG-5820 Fix RGB > sRGB - DOCG-5702 Add location of shader log files - DOCG-6071 Add link to writing a render pass --- .../Documentation~/Default-Settings-Window.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Default-Settings-Window.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Default-Settings-Window.md index e933c76c5d0..fbdcf46e307 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Default-Settings-Window.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Default-Settings-Window.md @@ -11,8 +11,7 @@ You can also add your own settings. Refer to [Add custom settings](https://docs. | **Property** | **Description** | | --------------------------| ------------------------------------------------------------ | | Shader Variant Log Level | Use the drop-down to select what information HDRP logs about Shader variants when you build your Unity Project. • Disabled: HDRP doesn’t log any Shader variant information.• Only SRP Shaders: Only log Shader variant information for HDRP Shaders.• All Shaders: Log Shader variant information for every Shader type. | -| Export Shader Variants | Controls whether to output shader variant information to a file. | - +| Export Shader Variants | Controls whether to output shader variant information to a file. Unity saves the information to the folder with your project files, in `Temp/graphics-settings-stripping.json` and `Temp/shader-stripping.json`. | ## Custom Post Process Orders From cab799a561df47b2f7c79c8e586d5825eb5e4f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Penavaire?= Date: Thu, 28 Nov 2024 01:19:57 +0000 Subject: [PATCH 82/85] [URP Foundation] Reenable 190_SampleDepth Reenable non-failing 190_SampleDepth test in URP Foundation. It was disabled a long time ago in https://jira.unity3d.com/browse/ANT-1248 but the job is green when reenabling it, so the case can be closed. --- .../Test/TestFilters/TestCaseFilters.asset | 163 ++++++++---------- 1 file changed, 76 insertions(+), 87 deletions(-) diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset index 702dac48119..8dc4d7bfe42 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset @@ -11,7 +11,7 @@ MonoBehaviour: m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 5f6aa9f32113aec4a8bded44c1febe5c, type: 3} m_Name: TestCaseFilters - m_EditorClassIdentifier: + m_EditorClassIdentifier: filters: - FilteredScene: {fileID: 0} FilteredScenes: @@ -26,7 +26,7 @@ MonoBehaviour: BuildPlatform: 45 GraphicsDevice: 11 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: https://jira.unity3d.com/browse/PIA-882 - FilteredScene: {fileID: 0} @@ -123,7 +123,7 @@ MonoBehaviour: BuildPlatform: 2 GraphicsDevice: 16 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: https://jira.unity3d.com/browse/UUM-3312 - FilteredScene: {fileID: 0} @@ -133,7 +133,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 18 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Needs fixing on DX12 - FilteredScene: {fileID: 0} @@ -145,7 +145,7 @@ MonoBehaviour: BuildPlatform: 13 GraphicsDevice: 11 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Needs MSAA fixing on OpenGLES3 - FilteredScene: {fileID: 0} @@ -157,7 +157,7 @@ MonoBehaviour: BuildPlatform: 45 GraphicsDevice: 11 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Needs MSAA fixing on OpenGLES3 - FilteredScene: {fileID: 0} @@ -177,7 +177,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 18 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: https://jira.unity3d.com/browse/UUM-55074 - FilteredScene: {fileID: 0} @@ -188,9 +188,9 @@ MonoBehaviour: BuildPlatform: 2 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 - Reason: + Reason: - FilteredScene: {fileID: 0} FilteredScenes: - {fileID: 102900000, guid: e983e6ee0e89e14478c8f616dfbc3e20, type: 3} @@ -199,7 +199,7 @@ MonoBehaviour: BuildPlatform: 9 GraphicsDevice: 16 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Crash on iOS - FilteredScene: {fileID: 0} @@ -211,7 +211,7 @@ MonoBehaviour: BuildPlatform: 20 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-56932 - FilteredScene: {fileID: 0} @@ -222,7 +222,7 @@ MonoBehaviour: BuildPlatform: 9 GraphicsDevice: 16 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Reflection probe missing sometimes. - FilteredScene: {fileID: 0} @@ -233,7 +233,7 @@ MonoBehaviour: BuildPlatform: 13 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Reflection probe missing sometimes. - FilteredScene: {fileID: 0} @@ -248,7 +248,7 @@ MonoBehaviour: BuildPlatform: 2 GraphicsDevice: 16 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: https://jira.unity3d.com/browse/UUM-3312 - FilteredScene: {fileID: 0} @@ -279,7 +279,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 11 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No GLES on Deferred. - FilteredScene: {fileID: 0} @@ -290,7 +290,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 17 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No GL on Deferred. - FilteredScene: {fileID: 0} @@ -300,7 +300,7 @@ MonoBehaviour: BuildPlatform: 9 GraphicsDevice: 16 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: 'Bug: iPhone yamato instability for unknown reason.' - FilteredScene: {fileID: 0} @@ -340,7 +340,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 18 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: https://fogbugz.unity3d.com/f/cases/1394999/ - FilteredScene: {fileID: 0} @@ -350,7 +350,7 @@ MonoBehaviour: BuildPlatform: 24 GraphicsDevice: 21 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: https://fogbugz.unity3d.com/f/cases/1305639/ - FilteredScene: {fileID: 0} @@ -420,7 +420,7 @@ MonoBehaviour: BuildPlatform: 13 GraphicsDevice: 21 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-56933 - FilteredScene: {fileID: 0} @@ -445,7 +445,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 11 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Not supported on GLES3 - FilteredScene: {fileID: 0} @@ -463,7 +463,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 17 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Not supported on OpenGL - FilteredScene: {fileID: 0} @@ -473,7 +473,7 @@ MonoBehaviour: BuildPlatform: 9 GraphicsDevice: 16 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: URP-1199 - FilteredScene: {fileID: 0} @@ -483,7 +483,7 @@ MonoBehaviour: BuildPlatform: 13 GraphicsDevice: 21 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: URP-1199 - FilteredScene: {fileID: 0} @@ -506,17 +506,6 @@ MonoBehaviour: XrSdk: None StereoModes: 0 Reason: Needs fixing in OpenGL - - FilteredScene: {fileID: 0} - FilteredScenes: - - {fileID: 102900000, guid: d66b74ae4e7264d62bdb2c4f56261030, type: 3} - - {fileID: 102900000, guid: 3340af13204ec234b9db1f26da2c1cb3, type: 3} - ColorSpace: -1 - BuildPlatform: 13 - GraphicsDevice: 21 - Architecture: 0 - XrSdk: - StereoModes: 0 - Reason: UUM-27248 - FilteredScene: {fileID: 0} FilteredScenes: - {fileID: 102900000, guid: 3340af13204ec234b9db1f26da2c1cb3, type: 3} @@ -579,9 +568,9 @@ MonoBehaviour: BuildPlatform: 13 GraphicsDevice: 11 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 - Reason: + Reason: - FilteredScene: {fileID: 0} FilteredScenes: - {fileID: 102900000, guid: f1e2273404277234a8497f4bc0f9f229, type: 3} @@ -612,7 +601,7 @@ MonoBehaviour: BuildPlatform: 9 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -622,7 +611,7 @@ MonoBehaviour: BuildPlatform: 13 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -632,7 +621,7 @@ MonoBehaviour: BuildPlatform: 20 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -642,7 +631,7 @@ MonoBehaviour: BuildPlatform: 21 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -652,7 +641,7 @@ MonoBehaviour: BuildPlatform: 31 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -662,7 +651,7 @@ MonoBehaviour: BuildPlatform: 33 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -672,7 +661,7 @@ MonoBehaviour: BuildPlatform: 37 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -682,7 +671,7 @@ MonoBehaviour: BuildPlatform: 38 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -692,7 +681,7 @@ MonoBehaviour: BuildPlatform: 42 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -702,7 +691,7 @@ MonoBehaviour: BuildPlatform: 43 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -712,7 +701,7 @@ MonoBehaviour: BuildPlatform: 44 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -722,7 +711,7 @@ MonoBehaviour: BuildPlatform: 46 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Alembic package is desktop only - FilteredScene: {fileID: 0} @@ -733,7 +722,7 @@ MonoBehaviour: BuildPlatform: 24 GraphicsDevice: 21 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: 'Issues with variants ' - FilteredScene: {fileID: 0} @@ -744,7 +733,7 @@ MonoBehaviour: BuildPlatform: 13 GraphicsDevice: 21 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: Bug. UUM-61242 - FilteredScene: {fileID: 0} @@ -755,7 +744,7 @@ MonoBehaviour: BuildPlatform: 24 GraphicsDevice: 21 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-57780 - FilteredScene: {fileID: 0} @@ -765,7 +754,7 @@ MonoBehaviour: BuildPlatform: 24 GraphicsDevice: 21 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-57771 - FilteredScene: {fileID: 0} @@ -775,7 +764,7 @@ MonoBehaviour: BuildPlatform: 38 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-57771 - FilteredScene: {fileID: 0} @@ -785,7 +774,7 @@ MonoBehaviour: BuildPlatform: 31 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: https://jira.unity3d.com/browse/UUM-45735 - FilteredScene: {fileID: 0} @@ -813,7 +802,7 @@ MonoBehaviour: BuildPlatform: 2 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -830,7 +819,7 @@ MonoBehaviour: BuildPlatform: 5 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -847,7 +836,7 @@ MonoBehaviour: BuildPlatform: 9 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -864,7 +853,7 @@ MonoBehaviour: BuildPlatform: 13 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -881,7 +870,7 @@ MonoBehaviour: BuildPlatform: 19 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -898,7 +887,7 @@ MonoBehaviour: BuildPlatform: 20 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -915,7 +904,7 @@ MonoBehaviour: BuildPlatform: 21 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -932,7 +921,7 @@ MonoBehaviour: BuildPlatform: 24 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -949,7 +938,7 @@ MonoBehaviour: BuildPlatform: 31 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -966,7 +955,7 @@ MonoBehaviour: BuildPlatform: 33 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -983,7 +972,7 @@ MonoBehaviour: BuildPlatform: 37 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1000,7 +989,7 @@ MonoBehaviour: BuildPlatform: 38 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1017,7 +1006,7 @@ MonoBehaviour: BuildPlatform: 41 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1034,7 +1023,7 @@ MonoBehaviour: BuildPlatform: 42 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1051,7 +1040,7 @@ MonoBehaviour: BuildPlatform: 43 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1068,7 +1057,7 @@ MonoBehaviour: BuildPlatform: 44 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1085,7 +1074,7 @@ MonoBehaviour: BuildPlatform: 45 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1102,7 +1091,7 @@ MonoBehaviour: BuildPlatform: 46 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1119,7 +1108,7 @@ MonoBehaviour: BuildPlatform: 47 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No debug display variants available. - FilteredScene: {fileID: 0} @@ -1129,7 +1118,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 18 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-53003 - FilteredScene: {fileID: 0} @@ -1139,7 +1128,7 @@ MonoBehaviour: BuildPlatform: 43 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-63904 - FilteredScene: {fileID: 0} @@ -1149,7 +1138,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 2 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-66357, UUM-67324 - FilteredScene: {fileID: 0} @@ -1159,7 +1148,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 11 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-66357 - FilteredScene: {fileID: 0} @@ -1169,7 +1158,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 13 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-67324 - FilteredScene: {fileID: 0} @@ -1179,7 +1168,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 16 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-67324 - FilteredScene: {fileID: 0} @@ -1189,7 +1178,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 18 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-66357, UUM-67324 - FilteredScene: {fileID: 0} @@ -1199,7 +1188,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 22 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-67324 - FilteredScene: {fileID: 0} @@ -1209,7 +1198,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 24 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-67324 - FilteredScene: {fileID: 0} @@ -1219,7 +1208,7 @@ MonoBehaviour: BuildPlatform: -2 GraphicsDevice: 25 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-67324 - FilteredScene: {fileID: 0} @@ -1229,7 +1218,7 @@ MonoBehaviour: BuildPlatform: 44 GraphicsDevice: 4 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: UUM-67324 - FilteredScene: {fileID: 0} @@ -1240,7 +1229,7 @@ MonoBehaviour: BuildPlatform: 20 GraphicsDevice: 28 Architecture: 0 - XrSdk: + XrSdk: StereoModes: 0 Reason: No support in webgpu - FilteredScene: {fileID: 0} @@ -1250,7 +1239,7 @@ MonoBehaviour: BuildPlatform: 9 GraphicsDevice: 16 Architecture: 2 - XrSdk: + XrSdk: StereoModes: 0 Reason: https://jira.unity3d.com/browse/UUM-85648 - FilteredScene: {fileID: 0} From 4adbf9c54ce4d385e8a87387b02395588c00f19c Mon Sep 17 00:00:00 2001 From: Wilfrid Girard Date: Thu, 28 Nov 2024 01:19:59 +0000 Subject: [PATCH 83/85] [Switch] [SRP] [Tests] Enable Asserts for Switch SRP tests on Yamato [PLATGRAPH-4039] This pull request allows our internal Yamato Tests for SRP to depend on the "ABV Subset" flavor of the "Build Switch Support" job. This allows us to check for more potential issues because "Build Switch Support (ABV Subset)" enables Asserts in the Player code. This also makes Yamato jobs slightly faster since "Build Switch Support (ABV Subset)" only builds the Development Player. Related Jira ticket: [PLATGRAPH-4039](https://jira.unity3d.com/browse/PLATGRAPH-4039) --- .../Test/TestFilters/TestCaseFilters.asset | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset index 8dc4d7bfe42..825116cb185 100644 --- a/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset +++ b/Tests/SRPTests/Projects/UniversalGraphicsTest_Foundation/Assets/Test/TestFilters/TestCaseFilters.asset @@ -1342,3 +1342,43 @@ MonoBehaviour: XrSdk: StereoModes: 0 Reason: No support PS5 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 79411c8112bdd64429adcd528baacf32, type: 3} + ColorSpace: -1 + BuildPlatform: 38 + GraphicsDevice: 22 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: https://jira.unity3d.com/browse/PLATGRAPH-4053 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 79411c8112bdd64429adcd528baacf32, type: 3} + ColorSpace: -1 + BuildPlatform: 38 + GraphicsDevice: 22 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: https://jira.unity3d.com/browse/PLATGRAPH-4053 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: 6e1d9c84fb9f1004798f6be12f277f09, type: 3} + ColorSpace: -1 + BuildPlatform: 38 + GraphicsDevice: 22 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: https://jira.unity3d.com/browse/PLATGRAPH-4053 + - FilteredScene: {fileID: 0} + FilteredScenes: + - {fileID: 102900000, guid: f07beec5ff4e7744383242b8ed2eefff, type: 3} + ColorSpace: -1 + BuildPlatform: 38 + GraphicsDevice: 22 + Architecture: 0 + XrSdk: + StereoModes: 0 + Reason: https://jira.unity3d.com/browse/PLATGRAPH-4053 From 99295dda2d36267ecd23a6c4ddfcb941efa617d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Carr=C3=A8re?= Date: Thu, 28 Nov 2024 01:20:10 +0000 Subject: [PATCH 84/85] docg-5996: Add note about Detail Mask and clarify description Add note about Detail Mask. Clarify text in the manual as well (Secondary Maps (Detail Maps) and Detail Mask). https://jira.unity3d.com/browse/DOCG-5996 --- .../Documentation~/Mask-Map-and-Detail-Map.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Mask-Map-and-Detail-Map.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Mask-Map-and-Detail-Map.md index 5534281d2ea..87261c9b382 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Mask-Map-and-Detail-Map.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Mask-Map-and-Detail-Map.md @@ -19,6 +19,9 @@ The mask map contains four grayscale textures, one in each color channel. The de | **Blue** | Detail mask | | **Alpha** | Smoothness | + +**Note:** The detail mask texture allows you to control where the detail texture is applied on your model. This means you can decide which areas should display the detail texture and which should not. For instance, if your model has skin pores, you might mask the lips and eyebrows to prevent the pores from appearing in those areas. + To create a mask map, create a linear composited map in a photo editor, using the channels as described in the table above. The following example image demonstrates the individual components of a full mask map. From 15f0495fc761ca7408912849a6153a0d17091b92 Mon Sep 17 00:00:00 2001 From: Mark Green Date: Thu, 28 Nov 2024 01:20:35 +0000 Subject: [PATCH 85/85] Graphics docs feedback fixes November 2024 (part 3) Part 3 of minor fixes from feedback tickets Jira tickets: - https://jira.unity3d.com/browse/DOCG-6197 Fix link to example script - https://jira.unity3d.com/browse/DOCG-5620 Remove UI screenshots - https://jira.unity3d.com/browse/DOCG-5818 Remove unneeded line - https://jira.unity3d.com/browse/DOCG-6193 Add perceptual blending - https://jira.unity3d.com/browse/DOCG-6180 Replace snippet to ensure link works - https://jira.unity3d.com/browse/DOCG-4956 Fix link - https://jira.unity3d.com/browse/DOCG-6087 Remove out-of-date culling UI screenshots --- .../Documentation~/Default-Settings-Window.md | 5 +---- .../Documentation~/rendering-multiframe-recording-api.md | 2 +- .../rendering-understand-multiframe-rendering.md | 2 +- .../volumetric-clouds-volume-override-reference.md | 1 + .../Documentation~/Context-OutputShaderGraphMesh.md | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Default-Settings-Window.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Default-Settings-Window.md index fbdcf46e307..74248e7696a 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Default-Settings-Window.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Default-Settings-Window.md @@ -19,9 +19,6 @@ Use this section to select which custom post processing effect HDRP uses in the HDRP provides one list for each post processing injection point. See the [Custom Post Process](Custom-Post-Process.md) documentation for more details. -![](Images/HDRPgs_Custom_PP.png) - - ## Frame Settings (Default Values) The [Frame Settings](Frame-Settings.md) control the rendering passes that Cameras perform at runtime. @@ -47,7 +44,7 @@ You can use the **Volume Profiles** section to assign and edit a [Volume Profile The **Default Volume Profile Asset** (A) references a Volume Profile in the HDRP package folder called `DefaultSettingsVolumeProfile` by default. Below it, you can add [Volume overrides](volume-component.md), and edit their properties. You can assign your own Volume Profile to this property field. Be aware that this property must always reference a Volume Profile. If you assign your own Volume Profile and then delete it, HDRP automatically re-assigns the `DefaultSettingsVolumeProfile` from the HDRP package folder. -The **LookDev Volume Profile Asset** (B) references the Volume Profile HDRP uses in the [LookDev window](test-and-debug-materials-in-different-lighting-conditions-look-dev.md). This Asset works in almost the same way as the Default Volume Profile Asset, except that it overrides [Visual Environment Components](visual-environment-volume-override-reference.md) and sky components.![](Images/HDRPgs_Volume_Profiles.png) +The **LookDev Volume Profile Asset** (B) references the Volume Profile HDRP uses in the [LookDev window](test-and-debug-materials-in-different-lighting-conditions-look-dev.md). This Asset works in almost the same way as the Default Volume Profile Asset, except that it overrides [Visual Environment Components](visual-environment-volume-override-reference.md) and sky components. ## Resources diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-multiframe-recording-api.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-multiframe-recording-api.md index 3087b8efc65..0fc503b335f 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-multiframe-recording-api.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-multiframe-recording-api.md @@ -25,4 +25,4 @@ The only call that takes any parameters is **BeginRecording**. Here is an explan | **ShutterInterval** | The amount of time the shutter is open between two subsequent frames. A value of **0** results in an instant shutter (no motion blur). A value of **1** means there is no (time) gap between two subsequent frames. | | **ShutterProfile** | An animation curve that specifies the shutter position during the shutter interval. Alternatively, you can also provide the time the shutter was fully open; and when the shutter begins closing. | -Before calling the accumulation API, the application should also set the desired `Time.captureDeltaTime`. The example script below demonstrates how to use these API calls. +Before calling the accumulation API, the application should also set the desired `Time.captureDeltaTime`. Refer to [Combine animations in a script](rendering-combine-animation-sequences-in-script) for an example. diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-understand-multiframe-rendering.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-understand-multiframe-rendering.md index b01241ffbe6..0137a96e7c4 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-understand-multiframe-rendering.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/rendering-understand-multiframe-rendering.md @@ -6,6 +6,6 @@ The High Definition Render Pipeline (HDRP) provides a scripting API that allows This API is particularly useful when recording path-traced movies. Normally, when editing a Scene, the convergence of path tracing restarts every time the Scene changes, to provide artists an interactive editing workflow that allows them to quickly visualize their changes. However such behavior isn't desirable during recording. -The following image shows a rotating GameObject with path tracing and accumulation motion blur, recorded using the [multi-frame recording API](rendering-multiframe recording API) +The following image shows a rotating GameObject with path tracing and accumulation motion blur, recorded using the [multi-frame recording API](rendering-multiframe-recording-API.md) [](Images/path_tracing_recording.png) \ No newline at end of file diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/volumetric-clouds-volume-override-reference.md b/Packages/com.unity.render-pipelines.high-definition/Documentation~/volumetric-clouds-volume-override-reference.md index ba0e9c1df21..44b22b7e9fa 100644 --- a/Packages/com.unity.render-pipelines.high-definition/Documentation~/volumetric-clouds-volume-override-reference.md +++ b/Packages/com.unity.render-pipelines.high-definition/Documentation~/volumetric-clouds-volume-override-reference.md @@ -65,6 +65,7 @@ Refer to [Create realistic clouds (volumetric clouds)](create-realistic-clouds-v | -------------------------------- | ------------------------------------------------------------ | | **Temporal Accumulation Factor** | The amount of temporal accumulation to apply to the clouds. Temporal accumulation increases the visual quality of clouds by decreasing the noise. A higher value produces better quality clouds, but can create [ghosting](Glossary.md#ghosting). | | **Ghosting Reduction** | When you enable this property, HDRP removes the ghosting caused by temporal accumulation. This effect might cause a flickering effect when the **Temporal Accumulation Factor** value is low. | +| **Perceptual Blending** | Blend the clouds with the environment. This might cause artifacts if the sky is overexposed. This setting only has an effect when you disable multi-sample antialiasing (MSAA). | | **Num Primary Steps** | The number of steps to use to evaluate the clouds' transmittance. Higher values linearly increase the resource intensity of the effect. | | **Num Light Steps** | The number of steps to use to evaluate the clouds' lighting. Higher values exponent increase the resource intensity of the effect. | diff --git a/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputShaderGraphMesh.md b/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputShaderGraphMesh.md index 8f9c2694b67..f5c37286b1c 100644 --- a/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputShaderGraphMesh.md +++ b/Packages/com.unity.visualeffectgraph/Documentation~/Context-OutputShaderGraphMesh.md @@ -2,7 +2,7 @@ Menu Path : **Context > Output Particle ShaderGraph Mesh** -[!include[](Snippets/Context-OutputShaderGraph-InlineIntro.md)] +You can use custom Shader Graphs in dedicated Shader Graph Outputs. Refer to [Working with Shader Graph](sg-working-with.md) for more information about the general Shader Graph workflow. This output is similar to [Output Particle Mesh](Context-OutputParticleMesh.md).

    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 literal 0 HcmV?d00001 diff --git a/Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_ambient-probe-dimmer-0.jpg b/Packages/com.unity.render-pipelines.high-definition/Documentation~/Images/ray_tracing_troubleshoot_ambient-probe-dimmer-0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9a1e165f80934af8e3f520aeaa48275141dbf36 GIT binary patch literal 62670 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 *AZU2O=Ff&D%u2&+BeHH?Wh%9 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