From 76a57b33e0c2eff0c9db3f2639f651017460f308 Mon Sep 17 00:00:00 2001 From: SweetJJuya Date: Wed, 12 Feb 2025 16:33:04 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9E=84=EC=8B=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/01.Scenes/03.Sail.unity | 4088 ++- .../Non - Shader Bending (Scene 2).meta | 8 + .../LightingData.asset | Bin 0 -> 17729 bytes .../LightingData.asset.meta | 8 + .../ReflectionProbe-0.exr | Bin 0 -> 163040 bytes .../ReflectionProbe-0.exr.meta | 143 + .../{Curved_Obejct.cs => Curved_Object.cs} | 5 +- ...d_Obejct.cs.meta => Curved_Object.cs.meta} | 0 .../Sail/Curved_Object_StaticPosition.cs | 34 + .../Sail/Curved_Object_StaticPosition.cs.meta | 2 + Assets/03.Images/Sail.meta | 8 + Assets/03.Images/Sail/Island01.mat | 161 + .../Sail/Island01.mat.meta} | 2 +- Assets/03.Images/Sail/Island01.png | Bin 0 -> 1026053 bytes Assets/03.Images/Sail/Island01.png.meta | 143 + .../Curved_Shader/BendingSprite.shadergraph | 1047 + .../BendingSprite.shadergraph.meta | 10 + .../Curved_Shader/BendingSpriteLit.mat | 75 + .../Curved_Shader/BendingSpriteLit.mat.meta | 8 + .../{Master 1.mat => CurvedWorldLit.mat} | 30 +- .../Curved_Shader/CurvedWorldLit.mat.meta | 8 + .../Non - Shader Bending (Scene 1).meta | 8 + .../LightingData.asset | Bin 0 -> 17729 bytes .../LightingData.asset.meta | 8 + .../ReflectionProbe-0.exr | Bin 0 -> 163040 bytes .../ReflectionProbe-0.exr.meta | 143 + .../Non - Shader Bending (Scene 2).meta | 8 + .../LightingData.asset | Bin 0 -> 17729 bytes .../LightingData.asset.meta | 8 + .../ReflectionProbe-0.exr | Bin 0 -> 163040 bytes .../ReflectionProbe-0.exr.meta | 143 + ... #3 - Little Planet (part 2) Finished.meta | 8 + .../LightingData.asset | Bin 0 -> 17681 bytes .../LightingData.asset.meta | 8 + .../Tutorial #4 - Multiple Bends.meta | 8 + .../LightingData.asset | Bin 0 -> 17729 bytes .../LightingData.asset.meta | 8 + .../ReflectionProbe-0.exr | Bin 0 -> 142765 bytes .../ReflectionProbe-0.exr.meta | 143 + .../Shaders/AllIn1VfxLit.shader | 25267 ++++++++-------- .../Materials/M_Imphenzia_LowPollyStyle.mat | 84 +- .../Toon Water URP/Toon Water Material 1.mat | 10 +- 42 files changed, 16709 insertions(+), 14925 deletions(-) create mode 100644 Assets/01.Scenes/Non - Shader Bending (Scene 2).meta create mode 100644 Assets/01.Scenes/Non - Shader Bending (Scene 2)/LightingData.asset create mode 100644 Assets/01.Scenes/Non - Shader Bending (Scene 2)/LightingData.asset.meta create mode 100644 Assets/01.Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr create mode 100644 Assets/01.Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr.meta rename Assets/02.Scripts/BlueWater/Sail/{Curved_Obejct.cs => Curved_Object.cs} (97%) rename Assets/02.Scripts/BlueWater/Sail/{Curved_Obejct.cs.meta => Curved_Object.cs.meta} (100%) create mode 100644 Assets/02.Scripts/BlueWater/Sail/Curved_Object_StaticPosition.cs create mode 100644 Assets/02.Scripts/BlueWater/Sail/Curved_Object_StaticPosition.cs.meta create mode 100644 Assets/03.Images/Sail.meta create mode 100644 Assets/03.Images/Sail/Island01.mat rename Assets/{09.Shaders/Curved_Shader/Master 1.mat.meta => 03.Images/Sail/Island01.mat.meta} (79%) create mode 100644 Assets/03.Images/Sail/Island01.png create mode 100644 Assets/03.Images/Sail/Island01.png.meta create mode 100644 Assets/09.Shaders/Curved_Shader/BendingSprite.shadergraph create mode 100644 Assets/09.Shaders/Curved_Shader/BendingSprite.shadergraph.meta create mode 100644 Assets/09.Shaders/Curved_Shader/BendingSpriteLit.mat create mode 100644 Assets/09.Shaders/Curved_Shader/BendingSpriteLit.mat.meta rename Assets/09.Shaders/Curved_Shader/{Master 1.mat => CurvedWorldLit.mat} (84%) create mode 100644 Assets/09.Shaders/Curved_Shader/CurvedWorldLit.mat.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1).meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/LightingData.asset create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/LightingData.asset.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/ReflectionProbe-0.exr create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/ReflectionProbe-0.exr.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2).meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/LightingData.asset create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/LightingData.asset.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #3 - Little Planet (part 2) Finished.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #3 - Little Planet (part 2) Finished/LightingData.asset create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #3 - Little Planet (part 2) Finished/LightingData.asset.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #4 - Multiple Bends.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #4 - Multiple Bends/LightingData.asset create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #4 - Multiple Bends/LightingData.asset.meta create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #4 - Multiple Bends/ReflectionProbe-0.exr create mode 100644 Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #4 - Multiple Bends/ReflectionProbe-0.exr.meta diff --git a/Assets/01.Scenes/03.Sail.unity b/Assets/01.Scenes/03.Sail.unity index fce1ae440..037ff2cae 100644 --- a/Assets/01.Scenes/03.Sail.unity +++ b/Assets/01.Scenes/03.Sail.unity @@ -1843,7 +1843,7 @@ Transform: - {fileID: 721365039} - {fileID: 1498712852} - {fileID: 727333638} - - {fileID: 740990765} + - {fileID: 670561796} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!114 &89219353 @@ -11098,247 +11098,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 328888839} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!21 &331812090 -Material: - serializedVersion: 8 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_Name: AllIn1Vfx/AllIn1Vfx - m_Shader: {fileID: 4800000, guid: 6eb86e4931b506a408fd1477edec61ea, type: 3} - m_Parent: {fileID: 0} - m_ModifiedSerializedProperties: 0 - m_ValidKeywords: - - ADDITIVECONFIG_ON - m_InvalidKeywords: [] - m_LightmapFlags: 4 - m_EnableInstancingVariants: 0 - m_DoubleSidedGI: 0 - m_CustomRenderQueue: -1 - stringTagMap: - RenderType: Transparent - disabledShaderPasses: [] - m_LockedProperties: - m_SavedProperties: - serializedVersion: 3 - m_TexEnvs: - - _ColorRampTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ColorRampTexGradient: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DistNormalMap: - m_Texture: {fileID: 2800000, guid: 06907d08092c41f4aa8b5b3cbe5f9fa2, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _DistortTex: - m_Texture: {fileID: 2800000, guid: fcb027caad6963b4a80539bbce0d10e9, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _FadeBurnTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _FadeTex: - m_Texture: {fileID: 2800000, guid: 854b25bc08516364da5a786b1cad247e, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _GlowTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 2800000, guid: 5e9ddf7ec70ee3e48bb89664de649cd3, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MaskTex: - m_Texture: {fileID: 2800000, guid: 2f6642b43dc405d498acba7e288c068c, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Shape1MaskTex: - m_Texture: {fileID: 2800000, guid: db8fa36fcfe9738418db54ee0fe17fdf, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Shape2DistortTex: - m_Texture: {fileID: 2800000, guid: fcb027caad6963b4a80539bbce0d10e9, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Shape2Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Shape3DistortTex: - m_Texture: {fileID: 2800000, guid: fcb027caad6963b4a80539bbce0d10e9, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _Shape3Tex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _ShapeDistortTex: - m_Texture: {fileID: 2800000, guid: fcb027caad6963b4a80539bbce0d10e9, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _TrailWidthGradient: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _VertOffsetTex: - m_Texture: {fileID: 2800000, guid: 48da24d771916524899d36e4bfe7f762, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Ints: [] - m_Floats: - - _Alpha: 1 - - _AlphaCutoffValue: 0.25 - - _AlphaFadeAmount: -0.1 - - _AlphaFadePow: 1 - - _AlphaFadeSmooth: 0.075 - - _AlphaStepMax: 0.075 - - _AlphaStepMin: 0 - - _CamDistFadeStepMax: 100 - - _CamDistFadeStepMin: 0 - - _CamDistProximityFade: 0 - - _ColorGradingMidPoint: 0.5 - - _ColorMask: 15 - - _ColorRampBlend: 1 - - _ColorRampLuminosity: 0 - - _CullingOption: 0 - - _DebugShape: 1 - - _DepthGlow: 1 - - _DepthGlowDist: 0.5 - - _DepthGlowGlobal: 1 - - _DepthGlowPow: 1 - - _DistortAmount: 0.5 - - _DistortTexXSpeed: 5 - - _DistortTexYSpeed: 5 - - _DistortionBlend: 1 - - _DistortionPower: 10 - - _DistortionScrollXSpeed: 0 - - _DistortionScrollYSpeed: 0 - - _DstMode: 1 - - _EditorDrawers: 60 - - _FadeAmount: -0.1 - - _FadeBurnGlow: 5 - - _FadeBurnWidth: 0.01 - - _FadePower: 1 - - _FadeScrollXSpeed: 0 - - _FadeScrollYSpeed: 0 - - _FadeTransition: 0.075 - - _Glow: 0 - - _GlowGlobal: 1 - - _HandDrawnAmount: 10 - - _HandDrawnSpeed: 5 - - _HsvBright: 1 - - _HsvSaturation: 1 - - _HsvShift: 180 - - _LightAmount: 0 - - _MaskPow: 1 - - _OffsetSh1: 1 - - _OffsetSh2: 1 - - _OffsetSh3: 1 - - _PixelateSize: 32 - - _PosterizeNumColors: 5 - - _RandomSh1Mult: 1 - - _RandomSh2Mult: 1 - - _RandomSh3Mult: 1 - - _RenderingMode: 1 - - _RimAddAmount: 1 - - _RimBias: 0 - - _RimErodesAlpha: 0 - - _RimIntensity: 1 - - _RimPower: 5 - - _RimScale: 1 - - _RoundWaveSpeed: 2 - - _RoundWaveStrength: 0.7 - - _ScreenUvSh2DistScale: 1 - - _ScreenUvSh3DistScale: 1 - - _ScreenUvShDistScale: 1 - - _Sh1BlendOffset: 0 - - _Sh2BlendOffset: 0 - - _Sh3BlendOffset: 0 - - _ShadowAmount: 0.4 - - _ShadowStepMax: 1 - - _ShadowStepMin: 0 - - _ShakeUvSpeed: 20 - - _ShakeUvX: 5 - - _ShakeUvY: 4 - - _Shape1MaskPow: 1 - - _Shape2AlphaWeight: 2 - - _Shape2Brightness: 0 - - _Shape2ColorWeight: 2 - - _Shape2Contrast: 1 - - _Shape2DistortAmount: 0.5 - - _Shape2DistortXSpeed: 0.1 - - _Shape2DistortYSpeed: 0.1 - - _Shape2RotationOffset: 0 - - _Shape2RotationSpeed: 0 - - _Shape2XSpeed: 0 - - _Shape2YSpeed: 0 - - _Shape3AlphaWeight: 2 - - _Shape3Brightness: 0 - - _Shape3ColorWeight: 2 - - _Shape3Contrast: 1 - - _Shape3DistortAmount: 0.5 - - _Shape3DistortXSpeed: 0.1 - - _Shape3DistortYSpeed: 0.1 - - _Shape3RotationOffset: 0 - - _Shape3RotationSpeed: 0 - - _Shape3XSpeed: 0 - - _Shape3YSpeed: 0 - - _ShapeAlphaWeight: 1 - - _ShapeBrightness: 0 - - _ShapeColorWeight: 1 - - _ShapeContrast: 1 - - _ShapeDistortAmount: 0.5 - - _ShapeDistortXSpeed: 0.1 - - _ShapeDistortYSpeed: 0.1 - - _ShapeRotationOffset: 0 - - _ShapeRotationSpeed: 0 - - _ShapeXSpeed: 0 - - _ShapeYSpeed: 0 - - _SoftFactor: 0.5 - - _SrcMode: 1 - - _TextureScrollXSpeed: 1 - - _TextureScrollYSpeed: 0 - - _TimingSeed: 0 - - _TrailWidthPower: 1 - - _TwistUvAmount: 1 - - _TwistUvPosX: 0.5 - - _TwistUvPosY: 0.5 - - _TwistUvRadius: 0.75 - - _VertOffsetAmount: 0.5 - - _VertOffsetPower: 1 - - _VertOffsetTexXSpeed: 0.1 - - _VertOffsetTexYSpeed: 0.1 - - _WaveAmount: 7 - - _WaveSpeed: 10 - - _WaveStrength: 7.5 - - _WaveX: 0 - - _WaveY: 0.5 - - _ZTestMode: 4 - - _ZWrite: 0 - m_Colors: - - _BackFaceTint: {r: 0.5, g: 0.5, b: 0.5, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} - - _ColorGradingDark: {r: 1, g: 1, b: 1, a: 1} - - _ColorGradingLight: {r: 1, g: 1, b: 1, a: 1} - - _ColorGradingMiddle: {r: 1, g: 1, b: 1, a: 1} - - _DepthGlowColor: {r: 1, g: 1, b: 1, a: 1} - - _FadeBurnColor: {r: 1, g: 1, b: 0, a: 1} - - _FrontFaceTint: {r: 1, g: 1, b: 1, a: 1} - - _GlowColor: {r: 1, g: 1, b: 1, a: 1} - - _LightColor: {r: 1, g: 1, b: 1, a: 1} - - _RimColor: {r: 1, g: 1, b: 1, a: 1} - - _Shape2Color: {r: 1, g: 1, b: 1, a: 1} - - _Shape3Color: {r: 1, g: 1, b: 1, a: 1} - - _ShapeColor: {r: 1, g: 1, b: 1, a: 1} - m_BuildTextureStacks: [] - m_AllowLocking: 1 --- !u!1001 &340467653 PrefabInstance: m_ObjectHideFlags: 0 @@ -17166,7 +16925,7 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 669821308} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &672349456 +--- !u!1 &670561795 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -17174,1730 +16933,10 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 672349457} - - component: {fileID: 672349460} - - component: {fileID: 672349459} - - component: {fileID: 672349458} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &672349457 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 672349456} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 40, y: 0, z: 55} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 727333638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!64 &672349458 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 672349456} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &672349459 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 672349456} - 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: 6f4ffd4fdece5634884fa9923f186879, 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 &672349460 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 672349456} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1001 &675391285 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1921625339} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.x - value: -1 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.z - value: 1.73 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7069325 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.x - value: -0.7072802 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.y - value: 0.0010988206 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.z - value: 0.00020856084 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: -89.929 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0.034 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} - - target: {fileID: 919132149155446097, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_Name - value: hex_grass (6) - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} ---- !u!1001 &680825964 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1921625339} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.x - value: 9.13 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.y - value: -0.03999999 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.z - value: 5.2399993 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.x - value: -0.7071068 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: -90 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} - - target: {fileID: 919132149155446097, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_Name - value: hex_grass (30) - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} ---- !u!4 &680825965 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - m_PrefabInstance: {fileID: 680825964} - m_PrefabAsset: {fileID: 0} ---- !u!1 &686996706 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 686996707} - - component: {fileID: 686996710} - - component: {fileID: 686996709} - - component: {fileID: 686996708} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &686996707 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686996706} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -30, y: 0, z: 30} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 727333638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!64 &686996708 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686996706} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &686996709 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686996706} - 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: 6f4ffd4fdece5634884fa9923f186879, 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 &686996710 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 686996706} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1001 &690535386 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1921625339} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.x - value: 14.11 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.y - value: 0.46 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalPosition.z - value: -0.050000668 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.x - value: -0.7071068 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: -90 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} - - target: {fileID: 919132149155446097, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - propertyPath: m_Name - value: hex_grass (33) - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} ---- !u!4 &690535387 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} - m_PrefabInstance: {fileID: 690535386} - m_PrefabAsset: {fileID: 0} ---- !u!1 &692873316 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 692873317} - - component: {fileID: 692873320} - - component: {fileID: 692873319} - - component: {fileID: 692873318} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &692873317 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 692873316} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 10, y: 0, z: 25} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 727333638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!64 &692873318 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 692873316} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &692873319 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 692873316} - 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: 6f4ffd4fdece5634884fa9923f186879, 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 &692873320 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 692873316} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &696789729 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 696789730} - - component: {fileID: 696789733} - - component: {fileID: 696789732} - - component: {fileID: 696789731} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &696789730 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 696789729} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 45, y: 0, z: 25} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 727333638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!64 &696789731 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 696789729} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &696789732 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 696789729} - 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: 6f4ffd4fdece5634884fa9923f186879, 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 &696789733 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 696789729} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &701590825 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 701590826} - - component: {fileID: 701590829} - - component: {fileID: 701590828} - - component: {fileID: 701590827} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &701590826 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 701590825} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 55, y: 0, z: 45} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 727333638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!64 &701590827 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 701590825} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &701590828 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 701590825} - 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: 6f4ffd4fdece5634884fa9923f186879, 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 &701590829 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 701590825} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1001 &703146488 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1921625339} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalPosition.x - value: -7.04 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalPosition.y - value: -0.03999999 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalPosition.z - value: 12.13 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalRotation.w - value: 0.61237246 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalRotation.x - value: -0.61237246 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalRotation.y - value: -0.3535534 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalRotation.z - value: -0.3535534 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: -90 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: -60 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} - - target: {fileID: 919132149155446097, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - propertyPath: m_Name - value: hex_coast_E (2) - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} ---- !u!4 &703146489 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} - m_PrefabInstance: {fileID: 703146488} - m_PrefabAsset: {fileID: 0} ---- !u!1 &712182950 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 712182951} - - component: {fileID: 712182954} - - component: {fileID: 712182953} - - component: {fileID: 712182952} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &712182951 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 712182950} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -60, y: 0, z: 50} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 727333638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!64 &712182952 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 712182950} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &712182953 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 712182950} - 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: 6f4ffd4fdece5634884fa9923f186879, 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 &712182954 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 712182950} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1001 &712573723 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 1921625339} - m_Modifications: - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalPosition.x - value: -4 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalPosition.z - value: 3.4 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalRotation.w - value: 0.3555904 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalRotation.x - value: -0.3515124 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalRotation.y - value: -0.6111919 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalRotation.z - value: -0.61354625 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: -89.619 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: -30.001 - objectReference: {fileID: 0} - - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: -89.999 - objectReference: {fileID: 0} - - target: {fileID: -7511558181221131132, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} - - target: {fileID: 919132149155446097, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - propertyPath: m_Name - value: hex_coast_C_waterless (1) - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} ---- !u!4 &712573724 stripped -Transform: - m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} - m_PrefabInstance: {fileID: 712573723} - m_PrefabAsset: {fileID: 0} ---- !u!1 &720424899 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 720424900} - m_Layer: 0 - m_Name: ---------------Managers--------------- - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &720424900 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 720424899} - 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 &721365038 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 721365039} - - component: {fileID: 721365042} - - component: {fileID: 721365041} - - component: {fileID: 721365040} - m_Layer: 0 - m_Name: CinemachineCamera_Top - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &721365039 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 721365038} - serializedVersion: 2 - m_LocalRotation: {x: 0.70090926, y: 0.0000009683705, z: -0.00000095161505, w: 0.7132505} - m_LocalPosition: {x: 0, y: 10, z: -0.1} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 89219352} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &721365040 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 721365038} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f38bda98361e1de48a4ca2bd86ea3c17, type: 3} - m_Name: - m_EditorClassIdentifier: - Composition: - ScreenPosition: {x: 0, y: 0} - DeadZone: - Enabled: 0 - Size: {x: 0.2, y: 0.2} - HardLimits: - Enabled: 0 - Size: {x: 0.8, y: 0.8} - Offset: {x: 0, y: 0} - CenterOnActivate: 1 - TargetOffset: {x: 0, y: 0, z: 0} - Damping: {x: 0.5, y: 0.5} - Lookahead: - Enabled: 0 - Time: 0 - Smoothing: 0 - IgnoreY: 0 ---- !u!114 &721365041 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 721365038} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3} - m_Name: - m_EditorClassIdentifier: - TrackerSettings: - BindingMode: 4 - PositionDamping: {x: 0, y: 0, z: 0} - AngularDampingMode: 0 - RotationDamping: {x: 1, y: 1, z: 1} - QuaternionDamping: 1 - FollowOffset: {x: 0, y: 10, z: -0.1} ---- !u!114 &721365042 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 721365038} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} - m_Name: - m_EditorClassIdentifier: - Priority: - Enabled: 0 - m_Value: 0 - OutputChannel: 1 - StandbyUpdate: 2 - m_StreamingVersion: 20241001 - m_LegacyPriority: 0 - Target: - TrackingTarget: {fileID: 89219352} - LookAtTarget: {fileID: 0} - CustomLookAtTarget: 0 - Lens: - FieldOfView: 60.000004 - OrthographicSize: 5 - NearClipPlane: 0.3 - FarClipPlane: 1000 - Dutch: 0 - ModeOverride: 0 - PhysicalProperties: - GateFit: 2 - SensorSize: {x: 21.946, y: 16.002} - LensShift: {x: 0, y: 0} - FocusDistance: 10 - Iso: 200 - ShutterSpeed: 0.005 - Aperture: 16 - BladeCount: 5 - Curvature: {x: 2, y: 11} - BarrelClipping: 0.25 - Anamorphism: 0 - BlendHint: 0 ---- !u!1 &726620383 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 726620385} - - component: {fileID: 726620384} - m_Layer: 0 - m_Name: Reflection Probe - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!215 &726620384 -ReflectionProbe: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 726620383} - m_Enabled: 1 - serializedVersion: 2 - m_Type: 0 - m_Mode: 1 - m_RefreshMode: 0 - m_TimeSlicingMode: 0 - m_Resolution: 128 - m_UpdateFrequency: 0 - m_BoxSize: {x: 1000, y: 1000, z: 1000} - 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: 1 - m_HDR: 1 - m_BoxProjection: 0 - m_RenderDynamicObjects: 0 - m_UseOcclusionCulling: 1 - m_Importance: 1 - m_CustomBakedTexture: {fileID: 0} ---- !u!4 &726620385 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 726620383} - serializedVersion: 2 - m_LocalRotation: {x: -0.20419724, y: -0.039053436, z: 0.00814323, w: -0.9781166} - m_LocalPosition: {x: 135.1233, y: 0.57663536, z: -35.99004} - 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 &727333637 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 727333638} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &727333638 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 727333637} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: - - {fileID: 841528159} - - {fileID: 1737773901} - - {fileID: 1922280582} - - {fileID: 1028682306} - - {fileID: 1073917286} - - {fileID: 2081240041} - - {fileID: 1734679852} - - {fileID: 828999885} - - {fileID: 2063344127} - - {fileID: 1087557892} - - {fileID: 2045301518} - - {fileID: 905456350} - - {fileID: 179726014} - - {fileID: 2051461981} - - {fileID: 1717408764} - - {fileID: 179826817} - - {fileID: 1972417028} - - {fileID: 1260057512} - - {fileID: 1239727194} - - {fileID: 306035878} - - {fileID: 395650108} - - {fileID: 288792490} - - {fileID: 994885894} - - {fileID: 696789730} - - {fileID: 1178698711} - - {fileID: 2031778141} - - {fileID: 483508478} - - {fileID: 622417897} - - {fileID: 1902760377} - - {fileID: 1053523136} - - {fileID: 57103045} - - {fileID: 1099084994} - - {fileID: 1192304522} - - {fileID: 669821309} - - {fileID: 1496017641} - - {fileID: 1707595964} - - {fileID: 450101196} - - {fileID: 521813332} - - {fileID: 1187399389} - - {fileID: 1899249680} - - {fileID: 1465162988} - - {fileID: 692873317} - - {fileID: 1470893369} - - {fileID: 356937743} - - {fileID: 572235698} - - {fileID: 1595158873} - - {fileID: 1985384410} - - {fileID: 413526526} - - {fileID: 1019750221} - - {fileID: 926145297} - - {fileID: 325036121} - - {fileID: 1187795129} - - {fileID: 52496945} - - {fileID: 587262235} - - {fileID: 1740000784} - - {fileID: 633082511} - - {fileID: 548406829} - - {fileID: 414947627} - - {fileID: 802005159} - - {fileID: 646214062} - - {fileID: 1255038911} - - {fileID: 1588407705} - - {fileID: 2062443983} - - {fileID: 250370380} - - {fileID: 860157550} - - {fileID: 321316924} - - {fileID: 644502420} - - {fileID: 686996707} - - {fileID: 221626093} - - {fileID: 1938345524} - - {fileID: 489841812} - - {fileID: 1621666122} - - {fileID: 133117316} - - {fileID: 930817532} - - {fileID: 2123394794} - - {fileID: 1610675228} - - {fileID: 955325094} - - {fileID: 1998046903} - - {fileID: 1347016955} - - {fileID: 237682785} - - {fileID: 1727343499} - - {fileID: 638594345} - - {fileID: 165342444} - - {fileID: 1337254005} - - {fileID: 417009624} - - {fileID: 1427066206} - - {fileID: 1984306645} - - {fileID: 236659837} - - {fileID: 2031522283} - - {fileID: 442816150} - - {fileID: 1795755110} - - {fileID: 164511079} - - {fileID: 955904101} - - {fileID: 111314420} - - {fileID: 633925040} - - {fileID: 321147970} - - {fileID: 111614020} - - {fileID: 1055106369} - - {fileID: 79837837} - - {fileID: 2053290199} - - {fileID: 1378749155} - - {fileID: 146196675} - - {fileID: 1374597758} - - {fileID: 21312558} - - {fileID: 583046543} - - {fileID: 19241397} - - {fileID: 916118769} - - {fileID: 1652902729} - - {fileID: 546335445} - - {fileID: 651307869} - - {fileID: 80351289} - - {fileID: 981144303} - - {fileID: 182671154} - - {fileID: 982297989} - - {fileID: 45231473} - - {fileID: 1276085504} - - {fileID: 2018054855} - - {fileID: 624146101} - - {fileID: 128527182} - - {fileID: 1366074316} - - {fileID: 291086292} - - {fileID: 701590826} - - {fileID: 547275195} - - {fileID: 875465593} - - {fileID: 272364117} - - {fileID: 1744288286} - - {fileID: 1643088962} - - {fileID: 287810223} - - {fileID: 1514516441} - - {fileID: 1123585222} - - {fileID: 64912592} - - {fileID: 1116813058} - - {fileID: 592932429} - - {fileID: 72919015} - - {fileID: 1730467138} - - {fileID: 1303745118} - - {fileID: 807596369} - - {fileID: 1410785587} - - {fileID: 106270176} - - {fileID: 1746054935} - - {fileID: 1208322747} - - {fileID: 738143707} - - {fileID: 815912948} - - {fileID: 1751195274} - - {fileID: 2096975924} - - {fileID: 1320398892} - - {fileID: 343514171} - - {fileID: 759642621} - - {fileID: 613600732} - - {fileID: 2003152561} - - {fileID: 1392340810} - - {fileID: 1324934298} - - {fileID: 107653599} - - {fileID: 1586460241} - - {fileID: 364980997} - - {fileID: 1604513550} - - {fileID: 2062829863} - - {fileID: 1221622439} - - {fileID: 660455068} - - {fileID: 811774528} - - {fileID: 712182951} - - {fileID: 1735459445} - - {fileID: 2100942954} - - {fileID: 818403132} - - {fileID: 447865220} - - {fileID: 1008851287} - - {fileID: 1222687345} - - {fileID: 1977792068} - - {fileID: 1197564065} - - {fileID: 372127716} - - {fileID: 1475624400} - - {fileID: 1640656737} - - {fileID: 1342186446} - - {fileID: 1325519690} - - {fileID: 1153324737} - - {fileID: 672349457} - - {fileID: 149094276} - - {fileID: 1136202168} - - {fileID: 981129070} - - {fileID: 729905694} - - {fileID: 1642421942} - - {fileID: 1910578047} - - {fileID: 1475920467} - - {fileID: 975050259} - - {fileID: 2028801849} - - {fileID: 1377731632} - - {fileID: 84738268} - - {fileID: 1516936199} - - {fileID: 1334083345} - - {fileID: 1598889086} - - {fileID: 1591379778} - - {fileID: 817146360} - - {fileID: 806619558} - - {fileID: 224501490} - - {fileID: 1237645465} - - {fileID: 831928023} - - {fileID: 1916399143} - - {fileID: 2136438496} - - {fileID: 1870857150} - - {fileID: 341288852} - - {fileID: 1146705400} - - {fileID: 321547696} - - {fileID: 1755472302} - - {fileID: 397995228} - - {fileID: 1536263844} - - {fileID: 1566888677} - - {fileID: 1257681516} - - {fileID: 1740993551} - - {fileID: 173118536} - - {fileID: 396367022} - - {fileID: 1836588234} - - {fileID: 66965644} - - {fileID: 1072389534} - - {fileID: 9359169} - - {fileID: 1860299230} - - {fileID: 821019442} - - {fileID: 1822062613} - - {fileID: 2031280764} - - {fileID: 1517327374} - - {fileID: 2056570810} - - {fileID: 1746907222} - - {fileID: 254123141} - - {fileID: 461858943} - - {fileID: 1048941469} - - {fileID: 421513302} - - {fileID: 1895602508} - - {fileID: 1102873466} - - {fileID: 265620768} - - {fileID: 1856042325} - - {fileID: 1676301159} - - {fileID: 1583487141} - - {fileID: 488604015} - - {fileID: 953905465} - - {fileID: 1415365594} - - {fileID: 300400979} - - {fileID: 1093288573} - - {fileID: 328888840} - - {fileID: 1178058600} - - {fileID: 1490348006} - - {fileID: 404991463} - - {fileID: 992467866} - - {fileID: 2084034723} - - {fileID: 1627661930} - - {fileID: 240496222} - - {fileID: 1030837499} - - {fileID: 1657196768} - - {fileID: 1429525914} - - {fileID: 1562280620} - - {fileID: 2084671214} - - {fileID: 2014895259} - - {fileID: 59082830} - - {fileID: 1323956863} - - {fileID: 580770214} - - {fileID: 911803474} - - {fileID: 991463917} - - {fileID: 1481466921} - - {fileID: 1007219756} - - {fileID: 1316223703} - - {fileID: 1639694795} - - {fileID: 50768602} - - {fileID: 1875169289} - - {fileID: 265231756} - - {fileID: 1113409862} - - {fileID: 435381547} - - {fileID: 1855049566} - - {fileID: 1346610071} - - {fileID: 1398870684} - - {fileID: 1279553370} - - {fileID: 2076281496} - - {fileID: 1761268442} - - {fileID: 364036732} - m_Father: {fileID: 89219352} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &729905693 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 729905694} - - component: {fileID: 729905697} - - component: {fileID: 729905696} - - component: {fileID: 729905695} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &729905694 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729905693} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -35, y: 0, z: 55} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 727333638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!64 &729905695 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729905693} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &729905696 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729905693} - 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: 6f4ffd4fdece5634884fa9923f186879, 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 &729905697 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 729905693} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &738143706 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 738143707} - - component: {fileID: 738143710} - - component: {fileID: 738143709} - - component: {fileID: 738143708} - m_Layer: 0 - m_Name: Water - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &738143707 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 738143706} - serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 65, y: 0, z: 50} - m_LocalScale: {x: 0.5, y: 1, z: 0.5} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 727333638} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!64 &738143708 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 738143706} - m_Material: {fileID: 0} - m_IncludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_ExcludeLayers: - serializedVersion: 2 - m_Bits: 0 - m_LayerOverridePriority: 0 - m_IsTrigger: 0 - m_ProvidesContacts: 0 - m_Enabled: 1 - serializedVersion: 5 - m_Convex: 0 - m_CookingOptions: 30 - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &738143709 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 738143706} - 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: 6f4ffd4fdece5634884fa9923f186879, 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 &738143710 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 738143706} - m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &740990764 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 740990765} - - component: {fileID: 740990768} - - component: {fileID: 740990767} - - component: {fileID: 740990766} + - component: {fileID: 670561796} + - component: {fileID: 670561799} + - component: {fileID: 670561798} + - component: {fileID: 670561797} m_Layer: 0 m_Name: Particle System m_TagString: Untagged @@ -18905,41 +16944,41 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &740990765 +--- !u!4 &670561796 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 740990764} + m_GameObject: {fileID: 670561795} serializedVersion: 2 - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: -0.189, z: -0.761} + m_LocalRotation: {x: -0.0033059986, y: 0.9972942, z: 0.07336378, w: 0.0033588656} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 89219352} - m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} ---- !u!114 &740990766 + m_LocalEulerAnglesHint: {x: -8.416, y: 179.64, z: -0.353} +--- !u!114 &670561797 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 740990764} + m_GameObject: {fileID: 670561795} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 3c5dbbb1030d96d438905b0e01caa8d9, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!199 &740990767 +--- !u!199 &670561798 ParticleSystemRenderer: serializedVersion: 6 m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 740990764} + m_GameObject: {fileID: 670561795} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -18956,7 +16995,7 @@ ParticleSystemRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 331812090} + - {fileID: 1999686667} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -19009,13 +17048,13 @@ ParticleSystemRenderer: m_MeshWeighting2: 1 m_MeshWeighting3: 1 m_MaskInteraction: 0 ---- !u!198 &740990768 +--- !u!198 &670561799 ParticleSystem: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 740990764} + m_GameObject: {fileID: 670561795} serializedVersion: 8 lengthInSec: 5 simulationSpeed: 1 @@ -19263,7 +17302,7 @@ ParticleSystem: startSize: serializedVersion: 2 minMaxState: 0 - scalar: 1 + scalar: 0.49 minScalar: 1 maxCurve: serializedVersion: 2 @@ -19640,11 +17679,11 @@ ParticleSystem: ShapeModule: serializedVersion: 6 enabled: 1 - type: 4 - angle: 90 - length: 5 + type: 8 + angle: 12.59 + length: 2.09 boxThickness: {x: 0, y: 0, z: 0} - radiusThickness: 1 + radiusThickness: 0 donutRadius: 0.2 m_Position: {x: 0, y: 0, z: 0} m_Rotation: {x: 0, y: 0, z: 0} @@ -19784,7 +17823,7 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 arc: - value: 360 + value: 355.6 mode: 0 spread: 0 speed: @@ -19952,7 +17991,7 @@ ParticleSystem: m_BurstCount: 0 m_Bursts: [] SizeModule: - enabled: 1 + enabled: 0 curve: serializedVersion: 2 minMaxState: 1 @@ -19964,21 +18003,21 @@ ParticleSystem: - serializedVersion: 3 time: 0 value: 0 - inSlope: 2 - outSlope: 2 + inSlope: 0 + outSlope: 1 tangentMode: 0 weightedMode: 0 - inWeight: 0 - outWeight: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 - serializedVersion: 3 time: 1 value: 1 - inSlope: 0 + inSlope: 1 outSlope: 0 tangentMode: 0 weightedMode: 0 - inWeight: 0 - outWeight: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 m_PreInfinity: 2 m_PostInfinity: 2 m_RotationOrder: 4 @@ -20315,7 +18354,7 @@ ParticleSystem: minGradient: serializedVersion: 2 key0: {r: 1, g: 1, b: 1, a: 1} - key1: {r: 0, g: 0, b: 0, a: 1} + key1: {r: 0, g: 0, b: 0, a: 0} key2: {r: 0, g: 0, b: 0, a: 0} key3: {r: 0, g: 0, b: 0, a: 0} key4: {r: 0, g: 0, b: 0, a: 0} @@ -20324,7 +18363,7 @@ ParticleSystem: key7: {r: 0, g: 0, b: 0, a: 0} ctime0: 0 ctime1: 65535 - ctime2: 0 + ctime2: 65535 ctime3: 0 ctime4: 0 ctime5: 0 @@ -23732,6 +21771,1726 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 vectorLabel1_3: W +--- !u!1 &672349456 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 672349457} + - component: {fileID: 672349460} + - component: {fileID: 672349459} + - component: {fileID: 672349458} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &672349457 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672349456} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 40, y: 0, z: 55} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 727333638} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &672349458 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672349456} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &672349459 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672349456} + 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: 6f4ffd4fdece5634884fa9923f186879, 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 &672349460 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 672349456} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &675391285 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1921625339} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.x + value: -1 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.z + value: 1.73 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7069325 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7072802 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.y + value: 0.0010988206 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.z + value: 0.00020856084 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -89.929 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0.034 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} + - target: {fileID: 919132149155446097, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_Name + value: hex_grass (6) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} +--- !u!1001 &680825964 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1921625339} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.x + value: 9.13 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.y + value: -0.03999999 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.z + value: 5.2399993 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -90 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} + - target: {fileID: 919132149155446097, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_Name + value: hex_grass (30) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} +--- !u!4 &680825965 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + m_PrefabInstance: {fileID: 680825964} + m_PrefabAsset: {fileID: 0} +--- !u!1 &686996706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 686996707} + - component: {fileID: 686996710} + - component: {fileID: 686996709} + - component: {fileID: 686996708} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &686996707 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686996706} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -30, y: 0, z: 30} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 727333638} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &686996708 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686996706} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &686996709 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686996706} + 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: 6f4ffd4fdece5634884fa9923f186879, 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 &686996710 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 686996706} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &690535386 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1921625339} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.x + value: 14.11 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.y + value: 0.46 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalPosition.z + value: -0.050000668 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.x + value: -0.7071068 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -90 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} + - target: {fileID: 919132149155446097, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + propertyPath: m_Name + value: hex_grass (33) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} +--- !u!4 &690535387 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 626ff85c3f4426948a7e4c996dafe50a, type: 3} + m_PrefabInstance: {fileID: 690535386} + m_PrefabAsset: {fileID: 0} +--- !u!1 &692873316 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 692873317} + - component: {fileID: 692873320} + - component: {fileID: 692873319} + - component: {fileID: 692873318} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &692873317 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 692873316} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 10, y: 0, z: 25} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 727333638} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &692873318 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 692873316} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &692873319 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 692873316} + 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: 6f4ffd4fdece5634884fa9923f186879, 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 &692873320 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 692873316} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &696789729 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 696789730} + - component: {fileID: 696789733} + - component: {fileID: 696789732} + - component: {fileID: 696789731} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &696789730 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696789729} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 45, y: 0, z: 25} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 727333638} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &696789731 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696789729} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &696789732 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696789729} + 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: 6f4ffd4fdece5634884fa9923f186879, 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 &696789733 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696789729} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &701590825 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 701590826} + - component: {fileID: 701590829} + - component: {fileID: 701590828} + - component: {fileID: 701590827} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &701590826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701590825} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 55, y: 0, z: 45} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 727333638} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &701590827 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701590825} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &701590828 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701590825} + 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: 6f4ffd4fdece5634884fa9923f186879, 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 &701590829 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 701590825} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &703146488 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1921625339} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalPosition.x + value: -7.04 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalPosition.y + value: -0.03999999 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalPosition.z + value: 12.13 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalRotation.w + value: 0.61237246 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalRotation.x + value: -0.61237246 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalRotation.y + value: -0.3535534 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalRotation.z + value: -0.3535534 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -90 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -60 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} + - target: {fileID: 919132149155446097, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + propertyPath: m_Name + value: hex_coast_E (2) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} +--- !u!4 &703146489 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 8e7b0949ef33f3245aa5dc7e1a82b369, type: 3} + m_PrefabInstance: {fileID: 703146488} + m_PrefabAsset: {fileID: 0} +--- !u!1 &712182950 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 712182951} + - component: {fileID: 712182954} + - component: {fileID: 712182953} + - component: {fileID: 712182952} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &712182951 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 712182950} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -60, y: 0, z: 50} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 727333638} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &712182952 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 712182950} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &712182953 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 712182950} + 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: 6f4ffd4fdece5634884fa9923f186879, 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 &712182954 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 712182950} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &712573723 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1921625339} + m_Modifications: + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalPosition.x + value: -4 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalPosition.z + value: 3.4 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalRotation.w + value: 0.3555904 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalRotation.x + value: -0.3515124 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalRotation.y + value: -0.6111919 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalRotation.z + value: -0.61354625 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: -89.619 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -30.001 + objectReference: {fileID: 0} + - target: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: -89.999 + objectReference: {fileID: 0} + - target: {fileID: -7511558181221131132, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: 'm_Materials.Array.data[0]' + value: + objectReference: {fileID: 2100000, guid: bd4b519bb6b55df45846c135cc1b1fda, type: 2} + - target: {fileID: 919132149155446097, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + propertyPath: m_Name + value: hex_coast_C_waterless (1) + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} +--- !u!4 &712573724 stripped +Transform: + m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: ed61a1a7f4b17394680534f6ba5014a2, type: 3} + m_PrefabInstance: {fileID: 712573723} + m_PrefabAsset: {fileID: 0} +--- !u!1 &720424899 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 720424900} + m_Layer: 0 + m_Name: ---------------Managers--------------- + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &720424900 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 720424899} + 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 &721365038 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 721365039} + - component: {fileID: 721365042} + - component: {fileID: 721365041} + - component: {fileID: 721365040} + m_Layer: 0 + m_Name: CinemachineCamera_Top + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &721365039 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721365038} + serializedVersion: 2 + m_LocalRotation: {x: 0.70090926, y: 0.0000009683705, z: -0.00000095161505, w: 0.7132505} + m_LocalPosition: {x: 0, y: 10, z: -0.1} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 89219352} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &721365040 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721365038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f38bda98361e1de48a4ca2bd86ea3c17, type: 3} + m_Name: + m_EditorClassIdentifier: + Composition: + ScreenPosition: {x: 0, y: 0} + DeadZone: + Enabled: 0 + Size: {x: 0.2, y: 0.2} + HardLimits: + Enabled: 0 + Size: {x: 0.8, y: 0.8} + Offset: {x: 0, y: 0} + CenterOnActivate: 1 + TargetOffset: {x: 0, y: 0, z: 0} + Damping: {x: 0.5, y: 0.5} + Lookahead: + Enabled: 0 + Time: 0 + Smoothing: 0 + IgnoreY: 0 +--- !u!114 &721365041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721365038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b617507da6d07e749b7efdb34e1173e1, type: 3} + m_Name: + m_EditorClassIdentifier: + TrackerSettings: + BindingMode: 4 + PositionDamping: {x: 0, y: 0, z: 0} + AngularDampingMode: 0 + RotationDamping: {x: 1, y: 1, z: 1} + QuaternionDamping: 1 + FollowOffset: {x: 0, y: 10, z: -0.1} +--- !u!114 &721365042 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 721365038} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f9dfa5b682dcd46bda6128250e975f58, type: 3} + m_Name: + m_EditorClassIdentifier: + Priority: + Enabled: 0 + m_Value: 0 + OutputChannel: 1 + StandbyUpdate: 2 + m_StreamingVersion: 20241001 + m_LegacyPriority: 0 + Target: + TrackingTarget: {fileID: 89219352} + LookAtTarget: {fileID: 0} + CustomLookAtTarget: 0 + Lens: + FieldOfView: 60.000004 + OrthographicSize: 5 + NearClipPlane: 0.3 + FarClipPlane: 1000 + Dutch: 0 + ModeOverride: 0 + PhysicalProperties: + GateFit: 2 + SensorSize: {x: 21.946, y: 16.002} + LensShift: {x: 0, y: 0} + FocusDistance: 10 + Iso: 200 + ShutterSpeed: 0.005 + Aperture: 16 + BladeCount: 5 + Curvature: {x: 2, y: 11} + BarrelClipping: 0.25 + Anamorphism: 0 + BlendHint: 0 +--- !u!1 &726620383 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 726620385} + - component: {fileID: 726620384} + m_Layer: 0 + m_Name: Reflection Probe + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!215 &726620384 +ReflectionProbe: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726620383} + m_Enabled: 1 + serializedVersion: 2 + m_Type: 0 + m_Mode: 1 + m_RefreshMode: 0 + m_TimeSlicingMode: 0 + m_Resolution: 128 + m_UpdateFrequency: 0 + m_BoxSize: {x: 1000, y: 1000, z: 1000} + 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: 1 + m_HDR: 1 + m_BoxProjection: 0 + m_RenderDynamicObjects: 0 + m_UseOcclusionCulling: 1 + m_Importance: 1 + m_CustomBakedTexture: {fileID: 0} +--- !u!4 &726620385 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 726620383} + serializedVersion: 2 + m_LocalRotation: {x: -0.20419724, y: -0.039053436, z: 0.00814323, w: -0.9781166} + m_LocalPosition: {x: 135.1233, y: 0.57663536, z: -35.99004} + 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 &727333637 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 727333638} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &727333638 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 727333637} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 841528159} + - {fileID: 1737773901} + - {fileID: 1922280582} + - {fileID: 1028682306} + - {fileID: 1073917286} + - {fileID: 2081240041} + - {fileID: 1734679852} + - {fileID: 828999885} + - {fileID: 2063344127} + - {fileID: 1087557892} + - {fileID: 2045301518} + - {fileID: 905456350} + - {fileID: 179726014} + - {fileID: 2051461981} + - {fileID: 1717408764} + - {fileID: 179826817} + - {fileID: 1972417028} + - {fileID: 1260057512} + - {fileID: 1239727194} + - {fileID: 306035878} + - {fileID: 395650108} + - {fileID: 288792490} + - {fileID: 994885894} + - {fileID: 696789730} + - {fileID: 1178698711} + - {fileID: 2031778141} + - {fileID: 483508478} + - {fileID: 622417897} + - {fileID: 1902760377} + - {fileID: 1053523136} + - {fileID: 57103045} + - {fileID: 1099084994} + - {fileID: 1192304522} + - {fileID: 669821309} + - {fileID: 1496017641} + - {fileID: 1707595964} + - {fileID: 450101196} + - {fileID: 521813332} + - {fileID: 1187399389} + - {fileID: 1899249680} + - {fileID: 1465162988} + - {fileID: 692873317} + - {fileID: 1470893369} + - {fileID: 356937743} + - {fileID: 572235698} + - {fileID: 1595158873} + - {fileID: 1985384410} + - {fileID: 413526526} + - {fileID: 1019750221} + - {fileID: 926145297} + - {fileID: 325036121} + - {fileID: 1187795129} + - {fileID: 52496945} + - {fileID: 587262235} + - {fileID: 1740000784} + - {fileID: 633082511} + - {fileID: 548406829} + - {fileID: 414947627} + - {fileID: 802005159} + - {fileID: 646214062} + - {fileID: 1255038911} + - {fileID: 1588407705} + - {fileID: 2062443983} + - {fileID: 250370380} + - {fileID: 860157550} + - {fileID: 321316924} + - {fileID: 644502420} + - {fileID: 686996707} + - {fileID: 221626093} + - {fileID: 1938345524} + - {fileID: 489841812} + - {fileID: 1621666122} + - {fileID: 133117316} + - {fileID: 930817532} + - {fileID: 2123394794} + - {fileID: 1610675228} + - {fileID: 955325094} + - {fileID: 1998046903} + - {fileID: 1347016955} + - {fileID: 237682785} + - {fileID: 1727343499} + - {fileID: 638594345} + - {fileID: 165342444} + - {fileID: 1337254005} + - {fileID: 417009624} + - {fileID: 1427066206} + - {fileID: 1984306645} + - {fileID: 236659837} + - {fileID: 2031522283} + - {fileID: 442816150} + - {fileID: 1795755110} + - {fileID: 164511079} + - {fileID: 955904101} + - {fileID: 111314420} + - {fileID: 633925040} + - {fileID: 321147970} + - {fileID: 111614020} + - {fileID: 1055106369} + - {fileID: 79837837} + - {fileID: 2053290199} + - {fileID: 1378749155} + - {fileID: 146196675} + - {fileID: 1374597758} + - {fileID: 21312558} + - {fileID: 583046543} + - {fileID: 19241397} + - {fileID: 916118769} + - {fileID: 1652902729} + - {fileID: 546335445} + - {fileID: 651307869} + - {fileID: 80351289} + - {fileID: 981144303} + - {fileID: 182671154} + - {fileID: 982297989} + - {fileID: 45231473} + - {fileID: 1276085504} + - {fileID: 2018054855} + - {fileID: 624146101} + - {fileID: 128527182} + - {fileID: 1366074316} + - {fileID: 291086292} + - {fileID: 701590826} + - {fileID: 547275195} + - {fileID: 875465593} + - {fileID: 272364117} + - {fileID: 1744288286} + - {fileID: 1643088962} + - {fileID: 287810223} + - {fileID: 1514516441} + - {fileID: 1123585222} + - {fileID: 64912592} + - {fileID: 1116813058} + - {fileID: 592932429} + - {fileID: 72919015} + - {fileID: 1730467138} + - {fileID: 1303745118} + - {fileID: 807596369} + - {fileID: 1410785587} + - {fileID: 106270176} + - {fileID: 1746054935} + - {fileID: 1208322747} + - {fileID: 738143707} + - {fileID: 815912948} + - {fileID: 1751195274} + - {fileID: 2096975924} + - {fileID: 1320398892} + - {fileID: 343514171} + - {fileID: 759642621} + - {fileID: 613600732} + - {fileID: 2003152561} + - {fileID: 1392340810} + - {fileID: 1324934298} + - {fileID: 107653599} + - {fileID: 1586460241} + - {fileID: 364980997} + - {fileID: 1604513550} + - {fileID: 2062829863} + - {fileID: 1221622439} + - {fileID: 660455068} + - {fileID: 811774528} + - {fileID: 712182951} + - {fileID: 1735459445} + - {fileID: 2100942954} + - {fileID: 818403132} + - {fileID: 447865220} + - {fileID: 1008851287} + - {fileID: 1222687345} + - {fileID: 1977792068} + - {fileID: 1197564065} + - {fileID: 372127716} + - {fileID: 1475624400} + - {fileID: 1640656737} + - {fileID: 1342186446} + - {fileID: 1325519690} + - {fileID: 1153324737} + - {fileID: 672349457} + - {fileID: 149094276} + - {fileID: 1136202168} + - {fileID: 981129070} + - {fileID: 729905694} + - {fileID: 1642421942} + - {fileID: 1910578047} + - {fileID: 1475920467} + - {fileID: 975050259} + - {fileID: 2028801849} + - {fileID: 1377731632} + - {fileID: 84738268} + - {fileID: 1516936199} + - {fileID: 1334083345} + - {fileID: 1598889086} + - {fileID: 1591379778} + - {fileID: 817146360} + - {fileID: 806619558} + - {fileID: 224501490} + - {fileID: 1237645465} + - {fileID: 831928023} + - {fileID: 1916399143} + - {fileID: 2136438496} + - {fileID: 1870857150} + - {fileID: 341288852} + - {fileID: 1146705400} + - {fileID: 321547696} + - {fileID: 1755472302} + - {fileID: 397995228} + - {fileID: 1536263844} + - {fileID: 1566888677} + - {fileID: 1257681516} + - {fileID: 1740993551} + - {fileID: 173118536} + - {fileID: 396367022} + - {fileID: 1836588234} + - {fileID: 66965644} + - {fileID: 1072389534} + - {fileID: 9359169} + - {fileID: 1860299230} + - {fileID: 821019442} + - {fileID: 1822062613} + - {fileID: 2031280764} + - {fileID: 1517327374} + - {fileID: 2056570810} + - {fileID: 1746907222} + - {fileID: 254123141} + - {fileID: 461858943} + - {fileID: 1048941469} + - {fileID: 421513302} + - {fileID: 1895602508} + - {fileID: 1102873466} + - {fileID: 265620768} + - {fileID: 1856042325} + - {fileID: 1676301159} + - {fileID: 1583487141} + - {fileID: 488604015} + - {fileID: 953905465} + - {fileID: 1415365594} + - {fileID: 300400979} + - {fileID: 1093288573} + - {fileID: 328888840} + - {fileID: 1178058600} + - {fileID: 1490348006} + - {fileID: 404991463} + - {fileID: 992467866} + - {fileID: 2084034723} + - {fileID: 1627661930} + - {fileID: 240496222} + - {fileID: 1030837499} + - {fileID: 1657196768} + - {fileID: 1429525914} + - {fileID: 1562280620} + - {fileID: 2084671214} + - {fileID: 2014895259} + - {fileID: 59082830} + - {fileID: 1323956863} + - {fileID: 580770214} + - {fileID: 911803474} + - {fileID: 991463917} + - {fileID: 1481466921} + - {fileID: 1007219756} + - {fileID: 1316223703} + - {fileID: 1639694795} + - {fileID: 50768602} + - {fileID: 1875169289} + - {fileID: 265231756} + - {fileID: 1113409862} + - {fileID: 435381547} + - {fileID: 1855049566} + - {fileID: 1346610071} + - {fileID: 1398870684} + - {fileID: 1279553370} + - {fileID: 2076281496} + - {fileID: 1761268442} + - {fileID: 364036732} + m_Father: {fileID: 89219352} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &729905693 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 729905694} + - component: {fileID: 729905697} + - component: {fileID: 729905696} + - component: {fileID: 729905695} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &729905694 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729905693} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -35, y: 0, z: 55} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 727333638} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &729905695 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729905693} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &729905696 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729905693} + 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: 6f4ffd4fdece5634884fa9923f186879, 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 &729905697 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 729905693} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &738143706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 738143707} + - component: {fileID: 738143710} + - component: {fileID: 738143709} + - component: {fileID: 738143708} + m_Layer: 0 + m_Name: Water + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &738143707 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738143706} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 65, y: 0, z: 50} + m_LocalScale: {x: 0.5, y: 1, z: 0.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 727333638} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &738143708 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738143706} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &738143709 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738143706} + 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: 6f4ffd4fdece5634884fa9923f186879, 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 &738143710 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738143706} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &759642620 GameObject: m_ObjectHideFlags: 0 @@ -35333,99 +35092,6 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1415365593} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1001 &1424383172 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - serializedVersion: 3 - m_TransformParent: {fileID: 0} - m_Modifications: - - target: {fileID: 602397660332719748, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: 1b3f34f5008ab3a449cd0ca7ae41a30e, type: 2} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_RootOrder - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalScale.x - value: 0.3 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalScale.y - value: 0.3 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalScale.z - value: 0.3 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalPosition.x - value: -42.122124 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalPosition.z - value: -34.76117 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalRotation.w - value: 0.89609945 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalRotation.y - value: 0.44385338 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalRotation.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 52.7 - objectReference: {fileID: 0} - - target: {fileID: 2804070465777273743, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 3230455740001809464, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: 1b3f34f5008ab3a449cd0ca7ae41a30e, type: 2} - - target: {fileID: 3288155046874829109, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: m_Name - value: Island(1) - objectReference: {fileID: 0} - - target: {fileID: 3936467027728691424, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: 1b3f34f5008ab3a449cd0ca7ae41a30e, type: 2} - - target: {fileID: 6529329570589244614, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: 1b3f34f5008ab3a449cd0ca7ae41a30e, type: 2} - - target: {fileID: 6567463936875692540, guid: b5b345652819a96468b021a97fe70a51, type: 3} - propertyPath: 'm_Materials.Array.data[0]' - value: - objectReference: {fileID: 2100000, guid: 1b3f34f5008ab3a449cd0ca7ae41a30e, type: 2} - m_RemovedComponents: [] - m_RemovedGameObjects: [] - m_AddedGameObjects: [] - m_AddedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: b5b345652819a96468b021a97fe70a51, type: 3} --- !u!1 &1427066205 GameObject: m_ObjectHideFlags: 0 @@ -54739,6 +54405,251 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1998046902} m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!21 &1999686667 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: AllIn1Vfx/AllIn1Vfx + m_Shader: {fileID: 4800000, guid: b430983578466934c944e7171b4c372c, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: + - ADDITIVECONFIG_ON + - DISTORT_ON + - GLOW_ON + - MASK_ON + - POLARUV_ON + - SHAPE1DISTORT_ON + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 3000 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _ColorRampTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ColorRampTexGradient: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistNormalMap: + m_Texture: {fileID: 2800000, guid: 06907d08092c41f4aa8b5b3cbe5f9fa2, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DistortTex: + m_Texture: {fileID: 2800000, guid: fcb027caad6963b4a80539bbce0d10e9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeBurnTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FadeTex: + m_Texture: {fileID: 2800000, guid: 854b25bc08516364da5a786b1cad247e, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _GlowTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 5e9ddf7ec70ee3e48bb89664de649cd3, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 2800000, guid: 2f6642b43dc405d498acba7e288c068c, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Shape1MaskTex: + m_Texture: {fileID: 2800000, guid: db8fa36fcfe9738418db54ee0fe17fdf, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Shape2DistortTex: + m_Texture: {fileID: 2800000, guid: fcb027caad6963b4a80539bbce0d10e9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Shape2Tex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Shape3DistortTex: + m_Texture: {fileID: 2800000, guid: fcb027caad6963b4a80539bbce0d10e9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _Shape3Tex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ShapeDistortTex: + m_Texture: {fileID: 2800000, guid: fcb027caad6963b4a80539bbce0d10e9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _TrailWidthGradient: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _VertOffsetTex: + m_Texture: {fileID: 2800000, guid: 48da24d771916524899d36e4bfe7f762, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _Alpha: 1 + - _AlphaCutoffValue: 0.25 + - _AlphaFadeAmount: -0.1 + - _AlphaFadePow: 1 + - _AlphaFadeSmooth: 0.075 + - _AlphaStepMax: 0.075 + - _AlphaStepMin: 0 + - _CamDistFadeStepMax: 100 + - _CamDistFadeStepMin: 0 + - _CamDistProximityFade: 0 + - _ColorGradingMidPoint: 0.5 + - _ColorMask: 15 + - _ColorRampBlend: 1 + - _ColorRampLuminosity: 0 + - _CullingOption: 0 + - _DebugShape: 1 + - _DepthGlow: 1 + - _DepthGlowDist: 0.5 + - _DepthGlowGlobal: 1 + - _DepthGlowPow: 1 + - _DistortAmount: 3.6 + - _DistortTexXSpeed: 0 + - _DistortTexYSpeed: 29 + - _DistortionBlend: 1 + - _DistortionPower: 10 + - _DistortionScrollXSpeed: 0 + - _DistortionScrollYSpeed: 0 + - _DstMode: 1 + - _EditorDrawers: 60 + - _FadeAmount: 0.2 + - _FadeBurnGlow: 5 + - _FadeBurnWidth: 0.01 + - _FadePower: 8.2 + - _FadeScrollXSpeed: 0 + - _FadeScrollYSpeed: 0 + - _FadeTransition: 0.075 + - _Glow: 0 + - _GlowGlobal: 1 + - _HandDrawnAmount: 10 + - _HandDrawnSpeed: 5 + - _HsvBright: 1 + - _HsvSaturation: 1 + - _HsvShift: 180 + - _LightAmount: 0 + - _MaskPow: 0.2 + - _OffsetSh1: 1 + - _OffsetSh2: 1 + - _OffsetSh3: 1 + - _PixelateSize: 32 + - _PosterizeNumColors: 5 + - _RandomSh1Mult: 1 + - _RandomSh2Mult: 1 + - _RandomSh3Mult: 1 + - _RenderingMode: 1 + - _RimAddAmount: 1 + - _RimBias: 0 + - _RimErodesAlpha: 0 + - _RimIntensity: 1 + - _RimPower: 5 + - _RimScale: 1 + - _RoundWaveSpeed: 2 + - _RoundWaveStrength: 0.7 + - _ScreenUvSh2DistScale: 1 + - _ScreenUvSh3DistScale: 1 + - _ScreenUvShDistScale: 0 + - _Sh1BlendOffset: 0 + - _Sh2BlendOffset: 0 + - _Sh3BlendOffset: 0 + - _ShadowAmount: 0.4 + - _ShadowStepMax: 1 + - _ShadowStepMin: 0 + - _ShakeUvSpeed: 20 + - _ShakeUvX: 5 + - _ShakeUvY: 4 + - _Shape1MaskPow: 1 + - _Shape2AlphaWeight: 2 + - _Shape2Brightness: 0 + - _Shape2ColorWeight: 2 + - _Shape2Contrast: 1 + - _Shape2DistortAmount: 0.5 + - _Shape2DistortXSpeed: 0.1 + - _Shape2DistortYSpeed: 0.1 + - _Shape2RotationOffset: 0 + - _Shape2RotationSpeed: 0 + - _Shape2XSpeed: 0 + - _Shape2YSpeed: 0 + - _Shape3AlphaWeight: 2 + - _Shape3Brightness: 0 + - _Shape3ColorWeight: 2 + - _Shape3Contrast: 1 + - _Shape3DistortAmount: 0.5 + - _Shape3DistortXSpeed: 0.1 + - _Shape3DistortYSpeed: 0.1 + - _Shape3RotationOffset: 0 + - _Shape3RotationSpeed: 0 + - _Shape3XSpeed: 0 + - _Shape3YSpeed: 0 + - _ShapeAlphaWeight: 1 + - _ShapeBrightness: 0 + - _ShapeColorWeight: 1 + - _ShapeContrast: 1 + - _ShapeDistortAmount: 0.3 + - _ShapeDistortXSpeed: 1.18 + - _ShapeDistortYSpeed: 0.1 + - _ShapeRotationOffset: 0 + - _ShapeRotationSpeed: 0 + - _ShapeXSpeed: 0 + - _ShapeYSpeed: 0 + - _SoftFactor: 0.5 + - _SrcMode: 1 + - _TextureScrollXSpeed: 1 + - _TextureScrollYSpeed: 0 + - _TimingSeed: 0 + - _TrailWidthPower: 1 + - _TwistUvAmount: 1 + - _TwistUvPosX: 0.5 + - _TwistUvPosY: 0.5 + - _TwistUvRadius: 0.75 + - _VertOffsetAmount: 0.5 + - _VertOffsetPower: 1 + - _VertOffsetTexXSpeed: 0.1 + - _VertOffsetTexYSpeed: 0.1 + - _WaveAmount: 7 + - _WaveSpeed: 10 + - _WaveStrength: 7.5 + - _WaveX: 0 + - _WaveY: 0.5 + - _ZTestMode: 4 + - _ZWrite: 0 + m_Colors: + - _BackFaceTint: {r: 0.5, g: 0.5, b: 0.5, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _ColorGradingDark: {r: 1, g: 1, b: 1, a: 1} + - _ColorGradingLight: {r: 1, g: 1, b: 1, a: 1} + - _ColorGradingMiddle: {r: 1, g: 1, b: 1, a: 1} + - _DepthGlowColor: {r: 1, g: 1, b: 1, a: 1} + - _FadeBurnColor: {r: 1, g: 1, b: 0, a: 1} + - _FrontFaceTint: {r: 1, g: 1, b: 1, a: 1} + - _GlowColor: {r: 1, g: 1, b: 1, a: 1} + - _LightColor: {r: 1, g: 1, b: 1, a: 1} + - _RimColor: {r: 1, g: 1, b: 1, a: 1} + - _Shape2Color: {r: 1, g: 1, b: 1, a: 1} + - _Shape3Color: {r: 1, g: 1, b: 1, a: 1} + - _ShapeColor: {r: 1, g: 1, b: 1, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!1 &2003152560 GameObject: m_ObjectHideFlags: 0 @@ -57414,7 +57325,6 @@ SceneRoots: - {fileID: 1631481599} - {fileID: 89219352} - {fileID: 1921625339} - - {fileID: 1424383172} - {fileID: 1973184708} - {fileID: 1016543686} - {fileID: 1215753635} diff --git a/Assets/01.Scenes/Non - Shader Bending (Scene 2).meta b/Assets/01.Scenes/Non - Shader Bending (Scene 2).meta new file mode 100644 index 000000000..fd34303c7 --- /dev/null +++ b/Assets/01.Scenes/Non - Shader Bending (Scene 2).meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bc1f9904ed46ba5449006db821b761fb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/01.Scenes/Non - Shader Bending (Scene 2)/LightingData.asset b/Assets/01.Scenes/Non - Shader Bending (Scene 2)/LightingData.asset new file mode 100644 index 0000000000000000000000000000000000000000..06ae27d6d413104f79591c60c096310ce4f56e1d GIT binary patch literal 17729 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%0D@c2`*}|Q&dqx4dS^R*>_72gOu1N_@ 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

{W=r)#7x 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\jv#qk;T8$0`T@!qE6bi z6#t(Xplp)LU|K=g3y!(4Sk%(Pj8*bPN)s-VoLiy~NT2Iaoc4JS+GVv!_K?87p#;0k#T zTsDUfqg;?E6gZ%=9SiCB4b~B`OWIn1*L^2tEjRRFJ&s!rrxESJgMFH`cC=hW07q7j zrx&!hr|Hph0uG6X9xMsc2!U4=1WumNu>u?oR;=I|kybX$Y@|M7Gj1WjfYn6;SXqu1 z0$<+%9yiI-(xv#+tqlL>Rq)5Si0#1oCe3fZ{d9slj-7BE(ZhF4F8gnlDtTO^$^I}k&m6WZuKOmOy(!aN(ubGxGw=c zG4-Z*T8JquEZOx6ZE1pjn;<`6AW!}kkf4FJSx0mYPN5woV9FBTc20|?Pc}%v4I{sq zJW0sLoVTV7td?=XpTz=dnbg|IFhk^GMv1dyh-?yX(6MX*{f-fvQY;ac@ezV#bkToB`19fx>|{cvR99&dmT6H{sv3qEb*d}_9~zb;Ni%+udrlf<|$kb zky9m+FRARY)J9g0Re&U!BUNFxqVf>WKl9WbwD@_ou*Kc?3kn7^0E)NM% z4=phX&!)eWsDQQr5vKp=HTMwj5>U^-WXmQu>trPV5+veYi=*6#EhHZLfvLCE!3Rr7 zdkSpv4w1bm9Y#5{VJ5deVm3`)A0=87lXoQ6ZM}eH!(L-Q-^vKw?CHr(RB@RHlvq1N zK{KK&8ly6#!-)~X?ru5HUxX)1#P;`hbXuXbWbyr3F4)DAD!QnF)#IqxZ(+Be$#mq= zB&&~;sL+H}MFvacwnt0A%~0)+Vctz6k_c2iYSr~-8(4teh#1=6@#Qo9Sezk7>v~R|Vl|6-76GVV72o1nvhr^RNMd8Wu?P`-NI`Lo zGbgqfnUQ1s*xdn+tOH7W7jg=jWqwvn9Jy^-h>9z6);G~k6jC;wD1b0cFD31aB^siY z;xX5Q_?*Dt!Vo!noft(oLWq7@m&UJ)m@z}&rg+#d-ukM&t`q#NU*L5VKla{w??owP zSimykkh2qnW;E%2Dcgve=fdD^xh>C&h~hS4T0)jYSe%!^b+oc@25-{?r~wSj;k7|2 z1)o0)^3m;WYC={UGZ8LiG>8O@47t)Ai*zWm43vgS9(9WW17RpcS@`fd1&Pjf7MRn| zst@I}mjNdRsFgy!A~9Ans4W@%KUylg0egRn=z;|c9ErVm{Gs2AI^YXu z4+sJar5AmEC>ux20z}ioz-l7yzK+Ev_IeA>i#eu(F&+6Bb4M(dOSj8PxCZTSL>AI2VBo&yoY;B#c! zZ{8&6Fz9n}0OUa`aWiaZf|vpzTNnAkte3qg0v5uwklW__$e>EQ-o!8!Yb5r}Osf38 zRPdIOfq!;}h>VQn-^yq#mlsz^ILRtF8T#MI|J%7_8}08^ef!ip~IRtme7JX2Hw zIU&om!a#|%MZP6Xe9OdA&)lq@o0z}lEszA8aWG%c*%}J^UNJTGMcNk5gy^3+00vXppqE|5LTj@uM}RizlkkiV zaQOR46FLTKAFUzRvTTfMVjehv5M(*+fIZjBYQ-(b<}82AjwFW`D+pSid(`Mj))*ev kk8UXe6aPz?K;jkxC~y`}f-Kc&G2M((8shH%Iw1dl0NOd5Gynhq literal 0 HcmV?d00001 diff --git a/Assets/01.Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr.meta b/Assets/01.Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr.meta new file mode 100644 index 000000000..89bf28806 --- /dev/null +++ b/Assets/01.Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 231455b4ca4c25c49a85954569b47b3a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 1 + seamlessCubemap: 1 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 0 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 2 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/02.Scripts/BlueWater/Sail/Curved_Obejct.cs b/Assets/02.Scripts/BlueWater/Sail/Curved_Object.cs similarity index 97% rename from Assets/02.Scripts/BlueWater/Sail/Curved_Obejct.cs rename to Assets/02.Scripts/BlueWater/Sail/Curved_Object.cs index 96b6d963e..2aec5c4e4 100644 --- a/Assets/02.Scripts/BlueWater/Sail/Curved_Obejct.cs +++ b/Assets/02.Scripts/BlueWater/Sail/Curved_Object.cs @@ -3,7 +3,7 @@ using UnityEngine; using UnityEngine.Rendering; [ExecuteAlways] -public class BendingManager : MonoBehaviour +public class Curved_Object : MonoBehaviour { #region Constants @@ -15,8 +15,7 @@ public class BendingManager : MonoBehaviour Shader.PropertyToID("_BendingAmount"); #endregion - - + #region Inspector [SerializeField] diff --git a/Assets/02.Scripts/BlueWater/Sail/Curved_Obejct.cs.meta b/Assets/02.Scripts/BlueWater/Sail/Curved_Object.cs.meta similarity index 100% rename from Assets/02.Scripts/BlueWater/Sail/Curved_Obejct.cs.meta rename to Assets/02.Scripts/BlueWater/Sail/Curved_Object.cs.meta diff --git a/Assets/02.Scripts/BlueWater/Sail/Curved_Object_StaticPosition.cs b/Assets/02.Scripts/BlueWater/Sail/Curved_Object_StaticPosition.cs new file mode 100644 index 000000000..6deff758e --- /dev/null +++ b/Assets/02.Scripts/BlueWater/Sail/Curved_Object_StaticPosition.cs @@ -0,0 +1,34 @@ +using UnityEngine; + + +public class Curved_Object_StaticPosition : MonoBehaviour + { + public Curved_Object curvedWorldController; + + Vector3 originalPosition; + Quaternion originalRotation; + + Vector3 forward; + Vector3 right; + + private void Start() + { + originalPosition = transform.position; + originalRotation = transform.rotation; + + forward = transform.forward; + right = transform.right; + } + + void Update() + { + if (curvedWorldController != null) + { + //Transform position; + //transform.position = curvedWorldController.TransformPosition(originalPosition); + + //Transform normal(calcualte rotation); + //transform.rotation = curvedWorldController.TransformRotation(originalPosition, forward, right); + } + } + } diff --git a/Assets/02.Scripts/BlueWater/Sail/Curved_Object_StaticPosition.cs.meta b/Assets/02.Scripts/BlueWater/Sail/Curved_Object_StaticPosition.cs.meta new file mode 100644 index 000000000..8e9e2a390 --- /dev/null +++ b/Assets/02.Scripts/BlueWater/Sail/Curved_Object_StaticPosition.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d2f6ed8d8105d334fbaed54d6be6fe52 \ No newline at end of file diff --git a/Assets/03.Images/Sail.meta b/Assets/03.Images/Sail.meta new file mode 100644 index 000000000..54563fbe4 --- /dev/null +++ b/Assets/03.Images/Sail.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3396651ee437b084880700644c530ba6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/03.Images/Sail/Island01.mat b/Assets/03.Images/Sail/Island01.mat new file mode 100644 index 000000000..2739905d9 --- /dev/null +++ b/Assets/03.Images/Sail/Island01.mat @@ -0,0 +1,161 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-4373979204799356009 +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: Island01 + m_Shader: {fileID: -6465566751694194690, guid: 940d79357fd7a4f01a49e7247aeaa4da, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - Texture2D_72426835: + m_Texture: {fileID: 2800000, guid: dd92cbf097a58ac47aacb73549069f60, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BaseMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _Alpha: 1 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BlendOp: 0 + - _BumpScale: 1 + - _CameraFadingEnabled: 0 + - _CameraFarFadeDistance: 2 + - _CameraNearFadeDistance: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _ColorMode: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DistortionBlend: 0.5 + - _DistortionEnabled: 0 + - _DistortionStrength: 1 + - _DistortionStrengthScaled: 0.1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _FlipbookBlending: 0 + - _FlipbookMode: 0 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SoftParticlesEnabled: 0 + - _SoftParticlesFarFadeDistance: 1 + - _SoftParticlesNearFadeDistance: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 + m_Colors: + - Vector2_6A93A1CF: {r: 1, g: 1, b: 0, a: 0} + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _BaseColorAddSubDiff: {r: 0, g: 0, b: 0, a: 0} + - _CameraFadeParams: {r: 0, g: 0, b: 0, a: 0} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _CurvedWorldBendSettings: {r: 0, g: 1, b: 0, a: 0} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SoftParticleFadeParams: {r: 0, g: 0, b: 0, a: 0} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/09.Shaders/Curved_Shader/Master 1.mat.meta b/Assets/03.Images/Sail/Island01.mat.meta similarity index 79% rename from Assets/09.Shaders/Curved_Shader/Master 1.mat.meta rename to Assets/03.Images/Sail/Island01.mat.meta index dd159ff61..b6da19e5b 100644 --- a/Assets/09.Shaders/Curved_Shader/Master 1.mat.meta +++ b/Assets/03.Images/Sail/Island01.mat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1b3f34f5008ab3a449cd0ca7ae41a30e +guid: 43ab4a05fafad7f4a83fd3d2a836c3d3 NativeFormatImporter: externalObjects: {} mainObjectFileID: 2100000 diff --git a/Assets/03.Images/Sail/Island01.png b/Assets/03.Images/Sail/Island01.png new file mode 100644 index 0000000000000000000000000000000000000000..2e3c126f7280287eef7962635e36e0d5f6951ace GIT binary patch literal 1026053 zcmeFaXH-*L_dR?liUq|=5d_o#iWC8*H${a2g3^nCN|PFT4FTi|dJ)ltD$Rl*T@eU9 zc##r95s(@}4Im{Xgc2YL`N!Y2Jl@amx0f>l`y9f^S$poe)|zXb!RGNz1MLI*PV55! z-~d?Xsu2JjVxArX_UvX3Rv)7{a+zHjBz;JBj|5JiDcsX~$ny0eIB@r` zLq{~59zNPh%OwLz?!HNYLyNFxc>hJS#Ug_@_O*c*yj zA}lLpwOJ$Tb^!rTEuL{{-T@*~uSm25!iubbmf+D2Her3Xmlt|a<9T*o4=Z(8fCfxr zN3vdz+_B2UFDC-Yr18m9lmEDXxN?{0+##pE_|xghX=je=%(Cfsast4K&F)XziW<*m zXYdmFItpuNIc~{wTLRYhc(6xIeaO zBZuAl(rVwAkj>a&MVh8y=Bt~nswV~Z?cYxjx%aB>!c?p}Lv8{x9t&G%zPpVLApzbm zG*gQj-bB&8?|KFl8$F%HuwRk!q|Bb#Zh06^e|oNa^5Tcv6372uws>55^Yo3D;3}i% zS5Ki6Cy&g9%PtEg(f1+(4*-SHh7AT49OW4I2G|k{YwSUbo&Z1-wj%lD#Qx{NA?J&- z!4v>Mpf=+*&$9p>$=Oo?Q2UMd_PYcg{pLLYaP?)R`1{KooS%*rHXKaYi|s3`zh>1tp%Z^Mzx3_)yU1k|k@VWF`$U&;cDp!|?|DPKi8|1@8yD>0osvvyHRWdk(pz>x(Wt z^FWW{_moBy3MW5DKI3|32&bYO@yKJ!O^+t^_r3-hWhWfbz2vAd&Hgq^_Dbr@{97G) znP2zhKT^)J0(-m+xG8NMlXvu@{|k|hG;S?Sw&a_>FE3o2T`2dZ=lrVo;-UnvC4Wio zar?$GH#--#8pwGd`ao2R&b_mIZhWD9xx7d|=~VrkUA@VvttJ-+WcgE_Q@BzfrWWGs z;?U#I+m0kECz>U~5@+*GOnpr?`hxTKn-rLG71)}E{HT`hCpU79`wKZrrmj z-CWcU*hS?JkPg*1*7D7FDs+18lriJo!E&(q!#GK4C|$SnROf-tP)RmP4apDvu0>8o zup))wkm35_djuZ>H(_Cz=C(!Vn4B4Na4c8J@U`^++`H)N$t<|V?Z_;YgMv8_!zT(=|n!*aGH>A?|(Kd~0#LKHBip8XN z`&345TJAq9&t|1<18gmAsda*eAJauM`!9I3Vn17t*I`2MD66YEZgtMFsW+>$W`$(M z)aTTn9#gA71M7#S!Z>J|RFy3ZJ$?f<5lrS@HrREC~A?P z?TXt~vs;=|{rDBmy$39Xd=QWZ9y0%?z1)bi#Eb6ZZF@3~Tk&sQXcyHN>_7Z8x@*ta zAs8fQQ-7|#V$Y*-ZTCl&LN0u%Jey(1&WX$BOU>UZGxqcLqe%1@;w`Dpbx)V$^PW_x zU|lPG0-Ot7-HqJs7t<;uD)TENgJL$WEhiuGI||xMc#Qu%_*w1olrQV7`wO{r{0oyL zKl|e8k=Io`GjpAo%s^GkOP0@|iVstcB$sMTM+slKDa~s*o$GnyD>uxp_Ky~J4S5eqDkY>R zq`xsb;F45!e&7P~EYi^F{CUIyeDI7%8$TkZjeAQkG?*34}`%Rfq@y&zW`qJ;t z2U+u42UY6S=~#W08*|#8-#oMb0XMYn+54N7?>`P!23anTpGIA);XV^<%o8XjV`Eh9 z5adGY3B%mSlqS({PFfh5l3jyG$WM);dfvX(I{(1@Vq#tb8sk~KYE@-_{BELyDbY2# z&)O_poF~z)(5vuW@y7e>l{1s(26lbWwP26o;Za>=8(~3bA$!5IkYb4{(XDg6-1jA# zbfAcTIc}QY&O>+9?^THF+S87*jHHZhm{!**MbJ zF_s#RT-&pt6MVi$8RcIn`Nrd=+N(O^wYTN@GBtSomh_Q!6!gmIY`hJr)@$`N{tfmd~qEG0QSVI;ZDHwveYO&wyjRlo%VsH4CYeS#!z{Y@-O;&Inv3Zdn=_!g6 zs1&JQ+Xz@E@C5E#(jT!2i4Q8F)eqC>Ikvdw!^^fmI5v2UZ`^6P)75CnMLf7SCUZN1 z(Hk?-qus9Ecjo$;xcCeqA^rm=>c|eAh>6_N+@oD>Ff&H*f^Wg>7=4ne*JVK)B<^=TPMUI2{S^s+su7Updl6f8x_Fd%uaU8ny z$L046mYrYPfnbLPJC3ju3wFZccLa7~!43pFEZA{`?+EO~f*lBUSg_*=-x1h}1v?Pz zuwcg#z9X;`3w9vbVZn|gd`Dm>7VJQRC%EZBiyhXp&1@Ew7jSg-@Z4hwc1 z;X495v0w*+{|{L}8mj5FLoZP~iCIJ?Q-31CDe&VtsUuAl0q7*P6BxKhoU`iG@)a?I z3r9Iw*>xgRQ*t+B;4OO}2(vs8)_D*yDq11Cu8;p9fq_f7<(@6>@Py+63zTP*IdVNI zgok>@2|+JlbrDxgGn7sJE2xXGv0Z?i@OK{naqRr)CmcIS>>%+IfuG|JCw7qdiNMcs zhZ8$U{6ygAxWkDZBz_|BbKK#?4iY~R_&M%yVh4$z2>cv(II)AoPXvCBJDk`-;wJ(> z#~n`WAn_A{pW_ZEc98gqz|V1q6aRll;=LDhUzYzn#J@$;@=-o5>Qa8QE$zuhC+fxV{o$4MJ0~Tik)vkE?O$OZ~340m?rz; zPUqFH4^Rn-jpwVd>{oouH~0cx`Yo1bJ5hZ437W7mEa|8~fd9@8}K# zMp-nry5j}d|IeC;qK8`lcf$NeD^uHkm_H&=X19cTwnTER`Led@g>21ryCr0mi9R!> z9Pe>(_|24P4EUf?u)AXCvm{JQ$&9Z5W~ZV9B8ie)+L_Ym-LB<<(6+*Cf^2%8_WFD& zAzN9=9<1t#roAk8?;&@Cc;L0q@HKh24KSW?y;N4f8Bv>p$AIf!;D}CnFJPX$kod%- zwJK@RWcos4flIJRVtu)4dXgu#${Ybbh2}C2K8KEV8PX$nfWlMoe7Su8S``ua;FozM zgWwAa9NR)*auA#%GKUawJn@=w)k?4{g|kITP{FcH#u=O9>!O5kNX_o?vG+rj*MtvM z8W>q-=x+?Hss&o3Dv+i*{(*>ejk+stLqk$3!GVGE)BCYuL)nf9hmT?O)O;FLJlx9W zDK@21er8Djazt1%+mHKGbblGL;cWu{2v$$RXNhb&!0SL+IzBS!yYN%!R1mT2qCU!1 z(k1PQsf&j`lAdl|jwBHXGp>Y;q2y`|Sqj~`9x&XLq-rb4u;edwL3{geh9KST7P&XE z-o_dyo|2*P^ThU(&(YCD*~o+DdYGH2 z*e@q4#iNlUYDT1+dViGCC#agK4s zEW9heH$QH(2!!f`Pn}q(xrCRlajd@`Ml~3i>i}s>o%``&|N0X1A|kX;r0N+S zrBB9y1zRtE8)=`VhBeE%%rYv@uC-P6t(S!|74f72Xz zU&D$U+=)zDaS6W1yU@$gH84QMt;Z~wFX$EQ_qd$_8Jjm#QePRYv{e7{6ycr;b5*Kd z{c+P#?C&`srxei!a4EE?Ml(Y=U9hrbX{Lc57s+@bm{n_*SQg+*_e@3=3;~2_ejFmVDO}VN#nlR>*_D(zlLF@inF&oIPXyB z`aDp1H&`MNybY4p&p<^z!xw2;BQ#pNgbE+Y5Jwv&2oi3;!zU37%gP+|<+ah>=j{)c zn8-t24e0`ms#RozHBfMTc(qcvEQ(BXkEKOvNhe2K-eurwWhH z`@w=@YX|3G(J}W77rcB~97~X4jcXTg2{mxuuTC+e@QuR;=NkP44XYtc|hGJtlGp@$0r@12>KQCD15&?i7*Hz z$HP@C!bahKSSq$55nIrjF!%y{(LFyYfOo z_o3i-r9+1D)Wj+C^DX8~TO3D5s5xaaAWf3jmYRl%=9V2W;=F^orz*I| z$Oi7JuwGU^H;ss7m@MfF;b)X%>ynymd!+PbBBsnMkW4#19b>&eRp&8Z2|j6CY-P95 zVnW^YOzp~@j+DpGd8VQS2ddKXUqtr*Ylv6)_l+X|J(l{aK&TY_EHZuooRr!;W*Fa) zbrp!7|A_KE#Z%ps_joIPn}g=!Nbs9xMo^GqxlfPFbx z<@aMrW|(^h{WvOlY~V3+2N+pO<+SzZ6hwwX?*r2E&wzN^1hiU(OD+Z392EwDb-sjRm)xj`b$ikr`icp-UTyTl&bhtR*#Bm?PzRfWKn?@;@!nQ~C^r9yq6=M!A5^@DG!S>c5#| zD}hi=!Xv=zvb$K4Qg@@Rb0Qg@p=r@==UZ^6%?tGO$oEJ6E^gc0MB>EIuiq|M8A;9= za52UzHvQ)<>pGq5h6V!Bol%l1Tor{SrUz}`6_yyDikNuc)0|xwcbG1Z_f3o1YVt%d zRTo1wsJ>qLV6eC1w-Vb8{Fg1$ez4CR+P`9UVVoI-w55FiwJ#zt<|lZ7mvpCSuqwJl zL$i4KAZ~ZIPkuaE z2q8GgS&e!P*DsN0YU%^x#q-qXs7bhM7_z&g|0^G;6E*@jw2?+ zozLd2s_W~hp+oZ~?BfZDUAdGku|jV2Ysg%nwHcR*8JAiAfcTWC66~!HtxYXqx0UM% zUSB*EtgdKqD%wyC2U!$|A4qauS%V?zSkRcE&n4qS9s#uldqG~+!Z~9gVs^tPFh zw{?BDXz~P0e)yVOxtxG=d3}EdGiR$+hg?8aEB0nCnFp(*&EZhrn!qtVrkZX9mD~>T z2}{UEt>U+Y(Vv*MD{QO&02v1TAG`hK(W&}c+qv4K=M`cYkS87H=FH4jGbp(*`F^Rh z{6n=j&eScj;^Yg6*ieLSzFS`E;(h+}m-+)B!yeN0ougSJVj8K!4f58pN}=Q5ZT zW*+k)%t^JB`0+h8^k}pm>Pq5_F^yTUDztN>Pfkm$3krq@P$t%W=?2u?zGgER(5iJ&UDLoidVJ;N)aytLyh2IrI?ePN8EaJ9K zX_|4=wl$7`aecm8FzjK^o%RMc)cjS^Glqfq8gQrH)JIkhMs=sxI28^EWtS*etQ(JP z%)^^(G54hB%KnloLK`p-{> z=l*s~NYfA~9sVS!JvAfN z11CxT$gGD8K;fBqJ+N)ZF+j2H7z?ift{TLV`T&T*4p7UUB*UD;Hdcw!@$}#y1lRu` z4LNxQ9uL~o%z3_nz%IDjS9{-&^)A#kB3$2fhq{IS8>>X^@XqpnXEN4f+9TO)!dN;m zj(i2rcSml|>}EDA-ml!mbZSY~l$aJ1MYN^OnbOcZjF@#v!1RE2UhVC15t*{ln3>hS`B!@oN+>8Zo$RVw54Zjjfqjo)dKYQGlY}z z-UwybTi39nvAL~^MQ#_IxE9h~#iOvVvUA8g!`GwTb|6=>vuvSYg)o#6LuOVrQ)M(^ zoBqCOY9Eqk_-0y@t%?qYVno>Jfj|xp-`t!KqI6`P_;&&%O6pIt03;_fFzgiC8Ig{a zatlUyZ_J;^y@n$%$d6g&ptqAuOqq&3XST?6IHk;cE2S8c=c+Mumquye4MFM$2)bIP z^LwkKRBgofG^g?tR!P(Y!I?H6{RTvxD=4^T+F35sXH{MH^(NZO#JPW9xT*2{ zrUlZSnPvxSuJsTrreLPYE&juuO;F?(?bE#yx@Eo^LMjH_pIh%OhW3QZVdY9kM*G3G zH+*WtYL~@+^rC9be`_$v%qNhLAvqF6w+=H#=KHDOtQkoG^Gja=82|ak945)LMVJ8* zc1hGF*ey5`S!g`8^bGB47WpLen>u8vQ;bJ{R)rwh_ZaLZpO)A7p#Dsqp zV>Yhrz~Ad=9a#{w2p$4)fa}xn*5FJqnGTYM4DgXNTNQq+LAc%jIP8o&JQi$LrF5Gf zZBOYl-^wWVj|~Z(+ANYSKHvBnqiE86Bk&BT7xYW+LFy_-22*$Ug;IFISWm@Anm=}G zz*0d=#HJ@77u01arAR^;CrSw2XI9Lm)i;%(-<3CK4B9C?WTZK8Ja*XTY3H$h-(pVj zJuNUSMSxmL`fO1MX-;jvz%gc?(zpOyo*(nq&?j$$G?MWsUGhRID_a^!sI6nL!53VQ ztfPD6@HQY3P&s2x&7Y23Dg8flaeD4@KeRl|HW(qZ0n61x&RfA{z~P2t{ctn1qM5vQ zSo5o%;i9N5d%flldT!|XcCVGVTzS${N%vl7QE>H~-f+N6)O_4&R$`GQc{(+zsY`z? zN?w#hI$$Wg0<&C@DDNK6Fmy?dc~khb_$v<+fA{!l6%J`LkIHs3vn}c4=QHdp z2aqh_+HfeW2C74z1#h>23`K(FjW25cq)=ta&oclh$(5x;J{<)Mj;fF1XAZ5GHP6|F zWo71$%~>G}Lu$rC$jx_+U5avKmUN92W~;CkLjr+w+>-RyHx@+liaj)@`d@7)wJGZF zuO?6p|6#RBHW^zQp)U0khG1Vh28g{MLwua_4Leokoo4T0wydT}KGPeCZB8iJ;_!d4 zU*4`2$ft+hgKjQPP04ASFFf|P$pVvA!0OLk8o~oZ`F-R--aflMx%6mLpsdbgTpJJs zR0VAs-uy3_8t7Mld3KOmB7Rw)ZAb`n@vpGqIXj0ecaC|t=lR73&FjP)Dyfu`?40Tb zFq<&;6odbA1XFC)^{h!2i4>Vu!}L)CA1&hMxIL(D>sYS)yHbH1C1{{UjhqNxa|Bw7KXnuvD^@BBGu&HtJ6EL=4euK=%=MvL~A6lZbX zMwY2)kJp$cTlo=MPCh}|k29psm+5P5c@**&lz+ff&Xp>;D(v2(GOgm3E6iQX7oW<( zD1MDQwFa8Ye`^2K_a4Im3UJ=lOWU8LN#Bg2X( zDe@-GZ|1^0(nmik`mXrqL-M4=(2vTJ@;#NgzyWa81cyQ?A&r&6jls^QWtGOeYQAd_ z>a2VW+RH+c84j5&M(an>HPZ0*VD&BK&=2}#rcWXVmU-YbZ#Y8*JqD_pF%pv*9 z^B~d<$?*u90$BYSesUrGxh~lYZZ~Gz#ccS7>ypL5urfOI-#JAL{j5d+U}+`{3_I6* zCjeEKA-Evui;W2PPi(Ty@*FDvS|dlx0*QU3LP+E|O-&K(Ax&n~X9i2A+n`Q58R`vN zpe=fDhPo+GT&Y{3!5fS+Y|K_cj`adOe|<_I%GC2Z0Fy>j5KuAn0KE1EUN^t)CT4lq z9tDqbub#Ck5UO1rAk?%BtTdKE<E8D9bHqV^dhdk9h)M~JKM_db2N`rnZuTA>e7b{dkhpIAK`XERRmCAHGi2e2ohyj9Zhs&VK z>eLW;#trfsvw;HvF}ru=ApYDRxp2ef$StGn_VARu-ma8lKsP>>(F{ zq(xo0V1-Y+Y}%M$)dW=5C&?8}&%zg{`x)_7Sj(+D@bE-@A4o%&oXC9GqVfId&jP5$ z;D>S|^$PzoEWKZ(Dh0m`G6Y$ACi_<@$%nTPM+aV8p$7WGGypru`&u80R|D=J)++#{ z1^0B6Fkqus9&b9Z&U_qJ27O(A+YpmtCcRz&o%$5tH%;fkh6ir=Wbz(dk+#M#Ta`gr z%UU|8BwV%3hUg4u(hcJLHw*L}nn!LItCg*S&<`&sP5o%ZGVL;0kUOv)E{cAGofR{P zZy1x+vC(8>l^%9+EQAn42)8B9c6Z#BDnG^SnH>$D zQq@Yv--a8CY*xM~?Xp1#m-mLjHvG~+{^H)N27;(2N@ZMBV29#hg{H}<$iNU ze8#DrSm$1HY@P`Up;1Yi*dkY=71r(UGnU4uY13ZmT@^A}`b-pW2Sq`OL7}Plc;g-S zv8ZO@yAU*&oIMRIU|Rz+9Py(kS!?`Lg8>n}ozDA!^sd$LT{fQdIBJsh8z8T~r>NS5 zGMWM{35nXva7A8cS(+(+%sx7bR`l10s9S^P3fy{EP9ScW7y0KoxZ9VPm4O&#ThJWh z3c=U#E0L%Mcb4ba?A+d8q!Mz;u;LWzIg>X93PTV2*4H)R6fx%0CZ<@71BEA^+ecah znZutL{46)7en&n72?SIX?JRddIS{->a1%R9417`%7^{m6;nJ_o8g2~0K*QgbC%J<8 z&-dZBqm8w5svf~kdkSK8dkhap6X0gx^8DiRB)>!x{sIvtMA9{Qor(JU!H&cx&&;7Z zi*V?M4~((pOTaGBp)djRP?_p;>_6NkQ;X~C+n_81a@Tjc#Dk!L;SkYa8T2Kw1OF~> zkjiiPj`F~vQfOw$-%dcG)T`ux_l151OLgAt;(65=1JC#?rm_dJkTvzNmMNcGb%@!S zibh){rQ=2LVpG!sGnpo8?85mf3JfWE7 zVJ~P%Zt!p}HNa&BIE7O0zzvzbF4YX?qvSF0cabWK9!CG@wT+7ZPKTd2K|(rYubfXa zh`enDng@0MybVJz)enLk!BxBgS69RVBkO`u+r*x#7bk!@1B2UdUG?2;#F;Y8We!nj zkktf24M~!RQ?*wXQ?(Z$OmimJX0chtCC(6w*)R`8Jd<{nF>=(w_4Rl-C)ie(+yr8X zq5~0&Vw0N10!nE#&V`{5P! z@A&<6@-0Xk-07%d8#Z6w`)1KUM4-Algm|D5HTng0c{`9%JF*5XVyu6yRCdY@HuSs^?fTnde~ zuF)sAt|x(nbjc4vRB)yqc}#56h*=rcBYrgLe?Pit$ky|b?7g|VX^b)C0tZ%ku-7k~ z??VOVOj@gyBLh{g*kBD(gWo0#$Jdu!bvIDNjS43NP_ga-{`{eUoZgUt5(lo${M2M$SbCU@Qv>a48#ZQ>?J2Y>rRB z>^&;2v*{Hx19iaYeV_KP6*XdT$bkXhfZGGw!_V}vsN^O8ilsQ(*7`a#bfn`K!0X?Y z3k7l8&?f<(_~`$L&(H{Etb?pWMgw7Evti~=rUZMTFLBocrv?>|3hP9k-ut)mts~c5 z1O$ywoWH(LiL*4sR|o? z1ghR`c_(EF?)`r9-qtDKT9!w3rLk`f{S?S=kQ#8py7sU%mkONlIrHDff0ncp3u_oHvMbKnj=fZFS|hC{044PV?#{t z!a?SPgHcpH``g_Km&AcqVYzj!$>*U1h`o}{1<4dHV@C2nz1J_mQ!YJXjb#%7I0S_* z9}?>fQF?E%dpvhxw_WYZhl%YtuFojkHjGviGbWz3Ak>Uo43R z^Px~xF(B+&(V6t~d`W}yIY??Hv@gS;(YDS}O-|`#U7+u0H`=Cy0T=tGj{B;Ef;n-m(f})lodr#y(D%9q=YEyDCl(lHr5UVU#9o791 zpTlRrN6iPOAFJY|<1@{piG1OBCCY=bsVqadf2{v=k*)D}_c+T|CZhzqbJzQLnkTmA5N+_tnhx)Pn|} z$<@^aN63{9eXuPT}g^w_5KiUpw%+e%ALmhm^t|D--$GJ#7-sxT4yc&3o%~ zttIKv$0eSOmm@@Ci=M}Lm3wWxL+2a@NXkr;%3^^X+wdRf$-xlWunompr+&i)`wv_m ztVDYa@j6aH>8Y+@{A``j>tg%u@Q@nAeXFy6>{gnYUMR$a*<4(zEzu_3Ya||~7L+{P ze7Q3SDJGuj6{h6Hw{Ygc-2ge~k7?}{wr$Cts_hW9Ed!{dw}ulvzc9R76muapY*2y9113*fvg4ax zo)Oj+h`(48%XvD;XG7(bH6O(&{`xWDc4NB`?{k?|`pHV~S)hk1SvVWsbnvV^+{}Qv z%@&bW;_FY=s6d)HVlsl%`H^5x{e@Kt<^q+lmH>=hBMo#)Ays9D^kjKqH?xp;XlWVyYO_8- zrw+bvv^XboUQWKk)>Q`8Xx-=u4PQ2(4M#zeikj#fuliRm`w*Ac_Lh*o6^yah@1a2= ziGUp&jBR6}0m3?_j{Bnb3mPltv;IGbToI`O2)?&t^}28o>QkwBPm+zmay3|iOL;>1 z&DZ3yk1E>J4FlE<&1KtLY)3B^@VkGFb6>#*yTKH~eW@KA$xKL4Okc-(92Rm_D|ueK z`nf#BVwbwS4U@Nf$DJeWc5TN$5djqIewono(f*I@GJp+h&S((2p^+utFXUF67M2%x zHaMT{`QGja62TiO>Bq7bO;1Ce99>JP3SjQ_Plelq`Ia_GU0(%NH)!HyMH2b>a?o9Iy!NGZ^Ww9b@+$$shNvlWQ4rU zKm>pHa-L4E^TI=YcjWVwnY(p6=IM~VJl&gW@U(wD3Qca z<^Q?;e?m$@f|Puzvg@A|W}Ri#<+=K}9M`Sh#kj17f}joyz9 zlHpeXj{-Bf(0YyC(0v;xNGHc7#~~~zpmy%u^IxEJ#_#&AJD6(Hj{o8kpuo%QbqO!u zuZp5aX1&o&ZMrnrt=<(d!0jOPMda4gV=SMK!u%Eg3h8>v&DtKB)}Tq!a%^s%p^^!k zxCtZ=WfI9vnNm@KXroq~HuV}G2#Hnsx4G2rg+Be@aEE7umjoNfGz>%{BTpK}{IX+My?d_NFYC0bW`mmdJP(l<&&g`pjYgY>ioaqTJPR zldy!lD(cB`TsPu1;<{L}SVvi52_JaJlOs7Av|cJb`OT7{KXF-0c-su+^@)-JK?kQ; zzbb7z+pP2*Cf=PQKap{@VRZ_oRW==ksV_GvW`{tg+AUab9;DUQLQn9{1g^Z19ywXB zj+-3_Ct)vDj6IQcZ`nUo>EAY+$|B98p%BJU{jT)b>e(bzkN-Ac&hpQNIsS3*=_$F; z`49X;h^Y7z36_>vuaK{xwi*c*omTD($IgO}je9?2ji&lX+K2tqg)xdS&)MJ5l1cqa zs&gL+qMl!)Qc$*@nchYU5m_wi`)Q%$5H<$;hUokK7Y!f&!hhB8&&+q@+Gh-l(3wHu zy$@P;Ggw};J8~zSaD(cPPD$(B5oghPngB?|7fpn#g+8R8j+l0+KlG62O#>mmtOjSM z4qeSK;-=X5ZyD3$ZUNQ}F_9FOw1#*9#Y#ItqBgKeu>RI*nXP|D@!Vp`;aO~hGkT85 zky*MNcI?p!x083`;lwI-VQWphJtve-BI}Ms)T!J(9Fe(MX_%}^mcu#CbPV{&*CeXM z#(cm9Jct>4%1>_`RBR$jGXJBVScD;q9qYEPvye>h09$hfzj)6Mzmsg@u*aPzd-o}pE6Fr8_tP!s?Gh{oSQ;``{zKND+oDS$7xxfvS zEoV3iIh;>7M@AMWB62RyJNZl{I=})YfWb`|>09V!2I;F7z1eT`?zj+3O+#|z82k2~ z!B3A9e`3;e>Caky;0A{4%Z8Vz^t0U9SImMFnK{9zqgcRKU@=3iTfjZe+2lcK7DXga zX6OWizH;gKL444X&;7EDeSDp$&Kt-DID8eacl2P8Bc4 z!o#~_trLS6GaZfw9oSfD;P$fL+B!ad@{UFKe8Nv8;8Oq5wodbALrX%}MT56c{3-Gu z?6CGd_<1tsmf>d2na5I(iwVa82fJ4FM=3}8lUTpuieGi$o2iI?t<+EJ zlm`Tb{T|-)cHaCOM;jIz;#nETHja(>1l|AF9Ebp(D>fGp}21R*$X zQ+0A`zrOrxF%<>Bs#!QGDeADF_rcj<8gEOl5aTm7A@G*eO&@4i`Ewh-Ec=i+hi80C zRmFiHo;8yg9b6Zk6r$d}r{n&4A38tg#lImy0*`-uvI`hv**;EkYY@7(_jj+RKm9*; z_z$`$__Ugr%4qmuz^7K`s%5!eTaU3u7?~a0wsXBKwNLV;pNDF(jL0GvH;aJeuGW^U zhuE0NAL zzw~Tf3<&e2*2HF^Plczn5YC5#{<58Yn37noE_KUS z;~A>jIa2-pvDctm5%74mrI=z3ADgR2^3f}y9Wp1QWSI?<13qVaeHHFM6p!gpQ# z4oqQAo}XWOw~EFd!7!C?LKz`X#l76NwqqMOg9JBrHD8H9@?uzityFgTy+5lDFu7ZR z>|8qC(n)@Qff^>*lIi~N8$x2Q4S)Os;tDNZX-URyYO0f3t6w5^`tb{g=2hP_fh|WO z+*#%{zxieH`^ycbi+tq&L<@MoVn+I=^69;A4&N}lI@ic9^?fuprZyP^UT9nW@|K0q zf2OE-cpMi?3B28~R$GvvzHe6OBI@dCVO?8&^yMq^k2qynb)Uw_cS1$YLk*Iy0hm)d zk2WvVFLC1yPR0V+y-$oEE;$(?;X@fOJELO4O)OLudpSK=vVcsEQH?MLF~V+l{nD+Z zpVRND{!hL*Q!3J+`32Fg$a_Y^<;+%utaL(k{as?uC0)M2I@HTvP54zNRSVPURnm*) zOI@FQbY6?Pi%RU{Y&s2Oz@F@D_Y|Ej&u*XSM(&S|x!|4^61|TkOUh*?NfZ~ey%^5I z7(Vl>^_1;@=TGdl0Bex6+){Q}zV_9<^Vd)HR|3LPTSe1;UPoo^+sR^vTx((+3nwyh z$EN+-tN-e0#f6NAfep+7h(!EP2)>%l^ZaR{gw#buX_N;uWmz2Vd zNDRx&_!L_c_5@H;)2>gvLQ1VU6k#Y??a_qC-hM+yK6aVs$LvS zKR~g-cq(Tje?xET@Sn+Z)HXlM(hoZLXxej0EE>)B=%wG~giBn099^KBS(+DL?&1Rr zNZeH%-tR?Hy=MEjJ-0{;k9>?k+u+_W_n=|V9rj~@RTIbE*3x3B=+3lH>s&9x{buY| zR7vKM<`F0+|6u$Zg6~OZe^vi;;{U1QPDNziiOGJJ(EHaYMq)i`&Mm|w6HT>t+K_7% zJbh36bSoVjp9DzQ`KTi59~`x9-I#o>cec^O;li;;AlD;%hnRoFvPaX#K+&#`E9MZ}vz?CetskAS_ zGP1OJg7BAn*E~9^eMDN=B6^!^Y+BQ@VbvFn@#j4AnDtomX+St{)(v(E$Gn_F>FeG(kwyS~C-dhahMmlJX~>NClm3c@iYIuUB>OHz5}PLkQjoAs{hZ zpk^&Q!hkb zihX}t@#3BJw3bIMZsI$rV%7P@n? zvER?mP6?vDL25eSJX%5}5=>&mupzU-A61C`PAxfNsV=g_5QCKMk%*jL zg&{`nLP2xpw$1L{>Ri^Zx178NoRwwH=|Am52^;+O7UH>(>#S(?IsLcmmpnVr9n;(+ z_!XL76TBWDheu>{!3jLU0BJO5k$L_S^sQ0Lm6EwkU#sDB?(92H0WH3KkOltb3jfkM zi{A#5=G+UMm4aJ6H|va1M`i0g#67?B){DpyhAai7kO8dyNt!{WG{cV+-K(waE8m34h; zmI_Tx6PyL!12>|!3EjwAz$E+1*l?2p)EvzMK_pB0ik6r}Cls^w;q*r-#0OPRRbFn; zKyo-+6n@on=z{;f;(gRIf$%r(aX$hm$xY{@k@ZLa06fr+yal8fSq_T-SFHGtUW*ln zCTIR|Q(5ekwR!=)prNu!Im$@hGMmd_DOxa(;l=}70j=)$p}*yARbt9%zIy$4Q4zuvqbfb25sE(R49+bqWDoc6!UC}4OG|;&n zvKxt}11JVbx$Thjt7o+GI*3?z20IB|#>&~qs$Cis68uuGYgXX~FhWp+mR;=7ryqjP z3qqDMlP=x%E-J7xOy-}3?=~r67CKfbNe2;n2Da}ClYvv7L(jSkSlKKVT%x&CUt&d{ zweA!r@@PuxV)-)ctk6X3T+Si^eo!LNTSPPR&q72rGL2Sf7aJeqZ}SE>hb!d~LA3QVKlf7~-DJS0i8Xk;7%#Kt>Gd1y zF^ihnG&u-GD!LE$E;?eB{@uozcPmk~T1+b~am29TP~NA2yl|i&*5+;HduIS@_iYPJ zx-&+th;AWl#5)J?kgES>w>{;rJ4|3Nf&m;vJpR)jarj)!ahlunHTI_?Vr}eFz7*c5 z`Y-3M3L+M`&lJ*Fe}yDhwd|f8TM>+x@;kzv^(!$EyV6QvTOy;FZS_~S3v+f4Kq;&& zBxXWsshEJz!=6oX^fahV-rj&3Ou+yk;CQ4$gMRx9YYv8#1vg_mS^W#6^CGU_Sounb ztdJ=&dx_PH6o#lu<){+aE%UJFK{Z;ou^i&zvHG`i<*_ySV0Swosr7ff=*Ht!VD%(| z+DL)w(;PRWWL4s9$b^}!xO+Mw`xNr;2ErYlGp|=X!qnksC;V;-ADKS+JrNIm*bJn`v?5x5A9- z0}Gi1$s0q4BZD*fgWCYs~Py>_nu#Jm4%fe)u4 zYb%+&?AT`NR3p6#@1P*5K7L9g^Ww@WlErd4AjUc|*z#iXmf5B4CV5hRL?*?Hx9O{A z2>;MRna&hae614stp>8-UXEmCjuf0`5A9j9VpRLO;hhe;2xT(PXiM-N`vT~<8Q3o)m(+@zXGV+ zP+Wf5j1g-w-!HWGFYzRw5T~aS(^xskb(I8XTKSu^bsVwM8Ad$)_5elZb}UrNI{kr+ z68o)S6r?8IkiTJ?OxWFb#C_b^I%g@Rd=9$9X%P){;hh0DA3MPO3$vQ8_Y4jz!HwWX z;s+=WaqfZz9G3TBxRwaUi%0844vPHT&xWwH^d8DTF zyacuHG4e(17tWG2Xp_ql6#<>YBp;YVI7*OIILgSt2}hjvHeMu} zM9XT6>hXX+C{6%u94iRtcw6tDRQB@A6dDJqNm@)5_gh`MIS*d;m%p-Je&9hKAv2cGTIe{! z+o^Y#I2A<7mhS@1hb!mtY!Q)obQ%{KID>l-d>Gp}GT?KTIVyxJ#$-0lmARUXuhDE( zW-cICP!4ztqs{XoYWEV9k1aruPhBAsD}s5ULE}TSt@i+wAh+ntsruDQ!;Jp;ay(Vv zKrVq_J^zOLywfiM7PGfr6+yCcOTOa^4-LaznED-)cMP;FwjbmTo9rlO* z{8=7Pm@~I#qP|V3 zrgKDd5G2YokW@F}aFuuh?8Smo`8863b)mterejxvKZ!GeV2bqr;<1P)Tfz(FnLeiN?D-qh zn3rMz8>KtkA53zrs1fk+@2R@3hhd;6k|3sam}A_~pr=;bB9V%S^%|j=@-8cD zMs4}QLu{8=rI|RaM`Rg2w%Di)2GAKJPQ*j@-n%U7A*e1>8gL&fghC$J*ZW67YiJ@F!sOuRv=m%=D0f{Pa= z`k5QtsmGXQn8nZ0JsO?dcCm2(>G~4h5zLhn^RLq07mes?Mt7CZrXyD4dl2}XQ;~{9pIo`8RqaC*j)u~eac8i--0G!*0FTh}6 z$So~C**w3V7Ei(m$kCXYd`d!#ScH<`_o{ule8N<#~0(zDUhrbi$ z+Q(>cJrsAUsr>L!lGU8qmu-#!6V06*j32NRQ}UO<8+(5JAQ9;_KCdo^k#wjQJZi=F z>>KWM-*?b{4vGWexy$Z2dk>{l6WVG6{YF^&-3~Z~I;(@|K;5D+)6l$_4n>KBy3t%z zEjE26rTYC}jf1CO2IBG10jCu_WCPCMSuIu?2!15kMQ!)rl}X%TZtcJ`dqEy7`fS!Q za0{cilKqb-y}3?(8<7Cr(IVu!+&mzD!}OvbAtC_vski8Im=^RU8OZZW8` zyu8uXXG3+Nr+zfh;kW}+DVa=kHde;Tan)`s>_;uZsed&{&XdR}p@|JTrsuxrlPbG++LnoeuQ1BV{b}? zcuf9728XJ0oDvQIFOg$X?p|GPbc8tDzH>4_nDxN8@twuaJo;U{Qp!I0^0UT=kDe0l zjc~O^OH+qe2=pw^-sJDNO@cB z9dTO`-brUvlaqQo&Gh!HS|Q;{cxhMp3*62!GMdFN7>LiwIJPI#Qg_^GlYGyQRl>+s z;VcmroeI@rz3w!@j-+0dl;4gYT(mJw{v>p!?Am;ugDr!3(two3zJ$#=#whXrIgo1o z+iNL%?eS}H4rIoHFqT-(ZwQhv*YlRNuJ1nV*(jA-I^0x#HRzs*B7vY4{*mk&*8ODH$P3vl(gXy0`|%982ZQO6j^5D95uoy<5#SVSzsVub1c+Q|02 z<>cxwKy=~E2VuZ5!(jAvCzr^be4kP$`L@3L{m3{a zwK>hsk=roxmDbR_alh`lXKR!VSlhi(Y6(xU<1B5c1WAzmO^&Rp`g%A47INPu(d?Iy6#<{Zv0tA0h8>cYH;kKbbpa41v~J* z#nt3!JtrI9W6Z_0Ui7W;(S1dxWvjj1??pHnJ3o*7I1SLe-#A^svLb=A%*PEGjd(CD+-P3jogz`GMBE?oOPwdI$ zsu|A|dcqHR!5jdtt;C!&lJNggWJCHnku8#TY*Cf$)WSp(;7;^VXV}{kF6Q-&E+fVJ zxxwQGQw;VEo7^owMRqz=jj(4~j&F6d^dh44(}551RgR zaINLAV*191H=$vGm*3AX<0yG8U^@%5hT7v*ill)yvUYZ5C*Hay1CLrH22d~6o8#xM zuXmorCs}ugM*r+&chGrTB6$Ibd7NjYOup-T*cOE#Q+A5K zrUi#JZ#URoI$Z($6OYN&G)J?&fZ?eZARiY=v!&(2jdb(=c1PmVYdEGKu{zu1f$0wm z$&JG~pE2idb(v$%-1^BvHWlr6Vzg$t%0Mic?er&$zd3v;h55&5z&}k@!Bx0sSRzrJ zIL(cjPqvHYGr~?*2?oL$g;1tn^&RjjR5F_T#k`;18qf?`j`?hYN2WSr(-q<=r<#9j zWKnhPEb>jto7bZGx5!p>XUK$CT`21(QziK9F0#N=;pa?h=WF$bK~*lPB+iZePiH8& z{v4#L`9FR>1l<`%Iu7?+eYjJ!9k=OD2h^AkD2Ax=h+045s)ZRWncG<>@I1n0j>|l5 zGQ_RmgF9%s2NE!1Buzc-f4Xfx)`6E3h`e)zM;5;gigX+F+!ulR5_)kDh{dNr44sJG zJ=z8RaABEz$6!{u%N%&w{-|M^abep!#~d6);oFh?_rij%U)V3axk8Tf&-cu%X}p4T z=EQRw3?nU>PxA=_^BjrX+w;x{?eTctn)Z>*h-9DjAeb1F3_2_VK*CYHYYY$VwSIZ( zzG?HFmZ6J>=B7LsEDh^O#r!x+N9K0v$XajVU8!RW@PPoAVjr#BZ`+l|H@r`U?aTHo zSl4!!r2E5p<>mYiM6>=+`29zR{-$Kb7BdH{8P|zS_c(aX;P}QbJs^Afz+2?nT=JYT z3!_sb2819ttvXw{Aw6}nBs5m?a;Ppv_wVf^2m!~DjWq^u?rH)ut(91vp@|j^4g8Za zk+S&At%UeslPuwI8GFM{=t{LoK0$q1Tn?V_Dgz;*@KX;J#PZe>wdg{u0q_f8mnnsmjAeJXJ%j4nnNn zEv<6N-Nve$D?jJ;omo1Wa0%QoMgW zh-i8BB-tiKoY*9e!&FQ3Mc#^CE>W11l=zbXvppo6m=vLSQ}{Y52{DH$ESl6Zpl#w= zP*KHM@z8c!TZh`%VzN-)^0DyVu4CkdAd$gzhwaF&M_q#Zv;Ny{NYm zs|rIrMlzeB-mN|`BiL*qF)|6>wJS|8wLw!QGrmcno#ZluI-@h-Gg_!CCaOnZS%2Nd zhy?u*6DnjaU3@S@#>E*Od9!EBGsW*?tt>wPh@~_Ke6xC5Uhb$uoj}1<$D;?le;h5z zQ|WqH^_@)nXR1>`inX$obQvuhN2TS*6Pm|?OvW%D2J@3-EW!osc>&oZa3AN_#+nAd zvU&Uv#yo`)R^}ofzW}f`0rY=YcwY(BHUATHtT#0~j6$W6H3iWFahyMPs`6$$$SHXm zYXgP9gX2L324rb9E_QmRnEmK{Wx67efc_CZiz2_0^1k8vkFGbNo=o<~>G}Lx2Zc_r z%C>p2aXaLQ@Si%Ag+rKlTcm|K0}vU&2pA(TR(h}xuL?eb>e$Qb4bO0I~M0|{=VDJNo6xmv3CDYqPW z3nU9|HNV9%ar|)3*Z||I^X19*AL|J~g2Z61q?E+i4>ifPmgOftg60fi&@hQ^0!|QP z2y_4+4#Qz`#}~w@g3Ox3>re9UJLbFG`H?@!VNIfWe~-^6FrsPb`46^2$LH$y(u)rg z1X2NBgg!f(V?lz)wBYbiVWoPe7_gmJZm?K_V)o@=*O}n42dlJJh&k3JDYew@pD0k( zkG@vvn3CB*8SEjhiwQoOm0W%)xjp#v#LN9tA33V>$k_DEF%skfa*rcs1#MvnM|m1< zPj42mdRZ|VCy?2#OT1K=Z)3Kn@ic|?zjj>1CqlOF`_0ua8R15LsnsLyQT{3>X-#7n zQTwqh2DjKatXQkw;>b+%cTvz!wLR?CevH=uBUKJ+A=vns=FD()#P#dNMp?K{{c&<> zKOblzXi=rDQ{`utSAo{@tu($+5lkS{jhF<2k?zpn-lF}AV|+ex=3DM9X_f(%HZ!a4 z7K6_=W~YrhWelnmHr=IyACVzb-K~49UJ*TJsidWS$#T@~Rtk?>U;e;GzP;2IWVWi7 zz+*VY&^bS%Ih7dj%p!SF2nj=?iH>i6jAr{=tLi_yZbhQX=X^E`ikd_WnlL>dQGBlg z-$mZ2Jd(#Sk0UoS@E&0WRtoD+3o^L`MN+Sect6aPGJ(mP22#&yXO{f!TR*}G6I1XD zMe-MY>3JZvi;Bqk@v{eWq))M^!)S>k&I)2|NGf|n@)%tEy+83ajN~>vbO;o560KNr zSU5{vWI?JR?gLU)Sxo4^s9R6A00`jN89+?$rH8(lhmm7nL~LZBZdRX)S#lF z@ORcsZT5$SIbjQ9O6gjAD2D4b=g&#SaO4b4DTt5U)Wrt{}J4XKV``cDJBm6 zlU;_E#{6*q`~h5g{Zu$pcJ#OYft8|{74PsODBhjDZh-K&Olz+|K_>McbsQsp3kt(O z-M)O_R$N~c9&Zi8_f^rk-BW`NmGt7a^yO>$91EyuW{vBW;ag!HURZE)8!2;|h;*BG z-3&J~T0g#o4lD6a-yA7bnC9TNg-FU8WFDT(G9JHXEr*z6UkdNg<@)ViS&EnMTIZsE zF0oFqBk6^n>)TBECOaQrc2e0l2;oOtBuB(;wNR@fjMKAxAOmhnP>9oQcxgI?^i6F(zrwy6gO)-Fw z9NzKrh53qG6okN*21F8hclkBM88=*sY4WKot~h3Np3dVTXF{B8^M3bUItdc?RFJ1L z{yGEkh6;#g@yTg2b)weWa%U6A6|zb`Q~m~1hiKGJahA=gXh=N7!vf?2GPmW1T$O-B zY}f1d^zo0qT$0-d!P#j!KPk0;u0E@O7-{+IxZ<%Q(_}3q@GHLPTpuTrc6h9Sb1{?G zO@Z0Jlyw9#Z%-a@UJdj(LheyRQ%5_*GZ!q5v{l~4y3E8$m-1>!&DY!T{lgB$0OjKE zt#o(>uei4jZT*Enzy4!bj+K#7#)`*YcO&3xpM(yqXFI)rV9DVGP#^b)tRS$@3Fbl| z%zprb=gGe!i&b@K>EWqLfcv0@K1zF+q`LTRW+En2tpH$$etqn1)Yws$veJzt;kl7q4rGL1E|xHTBuyKr$>}B-Lom4GapyC095C$qcc2x!T%S*$eIAn zcAXsy#xK1`*{PS0_?-ZK;Ba#{z7)wh?Er*eF8ytJ@1ra8*GpXoXi2YTqo__de^1cv zS!F!PuF!r;$x$hmbTDc&0+a%G-4FeCOt2^7G0%+?65-+wFGn{JDqGuomv2Nxu>hP4WS zls80S8=<4=y8_#vF>|q}W7XF1qXqwY_;oR!4D2KOF-VHKCxPDPQ;jPjfr11%N-QGf46P!+~IjD*<{5DVL?SGj92nn2Tch&M@ zSfYFb*DPuVpjfAFS*-G3AN(RctJHg(l#!Bj=l0;9uLH6HT@zA&WB8o)qRo4h9Fb0= z4)O-_aS+*Y4H8mxh4j`Yt}{g4@48Vdl}jYaPIUE47I)8(UfQ`%l#1=?CW7Iu#tc-hq>=?bBPyrzkRCBJKQa6n<^#oj!+YI zO?g!|rY=Bxw$6f4QSD$Fv%(H~Om14Rp%EDbj)1QX*a3og0&*ZfsM#B2jT8 z9h9lNqB6~qK=&27W1q{j$Gr_qC<0S(WcEm7DXd?a`61I1g&5r_)Im-^Hq&!%f|e&lEU_UT9Hhlua! zA}`kJ%fTdKHLw0w0a>Zne~gUw<8$klEZNj99t|=a-b#h(_w;ooz{i$FD1TT^naU)6 zf8Ojtm^O^s*2EW)6BU1r89#;=dgdgK1k<7LH$Y)CiXx9^imYgP!fa7j+#x(x>|xJ#^aY)JhSa}i~!|KZ?cnWi{$3UrOPr?2Q!%2 zfy@)uw!43$?6sY&94Q-TC2Pb*JMEGx&rMRS{5$!uZj2uqfn$|>#6TNE03sTkX z?__mv@BH%gqdBJEd5UDfIHFlsyn5n2L;jO*GNxa|S7rBGcfV%ex*NDyFUU7iDzODB zEn(`IyQly$3PpCNN>lNmOuscq1zaR6+fJi6--?=2Kv&M57O(<9$Z0qG1u&{kahg@H z&rdqM9slJrrgkJJLx&=NFn<6$62i_x!d)H-k=3lE!t|QyY(_r$Vs|Fq^K(P5kSB>2 zyJBfUhD_sCzRdtImA;Q8{z%~Tbo4I(NW1P8A~eBFXXihoYUl{jn!CLdrQbGe4{J?7 z4`<4YP($V44R0NA;dyr$i1B}YK%N-!kAov_T8Ra1`;Q9Q)2oiKMu@e5etTx-$0>oF zBL%*qUF@uGlXix(Gor@K@J9?KO{gC+A?tY46&>f^G~6pBBm^fub>#ked_kP0p9J{# zTDMr}%Eg`|@USu^Up``q2>2msa%qA%g2>_lV_bB#{RV^|*DbD;1*Wvu5sXQ;D^GAe z(Fy(&Da5OYmU38Fg*G9`TuFS3bmml{T6xr@*P-X4t_xfHZE07!4Y>ezUx(C5NO;s| zLbM`fuH(WkFkH!)x$lwkYQ)fLwSV`BJwe`a;1r+jofkK7SvR0}SI0TCUr<+IW+eEX zR>yDvoWcf-r`v3z&F}p_hL1#K$mJz}b92B{6}=!t2KSu%2>~#a%>YJ^R$g&0o^IFO zgnX^~XNPgWooan3c(Y>*E)DaEAN!s{LnuwCNGcrps>F|;(MXO!Fe#EnF;yUJzKHyp z*fH|6O?*`_GA&VOSL6}o!@Sq$)ICNlz`gXbVZ3vPX;UN|Ow40Tfub4yi zo$74Pu7!%ua_l(W%C>6G_O`?2vQ5lRjkQ~_Sa-oc2u3tS6C($F3EhdO!~FvY-b6pT zCjCuU;S`dY_BWI9+@$!DR|pGTsLy|k2wW%VN!r)M;LBl0k)CQr+FPsswAd3vKszAl zbupvvqX)^1U1=)}eZcm>5mq&rPn2uxKs*~^k-slZ+qrfUhpO$ssaUgB0JgZ?>}>(o z&yK(!#j&skAeX>#}89*<+vcQQecW7}kyfbozwsqjP(i)JScx z*g##>?tHrAO#*2kTIwt(`6>hk7Z-D_luA}4qa#axLWzF^xYaXLUFY#Y_-<0Shr4~m z2`fTST}>29xq&Ww(}&U>=EE9a0cno01)4 zL!oc-CArz4LofEH^Cht1+f_GEqLo}-Y~J!ANwj9iN&c*z+{l~J=g&7R`KalEmsm6K z{_v*PC`YCBIA;~K;{_;OiJwq@6P4?iLfZ{G9~WyGrs=klNVT)h^gfOJk(;s`@S)a+ z&tiROEzTLH`=r=o<+#TAIzH}mP z%+YnaYgV7@0u60kXU?1D95EziL($FY?@29`?F-nnFFc>*V~q`P(4+77Cb}Pj_T`Ib zUlYL=e6&gcxDC?*Aoc~bak6nvAAj$U+n0(UW$T*n!V!MfRDmP-wj)+3fre_&XkG7J zWghWG==`H~4@hy530A{!Ao}J`1QO%8Y3=X4S60E#zipQ!*0l-$t=QVi+8l;Wh9z@q zsGkSli;Rtxk0gtqSQzUCq~0G6g}cj7oV^2E&>YV`?aOR#!EXCZ=rV?#sE=-YR;foq zzd7W6D#_ci5uaa&O)J2jIdMtV&@AvS(hOJztGNGszCLQI&~WPx2U zf_kNg9I-FC81@O2>zFceM^lqCH4;Oc{B60L8#_yW^w4zi^o9nH_5yf-SaTo>{|Uqw z@0fo_^lf*?j_bhH%ifoY-dFmQQ~(y!?!)ZzMd?Z<>weSXQY&2^$yb2_%tPhE$=hR= z$-md%0(3rywefs1cN@Cye17gQW(hLJ2JGY^ZE$ovX|{zyrct1!ovt3BEn{tj@g%#W zk&=Tg>U2>j%0?b=WEaAeve@8uFSndEGE=xu!RX1f3;W{$0&0!jT0jg;2S{Z2G}B2y z-~ZmN1j99L&jDf6@q~McunX82zBr7LYeV1TqM!fj(p=veH;Dk>md}SN2bkkZ>kl-w z<<48y^>J!RvYg5YsurM?=B7xw?Q^__V^hKJ7ORM#vAmF(tE{4fNhXI;*X-vpR^`qI#luzinGU2v9<{ zF?TMLOO;y%+TWLT?oEHwGkGW2Wc5e10{l^lOPb_h`&Ps8jn_!3kQ^MDE(5|Vs`AZI zXAACCVF&~Q%@4nbvD3}-ccc4)JXVB{7;4)>w!1$7D$CCVcINB?7wi#?`k6}o&_%7z z`Ochp>r7|99bxeupt7w4rWN2i4JfBdx}Y4Is^$T{_iUgQui7GJ#9a+(O)nX(dS#QH zb0v6>%R^gH$0+hiITCKMiz4KG6gdJ-=u3pAzyHUV)};4?Yp?K(YSKZ>)P;TBuJUx4?vr7RSud92*O%p&hiUK-k+0MP{i!nFeZ|R7`!Ih9-v&pn)sC^&bJDh;wuRLM zC+$69u@c7EeaW;ItKElO!3OODWvcIDr4$X-Q+C}bd8-%MB3JW!w>%{)C57{&YeH0F zlt4v?GIPP0!1Yled*rWd9^9>f6Vf16lmEz&P$;Kfp^<@1vO$||w4%!(v z|En5gZ2|)*c%qVYk0m>oyb`Hk%0X!u9O7oo;=2B4-3 zD+?T7P(a&XzxVf)*{9zazVE8z;VvX`#w1fBliWP3L)rpr#(*+XHwGtpzp@4_s^ zR~fmb?CfQRzdN#n9-RFIJ}2F&L;`SUe)jDjpv2n5b-mSLmk;x;P*zXi3P(ZcSi78L5m(I>v}cFBccG`2nv@ z7}ktnjKa?tzDEfI%?$5ytMaJI(q7K>J&$Bz0|}&JEne1jMsv+YE)~g7a64a`jBPg$ z+f6#S+AU!7KmD?hh7TZ60Slbsf3)0fhsIZ)r@9?=4gE{QYR+)Z4Tw*$EPt?_Xi*;^ zYk)q$gKty4DPuE&39?91Kv(~+?#E07rcpwhfe1gbsRHV75*$>H$(Xlj@Emz4i7lUW zPyWzGWNI(b$4AUjhax;ESi0RR&IS&E&QU7+;l0L}Ueqz*OQvU|)5VgQ&f_j5R7c@8 z?ww;|=RUSwyHSyAd-yvmZ@0I>XnbD+12LjMaiUtZV2=IoIB^QFAMceNhMs6!$Wr?+ zYLID(5_q+t+k;KHL&uz{6;CF9?r6-H`1Sz-{2Q_@-W zqUgOQ+K!|VL!El>4ag-xTHh1WUxs*D<@Ue^+1x$}z3d*Fo-VfWE_&+X-Qc1WwGC?H z)YrgiBms7f*a6EG_(0!7uHr=^t55MN-2lW{SV`dmyT_c0(Ejq?H(&xw{9}tdaK=ZT zd#9Zaq~u2C_NL@)0JsnAYpUzMXlg8XIF?jX7-KBbdA{yT{iV=1o8SXwXVT)6FCnqJ z5ZTA%U_9B?RoIr6=7;l;gP+k^}9@(Q-_9h$xZaJ>C&ETA{CWPKLWa-Pb}pceIbZg z7Yt9-ViN39(&&Ku*X&~!s^{MU*wToloAClWIcI20YgNl~JZ!c5M(RlfT={oVEu4;+ z!u1>i(ML*fTU*(t9`_f)DZu_3uq>9;%b@LTj9DMXKQBa5cF%RSm6=K&*#UB6fCmR7 z8=PXOwG1ew20jb8;A+?=@VqS_?mH;){|4p1H!)L2)=C`^&v_i|`~|(R%iv?Fna`Tx z=B7kwG&}eL5Q9g%l`geryl@*-;Z+AI+l+#Md4MtdvVc>P3r7mJQ$SHDt_3|hWmL@t zA5yk#`^~Y3(9KB>FI*k%fbzP*T3wpVwq;ITW@0+UC_%jt$reZo&?M&+@?mI+6AY!z z{hmvx3k@#R6iWqR!p%FKNacHeyRJyYS(>bfmhWd50{cU($b&%k0%`YI&)7g9Hm0PC zMEL#jkZNO;;ENlYXCWaZjO&eeT!xufPb1nijIC|B@qK?pX8>DefJy*D0&F9qw=BHc z6Eb9Vz4?aaNFbvK45`Jgy>E)#ZM|#lDPIGS%R9$L-vlT#0isahUE42@)#3d?3_;YK zTQp}(Kx|wfCx{L1><|b=AgYB9~pK? z)UwiJBnR_Rs4dBhgg|<3f;qgLd#{lyAuWVY(aV7}2LEEu*ss%n(G*CJhNJxsAky6l z4YC6|Fn}JY-7#9Cn=qVSu)E5`mxWnhG9NEPm2{ERnnBAFzis8vsPtY#Is1U+_lENI zo4tAuiZd2YT?DW%G+zvlJ1W~Th57w~op;A>=OpeO8rcEXBZaPD}tOFLA8 z4^A!CJnGI3wr}(8GP&4yd%`FLti`z}TE6W7sG-PB;v~v5Ua&qc@KjBq4ZQ@j1I;^f ztY0X(wI5>fC9m7Xc0L2U5;g)Q;8YhI8e?OnMz|X9xqUM+8X1l?5iP{$I|uvFvcGf2 zir3#=Di-5LT45Q*YRw_{{ejr-i?pKhK`gHV>gbU>QUj-qcJgV~pPNW^-_|VVo!nzg z6Y`%X4%XMUEBWq{em7Not zKkN;|H@$a0XD?#~5+1_<5w@#l%h4nf!v43E{?p1B!ty`-t}l)IPippzoxU*e30=HE zPKQqP6+GJF(5hF+fZc&6B#;5pHVIdFlpD@YDjqY6t_v@>om$Ln&BH8q|A{5PvHy{} zGdDOlkqlU0Fn`=a@KlIOwddyGeH%)ev)%L5d*`2k)h6q|^uk!9@(3lJJDD1WTO4ID z&ZU6CM^}XTQ{W6O;EjrJKEN@mZZ)6uy84s;FM5qU+OH+zUrh&Lr_GOAVa}a=Htx}! zaPhZXRyD0OaELyq-Nch*!%6YWb2)7}@Cpz+1?I}+s|^lyH#aq8h@a4O;~1IrQwGS5 z(8jA6Kyq*N=!fVe4@rxUGst<0_gNV_;2{S|GNhiEf&h_VY|?&1YAltl>6)cq%P z3|JZxgkRf$?)um0R{hMmBlrrds3z%cT$q2b8ILt~ZY`;56yID8U}UXBJE!FK5e%LH zXEMNW7Qouozc9h0<+#~NSiv{kKgRu9(&kmctr6Qhh9$7iFBL9?^A_tn?SfBvRdDSJ1KCIr5K0HNyYJA&Z=rQhmKoU{On*`9z zMKL)d=o>rV*N%SkivBT+C*Ad&`r>o5)Y$2<#ezUHA7Vy5Orr%*I_PmhPsdzvK|=RX zoZUykwAprUU`wzWSG6k-C_!(enzw?isODop!NVh|kS*dGg132ET> z)kOOY6P}_iX3uUBR26~D*_T+3^dN(Mq<%2gI_? zal3Nmv3o0jF?SNHgO}NA+y%=ZsV{TDHNbkyVBCP&cYp2kpYdL;7LM1Y?Xk}ybRK>$M>-_RI4x`q(r=} zWeZe~jf#41TGMos4b_djK$Wtlq7rOO9BJVEWs1*YSZ}8ovgBw{?r@K)X56TU!HK=9 z&opG8R0p?jVVGNKOsK zdfZcHb^fs4P^W)ddIo{G=((>NY@kKqtv8XZYH?@DcEH;_RM$_VTc@I}v=;Ey1!6|SMd9AGJ5ezv72*mwy;D11Lsn9jL+$isnHZ}br zU)8jCbQ+%Z6YJp}&Z-Q&iFnC+5}vN-LpQ!*!v(BAIB0;3_&1balv z;h)B^5_FG{UbMZ4V%0S4(t9OFMye$MU0Nd?)ZkoI5t_H0VOb_H{irrsf?ZmEPbSI=;sT%Y(ITDXy zwFN4dn@XeKmI>AFGv5T}h>U6LWA8GD0*gX;s(N;1(hD(j<$MYhv?5eCH!oXvJ|3Rn z7x968ft`X@G{7JN$@%Rk{qt8IxBl%KYSrV&jlS7{Ig2;0S}Try9LkuU5p2PS*5u#% znF%={xj6xB#+cv$gq~|oAX4klJOD?1IWD;w{jS22<{YOD{dB#7)sUQ5d(OzQ;U}l5 z;07wHMk$Ne*>J=y3hDsdx>vzeEIA2K3I``BHhYF^mWl(5{h&Lzz7)qiC>^>#p7!Rm z?lskGsRo8uWdIj*Q1TqTeCT+*^zyFytpruuBp#Y-STqi#tw5RhZH#c78m2X%g!h`* zml7)yFarjuKa@S0dlB^`@`>r=b`QPWzMEb%krvy6Gq`XaK-8hD+p%PvLnf@|Q!J@0k6wb&zHbka~ChHP&@vPmk*xH+`DnxpvCx+Z6l7=?Y4FW0L3eF%4xT^1petOp%RPDL*>77eC5+XfvwCrN2r@ z*c|G$W_p=!_#mHuor}PrYI@YIzSjw(7At^wHG~J4(?wI(t|0zAE^q#`;HKm=(FAiO z$8JJrNG{peD8J3*idT4Em0HW~1@BlY$*P!8q)(#0WA0K^fO$~6gv2o}VbrLcZ(h9M z&I@%TjNI>BHzH93`20|W7UN@`Wuovm+IcN0Y#^{_p|ZEAI?L)A&IWOVbMhOQtXKB9 zT?IGzn9L#+lw{uVH@vEDop*!&+$3N!z110g1~xJhyk?bo86F>1XbiZcEjuBn>~)x+ zkimxqmSi6LzyYI#l5cZ%K*!9A8`6m&tcYELoTQvI5$CIaY56)BMq~oe)hn?abv^*2 z*>lrN#H`=u(vBrkkjuuqq|dI#k#oO-s7mNO+!)z$SB5A6e9Zr(?Qi(&n_hnkKQkW( zi3DY#*hBcNb-Fgh45otbNChsgaJbclX8PNb+w&9?aR_WFw7ghRjbuW->!l6W=v1N$ zMbU9R-Rf@X?8q9cWF_Q%U^=&&`lj!uqB(-KBiJLCwa``fkqVQs$>?W_L8VQXQ9luH z?}({hnU%~-^G0J#;EN_8VBLhx92Zit=t}%+`tVxWT4j0Ed}?3hlH!WuzGUmt1T;#~ zZ&)JP!_km@6!0(sQnNdN!EEKbXv>Y;YpoMl2cN}IE22IHkhShYqt|@|^F^qC?uD0r z_Rg34dMpnJV7?kaNHGCnB&>>1a6yo7F!H8$joQ10LZW!1?zDwTF@qG33Ywiq&-{>^ z_vkTP!LuN2_Ny1jROvt1oJf*~W>1#<++(gGLziEG1TLuAsf9BzT@1I&HDFhNCW2YY zR|PHUK3)!S-P@5`ezFEZl~9qIDyT;2P{}^U%3nSX1SP^%)zTM^+}2hqQVe@+YiG#SVYnS;O>xYz(}63az9aEu zO#W&whraf8zgkL*>WNzvpYyXIK3Gf?^LoOOa8nqy({d6leV;%OB6wuC)`(LlpMppu zmDiArA4c4eJxV1dtyCryNMl|__s`@Accm4c_|5K@eV%6d8IzG}sH^8iWcYnw>OsG5 zUc=yh#8-0Lm3z3-CGd z4jP>8=BOrpm6sZj7@$A+0LTTVvDo*J1t$U49wfi4=`PL9nJtOY>U@>-0$_NO^y`*F zE3Ap6V(Imky1~FWFk7U5hevgyRt1&n-IeXn#*yqV-y)zYZ?)p&VP{e=?!Ih000gVc zlvo^!I+X&YYG{e5RVAXw=9lOj%8Z;iCGWCN3l8%50W*HJ-?%8XDjHl{L{u`knulINn)j?oIzho=F>XF!ZD+BpHrk$ksFvvayH1K9I&8D0 z?!GK%V+?7_fj0P=wZL_IOmtrO^>~j{`Z8Gy*`pr$B?4f~0x5w#7A@09AZ5I&1zrWSs`PmFa z;em8(<_S^O5rcB|qM$V%W6p_q&iHR1=8gE(>^X<+p4qb%HCOtQH&M&=HM~zh4BaX# zRz>M`^REi0CVjMzIXgUWyAyh^6I%6Y_Rhw=6n`QDFlGt}8at|nCgyDNl_ylS4&`n# z=oIF|(DEVhqJf81=U8{|H?DZaQ$F)SY_pxP_>&<5{h8?hKR&AJeX3JQ)YwpM!-XE~0 zo?3I7BS(^Pb5S-d8H%1HdgTDuh3Y9W*$Nxq6pP(l^6%lpB{mAMP=|-bilM9EADgt? zo!E)sK~U&cM|;9z%D{&gPc9^IehswkE(G~C$-G)IhT-HNJi{nlj#_BUYPXOHkTYeq zQqNZ~ya(sJldIjy>GE}iM-i}=bBp}%&s$QO5PFC?Kr4JC34k4M)`h*IxY}xDst^75 z=Oor1bBB~;!@!N40UK3NDDK%`4u|cL?a#fdJrDl^z8>c{Yctpopr~#zb7FlnK@_9}NGgHygG=D5k5%u! z)GO4_$QTRjVRWZ|J=TaTH)2t%ABDJZ)m(g^btJ8yqzRVAl>!4xjdlH*{^fFS9Dy;0 zf8T3t#6ec1J}nVFDnMF911>kxS^V<-=t*ybRSn)Z{uQ*9WXD>87faY{uxN|-Gd_p6@5n{@!FUOS}p9GKs| z*2fL<3$^6F^M71jWmuG3*PaC~Pl2W}j#g%J{dL=^cmS`=fpXX@j^;R-8V4b!kl~6OzfW)y-K6#Hj?yfBzzx&mc?4x>eT+r=h-DWY}!bz+{arB$rDAASKGbuVDql+=xX zJ5xz5Oj!4Rv>85E*BUM zMpL`z<1HuIL_IYd2I6hz!Ib@0OwR)?t2S^i^pXrv2LO{cuu=)HIS?K*Hy!g9H?Uu%6*C~h6vQZ^>B19A6&}S@i4El|kAEj} zUoLm{FBD+g(&1$V`W1m~W9Iyv5St5>$Q);PS@E#xZ(8Y==(@% zVCKY*IO6I%hCMC8*O3;e1L~ZW=PXWg!2@EyII=&Wx8QD4O~0aOg&ibJM!#zQ!X3G1 z%iHDX#GNC3GT;FW`C6oD3bVXK$`id|;KIzKnW=Dx22}}@Jm9w>tgRB*qUbmsE#f7E zbhQoWynK=t+cd%%z1Ben=8OhB9M$&IeB%-v9N@6XfPvwy*iv3D{~G+a8(zcF48nlX zO4O2G(JF+Ob>s}9- zn7xNKxE|{J_jq6!=ZxLQLv7*R7D|FqR>7@AoDZU2fn6A2kpH9VR9($fjzygSH3yq1|aIbvtZUHJuoRa8a;+%BKA%gM00 zg_6OrSsHVQ2-b)JrzdmhR_8O}Jgk^-f-|RM&md86=_fR}Bsf^$I@1(+=ZaDm!%fW? z{(BRDVpsmjG!M}E*dvy#A z^cZvLtpyyw8k`)A0v5xoZ-L#ubpPL8L7g)u{B}U^nm<3o%F%oiZ8t4F;oiOBV{rx{ zRR7XMXqI1s!IvcM>c|GqQsoef3BRgH^>iagypD^;Jj6!JqIie#Xh)@FRYQILXyyaW z9^z4$!VIrcY;=tpcpFG@;JD|j0VY>}eXXqW-*5-~I3)^_JZK%kQ7yq_i3!A#?8oVS|J(F7V<+P=_r#k*UcyO^0ew6r(biUbQ&SQUW3l-(f6YeR$IBTa! zdLHB6@%Ro>Eqq66f-##%T|h#hmhHzWQs*aT@FGIk58A+5gdX3@(GIb5`ruJL=T*qw z#!RK3HZnI6>e~9`Wv+f%``3d{(Lk3vCGGK`KEcT9PUH4{@`dl~6N7VJvoYd&so@qC z!+MXVoEJ}1b1_o^I+OSEL=)r^EYJkKdgdQWt#7(S`@BfJ_nkpzWjHm-tUQ=`>WT99 z^7I6s9VPu<-QugJIWD6Bk8ZY8F~^Y4oe@R~-Nz1fVGYLkhN zN$cO`8+Ok2F&g`r{g#0=ol~zsEX1Z>K;y08`?4g~f&E5qn8ASb{7ML#0T}8(S4{D* z;HinUo&A4n>QeGvRG>R0EZ{Wgdq{V%$tTRB3m~y@aD9MdY-YPJNH>hLpZSoIT98#o z13mXPh+k2NXL1ZBB}{qDy%5Bth3fGAX&mz^NgKGL_U-SL!ZRhz^o7`Mrti1O^ZOaZ zO{IlbdQkh`$H(9~{LSBZ>{q8#o`40qc8{!&Cd&bp3hF@4!b12B6~Aw)tD;HjD-9rm zx1BV$4-rbswTMSdaRa(yV=_xVh@2e^=D~3WBj~Oi;cQDqNxzQ`|M?{Z2&P5@D0h0H zP}35|q$kNsu*4=HhB&J*L7|j*ho*%*cq#a0{#ZVk0YtD{2wcbQKo!5w)DfCI?O?SIWuWPz!Ac{4lE#aXsC~wz_Jq9K%~`@{049d;bbe9NW4>GY zBmy5c0XBflVF4&)FkwKlDdx4qvD^5M_o0RkK+N)S@Zy0*dEG%Ow=D(G6+Lg|GJ&A; z1jABY(w8H_y{n;jynuo}YO`~zeu4v2$(N*@_iSR!4+37FKaN!sZ$PxVe*zb@H0 zI)6Mj0?YKBaf{@>=8wgFZa66Vi0s!6gGJx&W7qJOqp37X;e?~gEO_7j;Pec^8&m2> zf9T{)4wyluD{mFFe!OVDR0c)(zcpraY|X9*b)TWmNRSWAiF}BB@Xlpd+^_EN!+*Wh zA>;&qKKb;l$0~BD?Tro(D6c0CQDa7#8tWiGI^8c{9hsgiZrt0V>w^!`-R4NyES|pP zLpJ5)%kjoa$Ylb);b6D2tTqp8AzE$p10hW~D6X}l5hVAVzIRKAwXM3!PX|Tu?0N3o zc%AEep3o-!biME+=I+$uGUE**9T6v^!Dx^iKZy7Mi4KN*rfs~kJUg131%ubt2tKGK z&pDO$vtmT?W&1YOd%@a6_W zmd*_?xAnQxUF`^KLyl^!QVJtJOaUw_^7Vw2;gzMK2Tbo3l)`wd6+RL--;pC4RUIsn zS*iHaWb}&*Ur&p@L#t@y4JgY7EQLuAYQ;OpMZN$g`KaKOT|Lw$hns1G{}>7Sd+X4~ zyN7wP@*;kfKKSzI8d2o?{l953-+aM}!TK>uWIqPuzl%k=3_ZNdffu&w6y&e;IMx4- zBSFW{B?^dGdM0oBQJ7v5r?y%F0nlj$z1&ci7V7#aTfvjm`wH4C0b z-R)M=Y&;DN9P{=8rydBgV*tQ_EKUv>?E(KcI1S&u8MFNbatV(VWnFmO(s47W0CMsJ z+!2HHj$w?`DN1{)!Tekf)zBVsEO94q{e7AVu0-vmTO6%%L8>Xr{FvHlX_>;ZoV|iL z$6wlw9rCLEOzlR_paHm+L0ZV!X$$6Q#3+eJ(?E4YffWh5#ji4C_R{q{m(oX zk`E~i2ncg?oUbv&ru+XrK}j6hA{^{wAQfC*Dj0Y;oIO;#l{nF%P{+H7UZLnE-*-B4 zbqK&|yvMQA+ylv%BPfe3<%Q(wc04q>Pu{Fc^vCR|$N4UXIUlybHbv1>rWIf6S`tsX zqugBmJRq7VEg$>dNnxU-PvMj-biGWH1WQ3=umZ?V?11U9{wF)gtGgX$qrO@86hV%m z-cVE)d8`z#7i9;!Hqepa8NOP_5>9{e<-3jjJI6TUWSn<&5F~R`T=yz%6Wl{yaR(C- z7aqcg4r$pR7^b{-_A5MmOTwbM(D;Dge}8d)WBQEl8o?Oz)A2NQ9l`;pf>b zFCL(>R#5s~u-kr+&r2vX+N1v=y>*}!!ULrP_Cf*mjRpRLr`KOPV|6pIz5v0o0|MbK zgxJgHb9b29O5{Hly{`={!y5Ud{ql*Z*8%))VxTHY8JI54AzamXPw7$Aa@;X(Ie|`+ zv1&p^iJ_$}v3BYmr6jBOuo9(SdE~b#u7`QT5}zp`lxo8-g&v2~&V3Gc>p!eO1q9Mi zS%*1fEbD3(M*p3(pF*i;=0dcj95bu>9CvDJ)p_r*^JwD#Jd}v*L5aQ@e%aqb&ztB7-b< z<;jfJgKSz=|}w^Q7=~vqTU6fHy@&`%ODG6Pn9_*P(fcV3Mjy`e1JMjo-07 zczE#I#R4;hDfEx&Y7@j=PIQX)V8&}!DvnNaReo>!m&$p0^sE?IfYsW`TlDauWtVBm z@6VTS+Gb{Z`jxP2p4Rr1ubq61R{0of_taLmMXxHt6WC#T8a3S6bNS`Rx?v$7O%Lp2 zJX;=NECA!J`@#gdE$&utr`j3({3z{g#U9=^%(jwI+jH7{@d7Ga_!m+V=Q(4!ie(;5 z|8X1G^YoR?u2bs6>GA}LHc|RgnoX=5Gcb32{%J;|1G?|(q~C{3mch(KaSUrEvc^oL zFT;Sju~;Bx#+S{5{?W>ktEI+o$MMqbdlX9$fJ6)1@t#I$G#MmHjO~PBV_fq`exmN+ z5q{~5x4X(V2AVua>;PPF#QqF_^3y>fTg638sg9*{gT5;DfL?A)Pu&kJZPD4lmX~9Y z9gr+AWf4h%*nx2Sxn4s8AKbs(EE#lG-?xUqB?S%=%(L81=To1AabmypB>Th2n3b{U zw{qH(ApL*_05IBw&tf|Xi3NA=ZzsskK2Um8g3H_ONCqzP-L2z)G+_q|qX2pqb+X3C z3CAnazbD@uI zZ)kg@;?DdBs)!SX9{q29GgDg7`s| zzZ^g3l%ZtLCJt%wv3`N0s6BnO!>nJRrxwz6$M9SFK~f+%g^vn91i6A>5W~Ap(3JlJ zv6UQ@ELhEFpVoPjO2j$T1-Wp&MqCVf77B@egZX9@@T0im;`iH{foVUU^FEqXl4nH9 z3f)0Dt{*FCqE$xK)vVG?HRfHo@ZDB3b5yPP2(@`Ikz*YsDeqF4?5tYGs9mi$iM5lf z)4K$tL@2=N<4JZuqvb~d%p^Pg2!8@fKJI$!d&ftj6(BJEGx>{rfny})k@U)j96vjf zYaSH>oI3`Z2mq53p|3O#*e>A1D7J^s`c=;J4^o2tdeRPt}W7!Qn8``^|F6`0y zJ?5rBo)=cLxH`~Lfqo8S%Wu?D!>SzC_I~?vyBIYZ$KabcvyK`Z9A%55F6fMe85uS z&h2SK!oxrW^5lb5UYg2QXko|_O=IMM&{Rkg0ddOf<1hWs@!J9j=kZ!dYu*k)OB|Yk zU0}t&4W?k24jucscDl)Gl)&p}E6KOhE{q~XD)st1FsNT*OHae^X``z652dFeI*cs- zQ#LKX?HymCEAnGkWa2ddK{fr6_hh%T70>OSj+6WY#!Ka5kDLHl384GM&9~u4R_>kv zeTI%a0vM;#XM8N^|!1MUcZi<7ruNx4yw>5kF7KF zYu!+L`;MUJ^{#SY!A}oHO?&M+{{LX<=S6Gt#JlJ!|)nDUIQ~ zX}!vzGrsxa?Gu@~w5`t*uARze4Ef76WY43RUhf^rs>`yCs{A8~ay(T08~EkBMROP3 zU0-ufbZ%_D`wmu0iE6qdxcSq&;QOV0%$W%wL)Q;E4mpOR43Mfq|QPt7oemOkmOmmY%_!%|8-|A|B{1Xz^rJ`b#oBRVHXb{d>r6B!(D zLR4wa-~idc`Z~C9kJ&pI}MxmCQhWh*~BpJN6yqt}(=NDP@{XyiJ{5ks< zy#BWu)5E08P6-Fh3cQ!ICo1~Zt1oG>N@BYdMAG2(Lqvt_iuXG%(f~6YDOxh-Vg&Z;1YvXaAz+QryfN7mSDfa�W)Jy*U?Aw@(VEar>;n(4}yHTg(~ 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

MYt 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%0AMBE9B;*aG!$BUO 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⪚ARu>vr}xYxCl9k7Ya}{V55lqc<=%j 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

p|nugfrszEDom5IawYKajX3;{ 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 literal 0 HcmV?d00001 diff --git a/Assets/03.Images/Sail/Island01.png.meta b/Assets/03.Images/Sail/Island01.png.meta new file mode 100644 index 000000000..43411a47f --- /dev/null +++ b/Assets/03.Images/Sail/Island01.png.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: dd92cbf097a58ac47aacb73549069f60 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/09.Shaders/Curved_Shader/BendingSprite.shadergraph b/Assets/09.Shaders/Curved_Shader/BendingSprite.shadergraph new file mode 100644 index 000000000..b3f4831d5 --- /dev/null +++ b/Assets/09.Shaders/Curved_Shader/BendingSprite.shadergraph @@ -0,0 +1,1047 @@ +{ + "m_SGVersion": 3, + "m_Type": "UnityEditor.ShaderGraph.GraphData", + "m_ObjectId": "a776a26a9f154fd49ba7d840d51405a5", + "m_Properties": [ + { + "m_Id": "7a75582612d6430797ef6d4b543f55ad" + } + ], + "m_Keywords": [], + "m_Dropdowns": [], + "m_CategoryData": [ + { + "m_Id": "fff02ec22c3145418d39fd11b3d99229" + } + ], + "m_Nodes": [ + { + "m_Id": "6a87873f1dc647ed8295fbd809026cd6" + }, + { + "m_Id": "25b14e762eda463e851c240ffbc3a7e5" + }, + { + "m_Id": "2d2db3aafaa04431af643d29a0bdbf76" + }, + { + "m_Id": "577dd9e6582e44cd90ba1b4e1d251c87" + }, + { + "m_Id": "0b46133f1acf433095861743124cfa96" + }, + { + "m_Id": "5f9bf79f8a764a06976354412f9cc11e" + }, + { + "m_Id": "b55604369e794002828dca5fcf7620ed" + }, + { + "m_Id": "c4e60756c107450fa8d1c0ca35410138" + }, + { + "m_Id": "0f46e8408853482e8e562136fb167d91" + }, + { + "m_Id": "d7fcdedf16514196af69281fe49a8bb9" + }, + { + "m_Id": "d7ab27d284a042acad6ef04474140d87" + }, + { + "m_Id": "21648b78eaad4e5cbdcc96958d50a2e1" + } + ], + "m_GroupDatas": [], + "m_StickyNoteDatas": [], + "m_Edges": [ + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "25b14e762eda463e851c240ffbc3a7e5" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "2d2db3aafaa04431af643d29a0bdbf76" + }, + "m_SlotId": 1 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2d2db3aafaa04431af643d29a0bdbf76" + }, + "m_SlotId": 0 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "6a87873f1dc647ed8295fbd809026cd6" + }, + "m_SlotId": 0 + } + }, + { + "m_OutputSlot": { + "m_Node": { + "m_Id": "2d2db3aafaa04431af643d29a0bdbf76" + }, + "m_SlotId": 7 + }, + "m_InputSlot": { + "m_Node": { + "m_Id": "577dd9e6582e44cd90ba1b4e1d251c87" + }, + "m_SlotId": 0 + } + } + ], + "m_VertexContext": { + "m_Position": { + "x": 0.0, + "y": 0.0 + }, + "m_Blocks": [ + { + "m_Id": "5f9bf79f8a764a06976354412f9cc11e" + }, + { + "m_Id": "b55604369e794002828dca5fcf7620ed" + }, + { + "m_Id": "c4e60756c107450fa8d1c0ca35410138" + } + ] + }, + "m_FragmentContext": { + "m_Position": { + "x": 0.0, + "y": 200.0 + }, + "m_Blocks": [ + { + "m_Id": "6a87873f1dc647ed8295fbd809026cd6" + }, + { + "m_Id": "577dd9e6582e44cd90ba1b4e1d251c87" + }, + { + "m_Id": "0b46133f1acf433095861743124cfa96" + }, + { + "m_Id": "0f46e8408853482e8e562136fb167d91" + }, + { + "m_Id": "d7fcdedf16514196af69281fe49a8bb9" + }, + { + "m_Id": "d7ab27d284a042acad6ef04474140d87" + }, + { + "m_Id": "21648b78eaad4e5cbdcc96958d50a2e1" + } + ] + }, + "m_PreviewData": { + "serializedMesh": { + "m_SerializedMesh": "{\"mesh\":{\"instanceID\":0}}", + "m_Guid": "" + }, + "preventRotation": false + }, + "m_Path": "Shader Graphs", + "m_GraphPrecision": 0, + "m_PreviewMode": 2, + "m_OutputNode": { + "m_Id": "" + }, + "m_SubDatas": [], + "m_ActiveTargets": [ + { + "m_Id": "52c8cddd9d604015851b10ac74d91527" + } + ] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "0b0e235733924c209f9555d6d28ef565", + "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.BlockNode", + "m_ObjectId": "0b46133f1acf433095861743124cfa96", + "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": "63f7d330a8074d7f8e00957533d0aedf" + } + ], + "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.BlockNode", + "m_ObjectId": "0f46e8408853482e8e562136fb167d91", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Smoothness", + "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": "fd769edad28f40e09274441f289f7ad9" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Smoothness" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector4MaterialSlot", + "m_ObjectId": "1ba7aa365a6c48bd94aa8aef5df53b02", + "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": "209c610375df441396c21036cbede44e", + "m_Id": 0, + "m_DisplayName": "Metallic", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Metallic", + "m_StageCapability": 2, + "m_Value": 0.0, + "m_DefaultValue": 0.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "21648b78eaad4e5cbdcc96958d50a2e1", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Metallic", + "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": "209c610375df441396c21036cbede44e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Metallic" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.PropertyNode", + "m_ObjectId": "25b14e762eda463e851c240ffbc3a7e5", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Property", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -541.0, + "y": 77.00001525878906, + "width": 152.0, + "height": 34.00000762939453 + } + }, + "m_Slots": [ + { + "m_Id": "51e55fae5aed41fb8f9d3d23eddd5638" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_Property": { + "m_Id": "7a75582612d6430797ef6d4b543f55ad" + } +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.SampleTexture2DNode", + "m_ObjectId": "2d2db3aafaa04431af643d29a0bdbf76", + "m_Group": { + "m_Id": "" + }, + "m_Name": "Sample Texture 2D", + "m_DrawState": { + "m_Expanded": true, + "m_Position": { + "serializedVersion": "2", + "x": -359.0, + "y": 58.99999237060547, + "width": 208.0, + "height": 435.0 + } + }, + "m_Slots": [ + { + "m_Id": "1ba7aa365a6c48bd94aa8aef5df53b02" + }, + { + "m_Id": "d9e416a04c6443199b9cefbdd732f11b" + }, + { + "m_Id": "52bfbbb85e7e4269b27bb834cf303148" + }, + { + "m_Id": "0b0e235733924c209f9555d6d28ef565" + }, + { + "m_Id": "a48a34d47c60491aa4fb717466f4025e" + }, + { + "m_Id": "ef9df2277a0a47d4a0e0ba0d1a8ac740" + }, + { + "m_Id": "f3070885cda54022a4cb7c5c2bbc6462" + }, + { + "m_Id": "a898282b84bb405f88a7170a79efe80a" + } + ], + "synonyms": [ + "tex2d" + ], + "m_Precision": 0, + "m_PreviewExpanded": true, + "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.NormalMaterialSlot", + "m_ObjectId": "3bab3b2210774b268175e5baf043ec1b", + "m_Id": 0, + "m_DisplayName": "Normal (Tangent Space)", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "NormalTS", + "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_Space": 3 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Texture2DMaterialSlot", + "m_ObjectId": "51e55fae5aed41fb8f9d3d23eddd5638", + "m_Id": 0, + "m_DisplayName": "Main Texture", + "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": "52bfbbb85e7e4269b27bb834cf303148", + "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": 1, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalTarget", + "m_ObjectId": "52c8cddd9d604015851b10ac74d91527", + "m_Datas": [], + "m_ActiveSubTarget": { + "m_Id": "5e0deb431d3b4b3d932b09d3b68cb650" + }, + "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": "577dd9e6582e44cd90ba1b4e1d251c87", + "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": "cc562a335aa943ac989aa69952922f2e" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Alpha" +} + +{ + "m_SGVersion": 2, + "m_Type": "UnityEditor.Rendering.Universal.ShaderGraph.UniversalLitSubTarget", + "m_ObjectId": "5e0deb431d3b4b3d932b09d3b68cb650", + "m_WorkflowMode": 1, + "m_NormalDropOffSpace": 0, + "m_ClearCoat": false, + "m_BlendModePreserveSpecular": true +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "5f9bf79f8a764a06976354412f9cc11e", + "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": "c87335ba6f21476281084bea4c0ea94d" + } + ], + "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.ColorRGBMaterialSlot", + "m_ObjectId": "63f7d330a8074d7f8e00957533d0aedf", + "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.BlockNode", + "m_ObjectId": "6a87873f1dc647ed8295fbd809026cd6", + "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": "cfe7d19f9a5048bc8a68ccf7df1a6909" + } + ], + "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.Internal.Texture2DShaderProperty", + "m_ObjectId": "7a75582612d6430797ef6d4b543f55ad", + "m_Guid": { + "m_GuidSerialized": "98c5d93f-5b0b-4490-8f64-b2a942031241" + }, + "m_Name": "Main Texture", + "m_DefaultRefNameVersion": 1, + "m_RefNameGeneratedByDisplayName": "Main Texture", + "m_DefaultReferenceName": "_Main_Texture", + "m_OverrideReferenceName": "_MainTex", + "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\":2800000,\"guid\":\"dd92cbf097a58ac47aacb73549069f60\",\"type\":3}}", + "m_Guid": "" + }, + "isMainTexture": false, + "useTilingAndOffset": false, + "m_Modifiable": true, + "m_DefaultType": 0 +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "86e70b3233354a4aac182d7c22aa8f52", + "m_Id": 0, + "m_DisplayName": "Ambient Occlusion", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Occlusion", + "m_StageCapability": 2, + "m_Value": 1.0, + "m_DefaultValue": 1.0, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.TangentMaterialSlot", + "m_ObjectId": "89777ca194ac4c838edb1b7737ecc5f3", + "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.NormalMaterialSlot", + "m_ObjectId": "90cd1091a5d14213b1b7d2a7524cb201", + "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": "a48a34d47c60491aa4fb717466f4025e", + "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": "a898282b84bb405f88a7170a79efe80a", + "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.BlockNode", + "m_ObjectId": "b55604369e794002828dca5fcf7620ed", + "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": "90cd1091a5d14213b1b7d2a7524cb201" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "VertexDescription.Normal" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "c4e60756c107450fa8d1c0ca35410138", + "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": "89777ca194ac4c838edb1b7737ecc5f3" + } + ], + "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.PositionMaterialSlot", + "m_ObjectId": "c87335ba6f21476281084bea4c0ea94d", + "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": "cc562a335aa943ac989aa69952922f2e", + "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.ColorRGBMaterialSlot", + "m_ObjectId": "cfe7d19f9a5048bc8a68ccf7df1a6909", + "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.BlockNode", + "m_ObjectId": "d7ab27d284a042acad6ef04474140d87", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.Occlusion", + "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": "86e70b3233354a4aac182d7c22aa8f52" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.Occlusion" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.BlockNode", + "m_ObjectId": "d7fcdedf16514196af69281fe49a8bb9", + "m_Group": { + "m_Id": "" + }, + "m_Name": "SurfaceDescription.NormalTS", + "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": "3bab3b2210774b268175e5baf043ec1b" + } + ], + "synonyms": [], + "m_Precision": 0, + "m_PreviewExpanded": true, + "m_DismissedVersion": 0, + "m_PreviewMode": 0, + "m_CustomColors": { + "m_SerializableColors": [] + }, + "m_SerializedDescriptor": "SurfaceDescription.NormalTS" +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.Vector1MaterialSlot", + "m_ObjectId": "d9e416a04c6443199b9cefbdd732f11b", + "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.Texture2DInputMaterialSlot", + "m_ObjectId": "ef9df2277a0a47d4a0e0ba0d1a8ac740", + "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.UVMaterialSlot", + "m_ObjectId": "f3070885cda54022a4cb7c5c2bbc6462", + "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": "fd769edad28f40e09274441f289f7ad9", + "m_Id": 0, + "m_DisplayName": "Smoothness", + "m_SlotType": 0, + "m_Hidden": false, + "m_ShaderOutputName": "Smoothness", + "m_StageCapability": 2, + "m_Value": 0.5, + "m_DefaultValue": 0.5, + "m_Labels": [] +} + +{ + "m_SGVersion": 0, + "m_Type": "UnityEditor.ShaderGraph.CategoryData", + "m_ObjectId": "fff02ec22c3145418d39fd11b3d99229", + "m_Name": "", + "m_ChildObjectList": [ + { + "m_Id": "7a75582612d6430797ef6d4b543f55ad" + } + ] +} + diff --git a/Assets/09.Shaders/Curved_Shader/BendingSprite.shadergraph.meta b/Assets/09.Shaders/Curved_Shader/BendingSprite.shadergraph.meta new file mode 100644 index 000000000..c4b6fe0b1 --- /dev/null +++ b/Assets/09.Shaders/Curved_Shader/BendingSprite.shadergraph.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3ee1cbcb268820347992c27afcdc1951 +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 625f186215c104763be7675aa2d941aa, type: 3} diff --git a/Assets/09.Shaders/Curved_Shader/BendingSpriteLit.mat b/Assets/09.Shaders/Curved_Shader/BendingSpriteLit.mat new file mode 100644 index 000000000..6b542cdcd --- /dev/null +++ b/Assets/09.Shaders/Curved_Shader/BendingSpriteLit.mat @@ -0,0 +1,75 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-6535337352375107451 +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: BendingSpriteLit + m_Shader: {fileID: -6465566751694194690, guid: 3ee1cbcb268820347992c27afcdc1951, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 2 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _MainTex: + m_Texture: {fileID: 2800000, guid: dd92cbf097a58ac47aacb73549069f60, type: 3} + 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: + - _ColorMask: 15 + - _DecalMeshBiasType: 0 + - _DecalMeshDepthBias: 0 + - _DecalMeshViewBias: 0 + - _DrawOrder: 0 + - _QueueControl: 0 + - _QueueOffset: 0 + - _Stencil: 0 + - _StencilComp: 8 + - _StencilOp: 0 + - _StencilReadMask: 255 + - _StencilWriteMask: 255 + - _UIMaskSoftnessX: 1 + - _UIMaskSoftnessY: 1 + m_Colors: + - _ClipRect: {r: 0, g: 0, b: 0, a: 0} + m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/09.Shaders/Curved_Shader/BendingSpriteLit.mat.meta b/Assets/09.Shaders/Curved_Shader/BendingSpriteLit.mat.meta new file mode 100644 index 000000000..ab2c43e92 --- /dev/null +++ b/Assets/09.Shaders/Curved_Shader/BendingSpriteLit.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 010ab7922b2350d419f372e06dcfe22f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/09.Shaders/Curved_Shader/Master 1.mat b/Assets/09.Shaders/Curved_Shader/CurvedWorldLit.mat similarity index 84% rename from Assets/09.Shaders/Curved_Shader/Master 1.mat rename to Assets/09.Shaders/Curved_Shader/CurvedWorldLit.mat index 73feb3b50..784a83386 100644 --- a/Assets/09.Shaders/Curved_Shader/Master 1.mat +++ b/Assets/09.Shaders/Curved_Shader/CurvedWorldLit.mat @@ -7,27 +7,25 @@ Material: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_Name: Master 1 - m_Shader: {fileID: -6465566751694194690, guid: 940d79357fd7a4f01a49e7247aeaa4da, type: 3} + m_Name: CurvedWorldLit + m_Shader: {fileID: 4800000, guid: 37639dc9dfcb02e418de063aa605d992, type: 3} m_Parent: {fileID: 0} m_ModifiedSerializedProperties: 0 - m_ValidKeywords: [] - m_InvalidKeywords: [] + m_ValidKeywords: + - CURVEDWORLD_BEND_TYPE_CLASSICRUNNER_X_POSITIVE + m_InvalidKeywords: + - CURVEDWORLD_BEND_ID_1 m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 - stringTagMap: {} - disabledShaderPasses: - - MOTIONVECTORS + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] m_LockedProperties: m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - Texture2D_72426835: - m_Texture: {fileID: 2800000, guid: 964c2e73185575e4ab8f889c31f021dc, type: 3} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - _BaseMap: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} @@ -87,7 +85,6 @@ Material: m_Ints: [] m_Floats: - _AddPrecomputedVelocity: 0 - - _Alpha: 3.45 - _AlphaClip: 0 - _AlphaToMask: 0 - _Blend: 0 @@ -108,7 +105,6 @@ Material: - _Metallic: 0 - _OcclusionStrength: 1 - _Parallax: 0.005 - - _QueueControl: 0 - _QueueOffset: 0 - _ReceiveShadows: 1 - _Smoothness: 0.5 @@ -120,14 +116,14 @@ Material: - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - Vector2_6A93A1CF: {r: 1, g: 1, b: 0, a: 0} - - _BaseColor: {r: 1, g: 1, b: 1, a: 1} - - _Color: {r: 1, g: 1, b: 1, a: 1} + - _BaseColor: {r: 0.2806604, g: 0.3253052, b: 0.5, a: 1} + - _Color: {r: 0.28066033, g: 0.32530516, b: 0.5, a: 1} + - _CurvedWorldBendSettings: {r: 0, g: 1, b: 0, a: 0} - _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 ---- !u!114 &9048502931546906176 +--- !u!114 &488034238651743754 MonoBehaviour: m_ObjectHideFlags: 11 m_CorrespondingSourceObject: {fileID: 0} diff --git a/Assets/09.Shaders/Curved_Shader/CurvedWorldLit.mat.meta b/Assets/09.Shaders/Curved_Shader/CurvedWorldLit.mat.meta new file mode 100644 index 000000000..8a747f1d7 --- /dev/null +++ b/Assets/09.Shaders/Curved_Shader/CurvedWorldLit.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 17952d8922ff1fe4288af1505a784a9f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1).meta b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1).meta new file mode 100644 index 000000000..84744e5d1 --- /dev/null +++ b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1).meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b05c557c8a20d1d4e90b80768a98e20d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/LightingData.asset b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/LightingData.asset new file mode 100644 index 0000000000000000000000000000000000000000..e068217b359949ef5d5e65b3483e6813d1cebe1b GIT binary patch literal 17729 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 Z{OUM@i+%{c%7 literal 0 HcmV?d00001 diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/LightingData.asset.meta b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/LightingData.asset.meta new file mode 100644 index 000000000..060267832 --- /dev/null +++ b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/LightingData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6681b96718da109478138b4e562a90eb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 112000000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/ReflectionProbe-0.exr b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/ReflectionProbe-0.exr new file mode 100644 index 0000000000000000000000000000000000000000..ef5901f1d34a2440f5683882193a0ab74b95bb43 GIT binary patch literal 163040 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%0D@c2`*}|Q&dqx4dS^R*>_72gOu1N_@ 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

{W=r)#7x zn&x0NL%eO`(r5Pm-*?2WOfxfZETnlvQD@9@dAXJ(D_10Y320aS@PQyCgy07yD6 zokeIn-tpns%RF=uTk4_Zk=C;;LHB0bMkgDjzz^nQa@uztFrWq|e>0(Br(N>OC7XA4 zde@f?Oz{YyaSl*95CZLrw|iO&^DH*IB(Gd594Ms5dr{>oTH>hXO68wtLm@R8LYp zxGhZXI(br^s$g=LiF%7F^SBjbxZqKFzB55R8Ble<KMKnI9h?AIDGdAnA6-ZM~^1G}M3be$Et~{gz#~Ch>TS~S>#5vJfW)#H%;wvsDV57ND^+7%w8p> zd-sR(2*9r8I;eJnpORNv0cN?uefHex{6Z_*am&-Ib-QyXcNtPM@`H%#61xJc%{#ju zqyyO8uPgvam5)u9sHXtB#aA}Ft93ucd+K0cC^g-yzO3uPc8_|wd@Np`(Enmx|Etvn zBP-&p>2;=}y1_>Oj9WCZ;GUR=69$h6)vDGz8q2VPQ{2JUE4tTM{DZL6(9!$|i{uA_ zagts9kru%VuYk*#cK?hR${7PtO-B~D&~89$!&CZ}5T-0)>CZRBYz!$1X^x9dG&Oh0d=Gufmh4}{*|ed1 zE>o7Zp=WoL?EDc57-ye9N^xnFnTHP_%JRe*O|pNb*l;vLP${^VOp8=iCOdbK=zTHjL@&q5 z(Z^ss?$l+&(;=rrB5BET0FEq% za^4mHgcQX~QV|JB#p*swVWlOoAy2E#p~=8#fNYudbaAkAP*9{u7(6&Qc=?`q*)sa& zkrt5Zo#~AZ4i*;^i%)|afmsS0t$?xIw%Y7oHI!IF8;UD-ueuKCr3H*^D{%*wbmg&7 zeo<3VQBj!~9T^$vHrO0>!CchVvJsGO7VD@1a`B$J8&i`#>V@jTVl}Wm%VOFsd(f55 z<45HCGZN9+@1N^hw0I7fXKEnoBc*I|6*CL$_ z5aHA?2<&iZNV|XZWaOzBu%?$Xv+t*wZ{|;){kZ@4vtNF{JD%1#{;JVpv%wZ{elXx# z*yM3#Bu!`HgT=fjq=tr*&h){ywzkuIqNAguF1EC2Dn)JO8j(m?1n$?dytC8ON~qRV zwF$6%`Utb$Ag&nv20*F*A2t*rbj%F#XN~g@zPX^_30g_{4(KQ zW%hjN{TNQHfvZUtv!OJ-VAW{eY9!$co zJ&F&M9K*>G-Jg7I&8Sg~L%GEnes0JykPVOOry{dbR=3|dbTTGoQ{kV$b$(d6@AIX! z;m(;0Y3B{ccY*4Btlxp6Hu9S_Vo^E0Li$#8f*w($0sV%pmD`@)sT3QHic{8af{Hue zm6(mkei}|XyJp&}+ceE=ZvaQT1%yU!6tYcdO8ILVHIZataKEM@VwBz-WE#vSMKljq zI%=9U-8bpCqdOYKoYkjvq>4H}7 zbC&}(@3R0>9xSGvuLxSTYE?iOn29fLsCRaDUPd2ujutO7PfUz|9x1M@NQ`J{SV*eF zhZClzrk)VYH)D#gR1L)ikm3UD2y#Hl0O*X%7WZY&P9V{)UAxvC6coe*TIURO7Z3w9 zb&07F34t*JGEYdgAe~%hQG6u==)aB-(GB%R z@Av%npAY;QGhZBF2dqP9-4;Og(?KdvFRlUH0OwFqAp&-`8#su@#OUY%QKV=g34^Y+ z>28!4oz7>1)+ot!)5{i{Yq4CF|D`Q-yzvCLR~55CRZ+vDbc8Zt1l8>Ru?2wW8{_nDMIW1 z+MuZN$uRl-(@Rd9L{fKCcYD7`JGo@H*Z9)i)U<-H_bX54j;jj)8XxgHm1hR$+qVkqM}2JaMUPCPHAarGYtA9k)5}jvU|QkauKvr zQ9WCtWM^DBF;TMi)8#|w%AWnp;mJTqO_Xd`AYV_kdQHrR>R2+8Jdzf3$c_3HA(CxJb!Z9N z=|t#=Um5S%!hOMgv2$!Z((6T9r}vA1;rPh0YLd{PM&%e&a6}~*6X@#6ku-6@0uqxB z{UJhP2jLX=JK|1<_>ck{`{e%Z{b5lBV+ALdrj>MT-VV^Hk9Qoa>~zfF-Z;H`IlYmz zpcNIhwLol6PR>p`$pQrqb_V9Km_!<31<;~$kboM2l)P@8&X)!UuM-zt9*K7=*MtEJ z0EwBZQ}o)}ddEh~0AWRJdH2iR`(P^e0%(5jzMBUJ2)LUEiJcZpbG&wKq4tVjTzo3y>UvCNDUIM$5?M;6#Y!^oGU%gYR|eiRG#Qo&D%q z@CB<{uq)t2fGwyhM1^4$A{}G^v_*)522W=MP|i1kQP4e6M{xdNWpY&=_)sXOKd(El z8I99Cdvs#<_B*S&wEUS1siN`7B9g~ORo|AP$U@2)_I($THmN-dWRFm%HphUmb?_*C ziRhF_RVhwxeJD=Jul>!+?V`uav2EH#0>jC}ac6iZdHFX;Y3Lg@xU^k>8?Xq-k-_i7dmabM2oqhPb-AwhL`DR2oqzwW&W>6`DOIhZ z+nRy4qW;l)-SFswo9z*oC_k6$2OAHDEHo~s(|cYegvcGPf;Q%mi_HXri|I5!0f1W@4_4eN{?A`wGm+`dm-DCf|VvFchk~CtC`djhr z-4ppg^sOID8SY%tIdeKBEyhJKyt~M-#x;hPKcJj3TheajYUUgPhL%g{kxc-d$Yve7 z|IhsYcU+JF7Y_meRW+Q{w%`jzqR`rkiUorJzHBgPF!)-tv*qoE=-VgOeZQKw?t422 z$3gIQ5ODsw)a>l+^^Zv`8b)xC&RP;0?g16|S_jk&v;(5x^zT<^JX;`<@oea@<6v-5 zTj9Ee1ndWBoYy}p0>VDD$`dzBYyE75Z**NVoizkb5%m#dk(vLRy=(TNz$Ht0*yRIB zjLzlA-mb|7T{3JDPo=inyJjy4FG*@o8vm^8i-G6e{&x5N{LkQ7>f`Ug{Nngeo#Sa= z7P$;MyinUk{Y(cVb1`5tAmf?Y0+(gsC-~Qb+BBkdqD3ax>8!l%p9=oxkFMHbhZhs5 zV|hzWxoE`+{uv!mIx@`AW6sY1%iQgC#nua2~A9~(b?b~AtMb|mvY$Sgd4bPIM6oY&dl z5I=cqGo5@=D5{Phq2UBd7q;DG-SlkB9^z#0>&N|0r3!rDfZj;9Ou8m^PbuD9G=&15 z{yJD7#2*O)GkaHXOc3E#Z3DvIyie=z-q4eQvvj#`vnd*m`TX7Q`|kcS{|)f}fBki8 ze&)BkDSvJJ@y^Ws-}nCy>w_cPl0gd)Q{uMb%Bq+_`e1tPPs`elIS+olEH!TI*DK%a z8ZM8L;`+^DLd)IE(PAHqnBtSdO7$S9yp;~FJM|&OuMS1F6}Hu$ST^{&b`h}Rj?KFl zTD{~eWs%Hrko864J)mBeKoG$?%}mfau8P9i6YI9FI1v`E6IDQZ?ZB@(iM2dyd9rF< z?Lb?o&XEHpUNi`1XhlVFaq*(yYRVVnT_##lF}nI+o(qz`e$7@0SW=l&ek`>7m#o>fz`7L)Fz*DM3K(*Oq(B~oQV;$FnDK++bB^bP$ z=$@ao7sNX`X?1b8szO&YDOhs*flW#pu21{%?tJH^{daX99-RFEhVVa~ef#Ik-T80r z?Chx5f`XcL)eO>cSRQ1$YTfs%Y8G_y$!cJJ{{pZ7RY(59T_O?CVW8ST+jYs=Y(cmG zgHt(g9YAQyLd^iR|61^!^zS`u2L{>}tVfi(hzx+p$yt-!7#0LBoM15R17^3xaSv1O zbhJ=DJo~2Cc5mRf2h-ZYv=Pl-=Z5dol-jse%7PiBFp0XCjjwGEucTK7*E9<%n!`nv zF*jO#PNi(>kgffkO*xzP@vPB!(oE-Yn(WAZLy|BFOpf7ewcK}7TD#?pnNhlmS!bYB zsJBFL-NcbNRb!Y~_%#?YSg@8faos2WRf@5@5-1}+O6bb>H59p&Gd37r>^?d6-cqma+}lTn7p7-sXF7{u7J0}cz?+TpNLB_;9t1xy zp@UqX#Heio1A*YMa8a^Mhf##)cGPzo|wbT%Kx} zhn7JPn8PEfQ7AQmm4FTFwrpvuRA{l7d))h_7Lpl>^qw5Gcw>-OD@k~dd=EjyY(L=y; zKn_47I5;2x44wC~1*KOjvixjH`FLGVM}N@@5R5%nuHdp_(-}zPGan*fdmwjHY%D_6>l@Vyd>h9Wm+|77i}! zYJb()!3vO@I?#L@w1&>NPpk{C_)jfcrgSC*2sltd-h|CKVI}ZX7UCjJGcWjX%TdP; z`;$)BUe`7bx`kKl39GmlnDFrM?x4=FdyXx~(o4+T#x2r{FIe)T`c#Y#%gB2ANMejG zZz#wK@}(S}`jd8U^|d=;=X?^q)=h!DVfR)765EBU%j4Wcjh(9yWbXBfZD^LZ)nDc} zusiU(@Z$JJ=4JJIGkim4q@RsxX<(7D1%t(@pR#+AE!)pxtpT5gCt=UhiLWM!ulpSu z2SS+O3IabE8-Z*0$jAoW{pcf<|2^HdEyM&73iXsQ(&(!Pk}-<-D=+Q z>-VcuR)uW^tbm5%%$6IA*Y8&WCl54}8CqOq-w^EpWWROc*Bi$cq^_g&D^QzN-+NVt zcx5~R4)6@%DD0R{vv1Tk=`I7;n4-`^K*a;>g8-Y<11qw8>xZY`*eGmt(@2Xh9>rdm zLy|h(1W~O(#ZCTb21DHExqe_Nv;4@0q#vkAqw^0h zz5DR-z};_ue7Jl5#{gdWf)VRjY(7&xv|z-blGQ__tCN9qzAtvUcl!jW4s z2e{Q;PcVV;@qm+O2LFc!s6!Y~=^HgoH$W9vRBJLobGAB-ekAqTV8)${dy7B;14+F% z2q!V_Q0<7~&}MOjx+F4fbF!u~YV@n9(X1=yUmd^r%}?fk6~B9RGOg2Nyz`3s z0hzr36Ie13fQ%-QV^$A25|?Ej|{ zr#r;K|5FLS%uDOdr(Yfa%`>g@%CX&JqvlBqwa7^F>c4@Ep{X1rz!1eVx}yX%hnvM4 zH;Yeg-k5oF)AHMc|Gu&}^R_NmS|@Y3bL?UJ*YRE@xcDuF9zrgVbw%;LmU}>1kF8n| zmQK=7|K*iNui4hL_&x%Jqf=;|&%Uwc*KlyFSL&!2@YSNw#r(S5o?+nIrwgjAqws&p zuk(UB8v_@eqHMX*2<|Ngg02DUepU9q^{?K6j`;N4`O-iwMb}wDkrS|qCVvbKomt`X zmZ?ozG4g(n^e)$LJ?OWCxa~Tgswo1DRL@MWPof)It>hg@zWe3=zdP=K{tTu>=Rc4C zIrDMvzTKef(hLmN+49VmTRNKs4bp%4OT8}!`{5VgE;714(i#mwYto1n-*aB%WS&BzZ919x_9 z{U^(>e{3jeTX*e({b>2_pnK*C-h2_1To4KelPAJwr?F z&)Ec}hlnB@-n#{yIqCELVjXw?+8J=qDdAyxisQKbi=sByX!C?)i7_skrm%3kf%|1s zM;$c{r-EK@DA^hb@L0^WtIg}05AffSLHAtCK-;wl3irO4p5h6*H8-|}Z&}ngFc1}c zMvR94R}Nt@$+shq907d_ov71XM!k+40o{jNH^2((mUd0Vy_P$bi_!@PtE1wuZKwXL z0v>m2{>iHIyJ3x>=h5DNCgOf{J55k$TY7a2oE|3_=jTyaZuv zm(I?7-aW2!xZiqJdZmDVY|UcDfU{g=4pi+w`sr~yvZj5su~F9?9P>&(76KRq9BN{s z&*;F25z|va#ZrLzrH<-4d;k;i|A6AzbjowvHqb>nQvnq7){XFp`!Ue~ojZDI++-3d zpw5BH&EIAqA`mU@J?yRQ1&aRRVE+oqANJH5(;!JHNk52QCadIE4VT+(0rM^C{Dx}f zDmhrLrzlje%xJmD;!~ashM}mSZ&mmm)=3-V_EY=~{FpYU(Pk=jj;VT;szYzA8Sev@ z%mw@siUYUMvLRR@S6rji;fJZRd}mU_D!$RSI#WtSm5D0H*+Il8%gA@OqHX2Kjg-Ie!2=d(I2d(mS>Mw2=kacKeRp+JS%c=_`z>8T%cb zYj~P%NtW{y6x4<*1?c{(`Z=p;-l0357E~B>a}YGiZE_+3dS%c>)or_N-LTdLZs%fC z#6f2J+oA@*1w(m+$%OmrdghH_Pwhc4*^)E3ug{>8!#^+gkv7{bAEtF=YkOB4xoc-zF|D9sSen>3thM}dvZ+IJO#Jqn?)&==fK&C- z)_xiPGX4u&dkgKA|7{#rH&lBy;iOvrXDeVkj* zIn5$W0+fi1@@4}OlbaaC482o5h^R=Ayun!bX1;oJSw`)Hy~?>wz3ot(Tak^|&aUKh zkljY-BpHglde|#PSAs9Y!r)*N2Q&L=AkLS?G`=c#$}NEDf&g-K*Qgp}qfp|URo5sd?gWOk>`V*5Z z4hy#eCSu{XO>8j8*~Ngk42Z`-L)|z_2_u1wS^>q~geChLuqEzIY?d$7n*a^OLfQ>z zQWUg{WpzSgqeU&S~ zx1f=2ex9eB_4;yMb$)_sFSz^i6qrTHS>1Nq3J`+MV=I+f z!B#aX5w=_aNhL>FDjF$3e<{)1qYPdyhlF^jc_Lg3S8?Fk%itP`{neZeEEH*$Q~|YC z!@?NQYF{Wz;z)y~_~Q0p%q<+ZN|Q64Ft98ZZc>__2|qODDE8IEnm7txy&(Vy9Y{4rsqo&6s}m*aa1*1CHGKjbJ=V=X@Ihf zMiRs2-70(JIsDevt*zUrDEnFGB-lC@aulLFLhJKl#R6m{v@8iOkYIx*qSgcU;L1$1 zaB{R3en(>V7}`MIpn$)SJL%<`tY!LS*lkv7s~#geDH~shxraed%aUZ6 zIsAmaU?q!|g9iLc{zkR_Xx=?@@R30z;)t!x9SOTbJ{XTTjLj!-8K~L(rG?#Q@vWdT zM@{vps>euFXn8`hNjYO(XipIP-K8@NzX8IV5GW+<$HA? zBm{p%Hxy-o^`~8js+L=mtv5H}XwNV&PJ@_3;!vjSYcs_m&`SbSlh=)pcz^fj{3ftP z;ioV2V96FdDC)1jE`59f^QG#x*=9~;dP8RkdQt|OuUK9HYq!V6$qff8TnZ$A974?w z7)>abvIlHpr&o~#mKq(!HJ7n)u z=&2Fv6~lU%wVcvz6Dz}Y@!(`Vg=1_Wq|i4ufrbv-I${{=R{}%wwSTcZ3z!P_GqN|n zphAh^p;(Bd9D>$x$9ux8AzPn_w@){bLq$DCP(^Nr@fbUg(Ft?H#j%#delwO$wyv)G zdplV&DTj5*pg-`J;TA4%u!RFV-Lk?o=YlD^S1HJgt;b5@E-UYtNtJXIpM{8|AYvo1 zUHRAn8G4R|%3O=qwwRIshP^h5^?{y3B{B%vN|xlo(&3)yF*Gs>KIerLc_9P5kiK?E z$R2KB$ddAN=BRqQZJ3h%`Oy9%Nyt#nD_`R}#ac&JE_h54+yXzV#uUdO1+H*6GpW8c z+ye13z_10-XS8IWJmX7?(}#E6(|7%*vB7zP`*dqa>kPV_=zX$kZsj_ww#}1Y{f)h!`MB{yfNPM=GLn zW1|9L8x3+|Okn4TurtKmST4FX0711w`SK0plp;M?06{AAW;5bIr`8NCl{nHdppoMv}Zp}V)Rvien16ypRpm&VU3f&HO-v*+> zlyx{*fGJ$zf^MC5p0uFHTNqURgT^wdGExS8l{*o|lblB5W8jcc_iE@h664x~gaxC9 zFazc+yBsC8rNu{(>db-z6vev40=ypu=C80*JFI2>9H^ggS#HR#|!7O<*nT=*S zJ(@uA{o&T8QluG-gk!^t*vKMQ32Z+s1ZD;MXe7z%Wg%%ku*>?;Y5ksdFYNRd^xrE` z34Cl<1v)7J-4cvdRGGpoJoCHbuJq{epduVy5N^v*=pboQXI9R*^xgAku)WwDZq>$M}225Z26hj7eC{t30TX9Ka1pF8(feRB7VV?}4 zPeeG9s@E;Ixkb*x=1kin?k5=UQLNd*`dAJ9ANJlmtf{4I_)bFaJyhu+AaLj+2QXBr z3Q71rQX_BgKv=2o@~lU6bf}?&rRr_r2cl z`u_R;_%;wA**lq8vu4fgncrIL@>#O*k`s$3@~UNa(76+n)}NpDLeD?>qHC8U|J(!P3F$oo^Hs~hs8i-9CaD~vyTDo z(NLGcZ|`{HwG$1ziw(hVFZ+`e^a=zdKo+quiqqzu@nzK=p-3Q z=kUX8BR)msqqk0-sBK^SMnl0IKhr+kT3fsQ?9{C~zOSX5c$qMT8+oXN=>G0aWrPb= z9BR32McWJCSCYe3oz@@3nYmO$Hf=9w<%GzBb%u@j-5a2czEhrgq?Bj51E~Y zJ*9h-S(nYoQ4-uzHF)OkVXp%@Tm)I_4N=_UMUA++8>}uHaHqMZ?P4nQaILP8(lfEx ze;;?QUzf^$U|xY$w+R49FQFKr&M@_Qsf0mfAQ9W z$2rKtVNQt?5v;IvEm9@L_E?!8DlRf1#j$jzif|gMkm4k?irltUuV1{SY~4EigptUD~L{o#YBz`PT9>I zNe|a6Rcs^0ehMwIGLNCeNef3fRfC(x*KISVGv?sj;(SzCAV{UDuJGOZHjcZ_9I5I` ze{yJcCi6cQ#`6UU`f;_1q-e*WX`x`2mYq|_CY|?v8CK_t2&Y&G^+%-DcVAeid54cr zTvp4pq!;Z@13^pjAUEX5YQU_}h+tGw%JMKA5G8_9@rb~<8@XYN4OgW%HW1AV9q>8Q z>*O`mHGJAW{EYhY4c#Fn(w=>x(N2B)6ys31Sm@-UR^jX{AA7#S&b3I}+38}9`H6=r zn!^4S&ZIalsLlp((piJ*w17X2MCTbds1M1@?D4j6^TYP2GWwQ^&6W%qNk0~e=Xp-3 zR@v#KVkd$knwi@@RNCN_TT!vqwa6quSd>#(Sf$21uJatHNbI-HD2@*tpF86^lk1A# zsg!tGl_AkT-WrhL5YV}!4kRxxr=_AU{aCSDG+xo$Ek_9u*m!kEA+14i3)K1rLfwmZ zEtG^5ZAy|hN~H7(@A*T_Mnr(ULWVyIYDh5xolma$;B(+l8ZX=;E@4c znj2hEy6e^L!84^-tP8JdN{`a4?+|R^ILn{T1SV*g=m)AwRl* z6;v!=IWc!1chN;%uZxUI`E?HnDuyY9m5DjWi6-}o(Q9w5fC{ahJ1Uu`EidnDq2dQt zNta%|ecZ+Sge*j$q;|z_If~9m1l8K{+Is&kSCu?@%QQv6(K)q>mm<2vQmh{C2F{TF z#_@W+xrvDaLh|Aj=$(=I(v5c-6t^7K({_R~fMA(AVZXLQ3wF1On3(bW&Lc!M3g$_T zzLUU>@jBK$w>SP^&G`Ics%3gIxcCXjEdWZ{^kEY>mMIwjnAxoOffb(pd@=Z#VDYfB z>LReuu8c^KO`_y?1|J|gNwSavnSE+J^{(``leNEu7(czva;hacRQYqVRSQ$jlvxWu zPtz{XKNp0Z{Of`t$e*4w+s7Dfa*CFC%Gn;v(yn3)%Z>*Qo-h36ZH2`-*BA0th!Zq{ zoy~+@ZgyP9YUoXKBLaR)x7^B>Sh?wNz676{@VXNoGWKj`d7(cdq{_~8Jh)*bw#BU9 zNSe3UNJf-R76xXnICwfNEnZ+8JV`Stk^f$N%zAvhz|+7zRcr0U zZ^#g{KKt4H^ZP+qb!%B@<(&oR*}^VVUF=ubGFnfBe|bcprryoflAC)sN8dixTGO*FaUW)&jD0pqTO9eFEY zPXW9-G!faXI$*T#FFG=q^4HX6|ujeG6c+A|tBWY*4tWk`~DZXNQn z8yEm^n2x_fS?G{D7qgw|IALBNq#hdrKi zl@CsMnz+j=*(zSI`{I_0MAwadhRM!?vzqd=N^Y+tt3&E3y{+TD*EWW=%oPaik_r?E z1C+MD&*z|k0l=g+bv?y>Hd&$~+}8Ho=^{Fgw&__8H}tmT7aJ$3z$g`d{DL})u3+rh znJy;dJjb*&EAV<1yAQU|VL$zX>>v1a-aF~M#cpU<{ZClFNVeJHen{X2yq=bxc84$7 zCYdYQ?Ty#t51-!7fBSj59d;vVKWo<>{rvfp_UzP5sgl4=F&cFOMP)8F3@>=f)Z>!<^iTMXdfK4Ab!5oY9&rCjG;33f3!@0%7)$uG|6J0Ut!v%Rk4jTGA`J|KDl}0CAS$07$E-nHb1J45;D>xGhQC z?bWcRvO7@N^``R==kLP7;I%UqWDxu`etfLBYuC}o0mH#9k_J;&@ne)~{TiZIjcaQ# z@ksogx5a7A&Rh1Vtf^doT+-$pKNTE*_g39R@mL8@Fu3cqO!2_3vlx4Frns08H(QB( zScYe7c6z)+k|K$lV8u)n8s^K;@|~H%M3}%hKxnO|Hc?-HJC|SqnfOth)Bwf3k_AHD{YC|yMOA=SnMToBZrWHhca-y_q5|IfP5 zR9Uq=4w?$Cn{2MuCqnfpU+Goa=h0^p)e1^`Ms|9&UM=MOV8fJrer z48Reio9MpkS9o`t0Lpz5W=Uw8l$)1lo0te8e#{~I2J%As?1$WrOd|&oEO@o?73^-l z-3K8#_5(7T?+x}|HSsKRK*EZpH@APgjuk6l6fSc+;EHc3;V-RiGqaE#MS~OI=_+N4 z4-w}GROE!MH4zwf7-GQ67egmUS5&_d|5Z(3zP1M;fjuvEdGU|Hl!S}V|IhEFlS21m zN-4caXJQ@qZw2F!w@Dd#ma?|n?XsPs552<5!kURv-~g}*ESRwm(45-6(%QWded2SD z^}UZ@_N_~8>CLY{yN@*3CK}OGALp?5{Ok|W!Y%_# zNvrsqZn{^^%`zo%b{Cs^CKIt)iU4f)m$W4Gh>%kP#@8ZJf;>1h`(;4j#E%`z#o z4Q=V`o9mhzo>_XmxC&nE!?OY}J;+C_N|~y|VZ}N9LXO-z=L48|u-ujrg?Nc&4 zB40loL~uRXkw>$Z!j}K?=Z$SkZP)aU_g$?#r ziO-3Epmf7>>eF<4C4CHfuNe-5uS8gj!IVTm@4Do7RrSYG^xTI4`k}id7L)c{i@19IA{AJ z)Zft#+3bs@`)wMtlQ$t_Jph)PZru*cU)50yPkCttA4bRileU6SO{Ko#)vd7Ozq-tt zzGZG{^$fde4lGH6%~k~OpY1F%=lY#Yu9*6r)VbO?u{;5``ijo|%MW(ER#OA`?{bCe z0xS5h#tu5@!V0GPP**#wKkpfF|RRi&=xrwiEpyqWUCK8Nj8;( zRu`|@^fw}EHzg&BF;?x@QTuOIg^Gf~&Cbl&;ogXds(Y6d8BRbTtN`aMcpfUbH3MWu z9|J_>p}uH%a!E<@5wNEDg`cl2+{PRynWU%#560M$Yl`1`szVtR4h)FuSJ%1wK~ z!(uoey9ITHPP%q2O$!_k{n~1p!!7@i>ugEkb9EWsm}w7_b!_~vJ=ekAwedPOIhge` zlfd(VSH5GqsiInw3mbuF8TOaU@b_HDywym|-t?Bq&M3;K4=AX|hwreD{yk*j_SCJK z>%o#CkHwqq3W)NQ@-efg#2xO<g3 zW^18Wl*EJQ*$0Bxf0iChdT}3ZFL3`1<3t`SJ6nktiVM6_Y$Ttq3~CNfR__L0i8lEG9%-@B%j> zhejbGgSOqZ5Iy#D`%kL1A{XuY0>r|+b*o`J9mOtKucUxrZA5#c!j0%KD)_sz9+n4) z?~V9q9`LJ|5F?&}<~?vjb=3T6Nm37;^CkaBTVx-*k< zX=%xZlyPl$(xB^(?aB17i)H(c?{Td^{YTH&cC{(BkJkowsSf_B@~)&IZO~w_g>J%j zr(DwxOBx*C-f%vfME@e5e?h-Wv-Nh*s_Vq=^GAsj_WRalA9bFvhA-F0J@xU``zAQV z1#znK8se6|b)ypeBayC2#T%>>YFI2StQ0!=mo?QjJ*lgS(aW5s#>RbM+n+NHni5EK z&uUHZvDO|Dd~0NGqE2vE025DwDY=$=juy#{d_Y(e+^DhELXW!PJO8!{WP^RuC7qm7x*&twaISq#7`vj8Yp?8*1v4 zQ}lf_ky#5zFfxJwQPU!h`Oqa~ha1#i(5K+=uqgvj?ZcZGZNq3_K>Gk!g#j4AXpv2h zJHV*ZLBe0}u?eg>#Lxe2Ex};E1oeeeMCk1c@4)~J0h@KNerc5naX(mLBH~9f^^Hc( z3*aLy?fluaUmOg$t}gt%bXkS?1K_!78UuU+gdixq@4s!w7^nJ59_%oQm~7htVF=+K z^YkMcEarqoeO_x{d-gL*N&c!TCEz!>iz-J~-@!w0ui-vOpFkh}zo_3<;KLe`i2kee z05_&2%ir4$gB3cUX7Z&_ztOxAIty@yNz$sugAMMe9 zCh@^r`Dts?=f^L;NEI*Cw3_@V5Tn-HvTxA`A6*-fyy+@(IRIs#`w`TX&-O zZI#=L6MY-T<%xTLi|1Hx+vCLR|50H;`i5TqW;>xpk+T4p9N_5<{$W^y#sdMeMpI$B zPBXNXfoB&WlAEFN@LGB0FMS38aMWQOSWduT{XnsiBhP;DxIomX($C(fw?gV}NG`9`OGDA^5I*hyFyfYDCafsKP(6rvTCJF8cYMF;9YccrN~i z5VO8^0rE=GXjQa@wP)8CKGA*v4Xq0-pvx~Eqx>p2^vz#bZvFuP#GwmaWfTgmFfijV zp@J?%hgA{Ii@GuWLb?$>gs4V<3hx#G9q0fwBvN0H$T&I$&{aBa4ww4^6mK*@%6k4D z>?^ngD7mlO`s$GJIfedr?~loUbRC#lkF1UI7`PTxtq0D2n^J&dfPEGz>xC%TCwF~! zQ=nG?=LD!TW8%qstLHUY6DHZg$gl!hp9xL{%8mU4(snlFj1u{V5)QsBo0v?odKOF9 zIDzdP;6Wg+W9sKg?(V?G$;iq$&n$g5H3idpN2eS7!?*xX&GQy`{08$jM|K^|m($Xd zUFxG(;2%AbFr#A5MNG37k;rn9>{U43f?!7wnhf>g`hLdOjLEZrQ4Mzvslm-q3ZU>iv z_264U7mH$*Lgkb9TQ0djQea$hc>wG$7-G8nK|{y@gF_7hDigVexV#w!n!bjCbvleA z)%2sl1NvPF))CqP+`3?%n2mUB#A@Enzlu~KuaR+SBMDAL)G`CjMwkA+7Tm!QnT_U{ zaIGJBucWe=5**sp%O?Dno^!_#`V|E}Z`MgfQI|~p{7!;8My{SWxni=uQ4JQtVZVMg z=M=aPn8(uNtX+QK?+lJ$;P-xd4VH#z%~3Q2Q^RC<>gTPSsANzmze?mA05bqkv|lP2 zjCk6+zqr-AJNB!haeExO`oP@R9jPU7(*X!H--=Y5ArN%UsG}~bPC0r54baUoI#E4} zu0ygw-OvkSC6UHl>me|~Zr6H!aM`N1{TY>L@V#x;@BR0-L|D&lner-uiCl1#gx1J; zyBdAs>=DwZc{iU&wd0Cw?cD`WuSaUPK|BTTlW=ZwkX|sjqe95U&Iy4-^40haB4HLdTSNwQH^)N_^lJ&R~~)MI@$6e z@!G$!6=wn>TMZH8n*J zFhe+$=q)eZAz;w*OP4!z*Yo?AVOOE|Jxw5i5L~)0NAHe)ffq=jz ztC>bSSp^vee?}bywOnTO6r_)b?VtdpU)}0J*$&iK4xlnIG!&lDP=BFc0EQCv7CKIi zB%te8c~>o;g!&WX`~O%KBmfOtO-EPzj8}&P|GZQ=c?k>wgV8_I_}BeSuZ&+^d^fe< zI2lm=mVuzGfdJb>0S$Hy#&7Rdzdv&CuSdYT6Epq-%UC@RWdGg$`WMF!-)%Y4@Q32m z`k<_aZN@2y&wXt;g!BkRr&YbPl`aXYvffQ9N&U`RrhdMWLj%|x&&cjb@~Ly_d=*QW zmB`4Zzp%%{J_5_1cL+PC4)7Wog;4OI&TA6fW;_>LjEs%?w)6qXCa+;kDkQ7^bRT$P(=dM4&8_09x?`HI`62KlLMWHUJs~_{?-F7BcrG)V9bA4Wz4m?23>yu zE(D#0t}_Z3szb$LIPX=XwBD!*T>siYVSce~qy zQw*l8wTZ-@u|Rjzd35TLS~zpfe${lXRtfG^!HP9K*nx+wY6E#r+QOh*Dj4%`pIa7dk zA}`oL$6rRxh0(4gqW%GJWeOgKfkXmArRBnIbH%p{&U1>~gX=4E&=8xqLk%LQ`FW!i zDcB=eU0{tIVg#O{2t!o0eQ+c0aQ})~iFxWe2yh729|bD~HKReEcd%<^@ZtYf7<)%3 zOa1{U(E%buTc8v!pe?RVW92#Y9>%yzBcQU3LRU)&?30s^$`6$&2Uij_jX?E=KK8rb z){TK13+}%1n7r3)^vYwtyfNe;{Qq+Kc=Lh3#xA*oiSnD;RHZ-BrvI{~e@el^s+I(F}R@dXvp2;H4O&$737bLD4G!es628<&BcvUmVHM? zCoyALSD{y#Eu}K1Tj1l|(#N@Xk*&)zGJj~A?zZR4*#|)Z!Xul)V{f2rHwl2`;%&WW z$2BxHd`jl(hnIl4XsXW$3SXKCptaS~PT!vYvI}H4^?vOG7%`aPJ@XATXgq%N?}G-7 zHCz9Bv=ORv`Eo(Q=;+-l$9v#`6}YL&VB)U(wYw9w`rx7@aku(!RNd_}6RwGf; zk`+FLSPI|K)){g@#!HuzzPjo1`4o$;$z_Pv0{GF6k$uW=5-jMy^^5$b0g+lhw?{3U z29^49jP~UytQUX#e(Ln?XTOUN#UO$SMY{BeNG}IGEFi@~BVU#4dAlkSku(BzuqRPS zW2g=}6be|lvhsf^J6!W95X=-*c>KI0{dCu+3g+_)p$R2wQd@*=rJTkr1H=V*1SM7c ziyAC^$yUPK({n7D{S(Y>^|Eb&cBmAH&4joe7qe2CI;@;+9*KPwOS)I{cv3X zG)i)7b#^`WI(s%jz}Glg*rkLb>hqv+ou{B>YK4_^ZfHrEd_uOqvtYcXg=PGpgi28Q zgsgyG(sm&ZCgy}gnFmxd4@lbXh!?cAReYguQ_9C85-`SMaxPCc4VJk&XQuxW-YN6?~rDhKk{t^g>r9vSM zW&(DB*_L%{n!>6$<06iel>w zt%^cjagyt}aSu-7TDz^xd|kNMt2L53TGhFVsmd9iyG3GApfTn_!UkEc zSX?K+Ww-nYf2;WhS!~Pv-fy4w{$PFd?GyMA8NmM5DH^tgHuYic1Nn=}h`COxqMV{- zhMJ{c{D7c@xWsyAbBi5TtVulB8JiG)2Ssk7GufH2lc*5jG7BD&(AwBJ9WN#oaY7tU zm`hyK*TpwtX|69NE|cFQ!EB{}mocAe`VC*rJg!%951BY--pq2$L@Y7)pN@$2mA#Lb z<~`iwPyS*(B9N(<9-AR(St(FzV3Yo!f7mEVP$FMd&&i*Uqv)?9t#mD$vud`A5A#zi zcf>t>8LXlHm{0sA;Fz!Z3(cc_leeg_L(!?8J{)9GUTmNt_a>@W8rEN)mHPn>fcoduTUpGHb4784JZ>x`;mdJhQ7Ke> zPIXGcT*<;3E8@a!m}dxAGqKw8EV2oTTQE!sj$t!eN*%!M&#h2RUVLhn%G# zGa363!&!*2!ks8oq~NU61(ldjL5aZyl*dOg~$vKK^rLqhO#$s4iVw}?L1hCeYoXc1nPgMub?>K6Ll7Eaxho%k3 zpUlw&%pmhB0TaOdiD2u(oJz3C7FdZfO%UoA>gSM`-R36roM4-QRk7s6PGjn)F##B- zVO$bf_W_2zkVSnFp2EgrDlRjMSeb`4@xe___@hm=diGmAD%Tm=1p7qqq!=xGaaA?0I>Nu4hi2y$e=P zM<#`=YR$Bi?#kMQd4T&7s>MTo$P+gs%ao$cF5Ax=>c`g^x~}elj0Hi4@IcBuUCy(V z-BZAcD^G~o440v0$=(lXV-y<7UD%g2WX1INW7kPL@|&?|TeANp5WOg0EN}*c_hDis zZ0Kbfie_O75?BnwPIGlQ7&8?^9?M1SkaX4q1trIcx4^hY1 z;DvIq$?6ikWMx)Mfph~Vxv%|_&V^Jx)~}XgtkeM3&c$?Ww-UST5Oz&GF4~Y;OOH(@ zfa&FWHnBoT$zsMG^8+^V?y&f$vEU3$A_3iV5(Uq9wveC#Di z*0kV198ciU8j|Uru8)uQ)Mu&K%4=rB7qK1Z&+=8KSW%I1CLvdzS>A@6EAz4B4Kprl zgq=fCIfltJLF08XS>yFZV`eQv7@45Vqr>weRJo1_rL*L43u>k`wx5rw zaD}zhlpWGtF0t$4$q$m5JL_0Nn;bM)sjn02xbwVZU#pZ9j;&)+Y!x4&UQNdqt3%#S zoKqx^(^p)0Klg*L+%xH}Op8Hhsd^o+)#aw8LVvKa8)MGIk$0IbvQ>DnWmoWiZRPE7 zT4$DS1deI)1St!%{f2DJ(~`@C7s5=CnDR84mt(r|GE+hXuT4Cg6N#z9jmnn_8FH;lbU}u%5+Jm&wyck_EHR7E4iM&8-0MOg#&Xzug%R zU*U|dQi=G`Z+eJmyVW^n^6_sWj7VW44qCwpn&iw$A`kGmZ>zXn954$3R4rvxNAPyis z^XfNF`Y2FX?!K)4Idbsw)gb^x-oaiCY`H_^z@cp>5_&{VNW@#1HLW0`PfoGxuu|vQ zPW4MZ<54Gpop!Oumg=x(NATDzau<=sGco$lWrNR5Z;XB|#lM2btgt>Iuv|1@s=#B8 zcPz4%da$Ke@Ger<6@?mg5sWOrrH~+{8||lu-$6c@#+2#6Ys=2FG~IBS%LrrWk9p2c zXiCP&DUlb>MgJ|$L^Z{VOEYx~n+0$X49!CgXFc64r>}8zG>FI4iIeXMvUWI$Z?hO4aRj;I>7#Mfd2aF>Ud-lL@?l4o z+-Y}S>@7pq*SS2y>^yI#4cRd!=a}*%cnxE*tayw$7iRt(=KVSBGfikYK6WRTQl*$7 z32ZNS^j@Lp4x#8aZt7$_A#ebr!Wn%{p0&_}N7YF$HriQ?iJ-+3M&531M$zF^p$ZoI zuIKK?YWa%Ch;S#VT(09~@scB&vA7BcVs4C?Nj~P!e|RwZ=gc{#<-s6aV3Ps%&k(g1 zta*#+6sGYB|8fwMoHehV7EiKOtWXetNf5zj=Br?6qzpSQbj5^^oZTg7=qHnSMs|p) zSX|iIh!VZtRd565o~!T%%wMkTW1dmxT@Hk9j?|te{J6q2KOBNJY`r!ujGtf%Vn1Jk z3l1jxOnH7A_LTUXvQ88;)6(_XR0b!+XEFUlm(SwC*YMm4vssJv{8CPD1h0z9Yg#4; zHChc@r8NoYQQxpvQ{N=AzhSS4bu%sNn(Zu}Sq*0cPR!}`Ui=+atY-yDnzy1(lZ(Zo zh#Wrbwi};dPHo*_>4J|lFLLt`si@OPI&0;%ip4-=E`q6=Y&sXaeR@(quZ#%aTAe_m z8tiokgU<#qAkoV4=AlCtLabi7a$5bx@q-lRvu-vNvR4%+G3J?@!jb4jQp%!<)E4Tg z<2Tu+e5NoLHu7tb9T$=cJn{C?`YqIRuRGeUvDf|U>ZUNSS~}-s`KZ}l(_c4B@mWxR zFhz=UbZK)th_iZ1E;8Oe8QwlxdYrd8nrEE-sb?g<#F%X^(U7n9PqLliXXmZ{{d2=p+7 zU(ZJ2)FJx1K?%gwPPM43{vIL%sU&s?`2XCsJ}TC}Jn3nSL*@`P*c1h9O-#D>A=M)~o76yGb8u>Yn`HC)NeYx-F4pCzE zIiP*FM%W-euQTkg2VYJ84{YB7F}2{SfKLx#rrP5|Ia=+QW0jdhv!O~TM)s57EeaVz z0@^|Xmi|!Q^N>da%FB=o!wmwZ)TmcLMNXL2gV_9ua6$ibD6ey~Bt*^rlM9p1lr2bz zVs4T#Gv&fuj-}e0hbl%Z3S#mFI-MQ{=tJ#-Q+ppC+JrtuTi7}wO)=38QfEN^2n#$z z9$jLPQv*I%-X;@11>)4($s^G~)1d(6P|_kPnGQL&XP)Rh{);0Dpy^}Ww} zRn@&ntMk)3taYHSuH!040CzJ7|4Y3h%4}Rk@od3aE~mM(_@eu~BJe&vUbnp3;k`m< zXS#w6k4m-iN_3^3K0b;fv$K z9J}Hw!n%^3{!IoRhQT0%upq;Tu)3#J!p+{0t>m3SKv#~2=aA=1&r#1GAcIgp6&t5t zGAQ!c5jqnf6*_lT)Co{; zQ+ep8SE2^d*n1%?eX8~2ham=iVv}&zbIU%3u!_#}+Z&P`ZGl#YD3EZVaJs;krIe`k ziaiY31bHPgdL(_4pifzY0zzGsr0W0E#!ylMj9`RivF5U)P(eu2p2U z6N`I3O$VCRUzrYwO22**AFMd)3k9kHUQsV4JTA3u8 ztI?IJ-xiO*ZN=@K7hhv7{*c@D7?&I}{bh6bp7#zU*`^8e z4{&D)U35u^v@9kT-wnPz>~#ckD-Yr2^kTzfwfK{5%qQ5ZBcyt|X8Uva&vr6L5;Xa} zAKZ46!acaDvF}WWzadL>L^$}A-`v1fa!^T+ClEmJWIQ+2FLO(8s=7g~9;f+anlz~-nY&k<5U;Sy;l zwzww3XuK-=+I+_=%CydA_s!Efjz5lm@T4p}5e@kp)76q%cW^408ng={CvTK29;OF3 zheQGE`1r?s&q)r8sN8I48Jv^o>)@mED zVwu;!LXdj-k4f9NTG{kB=;$KyGbt1KBfv4C3f)kZejrQ@C^Zy>Hw6Nup#ykMAdFr> zdI*$M0>!%D<7{W!Ux{P`>`?}UQcD3x1SA@y;lTI@009V8zatV8#MGnnp+kt8f`F(& zCEy?DqfM#kgMhpn2FL&C6{%_gDgdbh=E>e3?GPK%ZD z#j_RF15C2UF@)pH=eXW%ZlBg|LS7J-R#!eHW#`0D?Kvp8$#z9T%a!hM)y1Q5aIVJp6@xf8$kE zhJIT^Sm#lM>=Z!Y(?-UwS`0WDyR2_g zaRx;LeMFNQP)xY3y1yTy-+kUEq~?w8tjb|!-zyK?s6Z_XvykTEw8?aO4X883p3zxp z6k-^F6WBInlpJ=(?=kjIA*41s0Nn#F58zWem%0X=}8GzK7-)#w*h?iN5GF? zE}03_Y!yuocX89=5{4CbOF92tBK2+_cy@W}4R!Cj1~q;bSYq$-3U@OmsLNTBT}|D{ zE~Yk-<}!Flm_0XJ%=YNf7jXT&4fg;-AJC@w=kK$26iWAAx7lxf8%Vvh)F`p}-px?O zg*n&nlBZe>r;bV8YLO3quMj+y@afurub=i0pRaufCE9%sw)9E1rEP5KcDz+D8S>-} zJ;b@L%Op|vK!IKUNI67sb8o6_gblpk8bFL zg8|*pbM6DGEYb}IBg0b*^rO5xtiao`v3R!?2J zH}PcZQvbVo-`yF$HFud{|Gw#LWVJ_d-u}re$lpR-)ZTm^fdU!$U|GFM({o{7ek4t7eKQ4X5_xO{^e?mvz z{p(5EJqV2`nsFQt)X2E?^J@q=&@T^!P;j6bpjwrb8fX#9cn+gs0G=w(4G6>^j=j9W6 zA{+}G2*uTfgnnqZ8OSm(JuBTtvx<@{qG+v?ML6gpI&=Ajn8eU|?4Y*D-5`mtkNqQS!<=a?OAf^rLUC$x$kLUT(C6N+>*$BM@w zQ;wFUf3B7cY!IHAfklhGV7n^W<2_{U*%hV}*t!L$*T9OgC)Dl5<32(V5!?ZM+!Er! zFipc?yv~HXin5U9ojpB7V&187$%`4rnfbc%dDnd<3y5Rt$Qt}feRm+{IQ2Ey!H#fP z!idXQa%cPYi1xM}7BE2J!1;|9O#6Q92lvk1JBc&q?R%#SXf&Rv+C`B&-@khuK6vXZ z*JViT)p0yzs^l4y=%Z^@opGnzJ2ukRBxrl5FYW#NJ6FM%A1rr}IBq_@Zgsl@`q&GS^&CA8%i5)_4s1L0;l!8Wivd@c#VDy2`U5| z+>CP2AK^(2cruVQGD;+oe$}$fwMLHu8rfV0eWQj^72OMe7PwOyPXrpgdAYKD{N@y5 zDc%A<5vc!i!T4#}%dzs8H>dobyt>qg&TK9ib-%uC<5fCDar6CAIPvJgjaU6vZcdIK zKHhToubO+0msGW95Ba(1@nDb|l+MOwcD=}by;uWQD$H%MM!tS&mk2*ZnTmDwjl*$pWHO(FbPC`$4D&85 z2lE-2c)?%?t6ityemWTav*|FP6M=MM;@~z00`kZRSc=KJP_d&I3S0~FmxBuqUp{)z z<9)Cn1!#$>s|BNo6uJ5Lk$Z@v@LN7{^q~FSnvEL^f~GDmx8w)f1MvXXh#`Drkx*Ns zE?si~h{Xdn0V6;g1OfpSXoutp3I*~-vJXUn0$sl-&45IW!?}TuYRyPnnri~an<%3W z;H~%>Vo@pT2y=r;LI+qM?m;@k1rS$aUN)=;0fhteD8I-R*sMGcDy1{j_=Fpnr)_GlcAn!Owxry~ICPrB`L1M`e7t^yA#e&5i9D^9`H(pB>T|pLjN~ z@!bW|y)~<2?&yTIV;?v7)BaqQ3E480@%Qsx*Y2&^eb|?nn&sQafhI}vPL)M(^D`yt zS&A1}Wwe*oJnN$|vEgy)$u^ca0p=S_kXa@MQVo>FVrSS%qCE{AkTs8siT$lY5!qEP zsS{L$+OmP)$}GsWC)(dd1MV~3qlcZ@m)NVx3BVr^0Q=IO;f{<%%xhADtb*Vd2pj$# zl;&qUWOmG)cYoG@ZC(LtVY1wwv9{&&v5zK4x2#IOx4JR)=c@8gMqU5qgw<#L-w&BS zN&6!I^ysmVJ5M3Gf!IK*@CD7i_bvP%Nc@TLCQt$BmE+Jm{|h=njRG10-!%Hua3UxJ zB!hwz>1R=3nL>g`g40V;%}nd~GO{4LU^%$E;I}s1-0k4pmuHKtOgw}xa~T@EqLalv zG_;!I7o#!^B#pl_EHoAm9|RBApD-?^frllHUL<&XMu9Z+YoeeT$D8*e+6Sx`*smHW zEWIZ1&_uV4ziKm&N(HC8f>8twuliNU^P`j#Cy0Jerpg;n(2q~^kFH+5df?6RHpjbx zTStRUO#aw9as$0|{Q5S>1M?*Ki*ZiP$jX#GI;UynmdT$wb`ArZbQNE)B?>xw2e@xL zr{HrhG2Er&Fn7mcL4jGkxksG+xpRGIlkc1py&!|HAD$fq=(wTlMYgM{Mp9p#AN&Nl z8moI3ExEY*o)TnI^|UxHem zIB}HGqGhNpDUbHL{#OGxQ+`6%h888lBSWarxhNwb{<50D+JD3hukD>gBMtq`CJLMk z8&43n)OQwAzv+m`5nxXWvR)^`Di#bMd0-J-KnJuCS)~ddpoy@`1za9rd$4SbZo^RH z7pG1ZPZm!r2=rmaiq&CS0-s_J*m(|U9gGCEzuONLZ0s~c?@$RCB}FYyFYB1=jc>oo zPJb;5l$3&$q>2QlZoHxSZ58q3>Gst>=6_tEecb)?$AyKbACH|}cv5>k_-RAcJgGK| zwr2m0rbPR3A&UOuN&1V&j&?3-7kkxfH+bv#SaDKZWQ4~Q%PZce7A9<#^`J(2*2jC+ zlNVv3NtT^idof0aKe-b8EH@*!%zNs<{rp3Lm8R({pS_rx(IHj!wCIA{=>%IesTi z9MHH>iEf~6mvwbtZig8v8Wk?Xoiqv|FT4xfWv`>92T=1k#s@?C;Xu+))UeQdp+WPI+CPc^5}U+s)?k;cHB)zSwtIRENZm$#P-0Nby1d{n!q;A-uj%lYs} zPV@Yc`BBn|Jr}N)zZo;SS`NKq51e+(#N@=v$^!JKz&*E4tc+j2Q1+(!BkJBdg8LOo zP02zw_4?}NKK(5opR_!>I}VA*ycCd=k@J}YU-H?vZV@-^Me)T(#v0E4tG-*d#8F_? z<)WJU2JiYA4_8xl?*{BHyqJt03TNdRy=5p}hpAschH#n?4YL5aF#%ggrh(D>T=1*d zw@!pWF`)B~jyBIfDyup1^jD$Y{3>-#;OG%#wV+;?p!gbrP>=l4k(FEebm7dCexeq8 zw8oGb4U9TStGO15lp*3@?Oywd@h_=%9tm)74dn8HGajIYjv+-xo;q%5RM=tm_Jd^M zkTe`3Ipx5gm7KYjcXWof<)JyCIO^!&;IbfM3b|jv$*Q6$B=s5XJ2}Nol=c?ArAM#v?< z%>1JxNBT;?qsxV-C`-9%Y}+(fNnV2@Ls46DCJjNEau($HU}3F=_Q)nuHP+*x2YbIMae znDtrI&o8vb6U$NM&2MUs-&&z<1G{|t%A2*2M^{_kocyb8dCyeAqk^CMwT^*zKV1D5 z1#Jo^Eg!vQa^3#v-DmkCxM9z?ALqNP1P1k3Kg~0=|B&YWJx?=%vt_ zRBI(J)Re@9!0(7E)sWEhbJQyRm1j+d)jawqR0FO2?=SAG-BSxc z;0nF#@>YkBhxVOU(;zwrJanUE1UziWyP&P*(WT`UZ|)ZFTaP=(Wq&8_f@Nz{o2D_z z$b*#VwKU;9+nsEmRNOF&Tzz3W?n^S2>r2=&_mXV_3+d*x2&JqxzAAkE0` z>QboXKGlw0yZs+U@x)*-pWQH+D=e$5Kj7BnKaTIu{_QEo|MW-L=0$fjzm5-4yJ%70 z*3c7eu=WDKpZ$J`_VfCL`UTh{`G0c28<1-LMx6e?9$)^Z-MWoF7>+3VBf6ym&$$m! z`tJ+0_NiY_LJ|I79MAr_ww>|U_eWo7?ce`-_Fw*>{Qmnx`@ekTvtQ4C2=S8_6v)~M za;6_xj4KX;VQ8y~k zV&%E<=DE`wzbV|uj7G^@d<@@A`(evRqxo2@mTul{L8Eo@!)=u1=HDgx|9}5~R|1n3 zOTwEm7K?hu7E9g67Ttdmm^b4rx-ljgek_LHjOhVpg&(s_HN)_}qw!;z`QdpJru&4s zbA;u4hI9Ay<{aU+*l={4-e{^;7vTDLREm>Tijx#G*`=cUq{8~7^e~v3I5%Qiotlw} z`9lb{9CR}1G;NVH>f(@>Vy3mAbtYkhcIg2z>x|L^{I+7Yc=*9k`YLuwQz>Z`q;sCa zEqyJ0?KI5Q`@nav5wPdj>1Ux^M zN>-P}*vPVOa_QRF=7Z2!2=SIqrqYc7$gX- zLTwLxO;z(+w`3oa?3{qp zO#%76r%y@3m)ZEbxtcnh{@mg84|{XNn)SaUe}3K}|Aj;T4>=Vn5o_I2BKj82=HvvN ziq7vv0@j$B)fkmm9LmqiyMO<_QdEEc{sUTeU?A^7SXfx>wuw{`So1WoS@9aZAOXlM%_O#E30j@dr~$ri#O^2 z+A88)8;5Urm;}>XjQE*v8F`t-*fo3RZ8Pfb$V_yV;s;eY{g2-)P^38HY}dvU9;SH} z+wl{Xp_TuUnV(5!$%hlA))`MN5*JA0Gj5pX2uxXgA&0dhi^*HTJji6O*guQOoMmC< zz!Anudz7NYEUw6(VP)ZeEAyraBa6x82=dk$DvdJ_7;~SmI7Ks9VPdhLZ5JDrp?ptv zY%I0(iM)DzbVoZoj{aID0uzwPCm%*0*hW#J89TSvutn4*2wf*bn39`r}= zlbvO&m@2d2Kf4yqefn0zi8-P(nGw#7kMv!0jv_~7fg@fkzcfj_u_z$F!kTX{VUs@! zCr1Q~#Lk^-5|jf9oG!%U(YSB&@;}Gj0aRPIJU3cBH)Jl@=yZNh*bK>hXDFRd5zjRti&_Y`)K4rFaFcAWrfRplV_Vc=y@=#d2QSl7dvMTm{6d4i@AUQ ze#cV=iXMX%mbBaXSdQlque|&LxQ*PDSFc{Z6%%E*5}U=MMPNR6Kv7bDQYH=@o#Uq> z=J(w=c4=L!&uYT8#BZ{oWAD4*#N>p&F0f!8$%+m(?3`TA6;4hBy7d32Q+hsxfb~E$ zM_R+0`*Wk4oSK}_pQhY+Cop4EPVQWXrm6=&R6Xd;BRSUwLK);#pZzJ_=9gI!T9ew$ zkEMSbo~t#MQM&|leezt|nmxT$hQS5YzWhs~3_xUteav>6%_CN1{b#xL-&8Ktn&=F! zb-(@EVp9I%OWL?FLUCh0C(w z&SKfE;qbX(xPyba1%sZ~El>32&thg}^l+6@Z*CSfgCYlX22kqjySpXaSiHAj(G{#j zH;#=3-M?9AY0NODiH7q8Tn^XV%v)$}W@SZh4BStPdOP*A(%#f>wS@1Ow!L6!fsZQn zDF0Hhk5_O^pGq3=Xqa0g+S}Cqw?|8t7^0{3dxqzZQ6H9|`DX9(Gs0u)Q~7auT!0^U zWr@A$zei`vXrTTZvadRWe@d5qoUyKicF;?@wnX3%JcrM)3g$B`D^$R@Qvj2SlyQ8tFw{lIgodAj8$+>fP`0VhBC-Kzb55nnLxT)e3 zr}H7v=kaI)!5UBJH?NI}@tw~+KmsDL5ZgLq|DIc>hk%C7=gJo?bUBReNML?!`65rd zz|&4nVObF*Mv^J{En)dF+wG1zIc?onH0j}6q#7)0eFxdZFQ*r@v^)28_B}muoJ6#L z>jw$dq=0~#9G2(KmAuNS*u6KriF}YqMmB5a2fu{-riHbJwSGY2AfWwE1Z~QxdI9_l zfAnj_uMvI8`hEvFt_f`@G;e&g(bV(xre%%8Bnrk^3s%#IgQH@ydy?7B?>ngiPVCEu z{F6c-Oh1Xc5Io{EqNB>yevAiOURH8XKm#delqt8p$LN)ifrTh}UJfi;`9$!^8_XkzI+?x|r z1=agCxDp?Ng4WN_b3LhWd!oY(NTe$cb+%@%Sh0dt9P7)CEiP6qbUPH7AG2Y@`h|UKWCs^a)Qh` zJ9ntDD^QZEtmGy5OLWcY1=hd;&DT=$=#k=+|(PPjZ5S0P-IMxktud;N%1? z^of4-U!2^yse7A7@vJX>e^NH(lGwpPFn5M@a%%p1@dp~ zgM*J2n^>(ZP_1mC9Q3TXV{IQyIeNqWhM~LeZTZFAZPog7PkwxoR&l4l_%YWd*#14p zHf^yz?8CS`LuuhVq7Q?+nJp!mp`!Zd^$s@N2p4IFG<1z5Pq;>uXK73~kOy#B7T!Xx z-Xu)4+HXLk__B=XrVPA!$IgsFEtB&tsAcsMPGW?Ook5g5PiSLdNE(K8@EbLXf|B?~ z%COwoipHvsjg{grB~K{$IjwU^XWE@TCr9eqN4}jH5R|Ce+Tv92I(w^@fZs~EmNnTI z>fg`R?x99Hv^&)QtuCE*>EjY#!<3Fyp>g$VRNg0m$@Ji(&Vu3&3H`%I>u(qeiRecr zkH%BR|LFDt`FYQ4TbD@w9HJw4U;@JO>pk7%eg&Ecx+rqT>B8l?A1==UL8A4Pa*fZ? z5B(V|2$2j73v2zb$vuc9sXA;ZV%&$cf`Av%Pa#k2CNJ-i4Y!#sA zFneorbC!2#m^E7r)>=0khMa!00fwz~!V-p!OWfIk<(UaMxQ3J z^n5%NEX-A3G!=k_vd`ov=f=M#r2;4y-4wq3Om0Zr?oUY0sxDlXcdpO+)b4aYhsL&a z+wA)nXRv2Dv|+wu$_Cgo;dy5RN=%YQ*;Or0ed+A(0>uuS=#ign1KK{xF5Wcz)P_Hd zpx~&K_Z?H-2TC=+?--Zr7?&K~GB4ZBDse-~UlfN8W7vsdf^~Tjjc(j60?vkrsLVk6 z!Go~RIKINf;hx5*n^^${YlDoeI-<76FXI2st3Gwtp6 z+gt6onQMMBbs+WI)WMV61_uY-h{A1)-giA#;vDRIExBK@+pVeh>olO0O;pN<*@=3f z`v2(DZjX66RWIF|dQvu;-2cZP1}MK0cn15k#3aTwui7`S+Q+jmx3Q4vtd7rFk4NMO z@i{?mX`BlVO$+mXBGIWSD02IZM!R^XTK%CqzS<}LgKD20O;yd~%fm?pGhVn%y(%)k z>L>N~_`|&C&!5Alx*TR}bLbH7fu~Dx@v&9Td>n7STColgbQtpr$``pEK63cT(Um;q z)yvZ74}eL^4)3E!kCv!nihn+tI;a|JiMg}^Fy!htu)43WWBbx;OKUZsKB;~J82V9v z`Ez|~oUei+#z{Vz8-K=K&)e1N_$%=w|5tydjxN+Q$X)bdS^kjQC)LNQ)zKHLJJd!O zq(#2=o#q=eBOAURPUtS}E-hZN%}7;XR8s8e9BLoz%;aA)DseVXpkF)Z+?u(u;T!1( zH|D%vfX9+;v}?uQqyDfbI$|35PcuW?%uLK}`R0Aa_S@?JDXgN^S1Al{D{YJpTewNf zGAN0OB41#P1(Qx&)14yW09fqp%o+3*)Kdlq)KeKOfDD_%$W+{{jsN`05{$e@Ol@C&<0}$Dpda7};ttgll~DvSp-|9uj{BjDVvge#AqY zk?)0NouYQzrX%UQ@L%in?#2eObSQ};qh9GB81X{*kt=Ol2pgwWtqy9*oA^8nji`2B}%Cbjq z{N^^^^>b+I+5MNG2(4R_#vyv-b^ncYoBXz%U`R*)>%RQg;Z4n>K|<{(xasTgrQF80 zzXV+VOTg9X-jUbZeK*o=9YaZM2yg0H6@*tW-~88ZF7>Bgz7r6W)wjS=ct0a4%7E8s zcstAVFvCWiWxOKG_yA*;h21iaV2d5!Tab9a(SX&^Xl%?h&QzM4ak*JcMiv}7Q-&k2 z(Q&`g0XuuU*j08yVfW6dCi?wd2hrczs ze{pWqhV+pEzj?U{oSy9*AQu|x$5Hv2L`=?eI+4Dtspq44*$-X==hiQ4{J;A$$mwmF zN0RqRPUMGbC~~L5t{3rFra@a!e^n%?f4TbN3~t9`@Sjb)S3l8VSUc3)^>AIq$bzi1 z18{F>p>wAa#0}_k6)bVxwRSzEgG}Er?rpWD}{RLpuqyC!D z{;gdXtLqnh(D>t(C)s=CtJJbOqJF-gZ{KLJeefIsvn?(^>rP)=fi1s)^7nt(T>QtQ zzd6*;kFV<@x~+7ngM5{D@niXW(ZNp466cuW8!9QCDk>{m$hN0!jk{G~A8P4jWN?@z zpeQ3Uq)Nbm*o_}ykEj!mYiVIXZJ>0U|6y}5DSt7e-=xR|_I8wGd}fw>H$qTWWV9)c zW6GfLjST`QLKZ%zkfEvWda1~ON=XqJH^RZnL&(aYM_w$2$sy)Y6X9FUPB87##8)jJ zdflZN@jan!8ikc{NEPf9gVnGl*PMd6)>qJHwTXuEc{O6x@>S`nEx50)YKhdkn2bcV zlsGR6cBU?y>2nJGV$BqxrEPBa@l~xXAO~hUKWZ@_15>aB6vqD5SKox_-&|i6UZ{?D zCy!x&Qq>xN<%8?`_g$_~2zp7o64jjLV}tO{Z9OlD*M`kz2U>=Oi9^L=(F0G!gYbSs zxEtvO1(uhWH($N14*_{C`KwFEk|mg46}NW7hBF?%W9{=*?Y_rGOG?_O7cU-jo~XtC zdoZ6A=PS{L>JL8H8%bXK%9C&ay}lLX>xVvQ)Zd`F@P6YN623afxATIE0RT-s;W<^W zr)z2<{OX6bt)8#7$&&E=*8@SlC-w#j-@KiBniTuHvrmsqMc>n;XwxS=(mY>Ja#ZY! zbnHG&&4cuSQ~psavuE-BED}o`Paih(v|+g&G4m2|*SoM6@;RagYGyt)^X7iUZS3uY zTkM3vOeTZF5r{cL;r&J$_c_gx7T}m|WY2QrvD`e(1kQHS*eFV6Sr2#kW1!!duXYT* zC-;^G3p)GZu`Jq9Q8F(m=~cQ-*z0vbuXJ_iM6TzMCan+{)|Yq2X{0T;N%$%!=~XIv za6ah2yE!kn=vvz2+@@yoq+y)*{X0Q#e^RaH==VJkCSBw{y_#%_jK4+>V&o3Ue`G?) zo^gCNPU7pC>OysV6{}C|W3!Uf_7L7AkQL~DNGZlvz7p@S9p>dDp0{EB{MqcoyazE+ zsFg<%x|8G)HcUyH4W_soPD1<1kK0}QeF$RAYkR@T&orcf2fJ6Rcc?!k;XPeVBuv+| zf^h0Mw6sutk))*$T0E|K5icv8u732(Z`+}b)NxkN6g#_rjI$0uw>Z-DUiM(N&i3_& zFHPR-1+0e;t1JN28sMV^OI+GMwmP@~+TZ6--x!OG~_@ zCt4KS`11NSF0Lkqh6ajE%a09OE{PtLuXLiD(QY5G5mx4lyj%noa3%PB8}1tUnnWSA z`~muk3`l3xDS5GkV`Y?OK)MNuQa6rNWX&|BXJpW!(HUk&Mx+VA;xP9+%I`NgA|Nf0 z@=OgH>XkmmG=GD*$2!?j>~(XrV=YUMYLEJsv^&QYV0u>z93$@EA34|1e{NXvfzi&W z)XE#fb&Z7Sv7X=?_Q8BbFm%02T0*v75n1`}KI_f&$7|oZm_5)qhO@MbHnG1*+|E}q z`4tUbF%3Q#k6@C>)#_c6^@Yuj8~5L`oSE%Zc7OM9&*Ihd~sC!4TC{mJz+FYqS*qkn+%GpM7E zgTe8CHtXy3w}T?yK=XaoIZ>-gE4sFKwu`--i$w@{HP- z$5cK|y)B&HzK@+=sZ1Q$mZ*=IDnl*#!0G>Ky!e^vJ6{^GHFy2=<@2mR9uTd#_YJ`LAJoj0So6 z#ax(&W`8y}dgQ+%^$mYotBI+||K86*GB^(%tRP7T*KgO*Gmns6+UlQow(cXP6gnEB zf#KU2lHOU^H5LEq^p!&L_>b4NSXx>#l6k;gQihw)VJlW}K}AnXPfr(>+o8jU4h4d| z*|TQ@ujG?Fz7qFN;t zJkM|Y3aB0UN6|5$G4`%qFZOPJv6&p|etc|=uZau+X2!pXoY?c3`!}uqQ#*$+@R1+( ziGx{6L95nDnz9)Yze0&@4C|f)I6g|nU9ns+{ zZ$p9OM>oB~kDVDjF*>>WZt7}RVzQvbr{Lj&iowo4%8f-obv#3h_JHq-res&t{dI-< z7LrJ#j=w%MwRbaCJN8g-#!1OfYMe%%jF7Ua2KV1ct!_(xTKl52zgW93Cus`yc+%^k z6zykon}#5>oxYtTLvI(=wvuXWaNadevzG0{v6*dRVrpVyB5=ucoNsTp&d$P}ZE9_zt~%RTJYLd+jU7PwX`LejYR}eW z*d^=!Y~0|yoS$=>9y}#gbZzgw>gdA1w|4fwZ0arH^iDu@FV~Q=ut)vfCZO!kJ8N2H z?iiqJFkycpfiAsp`q{H;b^qw}m2nK<)9ObmM@wtS?kqk0^2)>DVE>P;oQ(9jBuOC7 zm)9>sL>X}zCnuyz$vBLSP_@wI5QO>c)>YxhZj2S~8*Cf>ejV}Vy_kXYZLdyD<o_>mXR!`_#n>xIQ>FmZSQpMxZlW7 z?`Y`0*L{Ny`?6Ij&Y>!{s?D0O^8YJ&(hrwCQi$m3Ty0v4wt&;_)ZSF;nA%<7B?*sf z@CxP|9Wa_}V#YQKGBU}gDKZ-TJ@dEJS7qEbwBf8VKg6`Pv2tM?V$Nn;@R>|wD{qM~ z4@8xmqLg(flClcVng;2-C9r2P_8TZ9QfHQlnbCfzS~C{J(;kkr9pBuHEwD5;$dE2E z+!=kJR=;?=F2g)}FlN0PGN-MfB|c8UuKexJ!So+1tK+OA zvo-Tx%BqOmgn6py!KMYmu|Br~sM5TOLTL%~>V>GdNAv&vr2N6&_PiUz!6kgxCFD8J z5UZ$ub)7_N3?#H_SL?>=Cl_|DKSO#j3A?7!fB(Huz3Fd7L)w~a@M8MUsT{2>tst0U zWK1RJii;J_&dz+Yz!A!o-0T-Ea-D4z7>FFg)k}*!ZJ~CL969Q=5xIL z`_Anl@!t^%9WaMpr2oA0O8+-CQ-v^5z98+A=|xi*yH|B2L4WT51|k%h?8rKJkY~v! zDHrj;rMMzAe1>YgEz08J@`c!34s*yT$YJ=&caCu241;pW_K=kghj{t$iz1#s@5P;E zp=CD=-u-wWbv5$f?d@&462H|@u%C9q;f}8hNiW)6>k%@JLN)i#>Yi4sKiIXC^vYh< zy!c;jqNYEZuB@$^s&}8(z!!|vB}bBFY7 zJ@9{Rh`!>^;G-o%!-1tv!A`-vJ{A1nV7b%|We;oZ>=HRuKT&7re0AEFpq@mPId`9S~354^~f}{N(rF=`6ILz95_H1i5Da>JTp4LV@P@Y4E`Vtu+i&?Kv=tSwwv84Q}OCh?=9^Y^F z8*QW9$X}o(hy}znGUQ~~j%?k(t_?2zvvmlKozB0j&sKjBbQ!JJ+xkyPgpck(%gE-P zLB0-I{o+l2ap}HIh;@z4L;P!GsCaT-u4HnnpGo2w$M@LH8<5~SwRL%R&sN*&N7~eC zoDI{vskgs)a_e#@C~w!sW7)#KylWhlz}}2+Wwt-@V1RIi{}az!vAJwqd{gP zoo;4qW3gh}0O9&=y6iYcVPEUwK3(eKqW1RQN1OC5%T>?IUD7l}wjUw8Z|6CUyqJfO z_cuPZtsf#bj@ksg6nM(>5$Zq~Z2oLaNwH=r585xB&lZ=LD~qub3@Q@J zVN;V^BSN9#EpA7S9OkSg<70t2?zXe_i5B~nE!ux>)+G~u{l(Oj=c}i+CyBmEzkhGr z|8eclIr`Xsko%@58{sGyf+K(YpRHdny0F8%lc}LkWNYYzX(t&t&h}FT53u`+`Kql< zgvAT^CeAULn;O1OXZFJ5oKU28pG-kOe1PdZ9Qruh2O;wlimfT0s6Hr|Bm9l41T4$N%C!CA(c8PeyssAb)9lv&+T z)GLKtJ2NvwnmmThz$%fJHm20F2%ZUzdllbHl|n0HZg+%8isCJa(4O<7E|nOZ93)Cn z1?uPgt}4|zMtd^2uXuKRW`x!n-9yI^68OJ6$1mZ2aK#8CphzP-*CSKN6zNei#nv|0 z76EPvVC`AaaO9}U?7d(Pf=#E3YN`v15NP~~lxyhjD@8R3JOA|Pml^Tvc(O4h8NmhJ#+E#j$hY< z%r)TAR%oFgzpkw%6RuScTI0Z@|Kr;sL{lz)1mx07eZa`;aX*LXdx(ueVtUC4a!$A( zgr#ENrFE{JNc#2`%yWFtHn;JY>8gS8KjaD#v%Twbj}^blEex42?04$>7@2aDBx%E% zr%TNng+a!Z8}(CQ6y2vNRb|ip6C=vjn_5|*qA80(2FC3d5Q}9c-=-dK*NzeGe!6uhCl?pB zoTxkDK?b$Q91`NIUXKBZ^wE5$kb$5-m7}8 zO$9P^_|0?m1S}M;O1itw>4a-j^ZQ64T^u^|!(||3$gVThKSl1qP_2hJ_mcoxs6PM6 zB9Z~lg8_C$?sRYc@Zv{bUnxXhWDevN8@8^P6Ew)LWj2PG|Bl>i*^y#U|x5HZFpZ)M%q5ir* zR6o%Z_rkgzollYWyuzu8REM13zWtN$3gLM5S6_O1WyeqJTi3-`{ZQ$knfH1&p{8AL zPqEMt)Q5g8_2>D=7YkfU_yZ}kN}%Mp%R33$^`@bW4cf|dW-E3WT&y(zwBc*X11HK{JHFH{A|oT)m~G5tSW&z4L_$WRKcyEjFs>7+ z_QfoEM*R}h0@1T*$f>iCJU@a|mt1IJAgz=p@=PdkYy(lZ0AihJSYJ5@E;wC5aWIrW z656on{`KDY#St?UU&;k8!GvzyW85H}&$ z5Z%kRO$u@2+>&B;sOn>1X0FHzbJS@++FIFoAhpU@ecm7O#UEeKXg!@Pp~P8hc= zUcfI@tJTj!LOOqqyjW8MFYD68m7N|532~oPwO+q|{u6h1_eIs?>X04kGzc>}uIm1r zs!T*kKx#dt1IWV|N^;95X)HOXTDZ`i%yk0uqmS^K$O!lyUUS9TwPChzy=Ax362Y*F zxGhWm`qqLOTFaomyBXUz@;kcsvxq=}qOA%GxM=n#W zlaK< z2M)hObX)q!)OOFQrru+@Aw?cBU#5)T>+Qt$>&8!hjtohNuT~>=gakQ&uC^{AA>k8` zPk#Qcuv2|Wt=@_BSQy2z$TUwW{Tm1~z{h{{fjj#)9 zKB_@%4M{8Vn(1U4H~sdH>i=xZ=E@r*Q%wj?Z|;%hcKZ2xr~)Ph6(#)S(Bd(EW4|zb zwPQL0ws4eXh)vh%Pg!i**R;Ud$H#MEtF3EeK_7XS^9|;2GXCDZR1l>wqTFwAvfQ$g z>bS-5FxyUI$C+i3mC;k5hcL7dPs1!~6v|ra;Wio|qYp4eZrT$ieoodoDkln$!4t}f9Y=a2D6Lp>gC zN}28@=Akq3y%RYfH{wu%Nw6x2-;(PUy6F9E{;2Is58w0=B3J7%T#b$oW)DQ|EAAuv z-SO(XqMGl1-LdoHQ1!Dy_0F0_AAb1Zrk{7Z zfArPHkn?G2|2TX0yH0idRD4YhnSULJ>vf@XqIyR5+EVKh;6M(bR@F_vpHcl?gP73J zjnrIE$lmdp2yRY9Ke>l5zx4jKy)i5!J2U&65%K0XLwR{g%KC`rN^-wipA;>o(@$}G z1bGpmd=5V=i_VfGX>c=##o@wG&NifH=E>_X+t_gwjsEwO9F@X66v3qk$?_7Ulf1c- z-S5as2NK4#_Xy&ojA$#-lBbbdjwhgW;WjZ`QXcqCYoe{@b1Xnl$wv z-}=tD%YSw#e@ONB)`zZXY3Dz|-Fz-zMh3Q8oiGU`y0Qz%_~h*Gzn}S?yzR=_DSQ!M zGm0;EdhGNlx|`LwMR{pP5RooA$bo(ga3bzI2@`RXUmCx@F3Kg;*@evefqK|HJw5rLFJGB;^VA&%QVVo{GQdJp8A_3OXB}}D6F;{RuS)AmL12*AgT(fYG6IP|f<%I$kA^-P zJ^x2*(8!J_1X0^s1ZD$vj3ZP$4o9t4lRlRA^x8cYYKq>!kz8~w6j~)AEgq_MqHbD~ zHWus#350IGd>aQ2 zS1*bUH%(b~-U2wN92-+dYNmgqe+)<9W6ZK-uq;+E&5hX>`)w>4*v(MVvEtSo6z<%c ztn>3*k~&zbeW?qD@j5!`6@AWn3&Q#4+UtpbnOt=vXp zX6vNvd#PdXL84&NPqsj_m*kUQ*RNlnaOM#;rDx~RjL7d?_(jooMX*^5kH7eovPl?8 zqD1SH*8Y!jweH8~y(SRuPfsD5bUrA~P4)6AX`0M-Zrj%eRk39G4H-bm&sWwV$CdIUBxP16W-dvh=b{Y~ zH%VT%GLgq&G3~7wWc=xVqgVk66EKnhJqU^%%Geyh7~%a3AMV<2GY}mCl{0~P{o`mCK?|jFbsZb8ieBR zE!aBd-Pb&@ZQcO;xaXLc-*9ytdV&3fVDI6VXSxie-TqmjQ{QMSgL*%z~w0%$pQxljTf&vM| zs>c)5cuiPZ1J3dZ>FoC+b26H=>Eq*gRZm=l9t^EjmAv;w5iB~5Y)G%#P=BC-VD*2r z@m&}xA)Q2sYzX>=sIIHk?DW|8b>;AIak4cNHV87Q4}f}}Vo}e`_MA1sN3m15OKjC? z%P=RUlDCC%svHg&2$~`4R?Rp+&OWj=*s7XOpRLllRDjx7_KFHWRpT- zayWsn3NCiun#ylpP#2#W8UGryGbe~_XIVim(Qd>?6+GfQCtAEHWmX0aTnZ)6fyqSl zMuK^A%cw0mp~gq71eSK32-+!sp1ioMF(ccEZHQzkGsAbvyHKxSC;IED=@BYz4k z(3^@ZSgC6=Y6ou+#2iAKAbZ_a;?ujWeX?beRA&_}g4OA2qiXdCL1b$PQ=+AbXwOXL zt3n$VFK%)6Up^IQuTE$pbhdR`SHICDVzT=dk}l-8CC=dD+P}Jc>>_?A2%?qful@RK zP;lWF$4S{cQ%CF}RuQAb^p(#)FRC5Abc!UQOENGMrAwrFxu(xI0Cf*6v3SMJd`km} zRTzxPJc$zF{E7{sVSgmb^)rVot74T|{^YD86tn6!w-U#Q@1eE`%pmeBKz?xMnnPXF zUGR!z+L|l4q+ZNwfB50qb<9{kBb$`zp4`3L+Bv!IZ^$f?nhM;RR+>yqxE^cm9DnFR z9+YWhwNv+g|4c))gnpR@hDHudG#qMWtdQ_o^ds~Gm8zqRx9m)9gk|EjYj_J?EN8PB z2M^N4`P@@3@+2n%lqGTa5qWaC#Em`67(p25GY*%NWyHwL+HcQ-#mO``bKzOIcynwR zhIIc1D+|6@lyB*L?|AzdoB?daHtn~QeMC_UnPGvTL2#zJAYc>k^b^0o4>TA$y9wge zNlesrP7eSMh`zJ$qspV?-Oh>czBmrd3n7S|+8ToF?Zn-)XEkZh-UZT-M|EAqU;aW8 z$${LgEdsXeKYUmWYOwlzW?5Q@#XJUlZe=o$e~8yyb($AMS{Tq{^l}&=Wc3l^s0f(x z?*F1xo`MQ|p8s(r6q%DGP9C*hJMZmlao+1zxUyaJLe36?QX1j1C zrihk_X}2;gxzEMMh6fDjh^jba>H$(8R>pP~MwqW4szhx9!$3i)LT>3Q7cv#+94WcvP0RNF-mQ;M#CeGn}fKDIWIP);8&f8ovU5UyF~YuBkRRO_tk^ z9=#ZoRZQy&`q1Vvht&VkBVzUO=>@&_maT3&8QtzV$R{cMnLF_U$ka8pdHTvEK3@Sz zYjs7kS9RmSraJ8vAZOP?M+<1DQ-Z$vOynw^ojD-b0UmPLmaJb=Na`ue7kar^@pyct z__l>xk_&?1s4mG@HVR^q_z)!FOi!|S2$fDCUd&nJfo8iN9V|QOW`sS&A&B6^|=X7GRxN z$PgLtBmNGBMfeh=h2FCGzuVQN+g^H)n1pms)E*~0FrLs=C!73I`|yk|0S9Zy_SWgT z-fSkOHjfj!Nb(#!>xhuL-*unsHfyo63p$yS72r6F+?WAdnzI6UGaDDfe~^40Jjhv7 z<&SVB59z2=3V<7GJd{=C%1Z*&2tBZ*2U{Jo!}Q3%zBM^`GK4rbNVpOwrv1hck0o>y zwIFn77jdTU73_xpXoU=L+e#GH>Ch+*rF~+mOGi~wQ-+QF5X~z#TJ8K^@X4*oG4gFw z=@W!}3uTipHCLA|o0M;BDNt=2z&F$k5pEO3H;^ZGyX0gCiOikKj_tO>tSLFo)QoR# zWy+$CaI3i9D8-{hpu~>yT4ZlGGoibZoY2i?8*s~L-D}JgawC6{mnkLIlA0){_}Un7 zD~&QJc7_x)8g~&x?n)PJU{fqCP@b#gTQDiEWE2zW2@A?Xj->^yry+py77Nat6muZy zHqg?PbhMUy@lK)58dPl~2B@V&|LWi5Bn}jiy(l?R!hK8ERZDc+$!&8f(L`yfPWskp zOkc_5i4xa6>Q~p#bP>?yda9YF_gMMpcae$ z^&%u*anzCoLXvWpWW*WUD(Cs^g9pX8En&iM*bv4(0w0T9jC%W9m`oVGHF`6lLnMH5 z<371yhE9K-jl{J6;_-DvKbb}@JpUh!B6hZJPUyd|bZ83F(goMTDXoL>p8WFOi@45- zAuwfny=n7NO~TmfFLrA}Yz(<;q!J7Nc*BLJt4v~f_x(As4ww+JMwv(M#d5K?z)f&p z9wFw!Ibs-c%jz$)Eld>L?jx3Frd*|DAw;B1DGgxp1^00aE=k@mN&d}Aj?EbXJVT{D zCpLK=p#`hSZHo&CqQH;%`|-}{y7YURN7Piy+844f_B|YURh^JFK0URxPHNbN7iI-7&^L-ua5&5wS-7;o`D0ykFm*9FDYR7bgOp&v1g zC54M#?0H70rG^9M-w+=Cx}V{+P1Q}sQEoKU5UrCthkD04C#I&MQs6phCZ@(#YbF-t zF4Y6FX5zJ$44$Q4+jo3ywKMT??}UP~#)Q(%I9;|R=PUWGPtP&K?w@Org8L)#{j(^| zc@Zjry%FMlHv?cz@i4261u-x+ls7LTQ|Xq5lzNv~7o!YmqMH%b4o{KPg@(l*>hq*> zRG4RFG&m|m!@o$l96_SkSL7nfpi~*4GHwcdGx?Hoqq1aiJ5eAbTK>I(wL0y?sp*#9 zd%a^_=me<*_0HR7XYIq5x~H$FbzNt$j+{)0Ewy1 z33u+0t||05kLUQD=h%apjlu>OrSjM+9$z0tu*Ud<0Qrb7ta%W7_1x9`oB2u54?7SX zg1RRowORS!5JVAhM?f1Dml8Sx4%C~?&`i_S5L-0?T2D!2}`Y{-9`7RNSX)k*TqvKPz!9+m7wc<=gnP^46jVsR1>FRsLBA z?5$j!tz3MVHXJ3}fwM*l7B^zpbGk?&9T=l{%zGOM8wxI8T1#lU&^WkNdpA#Y7QxOc zd|G>)=tR>9*od#{w4FthXmU~49wLFXp8zKW0i7t*)|H0TVF|y@#GAYs_}Z**OR z`@Xm}&w=*Ez<+ECo`W?r>!#x!3^HOhR?rK)Fu0k))+|_D<;tqtfq~@#2Lg|vya;o* z?pR`+v7P&2`vL-XGoeE~-~~aly9OjxL-!J7xUG&Dl8s})mqGyk} zL=#cctJRK-y=nqcx7}V$AUs(TMQ>EdmYJ;D+ zu^Cbm!vi)9GYdDi3)bQgxru1^^PKH4w0hRBpUc2x3I~$isZuv1|9}jUz=X2fhMpmv zM;@e9vT19?iN17cib0ROyE`^f#HX?Hgu==^Um4B`_NAlLZp>K2#yn7b>j(XMK#11vI#h$uLG7@oO5s3H@hKR@dd*) zFr)DS_`ec$PTVR>N@cM$VvC)P-G0<^&>AEzHYTX%TeC(YLRF>meuRi;W~`8plqvIW z3G;@ZH%cUBeZtD&=Qs0u>0&cWmLN1}kRVFY;z^>_4}TUzly%^6+0=xN^wWuZi*>K+ zCaw_>g*q5>TPLoi!5|{i;0?Xm42$$l0x?uGR6}UL(fthe$7)nvSO{w9`Y3ekW?dIC z^qQ=<*|NowktGh+4|87M{8^Z!fAfgdL0%BB-r5@ZAqM6yhK6ofyWZ1^$r2*7_kgrQ zqsUT9d)3zHVCWBmti*U6+SURL@gsDr@z4L)=piVnTI!K7p$`GeN`EF?i(bA<$hS9>znOnbO+~C7uo9@P2rc}Es+JmUu z@~f54Z<#PG3>@Y4%_2J%t%m|#317M%upaF%^)@k}io8v2>=5YUmf6rni4HW8uZ2N< zESJk?S=b4A+*quE!@;D5*hH}~pQ2RC*T|n!x1gFb)KddCCx~`3-yrKd~QG6(Bf76*7nN}l9g)oosR z5X)QaZzDhjI&!C{onll=wtnP!?pxhvf+(i$H6VySqKkM2UhW`y`3kWU2B$6oe*Oy? z8Fv(|2Y2@qgdf;@`P351rifLW`)YLk?F4MK>8a&%+t01K1_q~pm(^FgNZA(e%qsh* zY4-(s?0r#;)M1eu%O+4kgW-SYfFa#6gVHQ=V6C75*j;S=rO2LHm~wkEx_c;PWhpMK zjGhdtW7Yx3TL%sR%_EXI5y}jOr2!qg*w~D{lmzv9)Ap89LR$xdPoJDVS#NsxV8Uo5 zkvs^ULu{+t2J5OkQu~ysZ71GrBqn4Jaf{k)Sw8_w9;p7RZW{JV6e+?xb(Y3Td(?wE zBg_uVU9uY%i?6Q_Yel)E6FFmh_cBi6@bCy}DT*Zxo~ZceIqKIsS-BDzai=YAyJtmt zz6?##MNm^8lPpYtd{YDza-l8Z0b`JOvl&(*MloVDr0EHf4FlGYe2&U=sgv1Ao}El} zwt)#eTuB@0t}7+lbOB@S1!L{}dcy`e43#B@lrJcT4SzL^YzR{{Y`J-a!nWZ=IJgPx z%@3QoFb*0XFoeY+7o$*@@*XC}P$^OYm$Hvz)F8Fcuey|FV`M~$4!BT8pj5;?Y;%36b}dea}2QA=ixi)=R3MO1XcpHnyyg2 znIO6_DC7SuBE=k^kgmk*P7*w?#_%luMT=W`zmT->XDPFCEE)Ul!O*j2vAlgO5k3;< zI~_9NSXskrw_Kqw1;|&DlcMsGVLpwZQr#bx%UBTfstgpL?s`>6D)VokTJhb~=6@Z+ z@h4EQ)87D}iFCx%HE>{w$+NPjH4w)M%`^clM^XexzM42*s?8JFB}xT$5p346dH%0` z8^UfYXb+^yTM;~W8)Fj_zNt05pTkVLfw>vOXg@uGAzgzT>M5Gt02D$OwwZ}R1Ijx5 zsb$K<{8Qj@tVI-|;6$V(Wjp|bo3Rd9*d;bN@|VK3(RgP=2?0B`eT%p_73w|sFq$qH-zR~b4\jv#qk;T8$0`T@!qE6bi z6#t(Xplp)LU|K=g3y!(4Sk%(Pj8*bPN)s-VoLiy~NT2Iaoc4JS+GVv!_K?87p#;0k#T zTsDUfqg;?E6gZ%=9SiCB4b~B`OWIn1*L^2tEjRRFJ&s!rrxESJgMFH`cC=hW07q7j zrx&!hr|Hph0uG6X9xMsc2!U4=1WumNu>u?oR;=I|kybX$Y@|M7Gj1WjfYn6;SXqu1 z0$<+%9yiI-(xv#+tqlL>Rq)5Si0#1oCe3fZ{d9slj-7BE(ZhF4F8gnlDtTO^$^I}k&m6WZuKOmOy(!aN(ubGxGw=c zG4-Z*T8JquEZOx6ZE1pjn;<`6AW!}kkf4FJSx0mYPN5woV9FBTc20|?Pc}%v4I{sq zJW0sLoVTV7td?=XpTz=dnbg|IFhk^GMv1dyh-?yX(6MX*{f-fvQY;ac@ezV#bkToB`19fx>|{cvR99&dmT6H{sv3qEb*d}_9~zb;Ni%+udrlf<|$kb zky9m+FRARY)J9g0Re&U!BUNFxqVf>WKl9WbwD@_ou*Kc?3kn7^0E)NM% z4=phX&!)eWsDQQr5vKp=HTMwj5>U^-WXmQu>trPV5+veYi=*6#EhHZLfvLCE!3Rr7 zdkSpv4w1bm9Y#5{VJ5deVm3`)A0=87lXoQ6ZM}eH!(L-Q-^vKw?CHr(RB@RHlvq1N zK{KK&8ly6#!-)~X?ru5HUxX)1#P;`hbXuXbWbyr3F4)DAD!QnF)#IqxZ(+Be$#mq= zB&&~;sL+H}MFvacwnt0A%~0)+Vctz6k_c2iYSr~-8(4teh#1=6@#Qo9Sezk7>v~R|Vl|6-76GVV72o1nvhr^RNMd8Wu?P`-NI`Lo zGbgqfnUQ1s*xdn+tOH7W7jg=jWqwvn9Jy^-h>9z6);G~k6jC;wD1b0cFD31aB^siY z;xX5Q_?*Dt!Vo!noft(oLWq7@m&UJ)m@z}&rg+#d-ukM&t`q#NU*L5VKla{w??owP zSimykkh2qnW;E%2Dcgve=fdD^xh>C&h~hS4T0)jYSe%!^b+oc@25-{?r~wSj;k7|2 z1)o0)^3m;WYC={UGZ8LiG>8O@47t)Ai*zWm43vgS9(9WW17RpcS@`fd1&Pjf7MRn| zst@I}mjNdRsFgy!A~9Ans4W@%KUylg0egRn=z;|c9ErVm{Gs2AI^YXu z4+sJar5AmEC>ux20z}ioz-l7yzK+Ev_IeA>i#eu(F&+6Bb4M(dOSj8PxCZTSL>AI2VBo&yoY;B#c! zZ{8&6Fz9n}0OUa`aWiaZf|vpzTNnAkte3qg0v5uwklW__$e>EQ-o!8!Yb5r}Osf38 zRPdIOfq!;}h>VQn-^yq#mlsz^ILRtF8T#MI|J%7_8}08^ef!ip~IRtme7JX2Hw zIU&om!a#|%MZP6Xe9OdA&)lq@o0z}lEszA8aWG%c*%}J^UNJTGMcNk5gy^3+00vXppqE|5LTj@uM}RizlkkiV zaQOR46FLTKAFUzRvTTfMVjehv5M(*+fIZjBYQ-(b<}82AjwFW`D+pSid(`Mj))*ev kk8UXe6aPz?K;jkxC~y`}f-Kc&G2M((8shH%Iw1dl0NOd5Gynhq literal 0 HcmV?d00001 diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/ReflectionProbe-0.exr.meta b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/ReflectionProbe-0.exr.meta new file mode 100644 index 000000000..ec18256f7 --- /dev/null +++ b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 1)/ReflectionProbe-0.exr.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 05408aabfca693c4fbd44ccfd15c345b +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 1 + seamlessCubemap: 1 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 0 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 2 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2).meta b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2).meta new file mode 100644 index 000000000..f180f1bdb --- /dev/null +++ b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2).meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a2926cd0a484b644ba8ee6c454f6f058 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/LightingData.asset b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/LightingData.asset new file mode 100644 index 0000000000000000000000000000000000000000..3e8d379783a42867632a6bdaf669b2be672c5777 GIT binary patch literal 17729 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 WC>Q;p(_q{%WnpJ`DwsO(t$zZomC2C+ literal 0 HcmV?d00001 diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/LightingData.asset.meta b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/LightingData.asset.meta new file mode 100644 index 000000000..8fcdf49d1 --- /dev/null +++ b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/LightingData.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bd08f87a18207c048a762d4bbb24a0ec +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 112000000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr new file mode 100644 index 0000000000000000000000000000000000000000..ef5901f1d34a2440f5683882193a0ab74b95bb43 GIT binary patch literal 163040 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%0D@c2`*}|Q&dqx4dS^R*>_72gOu1N_@ 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

{W=r)#7x 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\jv#qk;T8$0`T@!qE6bi z6#t(Xplp)LU|K=g3y!(4Sk%(Pj8*bPN)s-VoLiy~NT2Iaoc4JS+GVv!_K?87p#;0k#T zTsDUfqg;?E6gZ%=9SiCB4b~B`OWIn1*L^2tEjRRFJ&s!rrxESJgMFH`cC=hW07q7j zrx&!hr|Hph0uG6X9xMsc2!U4=1WumNu>u?oR;=I|kybX$Y@|M7Gj1WjfYn6;SXqu1 z0$<+%9yiI-(xv#+tqlL>Rq)5Si0#1oCe3fZ{d9slj-7BE(ZhF4F8gnlDtTO^$^I}k&m6WZuKOmOy(!aN(ubGxGw=c zG4-Z*T8JquEZOx6ZE1pjn;<`6AW!}kkf4FJSx0mYPN5woV9FBTc20|?Pc}%v4I{sq zJW0sLoVTV7td?=XpTz=dnbg|IFhk^GMv1dyh-?yX(6MX*{f-fvQY;ac@ezV#bkToB`19fx>|{cvR99&dmT6H{sv3qEb*d}_9~zb;Ni%+udrlf<|$kb zky9m+FRARY)J9g0Re&U!BUNFxqVf>WKl9WbwD@_ou*Kc?3kn7^0E)NM% z4=phX&!)eWsDQQr5vKp=HTMwj5>U^-WXmQu>trPV5+veYi=*6#EhHZLfvLCE!3Rr7 zdkSpv4w1bm9Y#5{VJ5deVm3`)A0=87lXoQ6ZM}eH!(L-Q-^vKw?CHr(RB@RHlvq1N zK{KK&8ly6#!-)~X?ru5HUxX)1#P;`hbXuXbWbyr3F4)DAD!QnF)#IqxZ(+Be$#mq= zB&&~;sL+H}MFvacwnt0A%~0)+Vctz6k_c2iYSr~-8(4teh#1=6@#Qo9Sezk7>v~R|Vl|6-76GVV72o1nvhr^RNMd8Wu?P`-NI`Lo zGbgqfnUQ1s*xdn+tOH7W7jg=jWqwvn9Jy^-h>9z6);G~k6jC;wD1b0cFD31aB^siY z;xX5Q_?*Dt!Vo!noft(oLWq7@m&UJ)m@z}&rg+#d-ukM&t`q#NU*L5VKla{w??owP zSimykkh2qnW;E%2Dcgve=fdD^xh>C&h~hS4T0)jYSe%!^b+oc@25-{?r~wSj;k7|2 z1)o0)^3m;WYC={UGZ8LiG>8O@47t)Ai*zWm43vgS9(9WW17RpcS@`fd1&Pjf7MRn| zst@I}mjNdRsFgy!A~9Ans4W@%KUylg0egRn=z;|c9ErVm{Gs2AI^YXu z4+sJar5AmEC>ux20z}ioz-l7yzK+Ev_IeA>i#eu(F&+6Bb4M(dOSj8PxCZTSL>AI2VBo&yoY;B#c! zZ{8&6Fz9n}0OUa`aWiaZf|vpzTNnAkte3qg0v5uwklW__$e>EQ-o!8!Yb5r}Osf38 zRPdIOfq!;}h>VQn-^yq#mlsz^ILRtF8T#MI|J%7_8}08^ef!ip~IRtme7JX2Hw zIU&om!a#|%MZP6Xe9OdA&)lq@o0z}lEszA8aWG%c*%}J^UNJTGMcNk5gy^3+00vXppqE|5LTj@uM}RizlkkiV zaQOR46FLTKAFUzRvTTfMVjehv5M(*+fIZjBYQ-(b<}82AjwFW`D+pSid(`Mj))*ev kk8UXe6aPz?K;jkxC~y`}f-Kc&G2M((8shH%Iw1dl0NOd5Gynhq literal 0 HcmV?d00001 diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr.meta b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr.meta new file mode 100644 index 000000000..bbf2156cb --- /dev/null +++ b/Assets/Amazing Assets/Curved World/Example Scenes/Non - Shader Bending (Scene 2)/ReflectionProbe-0.exr.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: 35e952e8fa15cff45bd500bedbff09c4 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 1 + seamlessCubemap: 1 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 2 + aniso: 0 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 2 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 100 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: iOS + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #3 - Little Planet (part 2) Finished.meta b/Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #3 - Little Planet (part 2) Finished.meta new file mode 100644 index 000000000..4531bc701 --- /dev/null +++ b/Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #3 - Little Planet (part 2) Finished.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 20f47dde1a6acc149a8d89c6b33ca58d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #3 - Little Planet (part 2) Finished/LightingData.asset b/Assets/Amazing Assets/Curved World/Example Scenes/Tutorial #3 - Little Planet (part 2) Finished/LightingData.asset new file mode 100644 index 0000000000000000000000000000000000000000..aff9cae58a1903591358b7d999fe4717c9a37ace GIT binary patch literal 17681 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

{rIY@o(M^nyL|2Yo|Td$)br^ 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áU$3jX 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 + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + #pragma multi_compile_fog + #pragma multi_compile_instancing + #pragma instancing_options renderinglayer + + // Keywords + #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION + #pragma multi_compile _ LIGHTMAP_ON + #pragma multi_compile _ DYNAMICLIGHTMAP_ON + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN + #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS + #pragma multi_compile_fragment _ _ADDITIONAL_LIGHT_SHADOWS + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION + #pragma multi_compile_fragment _ _SHADOWS_SOFT + #pragma multi_compile_fragment _ _SHADOWS_SOFT_LOW + #pragma multi_compile_fragment _ _SHADOWS_SOFT_MEDIUM + #pragma multi_compile_fragment _ _SHADOWS_SOFT_HIGH + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma multi_compile_fragment _ _LIGHT_LAYERS + #pragma multi_compile_fragment _ DEBUG_DISPLAY + #pragma multi_compile_fragment _ _LIGHT_COOKIES + #pragma multi_compile _ _FORWARD_PLUS + #pragma multi_compile _ EVALUATE_SH_VERTEX + #pragma multi_compile _ EVALUATE_SH_MIXED + #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE - #include "UnityCG.cginc" - #include "Lighting.cginc" - #include "UnityPBSLighting.cginc" - #include "AutoLight.cginc" - #define SHADER_PASS SHADERPASS_FORWARD - #define _PASSFORWARD 1 + + // GraphKeywords: - + #define SHADER_PASS SHADERPASS_FORWARD + #define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + #define _PASSFORWARD 1 + #define _FOG_FRAGMENT 1 + + + #pragma shader_feature_local TIMEISCUSTOM_ON #pragma shader_feature_local ADDITIVECONFIG_ON #pragma shader_feature_local PREMULTIPLYALPHA_ON @@ -340,1268 +379,159 @@ Lighting Off #pragma shader_feature NORMALMAP_ON - #define _STANDARD 1 -// If your looking in here and thinking WTF, yeah, I know. These are taken from the SRPs, to allow us to use the same -// texturing library they use. However, since they are not included in the standard pipeline by default, there is no -// way to include them in and they have to be inlined, since someone could copy this shader onto another machine without -// Better Shaders installed. Unfortunate, but I'd rather do this and have a nice library for texture sampling instead -// of the patchy one Unity provides being inlined/emulated in HDRP/URP. Strangely, PSSL and XBoxOne libraries are not -// included in the standard SRP code, but they are in tons of Unity own projects on the web, so I grabbed them from there. + #define _URP 1 +#define REQUIRE_DEPTH_TEXTURE -#if defined(SHADER_API_GAMECORE) - #define ZERO_INITIALIZE(type, name) name = (type)0; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - #define ASSIGN_SAMPLER(samplerName, samplerValue) samplerName = samplerValue - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define SAMPLE_DEPTH_TEXTURE(textureName, samplerName, coord2) SAMPLE_TEXTURE2D(textureName, samplerName, coord2).r - #define SAMPLE_DEPTH_TEXTURE_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod).r - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_XBOXONE) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_PSSL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.GetLOD(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RW_Texture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RW_Texture2D_Array textureName - #define RW_TEXTURE3D(type, textureName) RW_Texture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - - -#elif defined(SHADER_API_D3D11) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_METAL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_VULKAN) -// This file assume SHADER_API_VULKAN is defined - // TODO: This is a straight copy from D3D11.hlsl. Go through all this stuff and adjust where needed. - - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_SWITCH) - // This file assume SHADER_API_SWITCH is defined - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_GLCORE) - - // OpenGL 4.1 SM 5.0 https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 46) - #define OPENGL4_1_SM5 1 - #else - #define OPENGL4_1_SM5 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - - #if OPENGL4_1_SM5 - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #endif - - - #elif defined(SHADER_API_GLES3) - - // GLES 3.1 + AEP shader feature https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 40) - #define GLES3_1_AEP 1 - #else - #define GLES3_1_AEP 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #if GLES3_1_AEP - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - #else - #define RW_TEXTURE2D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - #endif - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #if GLES3_1_AEP - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - #endif - - -#elif defined(SHADER_API_GLES) - - - #define uint int - - #define rcp(x) 1.0 / (x) - #define ddx_fine ddx - #define ddy_fine ddy - #define asfloat - #define asuint(x) asint(x) - #define f32tof16 - #define f16tof32 - - #define ERROR_ON_UNSUPPORTED_FUNCTION(funcName) #error #funcName is not supported on GLES 2.0 - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) #error calculate Level of Detail not supported in GLES2 - - // Texture abstraction - - #define TEXTURE2D(textureName) sampler2D textureName - #define TEXTURE2D_ARRAY(textureName) samplerCUBE textureName // No support to texture2DArray - #define TEXTURECUBE(textureName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY(textureName) samplerCUBE textureName // No supoport to textureCubeArray and can't emulate with texture2DArray - #define TEXTURE3D(textureName) sampler3D textureName - - #define TEXTURE2D_FLOAT(textureName) sampler2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to texture2DArray - #define TEXTURECUBE_FLOAT(textureName) samplerCUBE_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to textureCubeArray - #define TEXTURE3D_FLOAT(textureName) sampler3D_float textureName - - #define TEXTURE2D_HALF(textureName) sampler2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to texture2DArray - #define TEXTURECUBE_HALF(textureName) samplerCUBE_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to textureCubeArray - #define TEXTURE3D_HALF(textureName) sampler3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - #define TEXTURECUBE_SHADOW(textureName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - - #define RW_TEXTURE2D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - - #define SAMPLER(samplerName) - #define SAMPLER_CMP(samplerName) - - #define TEXTURE2D_PARAM(textureName, samplerName) sampler2D textureName - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURE3D_PARAM(textureName, samplerName) sampler3D textureName - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) tex2D(textureName, coord2) - - #if (SHADER_TARGET >= 30) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) tex2Dlod(textureName, float4(coord2, 0, lod)) - #else - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, lod) - #endif - - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) tex2Dbias(textureName, float4(coord2, 0, bias)) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_LOD) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_BIAS) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_GRAD) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) texCUBE(textureName, coord3) - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) texCUBEbias(textureName, float4(coord3, bias)) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) tex3D(textureName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE3D_LOD) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) SHADOW2D_SAMPLE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_SHADOW) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) SHADOWCUBE_SAMPLE(textureName, samplerName, coord4) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_SHADOW) - - - // Not supported. Can't define as error because shader library is calling these functions. - #define LOAD_TEXTURE2D(textureName, unCoord2) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE3D(textureName, unCoord3) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D_LOD) - - // Gather not supported. Fallback to regular texture sampling. - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - -#else -#error unsupported shader api -#endif - - - - -// default flow control attributes -#ifndef UNITY_BRANCH -# define UNITY_BRANCH -#endif -#ifndef UNITY_FLATTEN -# define UNITY_FLATTEN -#endif -#ifndef UNITY_UNROLL -# define UNITY_UNROLL -#endif -#ifndef UNITY_UNROLLX -# define UNITY_UNROLLX(_x) -#endif -#ifndef UNITY_LOOP -# define UNITY_LOOP -#endif - - - - - - // data across stages, stripped like the above. - struct VertexToPixel - { - UNITY_POSITION(pos); - float3 worldPos : TEXCOORD0; - float3 worldNormal : TEXCOORD1; - float4 worldTangent : TEXCOORD2; - float4 texcoord0 : TEXCOORD3; - // float4 texcoord1 : TEXCOORD4; - // float4 texcoord2 : TEXCOORD5; - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD6; - // #endif - - // #if %SCREENPOSREQUIREKEY% - float4 screenPos : TEXCOORD7; - // #endif - - float4 lmap : TEXCOORD8; - #if UNITY_SHOULD_SAMPLE_SH - half3 sh : TEXCOORD9; // SH - #endif - #ifdef LIGHTMAP_ON - UNITY_LIGHTING_COORDS(10,11) - UNITY_FOG_COORDS(12) - #else - UNITY_FOG_COORDS(10) - UNITY_SHADOW_COORDS(11) + // this has to be here or specular color will be ignored. Not in SG code + #if _SIMPLELIT + #define _SPECULAR_COLOR #endif - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - // #if %EXTRAV2F0REQUIREKEY% - float4 extraV2F0 : TEXCOORD13; - // #endif + // Includes + + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" + - // #if %EXTRAV2F1REQUIREKEY% - float4 extraV2F1 : TEXCOORD14; - // #endif + #undef WorldNormalVector + #define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix) + + #define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal) - // #if %EXTRAV2F2REQUIREKEY% - float4 extraV2F2 : TEXCOORD15; - // #endif + #define _WorldSpaceLightPos0 _MainLightPosition + + #define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name); + #define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name); - // #if %EXTRAV2F3REQUIREKEY% - float4 extraV2F3 : TEXCOORD16; - // #endif + #define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z) + #define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod) + #define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord) + #define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord) - // #if %EXTRAV2F4REQUIREKEY% - // float4 extraV2F4 : TEXCOORD17; - // #endif + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod) + + #if defined(UNITY_COMPILER_HLSL) + #define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0; + #else + #define UNITY_INITIALIZE_OUTPUT(type,name) + #endif - // #if %EXTRAV2F5REQUIREKEY% - // float4 extraV2F5 : TEXCOORD18; - // #endif + #define sampler2D_float sampler2D + #define sampler2D_half sampler2D - // #if %EXTRAV2F6REQUIREKEY% - // float4 extraV2F6 : TEXCOORD19; - // #endif + - // #if %EXTRAV2F7REQUIREKEY% - // float4 extraV2F7 : TEXCOORD20; - // #endif + // data across stages, stripped like the above. + struct VertexToPixel + { + float4 pos : SV_POSITION; + float3 worldPos : TEXCOORD0; + float3 worldNormal : TEXCOORD1; + float4 worldTangent : TEXCOORD2; + float4 texcoord0 : TEXCOORD3; + // float4 texcoord1 : TEXCOORD4; + // float4 texcoord2 : TEXCOORD5; + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD6; + // #endif + + // #if %SCREENPOSREQUIREKEY% + float4 screenPos : TEXCOORD7; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + half4 vertexColor : COLOR; + // #endif + + #if defined(LIGHTMAP_ON) + float2 lightmapUV : TEXCOORD8; + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float2 dynamicLightmapUV : TEXCOORD9; + #endif + #if !defined(LIGHTMAP_ON) + float4 probeOcclusion : TEXCOORD8; + float3 sh : TEXCOORD10; + #endif + + #if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT) + float4 fogFactorAndVertexLight : TEXCOORD11; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD12; + #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD13; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD14; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD15; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD16; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD17; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD18; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD19; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD20; + // #endif + + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : CUSTOM_INSTANCE_ID; + #endif + #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) + uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; + #endif + #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) + uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; + #endif + #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; + #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float4 previousPositionCS : TEXCOORD21; // Contain previous transform position (in case of skinning for example) + float4 positionCS : TEXCOORD22; + #endif + }; - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO - }; @@ -1849,9 +779,9 @@ Lighting Off #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) #endif - #undef UNITY_MATRIX_I_M + #undef GetWorldToObjectMatrix() - #define UNITY_MATRIX_I_M unity_WorldToObject + #define GetWorldToObjectMatrix() unity_WorldToObject #endif @@ -1897,7 +827,7 @@ Lighting Off float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) { float eye = GetLinearEyeDepth(uv); - float3 camView = mul((float3x3)UNITY_MATRIX_M, transpose(mul(UNITY_MATRIX_I_M, UNITY_MATRIX_I_V)) [2].xyz); + float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz); float dt = dot(worldSpaceViewDir, camView); float3 div = worldSpaceViewDir/dt; @@ -1923,7 +853,7 @@ Lighting Off { float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); float3 norms = DecodeViewNormalStereo(depthNorms); - norms = mul((float3x3)UNITY_MATRIX_V, norms) * 0.5 + 0.5; + norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5; return norms; } #elif _HDRP && !_DECALSHADER @@ -2013,7 +943,9 @@ Lighting Off - + CBUFFER_START(UnityPerMaterial) + + half4 _Color; half _Alpha; half _AlphaCutoffValue; @@ -2231,6 +1163,8 @@ Lighting Off + CBUFFER_END + @@ -3356,20 +2290,52 @@ Lighting Off #endif + + #if defined(_PASSSHADOW) + float3 _LightDirection; + float3 _LightPosition; + #endif + + #if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + + #define GetWorldToViewMatrix() _ViewMatrix + #define UNITY_MATRIX_I_V _InvViewMatrix + #define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix) + #define UNITY_MATRIX_I_P _InvProjMatrix + #define GetWorldToHClipMatrix() _ViewProjMatrix + #define UNITY_MATRIX_I_VP _InvViewProjMatrix + #define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix + #define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix + #define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix + + void MotionVectorPositionZBias(VertexToPixel input) + { + #if UNITY_REVERSED_Z + input.pos.z -= unity_MotionVectorsParams.z * input.pos.w; + #else + input.pos.z += unity_MotionVectorsParams.z * input.pos.w; + #endif + } + + #endif + // vertex shader VertexToPixel Vert (VertexData v) { + VertexToPixel o = (VertexToPixel)0; + UNITY_SETUP_INSTANCE_ID(v); - VertexToPixel o; - UNITY_INITIALIZE_OUTPUT(VertexToPixel,o); - UNITY_TRANSFER_INSTANCE_ID(v,o); + UNITY_TRANSFER_INSTANCE_ID(v, o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); -#if !_TESSELLATION_ON - ChainModifyVertex(v, o, _Time); -#endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + VertexData previousMesh = v; + #endif + #if !_TESSELLATION_ON + ChainModifyVertex(v, o, _Time); + #endif - o.pos = UnityObjectToClipPos(v.vertex); o.texcoord0 = v.texcoord0; // o.texcoord1 = v.texcoord1; // o.texcoord2 = v.texcoord2; @@ -3382,3670 +2348,373 @@ Lighting Off o.vertexColor = v.vertexColor; // #endif - // #if %SCREENPOSREQUIREKEY% - o.screenPos = ComputeScreenPos(o.pos); - // #endif - - o.worldPos = mul(GetObjectToWorldMatrix(), v.vertex).xyz; - o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldTangent = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); - - - #ifdef DYNAMICLIGHTMAP_ON - o.lmap.zw = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; - #endif - #ifdef LIGHTMAP_ON - o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; - #endif - - // SH/ambient and vertex lights - #ifndef LIGHTMAP_ON - #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL - o.sh = 0; - // Approximated illumination from non-important point lights - #ifdef VERTEXLIGHT_ON - o.sh += Shade4PointLights ( - unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, - unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb, - unity_4LightAtten0, o.worldPos, o.worldNormal); - #endif - o.sh = ShadeSHPerVertex (o.worldNormal, o.sh); - #endif - #endif // !LIGHTMAP_ON - - UNITY_TRANSFER_LIGHTING(o,v.texcoord1.xy); // pass shadow and, possibly, light cookie coordinates to pixel shader - #ifdef FOG_COMBINED_WITH_TSPACE - UNITY_TRANSFER_FOG_COMBINED_WITH_TSPACE(o,o.pos); // pass fog coordinates to pixel shader - #elif defined (FOG_COMBINED_WITH_WORLD_POS) - UNITY_TRANSFER_FOG_COMBINED_WITH_WORLD_POS(o,o.pos); // pass fog coordinates to pixel shader - #else - UNITY_TRANSFER_FOG(o,o.pos); // pass fog coordinates to pixel shader - #endif - - return o; - } - - - - // fragment shader - fixed4 Frag (VertexToPixel IN - #ifdef _DEPTHOFFSET_ON - , out float outputDepth : SV_Depth - #endif - #if NEED_FACING - , bool facing : SV_IsFrontFace - #endif - ) : SV_Target - { - UNITY_SETUP_INSTANCE_ID(IN); - // prepare and unpack data - #ifdef FOG_COMBINED_WITH_TSPACE - UNITY_EXTRACT_FOG_FROM_TSPACE(IN); - #elif defined (FOG_COMBINED_WITH_WORLD_POS) - UNITY_EXTRACT_FOG_FROM_WORLD_POS(IN); - #else - UNITY_EXTRACT_FOG(IN); - #endif - - ShaderData d = CreateShaderData(IN - #if NEED_FACING - , facing - #endif - ); - Surface l = (Surface)0; - - - #ifdef _DEPTHOFFSET_ON - l.outputDepth = outputDepth; - #endif - + // This return the camera relative position (if enable) + float3 positionWS = TransformObjectToWorld(v.vertex.xyz); + float3 normalWS = TransformObjectToWorldNormal(v.normal); + float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w); - - l.Albedo = half3(0.5, 0.5, 0.5); - l.Normal = float3(0,0,1); - l.Occlusion = 1; - l.Alpha = 1; - - ChainSurfaceFunction(l, d); - - - - #ifdef _DEPTHOFFSET_ON - outputDepth = l.outputDepth; - #endif + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + o.worldPos = positionWS; + o.worldNormal = normalWS; + o.worldTangent = tangentWS; - #ifndef USING_DIRECTIONAL_LIGHT - fixed3 lightDir = normalize(UnityWorldSpaceLightDir(d.worldSpacePosition)); - #else - fixed3 lightDir = _WorldSpaceLightPos0.xyz; - #endif - float3 worldViewDir = normalize(UnityWorldSpaceViewDir(d.worldSpacePosition)); - - // compute lighting & shadowing factor - UNITY_LIGHT_ATTENUATION(atten, IN, d.worldSpacePosition) - - #if _USESPECULAR || _USESPECULARWORKFLOW || _SPECULARFROMMETALLIC - #ifdef UNITY_COMPILER_HLSL - SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0; + // For some very odd reason, in 2021.2, we can't use Unity's defines, but have to use our own.. + #if _PASSSHADOW + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - o.worldPos); #else - SurfaceOutputStandardSpecular o; + float3 lightDirectionWS = _LightDirection; #endif - o.Specular = l.Specular; - o.Occlusion = l.Occlusion; - o.Smoothness = l.Smoothness; - #elif _BDRFLAMBERT || _BDRF3 || _SIMPLELIT - #ifdef UNITY_COMPILER_HLSL - SurfaceOutput o = (SurfaceOutput)0; + // Define shadow pass specific clip position for Universal + o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS)); + #if UNITY_REVERSED_Z + o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE); #else - SurfaceOutput o; + o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE); #endif - - o.Specular = l.Specular; - o.Gloss = l.Smoothness; - _SpecColor.rgb = l.Specular; // fucking hell Unity, wtf.. - #else - #ifdef UNITY_COMPILER_HLSL - SurfaceOutputStandard o = (SurfaceOutputStandard)0; - #else - SurfaceOutputStandard o; - #endif - o.Smoothness = l.Smoothness; - o.Metallic = l.Metallic; - o.Occlusion = l.Occlusion; - #endif - - o.Albedo = l.Albedo; - o.Emission = l.Emission; - o.Alpha = l.Alpha; - #if _WORLDSPACENORMAL - o.Normal = l.Normal; - #else - o.Normal = normalize(TangentToWorldSpace(d, l.Normal)); - #endif - - fixed4 c = 0; - // Setup lighting environment - UnityGI gi; - UNITY_INITIALIZE_OUTPUT(UnityGI, gi); - gi.indirect.diffuse = 0; - gi.indirect.specular = 0; - gi.light.color = _LightColor0.rgb; - gi.light.dir = lightDir; - // Call GI (lightmaps/SH/reflections) lighting function - UnityGIInput giInput; - UNITY_INITIALIZE_OUTPUT(UnityGIInput, giInput); - giInput.light = gi.light; - giInput.worldPos = d.worldSpacePosition; - giInput.worldViewDir = worldViewDir; - giInput.atten = atten; - #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) - giInput.lightmapUV = IN.lmap; - #else - giInput.lightmapUV = 0.0; - #endif - #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL - giInput.ambient = IN.sh; - #else - giInput.ambient.rgb = 0.0; - #endif - giInput.probeHDR[0] = unity_SpecCube0_HDR; - giInput.probeHDR[1] = unity_SpecCube1_HDR; - #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) - giInput.boxMin[0] = unity_SpecCube0_BoxMin; // .w holds lerp value for blending - #endif - #ifdef UNITY_SPECCUBE_BOX_PROJECTION - giInput.boxMax[0] = unity_SpecCube0_BoxMax; - giInput.probePosition[0] = unity_SpecCube0_ProbePosition; - giInput.boxMax[1] = unity_SpecCube1_BoxMax; - giInput.boxMin[1] = unity_SpecCube1_BoxMin; - giInput.probePosition[1] = unity_SpecCube1_ProbePosition; - #endif - - - - #if defined(_OVERRIDE_SHADOWMASK) - float4 mulColor = saturate(dot(l.ShadowMask, unity_OcclusionMaskSelector)); - gi.light.color *= mulColor; - giInput.light.color *= mulColor; - #endif - - #if _UNLIT - c.rgb = l.Albedo; - c.a = l.Alpha; - #elif _BDRF3 || _SIMPLELIT - LightingBlinnPhong_GI(o, giInput, gi); - #if defined(_OVERRIDE_BAKEDGI) - gi.indirect.diffuse = l.DiffuseGI; - gi.indirect.specular = l.SpecularGI; - #endif - c += LightingBlinnPhong (o, d.worldSpaceViewDir, gi); - #elif _USESPECULAR || _USESPECULARWORKFLOW || _SPECULARFROMMETALLIC - LightingStandardSpecular_GI(o, giInput, gi); - #if defined(_OVERRIDE_BAKEDGI) - gi.indirect.diffuse = l.DiffuseGI; - gi.indirect.specular = l.SpecularGI; - #endif - c += LightingStandardSpecular (o, d.worldSpaceViewDir, gi); - #else - LightingStandard_GI(o, giInput, gi); - #if defined(_OVERRIDE_BAKEDGI) - gi.indirect.diffuse = l.DiffuseGI; - gi.indirect.specular = l.SpecularGI; - #endif - c += LightingStandard (o, d.worldSpaceViewDir, gi); - #endif - - c.rgb += o.Emission; - - ChainFinalColorForward(l, d, c); - - #if !DISABLEFOG - UNITY_APPLY_FOG(_unity_fogCoord, c); // apply fog - #endif - - - return c; - } - - ENDCG - - } - - - - // ---- deferred shading pass: - Pass - { - Name "DEFERRED" - Tags { "LightMode" = "Deferred" } - - Tags - { - "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" - } - Cull [_CullingOption] - ZWrite [_ZWrite] - ZTest [_ZTestMode] - ColorMask [_ColorMask] -Lighting Off - - - CGPROGRAM - - #pragma vertex Vert - #pragma fragment Frag - - // compile directives - #pragma target 3.0 - #pragma multi_compile_instancing - #pragma exclude_renderers nomrt - #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 - #pragma multi_compile_prepassfinal - #include "HLSLSupport.cginc" - #define UNITY_INSTANCED_LOD_FADE - #define UNITY_INSTANCED_SH - #define UNITY_INSTANCED_LIGHTMAPSTS - #include "UnityShaderVariables.cginc" - #include "UnityShaderUtilities.cginc" - #include "UnityCG.cginc" - #include "Lighting.cginc" - #include "UnityPBSLighting.cginc" - - #define _PASSGBUFFER 1 - - - #pragma shader_feature_local TIMEISCUSTOM_ON - #pragma shader_feature_local ADDITIVECONFIG_ON - #pragma shader_feature_local PREMULTIPLYALPHA_ON - #pragma shader_feature_local PREMULTIPLYCOLOR_ON - #pragma shader_feature_local SPLITRGBA_ON - #pragma shader_feature_local SHAPEADD_ON - - #pragma shader_feature_local SHAPE1SCREENUV_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local SHAPE2SCREENUV_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local SHAPE3SCREENUV_ON /////////////////Pipeline specific implementation - - #pragma shader_feature_local SHAPEDEBUG_ON - - #pragma shader_feature_local SHAPE1CONTRAST_ON - #pragma shader_feature_local SHAPE1DISTORT_ON - #pragma shader_feature_local SHAPE1ROTATE_ON - #pragma shader_feature_local SHAPE1SHAPECOLOR_ON - - #pragma shader_feature_local SHAPE2_ON - #pragma shader_feature_local SHAPE2CONTRAST_ON - #pragma shader_feature_local SHAPE2DISTORT_ON - #pragma shader_feature_local SHAPE2ROTATE_ON - #pragma shader_feature_local SHAPE2SHAPECOLOR_ON - - #pragma shader_feature_local SHAPE3_ON - #pragma shader_feature_local SHAPE3CONTRAST_ON - #pragma shader_feature_local SHAPE3DISTORT_ON - #pragma shader_feature_local SHAPE3ROTATE_ON - #pragma shader_feature_local SHAPE3SHAPECOLOR_ON - - #pragma shader_feature_local GLOW_ON - #pragma shader_feature_local GLOWTEX_ON - #pragma shader_feature_local DEPTHGLOW_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local MASK_ON - #pragma shader_feature_local COLORRAMP_ON - #pragma shader_feature_local COLORRAMPGRAD_ON - #pragma shader_feature_local COLORGRADING_ON - #pragma shader_feature_local HSV_ON - #pragma shader_feature_local POSTERIZE_ON - #pragma shader_feature_local PIXELATE_ON - #pragma shader_feature_local DISTORT_ON - #pragma shader_feature_local SHAKEUV_ON - #pragma shader_feature_local WAVEUV_ON - #pragma shader_feature_local ROUNDWAVEUV_ON - #pragma shader_feature_local TWISTUV_ON - #pragma shader_feature_local DOODLE_ON - #pragma shader_feature_local OFFSETSTREAM_ON - #pragma shader_feature_local TEXTURESCROLL_ON - #pragma shader_feature_local VERTOFFSET_ON - #pragma shader_feature_local RIM_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local BACKFACETINT_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local POLARUV_ON - #pragma shader_feature_local POLARUVDISTORT_ON - #pragma shader_feature_local SHAPE1MASK_ON - #pragma shader_feature_local TRAILWIDTH_ON - #pragma shader_feature_local LIGHTANDSHADOW_ON - #pragma shader_feature_local SHAPETEXOFFSET_ON - #pragma shader_feature_local SHAPEWEIGHTS_ON - - #pragma shader_feature_local ALPHACUTOFF_ON - #pragma shader_feature_local ALPHASMOOTHSTEP_ON - #pragma shader_feature_local FADE_ON - #pragma shader_feature_local FADEBURN_ON - #pragma shader_feature_local ALPHAFADE_ON - #pragma shader_feature_local ALPHAFADEUSESHAPE1_ON - #pragma shader_feature_local ALPHAFADEUSEREDCHANNEL_ON - #pragma shader_feature_local ALPHAFADETRANSPARENCYTOO_ON - #pragma shader_feature_local ALPHAFADEINPUTSTREAM_ON - #pragma shader_feature_local CAMDISTFADE_ON - - #pragma shader_feature NORMALMAP_ON - - - #define _STANDARD 1 -// If your looking in here and thinking WTF, yeah, I know. These are taken from the SRPs, to allow us to use the same -// texturing library they use. However, since they are not included in the standard pipeline by default, there is no -// way to include them in and they have to be inlined, since someone could copy this shader onto another machine without -// Better Shaders installed. Unfortunate, but I'd rather do this and have a nice library for texture sampling instead -// of the patchy one Unity provides being inlined/emulated in HDRP/URP. Strangely, PSSL and XBoxOne libraries are not -// included in the standard SRP code, but they are in tons of Unity own projects on the web, so I grabbed them from there. - -#if defined(SHADER_API_GAMECORE) - - #define ZERO_INITIALIZE(type, name) name = (type)0; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - #define ASSIGN_SAMPLER(samplerName, samplerValue) samplerName = samplerValue - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define SAMPLE_DEPTH_TEXTURE(textureName, samplerName, coord2) SAMPLE_TEXTURE2D(textureName, samplerName, coord2).r - #define SAMPLE_DEPTH_TEXTURE_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod).r - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_XBOXONE) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_PSSL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.GetLOD(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RW_Texture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RW_Texture2D_Array textureName - #define RW_TEXTURE3D(type, textureName) RW_Texture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - - -#elif defined(SHADER_API_D3D11) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_METAL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_VULKAN) -// This file assume SHADER_API_VULKAN is defined - // TODO: This is a straight copy from D3D11.hlsl. Go through all this stuff and adjust where needed. - - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_SWITCH) - // This file assume SHADER_API_SWITCH is defined - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_GLCORE) - - // OpenGL 4.1 SM 5.0 https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 46) - #define OPENGL4_1_SM5 1 - #else - #define OPENGL4_1_SM5 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - - #if OPENGL4_1_SM5 - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #endif - - - #elif defined(SHADER_API_GLES3) - - // GLES 3.1 + AEP shader feature https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 40) - #define GLES3_1_AEP 1 - #else - #define GLES3_1_AEP 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #if GLES3_1_AEP - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - #else - #define RW_TEXTURE2D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - #endif - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #if GLES3_1_AEP - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - #endif - - -#elif defined(SHADER_API_GLES) - - - #define uint int - - #define rcp(x) 1.0 / (x) - #define ddx_fine ddx - #define ddy_fine ddy - #define asfloat - #define asuint(x) asint(x) - #define f32tof16 - #define f16tof32 - - #define ERROR_ON_UNSUPPORTED_FUNCTION(funcName) #error #funcName is not supported on GLES 2.0 - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) #error calculate Level of Detail not supported in GLES2 - - // Texture abstraction - - #define TEXTURE2D(textureName) sampler2D textureName - #define TEXTURE2D_ARRAY(textureName) samplerCUBE textureName // No support to texture2DArray - #define TEXTURECUBE(textureName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY(textureName) samplerCUBE textureName // No supoport to textureCubeArray and can't emulate with texture2DArray - #define TEXTURE3D(textureName) sampler3D textureName - - #define TEXTURE2D_FLOAT(textureName) sampler2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to texture2DArray - #define TEXTURECUBE_FLOAT(textureName) samplerCUBE_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to textureCubeArray - #define TEXTURE3D_FLOAT(textureName) sampler3D_float textureName - - #define TEXTURE2D_HALF(textureName) sampler2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to texture2DArray - #define TEXTURECUBE_HALF(textureName) samplerCUBE_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to textureCubeArray - #define TEXTURE3D_HALF(textureName) sampler3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - #define TEXTURECUBE_SHADOW(textureName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - - #define RW_TEXTURE2D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - - #define SAMPLER(samplerName) - #define SAMPLER_CMP(samplerName) - - #define TEXTURE2D_PARAM(textureName, samplerName) sampler2D textureName - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURE3D_PARAM(textureName, samplerName) sampler3D textureName - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) tex2D(textureName, coord2) - - #if (SHADER_TARGET >= 30) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) tex2Dlod(textureName, float4(coord2, 0, lod)) - #else - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, lod) - #endif - - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) tex2Dbias(textureName, float4(coord2, 0, bias)) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_LOD) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_BIAS) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_GRAD) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) texCUBE(textureName, coord3) - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) texCUBEbias(textureName, float4(coord3, bias)) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) tex3D(textureName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE3D_LOD) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) SHADOW2D_SAMPLE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_SHADOW) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) SHADOWCUBE_SAMPLE(textureName, samplerName, coord4) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_SHADOW) - - - // Not supported. Can't define as error because shader library is calling these functions. - #define LOAD_TEXTURE2D(textureName, unCoord2) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE3D(textureName, unCoord3) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D_LOD) - - // Gather not supported. Fallback to regular texture sampling. - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - -#else -#error unsupported shader api -#endif - - - - -// default flow control attributes -#ifndef UNITY_BRANCH -# define UNITY_BRANCH -#endif -#ifndef UNITY_FLATTEN -# define UNITY_FLATTEN -#endif -#ifndef UNITY_UNROLL -# define UNITY_UNROLL -#endif -#ifndef UNITY_UNROLLX -# define UNITY_UNROLLX(_x) -#endif -#ifndef UNITY_LOOP -# define UNITY_LOOP -#endif - - - - - - - - // data across stages, stripped like the above. - struct VertexToPixel - { - UNITY_POSITION(pos); // must be named pos because Unity does stupid macro stuff - float3 worldPos : TEXCOORD0; - float3 worldNormal : TEXCOORD1; - float4 worldTangent : TEXCOORD2; - float4 texcoord0 : TEXCOORD3; - // float4 texcoord1 : TEXCOORD4; - // float4 texcoord2 : TEXCOORD5; - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD6; - // #endif - - // #if %SCREENPOSREQUIREKEY% - float4 screenPos : TEXCOORD7; - // #endif - - #ifndef DIRLIGHTMAP_OFF - float3 viewDir : TEXCOORD8; - #endif - float4 lmap : TEXCOORD9; - #ifndef LIGHTMAP_ON - #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL - half3 sh : TEXCOORD10; // SH - #endif - #else - #ifdef DIRLIGHTMAP_OFF - float4 lmapFadePos : TEXCOORD11; - #endif - #endif - - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - // #if %EXTRAV2F0REQUIREKEY% - float4 extraV2F0 : TEXCOORD12; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - float4 extraV2F1 : TEXCOORD13; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - float4 extraV2F2 : TEXCOORD14; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - float4 extraV2F3 : TEXCOORD15; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // float4 extraV2F4 : TEXCOORD16; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // float4 extraV2F5 : TEXCOORD17; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // float4 extraV2F6 : TEXCOORD18; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // float4 extraV2F7 : TEXCOORD19; - // #endif - - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO - }; - - - - // data describing the user output of a pixel - struct Surface - { - half3 Albedo; - half Height; - half3 Normal; - half Smoothness; - half3 Emission; - half Metallic; - half3 Specular; - half Occlusion; - half SpecularPower; // for simple lighting - half Alpha; - float outputDepth; // if written, SV_Depth semantic is used. ShaderData.clipPos.z is unused value - // HDRP Only - half SpecularOcclusion; - half SubsurfaceMask; - half Thickness; - half CoatMask; - half CoatSmoothness; - half Anisotropy; - half IridescenceMask; - half IridescenceThickness; - int DiffusionProfileHash; - float SpecularAAThreshold; - float SpecularAAScreenSpaceVariance; - // requires _OVERRIDE_BAKEDGI to be defined, but is mapped in all pipelines - float3 DiffuseGI; - float3 BackDiffuseGI; - float3 SpecularGI; - float ior; - float3 transmittanceColor; - float atDistance; - float transmittanceMask; - // requires _OVERRIDE_SHADOWMASK to be defines - float4 ShadowMask; - - // for decals - float NormalAlpha; - float MAOSAlpha; - - - }; - - // Data the user declares in blackboard blocks - struct Blackboard - { - - float blackboardDummyData; - }; - - // data the user might need, this will grow to be big. But easy to strip - struct ShaderData - { - float4 clipPos; // SV_POSITION - float3 localSpacePosition; - float3 localSpaceNormal; - float3 localSpaceTangent; - - float3 worldSpacePosition; - float3 worldSpaceNormal; - float3 worldSpaceTangent; - float tangentSign; - - float3 worldSpaceViewDir; - float3 tangentSpaceViewDir; - - float4 texcoord0; - float4 texcoord1; - float4 texcoord2; - float4 texcoord3; - - float2 screenUV; - float4 screenPos; - - float4 vertexColor; - bool isFrontFace; - - float4 extraV2F0; - float4 extraV2F1; - float4 extraV2F2; - float4 extraV2F3; - float4 extraV2F4; - float4 extraV2F5; - float4 extraV2F6; - float4 extraV2F7; - - float3x3 TBNMatrix; - Blackboard blackboard; - }; - - struct VertexData - { - #if SHADER_TARGET > 30 - // uint vertexID : SV_VertexID; - #endif - float4 vertex : POSITION; - float3 normal : NORMAL; - float4 tangent : TANGENT; - float4 texcoord0 : TEXCOORD0; - - // optimize out mesh coords when not in use by user or lighting system - #if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER) - float4 texcoord1 : TEXCOORD1; - #endif - - #if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON))) - float4 texcoord2 : TEXCOORD2; - #endif - - #if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON))) - float4 texcoord1 : TEXCOORD1; - #endif - #if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON))) - float4 texcoord2 : TEXCOORD2; - #endif - - - #if _HDRP - float4 texcoord1 : TEXCOORD1; - float4 texcoord2 : TEXCOORD2; - #endif - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) - float3 previousPositionOS : TEXCOORD4; // Contain previous transform position (in case of skinning for example) - #if defined (_ADD_PRECOMPUTED_VELOCITY) - float3 precomputedVelocity : TEXCOORD5; // Add Precomputed Velocity (Alembic computes velocities on runtime side). - #endif - #endif - - UNITY_VERTEX_INPUT_INSTANCE_ID - }; - - struct TessVertex - { - float4 vertex : INTERNALTESSPOS; - float3 normal : NORMAL; - float4 tangent : TANGENT; - float4 texcoord0 : TEXCOORD0; - float4 texcoord1 : TEXCOORD1; - float4 texcoord2 : TEXCOORD2; - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - // #if %EXTRAV2F0REQUIREKEY% - float4 extraV2F0 : TEXCOORD5; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - float4 extraV2F1 : TEXCOORD6; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - float4 extraV2F2 : TEXCOORD7; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - float4 extraV2F3 : TEXCOORD8; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // float4 extraV2F4 : TEXCOORD9; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // float4 extraV2F5 : TEXCOORD10; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // float4 extraV2F6 : TEXCOORD11; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // float4 extraV2F7 : TEXCOORD12; - // #endif - - #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) - float3 previousPositionOS : TEXCOORD13; // Contain previous transform position (in case of skinning for example) - #if defined (_ADD_PRECOMPUTED_VELOCITY) - float3 precomputedVelocity : TEXCOORD14; - #endif - #endif - - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO - }; - - struct ExtraV2F - { - float4 extraV2F0; - float4 extraV2F1; - float4 extraV2F2; - float4 extraV2F3; - float4 extraV2F4; - float4 extraV2F5; - float4 extraV2F6; - float4 extraV2F7; - Blackboard blackboard; - float4 time; - }; - - - float3 WorldToTangentSpace(ShaderData d, float3 normal) - { - return mul(d.TBNMatrix, normal); - } - - float3 TangentToWorldSpace(ShaderData d, float3 normal) - { - return mul(normal, d.TBNMatrix); - } - - // in this case, make standard more like SRPs, because we can't fix - // unity_WorldToObject in HDRP, since it already does macro-fu there - - #if _STANDARD - float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); }; - float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); }; - float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); }; - float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); }; - float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; } - float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; } - #if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER)) - #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod) - #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod) - #else - #define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod) - #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) - #endif - - #undef UNITY_MATRIX_I_M - - #define UNITY_MATRIX_I_M unity_WorldToObject - - - #endif - - float3 GetCameraWorldPosition() - { - #if _HDRP - return GetCameraRelativePositionWS(_WorldSpaceCameraPos); - #else - return _WorldSpaceCameraPos; - #endif - } - - #if _GRABPASSUSED - #if _STANDARD - TEXTURE2D(%GRABTEXTURE%); - SAMPLER(sampler_%GRABTEXTURE%); - #endif - - half3 GetSceneColor(float2 uv) - { - #if _STANDARD - return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb; - #else - return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv); - #endif - } - #endif - - - - #if _STANDARD - UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); - float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); } - float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); } - float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); } - #else - float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); } - float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); } - float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); } - #endif - - float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) - { - float eye = GetLinearEyeDepth(uv); - float3 camView = mul((float3x3)UNITY_MATRIX_M, transpose(mul(UNITY_MATRIX_I_M, UNITY_MATRIX_I_V)) [2].xyz); - - float dt = dot(worldSpaceViewDir, camView); - float3 div = worldSpaceViewDir/dt; - float3 wpos = (eye * div) + GetCameraWorldPosition(); - return wpos; - } - - #if _HDRP - float3 ObjectToWorldSpacePosition(float3 pos) - { - return GetAbsolutePositionWS(TransformObjectToWorld(pos)); - } - #else - float3 ObjectToWorldSpacePosition(float3 pos) - { - return TransformObjectToWorld(pos); - } - #endif - - #if _STANDARD - UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture); - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); - float3 norms = DecodeViewNormalStereo(depthNorms); - norms = mul((float3x3)UNITY_MATRIX_V, norms) * 0.5 + 0.5; - return norms; - } - #elif _HDRP && !_DECALSHADER - - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - NormalData nd; - DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd); - return nd.normalWS; - } - #elif _URP - #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) - #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" - #endif - - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) - return SampleSceneNormals(uv); - #else - float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir); - return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5; - #endif - - } - #endif - - #if _HDRP - - half3 UnpackNormalmapRGorAG(half4 packednormal) - { - // This do the trick - packednormal.x *= packednormal.w; - - half3 normal; - normal.xy = packednormal.xy * 2 - 1; - normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); - return normal; - } - half3 UnpackNormal(half4 packednormal) - { - #if defined(UNITY_NO_DXT5nm) - return packednormal.xyz * 2 - 1; - #else - return UnpackNormalmapRGorAG(packednormal); - #endif - } - #endif - #if _HDRP || _URP - - half3 UnpackScaleNormal(half4 packednormal, half scale) - { - #ifndef UNITY_NO_DXT5nm - // Unpack normal as DXT5nm (1, y, 1, x) or BC5 (x, y, 0, 1) - // Note neutral texture like "bump" is (0, 0, 1, 1) to work with both plain RGB normal and DXT5nm/BC5 - packednormal.x *= packednormal.w; - #endif - half3 normal; - normal.xy = (packednormal.xy * 2 - 1) * scale; - normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); - return normal; - } - - #endif - - - void GetSun(out float3 lightDir, out float3 color) - { - lightDir = float3(0.5, 0.5, 0); - color = 1; - #if _HDRP - if (_DirectionalLightCount > 0) - { - DirectionalLightData light = _DirectionalLightDatas[0]; - lightDir = -light.forward.xyz; - color = light.color; - } - #elif _STANDARD - lightDir = normalize(_WorldSpaceLightPos0.xyz); - color = _LightColor0.rgb; - #elif _URP - Light light = GetMainLight(); - lightDir = light.direction; - color = light.color; - #endif - } - - - - - half4 _Color; - half _Alpha; - half _AlphaCutoffValue; - - half _TimingSeed; - - #if TIMEISCUSTOM_ON - float4 globalCustomTime; - #endif - - half4 _MainTex_ST, _ShapeColor; - half _ShapeXSpeed, _ShapeYSpeed, _ShapeColorWeight, _ShapeAlphaWeight; - - #if SHAPE1CONTRAST_ON - half _ShapeContrast, _ShapeBrightness; - #endif - - #if SHAPE1DISTORT_ON - half4 _ShapeDistortTex_ST; - half _ShapeDistortAmount, _ShapeDistortXSpeed, _ShapeDistortYSpeed; - #endif - - #if SHAPE1ROTATE_ON - half _ShapeRotationOffset, _ShapeRotationSpeed; - #endif - - #if OFFSETSTREAM_ON - half _OffsetSh1; - #endif - - #if SHAPEWEIGHTS_ON - half _Sh1BlendOffset; - #endif - - #if SHAPE2_ON - half4 _Shape2Tex_ST, _Shape2Color; - half _Shape2XSpeed, _Shape2YSpeed, _Shape2ColorWeight, _Shape2AlphaWeight; - #if SHAPE2CONTRAST_ON - half _Shape2Contrast, _Shape2Brightness; - #endif - #if SHAPE2DISTORT_ON - half4 _Shape2DistortTex_ST; - half _Shape2DistortAmount, _Shape2DistortXSpeed, _Shape2DistortYSpeed; - #endif - #if SHAPE2ROTATE_ON - half _Shape2RotationOffset, _Shape2RotationSpeed; - #endif - #if OFFSETSTREAM_ON - half _OffsetSh2; - #endif - #if SHAPEWEIGHTS_ON - half _Sh2BlendOffset; - #endif - #endif - - #if SHAPE3_ON - half4 _Shape3Tex_ST, _Shape3Color; - half _Shape3XSpeed, _Shape3YSpeed, _Shape3ColorWeight, _Shape3AlphaWeight; - #if SHAPE3CONTRAST_ON - half _Shape3Contrast, _Shape3Brightness; - #endif - #if SHAPE3DISTORT_ON - half4 _Shape3DistortTex_ST; - half _Shape3DistortAmount, _Shape3DistortXSpeed, _Shape3DistortYSpeed; - #endif - #if SHAPE3ROTATE_ON - half _Shape3RotationOffset, _Shape3RotationSpeed; - #endif - #if OFFSETSTREAM_ON - half _OffsetSh3; - #endif - #if SHAPEWEIGHTS_ON - half _Sh3BlendOffset; - #endif - #endif - - #if GLOW_ON - half4 _GlowColor; - half _Glow, _GlowGlobal; - #if GLOWTEX_ON - half4 _GlowTex_ST; - #endif - #endif - - #if MASK_ON - half4 _MaskTex_ST; - half _MaskPow; - #endif - - #if COLORRAMP_ON - half _ColorRampLuminosity, _ColorRampBlend; - #endif - - #if ALPHASMOOTHSTEP_ON - half _AlphaStepMin, _AlphaStepMax; - #endif - - #if ALPHAFADE_ON - half _AlphaFadeAmount, _AlphaFadeSmooth, _AlphaFadePow; - #endif - - #if HSV_ON - half _HsvShift, _HsvSaturation, _HsvBright; - #endif - - #if POSTERIZE_ON - half _PosterizeNumColors; - #endif - - #if PIXELATE_ON - half _PixelateSize; - #endif - - #if DISTORT_ON - half4 _DistortTex_ST; - half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount; - #endif - - #if TEXTURESCROLL_ON - half _TextureScrollXSpeed, _TextureScrollYSpeed; - #endif - - #if SHAKEUV_ON - half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY; - #endif - - #if WAVEUV_ON - half _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY; - #endif - - #if ROUNDWAVEUV_ON - half _RoundWaveStrength, _RoundWaveSpeed; - #endif - - #if TWISTUV_ON - half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius; - #endif - - #if DOODLE_ON - half _HandDrawnAmount, _HandDrawnSpeed; - #endif - - #if ROUNDWAVEUV_ON || PIXELATE_ON - half4 _MainTex_TexelSize; - #endif - - #if VERTOFFSET_ON - half4 _VertOffsetTex_ST; - half _VertOffsetAmount, _VertOffsetPower, _VertOffsetTexXSpeed, _VertOffsetTexYSpeed; - #endif - - #if FADE_ON - half4 _FadeTex_ST; - half _FadeAmount, _FadeTransition, _FadePower, _FadeScrollXSpeed, _FadeScrollYSpeed; - #if FADEBURN_ON - half4 _FadeBurnColor, _FadeBurnTex_ST; - half _FadeBurnWidth, _FadeBurnGlow; - #endif - #endif - - #if COLORGRADING_ON - half3 _ColorGradingLight, _ColorGradingMiddle, _ColorGradingDark; - half _ColorGradingMidPoint; - #endif - - #if CAMDISTFADE_ON - half _CamDistFadeStepMin, _CamDistFadeStepMax, _CamDistProximityFade; - #endif - - #if RIM_ON - half _RimBias, _RimScale, _RimPower, _RimIntensity, _RimAddAmount, _RimErodesAlpha; - half4 _RimColor; - #endif - - #if BACKFACETINT_ON - half4 _BackFaceTint, _FrontFaceTint; - #endif - - #if SHAPEDEBUG_ON - half _DebugShape; - #endif - - #if SHAPE1MASK_ON - half4 _Shape1MaskTex_ST; - half _Shape1MaskPow; - #endif - - #if TRAILWIDTH_ON - half _TrailWidthPower; - #endif - - #if LIGHTANDSHADOW_ON - half3 _All1VfxLightDir; - half _ShadowAmount, _ShadowStepMin, _ShadowStepMax, _LightAmount; - half4 _LightColor; - #endif - - #if SHAPETEXOFFSET_ON - half _RandomSh1Mult, _RandomSh2Mult, _RandomSh3Mult; - #endif - - #if DEPTHGLOW_ON - half _DepthGlowDist, _DepthGlowPow, _DepthGlow, _DepthGlowGlobal; - half4 _DepthGlowColor; - #endif - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half _ScreenUvShDistScale,_ScreenUvSh2DistScale, _ScreenUvSh3DistScale; - #endif - - #if NORMALMAP_ON - half _NormalStrength; - #endif - - - - - - - - - - - TEXTURE2D(_MainTex); - SAMPLER(sampler_MainTex); - - #if SHAPE1DISTORT_ON - TEXTURE2D(_ShapeDistortTex); - SAMPLER(sampler_ShapeDistortTex); - #endif - - #if SHAPE2_ON - TEXTURE2D(_Shape2Tex); - SAMPLER(sampler_Shape2Tex); - #if SHAPE2DISTORT_ON - TEXTURE2D(_Shape2DistortTex); - SAMPLER(sampler_Shape2DistortTex); - #endif - #endif - - #if SHAPE3_ON - TEXTURE2D(_Shape3Tex); - SAMPLER(sampler_Shape3Tex); - #if SHAPE3DISTORT_ON - TEXTURE2D(_Shape3DistortTex); - SAMPLER(sampler_Shape3DistortTex); - #endif - #endif - - #if GLOW_ON - #if GLOWTEX_ON - TEXTURE2D(_GlowTex); - SAMPLER(sampler_GlowTex); - #endif - #endif - - #if MASK_ON - TEXTURE2D(_MaskTex); - SAMPLER(sampler_MaskTex); - #endif - - #if COLORRAMP_ON - TEXTURE2D(_ColorRampTex); - SAMPLER(sampler_ColorRampTex); - #endif - - #if COLORRAMPGRAD_ON - TEXTURE2D(_ColorRampTexGradient); - SAMPLER(sampler_ColorRampTexGradient); - #endif - - #if DISTORT_ON - TEXTURE2D(_DistortTex); - SAMPLER(sampler_DistortTex); - #endif - - #if VERTOFFSET_ON - TEXTURE2D(_VertOffsetTex); - SAMPLER(sampler_VertOffsetTex); - #endif - - #if FADE_ON - TEXTURE2D(_FadeTex); - SAMPLER(sampler_FadeTex); - #if FADEBURN_ON - TEXTURE2D(_FadeBurnTex); - SAMPLER(sampler_FadeBurnTex); - #endif - #endif - - #if SHAPE1MASK_ON - TEXTURE2D(_Shape1MaskTex); - SAMPLER(sampler_Shape1MaskTex); - #endif - - #if TRAILWIDTH_ON - TEXTURE2D(_TrailWidthGradient); - SAMPLER(sampler_TrailWidthGradient); - #endif - - #if NORMALMAP_ON - TEXTURE2D(_NormalMap); - SAMPLER(sampler_NormalMap); - #endif - - half4 SampleTextureWithScroll(in Texture2D _tex, in SamplerState _sampler, in float2 uv, in half scrollXSpeed, in half scrollYSpeed, in float time) - { - half2 _uv = uv; - _uv.x += (time * scrollXSpeed) % 1; - _uv.y += (time * scrollYSpeed) % 1; - return SAMPLE_TEXTURE2D(_tex, _sampler, _uv); - } - - half EaseOutQuint(half x) - { - return 1 - pow(1 - x, 5); - } - - half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax) - { - return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin); - } - - float2 RotateUvs(float2 uv, half rotation, half4 scaleAndTranslate) - { - half2 center = half2(0.5 * scaleAndTranslate.x + scaleAndTranslate.z, 0.5 * scaleAndTranslate.y + scaleAndTranslate.w); - half cosAngle = cos(rotation); - half sinAngle = sin(rotation); - uv -= center; - uv = mul(half2x2(cosAngle, -sinAngle, sinAngle, cosAngle), uv); - uv += center; - return uv; - } - - half4 GetDebugColor(float4 resColor, half4 shape1, half4 shape2, half4 shape3) - { - half4 res = resColor; - - //MAKE SURE THE FOLLOWING CODE BLOCK IS UNCOMMENTED------------------------------------------- - #if SHAPEDEBUG_ON - if(_DebugShape < 1.5) return shape1; - #if SHAPE2_ON - else if (_DebugShape < 2.5) return shape2; - #endif - #if SHAPE3_ON - else return shape3; - #endif - #endif - - return res; - } - - void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d) - { - //uvDistTex --> extraV2F0 - //uvSh1DistTex --> extraV2F1 - //uvSh2DistTex --> extraV2F2 - //uvSh3DistTex --> extraV2F3 - - #if VERTOFFSET_ON - #if TIMEISCUSTOM_ON - const half time = v.texcoord0.z + globalCustomTime.y; - #else - const half time = v.texcoord0.z + _Time.y; - #endif - half4 offsetUv = half4(TRANSFORM_TEX(v.texcoord0.xy, _VertOffsetTex), 0, 0); - offsetUv.x += (time * _VertOffsetTexXSpeed) % 1; - offsetUv.y += (time * _VertOffsetTexYSpeed) % 1; - v.vertex.xyz += v.normal * _VertOffsetAmount * pow(SAMPLE_TEXTURE2D_LOD(_VertOffsetTex, sampler_VertOffsetTex, offsetUv, 0).r, _VertOffsetPower); - #endif - - #if DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F0.xy = TRANSFORM_TEX(v.texcoord0.xy, _DistortTex); - #endif - - #if SHAPE1DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F1.xy = TRANSFORM_TEX(v.texcoord0.xy, _ShapeDistortTex); - #endif - - #if SHAPE2_ON - #if SHAPE2DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F2.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape2DistortTex);; - #endif - #endif - - #if SHAPE3_ON - #if SHAPE3DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F3.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape3DistortTex); - #endif - #endif - } - - void Ext_SurfaceFunction0 (inout Surface o, ShaderData d) - { - //i.uvSeed -> d.texcoord0.xy - - float seed = d.texcoord0.z + _TimingSeed; - #if TIMEISCUSTOM_ON - const float4 shaderTime = globalCustomTime; - #else - const float4 shaderTime = _Time; - #endif - float time = shaderTime.y + seed; - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half2 originalUvs = d.texcoord0.xy; - #endif - - #if PIXELATE_ON - half aspectRatio = _MainTex_TexelSize.x / _MainTex_TexelSize.y; - half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio); - d.texcoord0.xy = floor(d.texcoord0.xy * pixelSize) / pixelSize; - #endif - - #if NORMALMAP_ON - half4 normalSample = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, d.texcoord0.xy); - half3 normalTS = UnpackNormal(normalSample); - normalTS.xy *= _NormalStrength; - o.Normal = normalTS; - #endif - - #if TWISTUV_ON - half2 tempUv = d.texcoord0.xy - half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); - _TwistUvRadius *= (_MainTex_ST.x + _MainTex_ST.y) / 2; - half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius; - half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0; - half s = sin(theta); - half c = cos(theta); - half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0); - tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta); - tempUv += half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); - d.texcoord0.xy = tempUv; - #endif - - #if DOODLE_ON - half2 uvCopy = d.texcoord0.xy; - _HandDrawnSpeed = (floor((shaderTime.x + seed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed; - uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4); - uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4); - d.texcoord0.xy = lerp(d.texcoord0.xy, d.texcoord0.xy + uvCopy, 0.0005 * _HandDrawnAmount); - #endif - - #if SHAKEUV_ON - half xShake = sin((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvX; - half yShake = cos((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvY; - d.texcoord0.xy += half2(xShake * 0.012, yShake * 0.01); - #endif - - #if WAVEUV_ON - half2 uvWave = half2(_WaveX * _MainTex_ST.x, _WaveY * _MainTex_ST.y) - d.texcoord0.xy; - #if ATLAS_ON - uvWave = half2(_WaveX, _WaveY) - uvRect; - #endif - uvWave.x *= _ScreenParams.x / _ScreenParams.y; - half angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((time * _WaveSpeed) % 360.0); - d.texcoord0.xy = d.texcoord0.xy + normalize(uvWave) * sin(angWave) * (_WaveStrength / 1000.0); - #endif - - #if ROUNDWAVEUV_ON - half xWave = ((0.5 * _MainTex_ST.x) - d.texcoord0.x); - half yWave = ((0.5 * _MainTex_ST.y) - d.texcoord0.y) * (_MainTex_TexelSize.w / _MainTex_TexelSize.z); - half ripple = -sqrt(xWave*xWave + yWave* yWave); - d.texcoord0.xy += (sin((ripple + time * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1; - #endif - - #if POLARUV_ON - half2 prePolarUvs = d.texcoord0.xy; - d.texcoord0.xy = d.texcoord0.xy - half2(0.5, 0.5); - d.texcoord0.xy = half2(atan2(d.texcoord0.y, d.texcoord0.x) / (1.0 * 6.28318530718), length(d.texcoord0.xy) * 2.0); - d.texcoord0.xy *= _MainTex_ST.xy; - #endif - - #if DISTORT_ON - #if POLARUVDISTORT_ON - half2 distortUvs = TRANSFORM_TEX(d.texcoord0.xy, _DistortTex); - #else - half2 distortUvs = d.extraV2F0.xy; - #endif - distortUvs.x += ((shaderTime.x + seed) * _DistortTexXSpeed) % 1; - distortUvs.y += ((shaderTime.x + seed) * _DistortTexYSpeed) % 1; - #if ATLAS_ON - d.extraV2F0.xy = half2((d.extraV2F0.x - _MinXUV) / (_MaxXUV - _MinXUV), (d.extraV2F0.y - _MinYUV) / (_MaxYUV - _MinYUV)); - #endif - half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, distortUvs).r - 0.5) * 0.2 * _DistortAmount; - d.texcoord0.x += distortAmnt; - d.texcoord0.y += distortAmnt; - #endif - - #if TEXTURESCROLL_ON - d.texcoord0.x += (time * _TextureScrollXSpeed) % 1; - d.texcoord0.y += (time * _TextureScrollYSpeed) % 1; - #endif - - #if TRAILWIDTH_ON - half width = pow(SAMPLE_TEXTURE2D(_TrailWidthGradient, sampler_TrailWidthGradient, d.texcoord0).r, _TrailWidthPower); - d.texcoord0.y = (d.texcoord0.y * 2 - 1) / width * 0.5 + 0.5; - clip(d.texcoord0.y); - clip(1 - d.texcoord0.y); - #endif - - float2 shape1Uv = d.texcoord0.xy; - #if SHAPE2_ON - float2 shape2Uv = shape1Uv; - #endif - #if SHAPE3_ON - float2 shape3Uv = shape1Uv; - #endif - - #if CAMDISTFADE_ON || SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half camDistance = distance(d.worldSpacePosition, _WorldSpaceCameraPos); - #endif - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half2 uvOffsetPostFx = d.texcoord0.xy - originalUvs; - d.texcoord0.xy = d.screenPos.xy / d.screenPos.w; - d.texcoord0.x = d.texcoord0.x * (_ScreenParams.x / _ScreenParams.y); - d.texcoord0.x -= 0.5; - d.texcoord0.xy -= uvOffsetPostFx; - originalUvs += uvOffsetPostFx; - half distanceZoom = camDistance * 0.1; - half2 scaleWithDistUvs = d.texcoord0.xy * distanceZoom + ((-distanceZoom * 0.5) + 0.5); - #if SHAPE1SCREENUV_ON - shape1Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvShDistScale); - #else - shape1Uv = originalUvs; - #endif - #if SHAPE2SCREENUV_ON && SHAPE2_ON - shape2Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh2DistScale); - #else - #if SHAPE2_ON - shape2Uv = originalUvs; - #endif - #endif - #if SHAPE3SCREENUV_ON && SHAPE3_ON - shape3Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh3DistScale); - #else - #if SHAPE3_ON - shape3Uv = originalUvs; - #endif - #endif - #endif - - shape1Uv = TRANSFORM_TEX(shape1Uv, _MainTex); - #if OFFSETSTREAM_ON - shape1Uv.x += i.offsetCustomData.x * _OffsetSh1; - shape1Uv.y += i.offsetCustomData.y * _OffsetSh1; - #endif - #if SHAPETEXOFFSET_ON - shape1Uv += seed * _RandomSh1Mult; - #endif - - #if SHAPE1DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh1DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _ShapeDistortTex); - #else - half2 sh1DistortUvs = d.extraV2F1.xy; - #endif - - sh1DistortUvs.x += ((time + seed) * _ShapeDistortXSpeed) % 1; - sh1DistortUvs.y += ((time + seed) * _ShapeDistortYSpeed) % 1; - half distortAmount = (SAMPLE_TEXTURE2D(_ShapeDistortTex, sampler_ShapeDistortTex, sh1DistortUvs).r - 0.5) * 0.2 * _ShapeDistortAmount; - shape1Uv.x += distortAmount; - shape1Uv.y += distortAmount; - #endif - #if SHAPE1ROTATE_ON - shape1Uv = RotateUvs(shape1Uv, _ShapeRotationOffset + ((_ShapeRotationSpeed * time) % 6.28318530718), _MainTex_ST); - #endif - - half4 shape1 = SampleTextureWithScroll(_MainTex, sampler_MainTex, shape1Uv, _ShapeXSpeed, _ShapeYSpeed, time); - #if SHAPE1SHAPECOLOR_ON - shape1.a = shape1.r; - shape1.rgb = _ShapeColor.rgb; - #else - shape1 *= _ShapeColor; - #endif - #if SHAPE1CONTRAST_ON - #if SHAPE1SHAPECOLOR_ON - shape1.a = saturate((shape1.a - 0.5) * _ShapeContrast + 0.5 + _ShapeBrightness); - #else - shape1.rgb = max(0, (shape1.rgb - half3(0.5, 0.5, 0.5)) * _ShapeContrast + half3(0.5, 0.5, 0.5) + _ShapeBrightness); - #endif - #endif - - half4 shape2 = 1.0; - #if SHAPE2_ON - shape2Uv = TRANSFORM_TEX(shape2Uv, _Shape2Tex); - #if OFFSETSTREAM_ON - shape2Uv.x += i.offsetCustomData.x * _OffsetSh2; - shape2Uv.y += i.offsetCustomData.y * _OffsetSh2; - #endif - #if SHAPETEXOFFSET_ON - shape2Uv += seed * _RandomSh2Mult; - #endif - #if SHAPE2DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh2DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape2DistortTex); - #else - half2 sh2DistortUvs = d.extraV2F2.xy; - #endif - sh2DistortUvs.x += ((time + seed) * _Shape2DistortXSpeed) % 1; - sh2DistortUvs.y += ((time + seed) * _Shape2DistortYSpeed) % 1; - half distortAmnt2 = (SAMPLE_TEXTURE2D(_Shape2DistortTex, sampler_Shape2DistortTex, sh2DistortUvs).r - 0.5) * 0.2 * _Shape2DistortAmount; - shape2Uv.x += distortAmnt2; - shape2Uv.y += distortAmnt2; - #endif - #if SHAPE2ROTATE_ON - shape2Uv = RotateUvs(shape2Uv, _Shape2RotationOffset + ((_Shape2RotationSpeed * time) % 6.28318530718), _Shape2Tex_ST); - #endif - - shape2 = SampleTextureWithScroll(_Shape2Tex, sampler_Shape2Tex, shape2Uv, _Shape2XSpeed, _Shape2YSpeed, time); - #if SHAPE2SHAPECOLOR_ON - shape2.a = shape2.r; - shape2.rgb = _Shape2Color.rgb; - #else - shape2 *= _Shape2Color; - #endif - #if SHAPE2CONTRAST_ON - #if SHAPE2SHAPECOLOR_ON - shape2.a = max(0, (shape2.a - 0.5) * _Shape2Contrast + 0.5 + _Shape2Brightness); - #else - shape2.rgb = max(0, (shape2.rgb - half3(0.5, 0.5, 0.5)) * _Shape2Contrast + half3(0.5, 0.5, 0.5) + _Shape2Brightness); - #endif - #endif - #endif - - half4 shape3 = 1.0; - #if SHAPE3_ON - shape3Uv = TRANSFORM_TEX(shape3Uv, _Shape3Tex); - - #if OFFSETSTREAM_ON - shape3Uv.x += i.offsetCustomData.x * _OffsetSh3; - shape3Uv.y += i.offsetCustomData.y * _OffsetSh3; - #endif - #if SHAPETEXOFFSET_ON - shape3Uv += seed * _RandomSh3Mult; - #endif - #if SHAPE3DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh3DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape3DistortTex); - #else - half2 sh3DistortUvs = d.extraV2F3.xy; - #endif - sh3DistortUvs.x += ((time + seed) * _Shape3DistortXSpeed) % 1; - sh3DistortUvs.y += ((time + seed) * _Shape3DistortYSpeed) % 1; - half distortAmnt3 = (SAMPLE_TEXTURE2D(_Shape3DistortTex, sampler_Shape3DistortTex, sh3DistortUvs).r - 0.5) * 0.3 * _Shape3DistortAmount; - shape3Uv.x += distortAmnt3; - shape3Uv.y += distortAmnt3; - #endif - #if SHAPE3ROTATE_ON - shape3Uv = RotateUvs(shape3Uv, _Shape3RotationOffset + ((_Shape3RotationSpeed * time) % 6.28318530718), _Shape3Tex_ST); - #endif - shape3 = SampleTextureWithScroll(_Shape3Tex, sampler_Shape3Tex, shape3Uv, _Shape3XSpeed, _Shape3YSpeed, time); - #if SHAPE3SHAPECOLOR_ON - shape3.a = shape3.r; - shape3.rgb = _Shape3Color.rgb; - #else - shape3 *= _Shape3Color; - #endif - #if SHAPE3CONTRAST_ON - #if SHAPE3SHAPECOLOR_ON - shape3.a = max(0, (shape3.a - 0.5) * _Shape3Contrast + 0.5 + _Shape3Brightness); - #else - shape3.rgb = max(0, (shape3.rgb - half3(0.5, 0.5, 0.5)) * _Shape3Contrast + half3(0.5, 0.5, 0.5) + _Shape3Brightness); - #endif - #endif - #endif - - half4 col = shape1; - //Mix all shapes pre: change weights if custom vertex effect active - #if SHAPEWEIGHTS_ON - half shapeWeightOffset; - #if SHAPE2_ON - shapeWeightOffset = i.offsetCustomData.z * _Sh1BlendOffset; - _ShapeColorWeight = max(0, _ShapeColorWeight + shapeWeightOffset); - _ShapeAlphaWeight = max(0, _ShapeAlphaWeight + shapeWeightOffset); - shapeWeightOffset = i.offsetCustomData.z * _Sh2BlendOffset; - _Shape2ColorWeight = max(0, _Shape2ColorWeight + shapeWeightOffset); - _Shape2AlphaWeight = max(0, _Shape2AlphaWeight + shapeWeightOffset); - #endif - #if SHAPE3_ON - shapeWeightOffset = i.offsetCustomData.z * _Sh3BlendOffset; - _Shape3ColorWeight = max(0, _Shape3ColorWeight + shapeWeightOffset); - _Shape3AlphaWeight = max(0, _Shape3AlphaWeight + shapeWeightOffset); - #endif - #endif - - //Mix all shapes - #if SHAPE2_ON - #if !SPLITRGBA_ON - _ShapeAlphaWeight = _ShapeColorWeight; - _Shape2AlphaWeight = _Shape2ColorWeight; - #endif - #if SHAPE3_ON //Shape3 On - #if !SPLITRGBA_ON - _Shape3AlphaWeight = _Shape3ColorWeight; - #endif - #if SHAPEADD_ON - col.rgb = ((shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight)) + (shape3.rgb * _Shape3ColorWeight); - col.a = saturate(max(shape3.a * _Shape3AlphaWeight, max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight))); - #else - col.rgb = ((shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight)) * (shape3.rgb * _Shape3ColorWeight); - col.a = saturate(((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)) * (shape3.a * _Shape3AlphaWeight)); - #endif - #else //Shape3 Off - #if SHAPEADD_ON - col.rgb = (shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight); - col.a = saturate(max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight)); - #else - col.rgb = (shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight); - col.a = saturate((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)); - #endif - #endif - #endif - - #if SHAPE1MASK_ON - col = lerp(col, shape1, pow(SAMPLE_TEXTURE2D(_Shape1MaskTex, sampler_Shape1MaskTex, TRANSFORM_TEX(i.uvSeed.xy, _Shape1MaskTex)).r, _Shape1MaskPow)); - #endif - - #if PREMULTIPLYCOLOR_ON - half luminance = 0; - luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; - luminance *= col.a; - col.a = min(luminance, col.a); - #endif - - col.rgb *= _Color.rgb * d.vertexColor.rgb; - #if PREMULTIPLYALPHA_ON - col.rgb *= col.a; - #endif - - #if !PREMULTIPLYCOLOR_ON && (COLORRAMP_ON || ALPHAFADE_ON || COLORGRADING_ON || FADE_ON || (ADDITIVECONFIG_ON && (GLOW_ON || DEPTHGLOW_ON))) - half luminance = 0; - luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; - luminance *= col.a; - #endif - - #if (FADE_ON || ALPHAFADE_ON) && ALPHAFADEINPUTSTREAM_ON - col.a *= d.vertexColor.a; - d.vertexColor.a = d.texcoord0.w; - #endif - - #if FADE_ON - half preFadeAlpha = col.a; - _FadeAmount = saturate(_FadeAmount + (1 - d.vertexColor.a)); - _FadeTransition = max(0.01, _FadeTransition * EaseOutQuint(saturate(_FadeAmount))); - half2 fadeUv; - fadeUv = d.texcoord0.xy + seed; - fadeUv.x += (time * _FadeScrollXSpeed) % 1; - fadeUv.y += (time * _FadeScrollYSpeed) % 1; - half2 tiledUvFade1 = TRANSFORM_TEX(fadeUv, _FadeTex); - #if ADDITIVECONFIG_ON && !PREMULTIPLYCOLOR_ON - preFadeAlpha *= luminance; - #endif - _FadeAmount = saturate(pow(_FadeAmount, _FadePower)); - #if FADEBURN_ON - half2 tiledUvFade2 = TRANSFORM_TEX(fadeUv, _FadeBurnTex); - half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; - half fadeNaturalEdge = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - col.a *= fadeNaturalEdge; - half fadeBurn = saturate(smoothstep(0.0 , _FadeTransition + _FadeBurnWidth, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - fadeBurn = fadeNaturalEdge - fadeBurn; - _FadeBurnColor.rgb *= _FadeBurnGlow; - col.rgb += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2).rgb * _FadeBurnColor.rgb * preFadeAlpha; - #else - half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; - float fade = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - col.a *= fade; - #endif - #if ALPHAFADETRANSPARENCYTOO_ON - col.a *= 1 - _FadeAmount; - #endif - #endif - - #if ALPHAFADE_ON - half alphaFadeLuminance; - _AlphaFadeAmount = saturate(_AlphaFadeAmount + (1 - d.vertexColor.a)); - _AlphaFadeAmount = saturate(pow(_AlphaFadeAmount, _AlphaFadePow)); - _AlphaFadeSmooth = max(0.01, _AlphaFadeSmooth * EaseOutQuint(saturate(_AlphaFadeAmount))); - #if ALPHAFADEUSESHAPE1_ON - alphaFadeLuminance = shape1.r; - #else - alphaFadeLuminance = luminance; - #endif - alphaFadeLuminance = saturate(alphaFadeLuminance - 0.001); - #if ALPHAFADEUSEREDCHANNEL_ON - col.a *= col.r; - #endif - col.a = saturate(col.a); - float alphaFade = saturate(smoothstep(0.0 , _AlphaFadeSmooth, RemapFloat(1.0 - _AlphaFadeAmount, 0.0, 1.0, -1.0, 1.0) + alphaFadeLuminance)); - col.a *= alphaFade; - #if ALPHAFADETRANSPARENCYTOO_ON - col.a *= 1 - _AlphaFadeAmount; - #endif - #endif - - #if BACKFACETINT_ON - col.rgb = lerp(col.rgb * _BackFaceTint, col.rgb * _FrontFaceTint, step(0, dot(d.worldSpaceNormal, d.worldSpaceViewDir))); - #endif - - //#if LIGHTANDSHADOW_ON - //half NdL = saturate(dot(d.worldSpaceNormal, -_All1VfxLightDir)); - //col.rgb += _LightColor * _LightAmount * NdL; - //NdL = max(_ShadowAmount, NdL); - //NdL = smoothstep(_ShadowStepMin, _ShadowStepMax, NdL); - //col.rgb *= NdL; - //#endif - - #if COLORGRADING_ON - col.rgb *= lerp(lerp(_ColorGradingDark, _ColorGradingMiddle, luminance/_ColorGradingMidPoint), - lerp(_ColorGradingMiddle, _ColorGradingLight, (luminance - _ColorGradingMidPoint)/(1.0 - _ColorGradingMidPoint)), step(_ColorGradingMidPoint, luminance)); - #endif - - #if COLORRAMP_ON - half colorRampLuminance = saturate(luminance + _ColorRampLuminosity); - #if COLORRAMPGRAD_ON - half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(colorRampLuminance, 0)); - #else - half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(colorRampLuminance, 0)); - #endif - col.rgb = lerp(col.rgb, colorRampRes.rgb, _ColorRampBlend); - col.a = lerp(col.a, saturate(col.a * colorRampRes.a), _ColorRampBlend); - #endif - - #if POSTERIZE_ON && !POSTERIZEOUTLINE_ON - col.rgb = floor(col.rgb / (1.0 / _PosterizeNumColors)) * (1.0 / _PosterizeNumColors); - #endif - - #if DEPTHGLOW_ON - half sceneDepthDiff = GetLinearEyeDepth(d.screenUV) - d.screenPos.w; - #endif - - #if RIM_ON - half NdV = 1 - abs(dot(d.worldSpaceNormal, d.worldSpaceViewDir)); - half rimFactor = saturate(_RimBias + _RimScale * pow(NdV, _RimPower)); - half4 rimCol = _RimColor * rimFactor; - rimCol.rgb *= _RimIntensity; - col.rgb = lerp(col.rgb * (rimCol.rgb + half3(1,1,1)), col.rgb + rimCol.rgb, _RimAddAmount); - col.a = saturate(col.a * (1 - rimFactor * _RimErodesAlpha)); - #endif - - #if DEPTHGLOW_ON - half depthGlowMask = saturate(_DepthGlowDist * pow((1 - sceneDepthDiff), _DepthGlowPow)); - col.rgb = lerp(col.rgb, _DepthGlowGlobal * col.rgb, depthGlowMask); - half depthGlowMult = 1; - #if ADDITIVECONFIG_ON - depthGlowMult = luminance; - #endif - col.rgb += _DepthGlowColor.rgb * _DepthGlow * depthGlowMask * col.a * depthGlowMult; - #endif - - #if GLOW_ON - half glowMask = 1; - #if GLOWTEX_ON - glowMask = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, TRANSFORM_TEX(d.texcoord0.xy, _GlowTex)); - #endif - col.rgb *= _GlowGlobal * glowMask; - half glowMult = 1; - #if ADDITIVECONFIG_ON - glowMult = luminance; - #endif - - col.rgb += _GlowColor.rgb * _Glow * glowMask * col.a * glowMult; - #endif - - #if HSV_ON - half3 resultHsv = half3(col.rgb); - half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180); - half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180); - resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x - + (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y - + (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z; - resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x - + (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y - + (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z; - resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x - + (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y - + (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z; - col.rgb = resultHsv; - #endif - - #if CAMDISTFADE_ON - col.a *= 1 - saturate(smoothstep(_CamDistFadeStepMin, _CamDistFadeStepMax, camDistance)); - col.a *= smoothstep(0.0, _CamDistProximityFade, camDistance); - #endif - - #if MASK_ON - half2 maskUv = d.texcoord0.xy; - #if POLARUV_ON - maskUv = prePolarUvs; - #endif - half4 maskSample = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, TRANSFORM_TEX(maskUv, _MaskTex)); - half mask = pow(min(maskSample.r, maskSample.a), _MaskPow); - col.a *= mask; - #endif - - #if ALPHASMOOTHSTEP_ON - col.a = smoothstep(_AlphaStepMin, _AlphaStepMax, col.a); - #endif - - half4 debugColor = col; - #if SHAPEDEBUG_ON - debugColor = GetDebugColor(col, shape1, shape2, shape3); - #endif - - clip(debugColor.a - _AlphaCutoffValue - 0.01); - - //#if FOG_ON - //UNITY_APPLY_FOG(i.fogCoord, col); - //#endif - - //Don't use a starting i.color.a lower than 1 unless using vertex stream dissolve when using a FADE effect - #if !FADE_ON && !ALPHAFADE_ON - col.a *= _Alpha * d.vertexColor.a; - #endif - #if FADE_ON || ALPHAFADE_ON - col.a *= _Alpha; - #endif - #if ADDITIVECONFIG_ON - col.rgb *= col.a; - #endif - - - #if SHAPEDEBUG_ON - o.Albedo = debugColor.rgb; - o.Alpha = debugColor.a; - #else - o.Albedo = col.rgb; - o.Alpha = col.a; - #endif - } - - - - - - void ChainSurfaceFunction(inout Surface l, inout ShaderData d) - { - Ext_SurfaceFunction0(l, d); - // Ext_SurfaceFunction1(l, d); - // Ext_SurfaceFunction2(l, d); - // Ext_SurfaceFunction3(l, d); - // Ext_SurfaceFunction4(l, d); - // Ext_SurfaceFunction5(l, d); - // Ext_SurfaceFunction6(l, d); - // Ext_SurfaceFunction7(l, d); - // Ext_SurfaceFunction8(l, d); - // Ext_SurfaceFunction9(l, d); - // Ext_SurfaceFunction10(l, d); - // Ext_SurfaceFunction11(l, d); - // Ext_SurfaceFunction12(l, d); - // Ext_SurfaceFunction13(l, d); - // Ext_SurfaceFunction14(l, d); - // Ext_SurfaceFunction15(l, d); - // Ext_SurfaceFunction16(l, d); - // Ext_SurfaceFunction17(l, d); - // Ext_SurfaceFunction18(l, d); - // Ext_SurfaceFunction19(l, d); - // Ext_SurfaceFunction20(l, d); - // Ext_SurfaceFunction21(l, d); - // Ext_SurfaceFunction22(l, d); - // Ext_SurfaceFunction23(l, d); - // Ext_SurfaceFunction24(l, d); - // Ext_SurfaceFunction25(l, d); - // Ext_SurfaceFunction26(l, d); - // Ext_SurfaceFunction27(l, d); - // Ext_SurfaceFunction28(l, d); - // Ext_SurfaceFunction29(l, d); - } - -#if !_DECALSHADER - - void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time) - { - ExtraV2F d; - - ZERO_INITIALIZE(ExtraV2F, d); - ZERO_INITIALIZE(Blackboard, d.blackboard); - // due to motion vectors in HDRP, we need to use the last - // time in certain spots. So if you are going to use _Time to adjust vertices, - // you need to use this time or motion vectors will break. - d.time = time; - - Ext_ModifyVertex0(v, d); - // Ext_ModifyVertex1(v, d); - // Ext_ModifyVertex2(v, d); - // Ext_ModifyVertex3(v, d); - // Ext_ModifyVertex4(v, d); - // Ext_ModifyVertex5(v, d); - // Ext_ModifyVertex6(v, d); - // Ext_ModifyVertex7(v, d); - // Ext_ModifyVertex8(v, d); - // Ext_ModifyVertex9(v, d); - // Ext_ModifyVertex10(v, d); - // Ext_ModifyVertex11(v, d); - // Ext_ModifyVertex12(v, d); - // Ext_ModifyVertex13(v, d); - // Ext_ModifyVertex14(v, d); - // Ext_ModifyVertex15(v, d); - // Ext_ModifyVertex16(v, d); - // Ext_ModifyVertex17(v, d); - // Ext_ModifyVertex18(v, d); - // Ext_ModifyVertex19(v, d); - // Ext_ModifyVertex20(v, d); - // Ext_ModifyVertex21(v, d); - // Ext_ModifyVertex22(v, d); - // Ext_ModifyVertex23(v, d); - // Ext_ModifyVertex24(v, d); - // Ext_ModifyVertex25(v, d); - // Ext_ModifyVertex26(v, d); - // Ext_ModifyVertex27(v, d); - // Ext_ModifyVertex28(v, d); - // Ext_ModifyVertex29(v, d); - - - // #if %EXTRAV2F0REQUIREKEY% - v2p.extraV2F0 = d.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - v2p.extraV2F1 = d.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - v2p.extraV2F2 = d.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - v2p.extraV2F3 = d.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // v2p.extraV2F4 = d.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // v2p.extraV2F5 = d.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // v2p.extraV2F6 = d.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // v2p.extraV2F7 = d.extraV2F7; - // #endif - } - - void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p) - { - ExtraV2F d; - ZERO_INITIALIZE(ExtraV2F, d); - ZERO_INITIALIZE(Blackboard, d.blackboard); - - // #if %EXTRAV2F0REQUIREKEY% - d.extraV2F0 = v2p.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - d.extraV2F1 = v2p.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - d.extraV2F2 = v2p.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - d.extraV2F3 = v2p.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // d.extraV2F4 = v2p.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // d.extraV2F5 = v2p.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // d.extraV2F6 = v2p.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // d.extraV2F7 = v2p.extraV2F7; - // #endif - - - // Ext_ModifyTessellatedVertex0(v, d); - // Ext_ModifyTessellatedVertex1(v, d); - // Ext_ModifyTessellatedVertex2(v, d); - // Ext_ModifyTessellatedVertex3(v, d); - // Ext_ModifyTessellatedVertex4(v, d); - // Ext_ModifyTessellatedVertex5(v, d); - // Ext_ModifyTessellatedVertex6(v, d); - // Ext_ModifyTessellatedVertex7(v, d); - // Ext_ModifyTessellatedVertex8(v, d); - // Ext_ModifyTessellatedVertex9(v, d); - // Ext_ModifyTessellatedVertex10(v, d); - // Ext_ModifyTessellatedVertex11(v, d); - // Ext_ModifyTessellatedVertex12(v, d); - // Ext_ModifyTessellatedVertex13(v, d); - // Ext_ModifyTessellatedVertex14(v, d); - // Ext_ModifyTessellatedVertex15(v, d); - // Ext_ModifyTessellatedVertex16(v, d); - // Ext_ModifyTessellatedVertex17(v, d); - // Ext_ModifyTessellatedVertex18(v, d); - // Ext_ModifyTessellatedVertex19(v, d); - // Ext_ModifyTessellatedVertex20(v, d); - // Ext_ModifyTessellatedVertex21(v, d); - // Ext_ModifyTessellatedVertex22(v, d); - // Ext_ModifyTessellatedVertex23(v, d); - // Ext_ModifyTessellatedVertex24(v, d); - // Ext_ModifyTessellatedVertex25(v, d); - // Ext_ModifyTessellatedVertex26(v, d); - // Ext_ModifyTessellatedVertex27(v, d); - // Ext_ModifyTessellatedVertex28(v, d); - // Ext_ModifyTessellatedVertex29(v, d); - - // #if %EXTRAV2F0REQUIREKEY% - v2p.extraV2F0 = d.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - v2p.extraV2F1 = d.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - v2p.extraV2F2 = d.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - v2p.extraV2F3 = d.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // v2p.extraV2F4 = d.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // v2p.extraV2F5 = d.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // v2p.extraV2F6 = d.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // v2p.extraV2F7 = d.extraV2F7; - // #endif - } - - void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color) - { - // Ext_FinalColorForward0(l, d, color); - // Ext_FinalColorForward1(l, d, color); - // Ext_FinalColorForward2(l, d, color); - // Ext_FinalColorForward3(l, d, color); - // Ext_FinalColorForward4(l, d, color); - // Ext_FinalColorForward5(l, d, color); - // Ext_FinalColorForward6(l, d, color); - // Ext_FinalColorForward7(l, d, color); - // Ext_FinalColorForward8(l, d, color); - // Ext_FinalColorForward9(l, d, color); - // Ext_FinalColorForward10(l, d, color); - // Ext_FinalColorForward11(l, d, color); - // Ext_FinalColorForward12(l, d, color); - // Ext_FinalColorForward13(l, d, color); - // Ext_FinalColorForward14(l, d, color); - // Ext_FinalColorForward15(l, d, color); - // Ext_FinalColorForward16(l, d, color); - // Ext_FinalColorForward17(l, d, color); - // Ext_FinalColorForward18(l, d, color); - // Ext_FinalColorForward19(l, d, color); - // Ext_FinalColorForward20(l, d, color); - // Ext_FinalColorForward21(l, d, color); - // Ext_FinalColorForward22(l, d, color); - // Ext_FinalColorForward23(l, d, color); - // Ext_FinalColorForward24(l, d, color); - // Ext_FinalColorForward25(l, d, color); - // Ext_FinalColorForward26(l, d, color); - // Ext_FinalColorForward27(l, d, color); - // Ext_FinalColorForward28(l, d, color); - // Ext_FinalColorForward29(l, d, color); - } - - void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask) - { - // Ext_FinalGBufferStandard0(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard1(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard2(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard3(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard4(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard5(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard6(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard7(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard8(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard9(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard10(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard11(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard12(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard13(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard14(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard15(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard16(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard17(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard18(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard19(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard20(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard21(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard22(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard23(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard24(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard25(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard26(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard27(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard28(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard29(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - } -#endif - - - - - -#if _DECALSHADER - - ShaderData CreateShaderData(SurfaceDescriptionInputs IN) - { - ShaderData d = (ShaderData)0; - d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal); - d.worldSpaceNormal = IN.WorldSpaceNormal; - d.worldSpaceTangent = IN.WorldSpaceTangent; - - d.worldSpacePosition = IN.WorldSpacePosition; - d.texcoord0 = IN.uv0.xyxy; - d.screenPos = IN.ScreenPosition; - - d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition); - - d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); - - // these rarely get used, so we back transform them. Usually will be stripped. - #if _HDRP - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(d.worldSpacePosition), 1)).xyz; - #else - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(d.worldSpacePosition, 1)).xyz; - #endif - // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceNormal)); - // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceTangent.xyz)); - - // #if %SCREENPOSREQUIREKEY% - d.screenUV = (IN.ScreenPosition.xy / max(0.01, IN.ScreenPosition.w)); - // #endif - - return d; - } -#else - - ShaderData CreateShaderData(VertexToPixel i - #if NEED_FACING - , bool facing - #endif - ) - { - ShaderData d = (ShaderData)0; - d.clipPos = i.pos; - d.worldSpacePosition = i.worldPos; - - d.worldSpaceNormal = normalize(i.worldNormal); - d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz); - - d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w; - float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign; - - d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal); - d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos); - - d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); - d.texcoord0 = i.texcoord0; - // d.texcoord1 = i.texcoord1; - // d.texcoord2 = i.texcoord2; - - // #if %TEXCOORD3REQUIREKEY% - // d.texcoord3 = i.texcoord3; - // #endif - - // d.isFrontFace = facing; - // #if %VERTEXCOLORREQUIREKEY% - d.vertexColor = i.vertexColor; - // #endif - - // these rarely get used, so we back transform them. Usually will be stripped. - #if _HDRP - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(i.worldPos), 1)).xyz; - #else - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(i.worldPos, 1)).xyz; - #endif - // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldNormal)); - // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldTangent.xyz)); - - // #if %SCREENPOSREQUIREKEY% - d.screenPos = i.screenPos; - d.screenUV = (i.screenPos.xy / i.screenPos.w); - // #endif - - - // #if %EXTRAV2F0REQUIREKEY% - d.extraV2F0 = i.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - d.extraV2F1 = i.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - d.extraV2F2 = i.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - d.extraV2F3 = i.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // d.extraV2F4 = i.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // d.extraV2F5 = i.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // d.extraV2F6 = i.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // d.extraV2F7 = i.extraV2F7; - // #endif - - return d; - } - -#endif - - - // vertex shader - VertexToPixel Vert (VertexData v) - { - UNITY_SETUP_INSTANCE_ID(v); - VertexToPixel o; - UNITY_INITIALIZE_OUTPUT(VertexToPixel,o); - UNITY_TRANSFER_INSTANCE_ID(v,o); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - -#if !_TESSELLATION_ON - ChainModifyVertex(v, o, _Time); -#endif - - o.pos = UnityObjectToClipPos(v.vertex); - o.texcoord0 = v.texcoord0; - // o.texcoord1 = v.texcoord1; - // o.texcoord2 = v.texcoord2; - - // #if %TEXCOORD3REQUIREKEY% - // o.texcoord3 = v.texcoord3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - o.vertexColor = v.vertexColor; - // #endif - - // #if %SCREENPOSREQUIREKEY% - o.screenPos = ComputeScreenPos(o.pos); - // #endif - - o.worldPos = mul(GetObjectToWorldMatrix(), v.vertex).xyz; - o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldTangent = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); - - - float3 viewDirForLight = UnityWorldSpaceViewDir(o.worldPos); - #ifndef DIRLIGHTMAP_OFF - float3 worldBinormal = cross(o.worldNormal, o.worldTangent.xyz); - o.viewDir.x = dot(viewDirForLight, o.worldTangent.xyz); - o.viewDir.y = dot(viewDirForLight, worldBinormal); - o.viewDir.z = dot(viewDirForLight, o.worldNormal); - #endif - #ifdef DYNAMICLIGHTMAP_ON - o.lmap.zw = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; - #else - o.lmap.zw = 0; - #endif - #ifdef LIGHTMAP_ON - o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; - #ifdef DIRLIGHTMAP_OFF - o.lmapFadePos.xyz = (mul(GetObjectToWorldMatrix(), v.vertex).xyz - unity_ShadowFadeCenterAndType.xyz) * unity_ShadowFadeCenterAndType.w; - o.lmapFadePos.w = (-UnityObjectToViewPos(v.vertex).z) * (1.0 - unity_ShadowFadeCenterAndType.w); - #endif - #else - o.lmap.xy = 0; - #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL - o.sh = 0; - o.sh = ShadeSHPerVertex (o.worldNormal, o.sh); - #endif - #endif - - return o; - } - - - - #ifdef LIGHTMAP_ON - float4 unity_LightmapFade; - #endif - fixed4 unity_Ambient; - - - - // fragment shader - void Frag (VertexToPixel IN, - out half4 outGBuffer0 : SV_Target0, - out half4 outGBuffer1 : SV_Target1, - out half4 outGBuffer2 : SV_Target2, - out half4 outEmission : SV_Target3 - #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) - , out half4 outShadowMask : SV_Target4 - #endif - #ifdef _DEPTHOFFSET_ON - , out float outputDepth : SV_Depth - #endif - #if NEED_FACING - , bool facing : SV_IsFrontFace - #endif - ) - { - UNITY_SETUP_INSTANCE_ID(IN); - // prepare and unpack data - - #ifdef FOG_COMBINED_WITH_TSPACE - UNITY_EXTRACT_FOG_FROM_TSPACE(IN); - #elif defined (FOG_COMBINED_WITH_WORLD_POS) - UNITY_EXTRACT_FOG_FROM_WORLD_POS(IN); - #else - UNITY_EXTRACT_FOG(IN); - #endif - - ShaderData d = CreateShaderData(IN - #if NEED_FACING - , facing - #endif - ); - Surface l = (Surface)0; - - #ifdef _DEPTHOFFSET_ON - l.outputDepth = outputDepth; - #endif - - l.Albedo = half3(0.5, 0.5, 0.5); - l.Normal = float3(0,0,1); - l.Occlusion = 1; - l.Alpha = 1; - - ChainSurfaceFunction(l, d); - - #ifdef _DEPTHOFFSET_ON - outputDepth = l.outputDepth; - #endif - - - - - - #ifndef USING_DIRECTIONAL_LIGHT - fixed3 lightDir = normalize(UnityWorldSpaceLightDir(d.worldSpacePosition)); - #else - fixed3 lightDir = _WorldSpaceLightPos0.xyz; - #endif - float3 worldViewDir = normalize(UnityWorldSpaceViewDir(d.worldSpacePosition)); - - #if _USESPECULAR || _USESPECULARWORKFLOW || _SPECULARFROMMETALLIC - #ifdef UNITY_COMPILER_HLSL - SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0; - #else - SurfaceOutputStandardSpecular o; - #endif - o.Specular = l.Specular; - o.Occlusion = l.Occlusion; - o.Smoothness = l.Smoothness; - #elif _BDRFLAMBERT || _BDRF3 || _SIMPLELIT - #ifdef UNITY_COMPILER_HLSL - SurfaceOutput o = (SurfaceOutput)0; - #else - SurfaceOutput o; - #endif - - o.Specular = l.SpecularPower; - o.Gloss = l.Smoothness; - _SpecColor.rgb = l.Specular; // fucking hell Unity, wtf.. - #else - #ifdef UNITY_COMPILER_HLSL - SurfaceOutputStandard o = (SurfaceOutputStandard)0; - #else - SurfaceOutputStandard o; - #endif - o.Smoothness = l.Smoothness; - o.Metallic = l.Metallic; - o.Occlusion = l.Occlusion; - #endif - - - - o.Albedo = l.Albedo; - o.Emission = l.Emission; - o.Alpha = l.Alpha; - - #if _WORLDSPACENORMAL - o.Normal = l.Normal; - #else - o.Normal = normalize(TangentToWorldSpace(d, l.Normal)); - #endif - - - half atten = 1; - - // Setup lighting environment - UnityGI gi; - UNITY_INITIALIZE_OUTPUT(UnityGI, gi); - gi.indirect.diffuse = 0; - gi.indirect.specular = 0; - gi.light.color = 0; - gi.light.dir = half3(0,1,0); - // Call GI (lightmaps/SH/reflections) lighting function - UnityGIInput giInput; - UNITY_INITIALIZE_OUTPUT(UnityGIInput, giInput); - giInput.light = gi.light; - giInput.worldPos = d.worldSpacePosition; - giInput.worldViewDir = worldViewDir; - giInput.atten = atten; - #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) - giInput.lightmapUV = IN.lmap; - #else - giInput.lightmapUV = 0.0; - #endif - #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL - giInput.ambient = IN.sh; - #else - giInput.ambient.rgb = 0.0; - #endif - giInput.probeHDR[0] = unity_SpecCube0_HDR; - giInput.probeHDR[1] = unity_SpecCube1_HDR; - #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) - giInput.boxMin[0] = unity_SpecCube0_BoxMin; // .w holds lerp value for blending - #endif - #ifdef UNITY_SPECCUBE_BOX_PROJECTION - giInput.boxMax[0] = unity_SpecCube0_BoxMax; - giInput.probePosition[0] = unity_SpecCube0_ProbePosition; - giInput.boxMax[1] = unity_SpecCube1_BoxMax; - giInput.boxMin[1] = unity_SpecCube1_BoxMin; - giInput.probePosition[1] = unity_SpecCube1_ProbePosition; - #endif + #elif _PASSMETA + o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); + #else + o.pos = TransformWorldToHClip(o.worldPos); + #endif + + // #if %SCREENPOSREQUIREKEY% + o.screenPos = ComputeScreenPos(o.pos, _ProjectionParams.x); + // #endif - - #if _BDRF3 || _SIMPLELIT + #if _PASSFORWARD || _PASSGBUFFER + float2 uv1 = v.texcoord1.xy; + OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV); + // o.texcoord1.xy = uv1; + #if UNITY_VERSION < 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif - LightingBlinnPhong_GI(o, giInput, gi); - #if defined(_OVERRIDE_BAKEDGI) - gi.indirect.diffuse = l.DiffuseGI; - gi.indirect.specular = l.SpecularGI; + #if defined(DYNAMICLIGHTMAP_ON) + o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #if UNITY_VERSION >= 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + #elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009 + OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion); #endif + #endif - outEmission = LightingBlinnPhong_Deferred(o, worldViewDir, gi, outGBuffer0, outGBuffer1, outGBuffer2); - #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) - outShadowMask = UnityGetRawBakedOcclusions (IN.lmap.xy, d.worldSpacePosition); + #ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + half fogFactor = 0; + #if defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(o.pos.z); #endif - #ifndef UNITY_HDR_ON - outEmission.rgb = exp2(-outEmission.rgb); + #if _BAKEDLIT + o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0); + #else + half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal); + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); #endif - #elif _USESPECULAR || _USESPECULARWORKFLOW || _SPECULARFROMMETALLIC - LightingStandardSpecular_GI(o, giInput, gi); - #if defined(_OVERRIDE_BAKEDGI) - gi.indirect.diffuse = l.DiffuseGI; - gi.indirect.specular = l.SpecularGI; - #endif - // call lighting function to output g-buffer - outEmission = LightingStandardSpecular_Deferred (o, worldViewDir, gi, outGBuffer0, outGBuffer1, outGBuffer2); - #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) - outShadowMask = UnityGetRawBakedOcclusions (IN.lmap.xy, d.worldSpacePosition); - #endif - #ifndef UNITY_HDR_ON - outEmission.rgb = exp2(-outEmission.rgb); - #endif - #else - LightingStandard_GI(o, giInput, gi); - #if defined(_OVERRIDE_BAKEDGI) - gi.indirect.diffuse = l.DiffuseGI; - gi.indirect.specular = l.SpecularGI; - #endif - // call lighting function to output g-buffer - outEmission = LightingStandard_Deferred (o, worldViewDir, gi, outGBuffer0, outGBuffer1, outGBuffer2); - #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) - outShadowMask = UnityGetRawBakedOcclusions (IN.lmap.xy, d.worldSpacePosition); - #endif - #ifndef UNITY_HDR_ON - outEmission.rgb = exp2(-outEmission.rgb); - #endif - #endif + #endif - #if defined(_OVERRIDE_SHADOWMASK) && defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) - float4 mulColor = saturate(dot(l.ShadowMask, unity_OcclusionMaskSelector)); - outShadowMask = mulColor; + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + o.shadowCoord = GetShadowCoord(vertexInput); + #endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + #if !defined(TESSELLATION_ON) + MotionVectorPositionZBias(o); #endif - - #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) - ChainFinalGBufferStandard(l, d, outGBuffer0, outGBuffer1, outGBuffer2, outEmission, outShadowMask); - #else - half4 outShadowMask = 0; - ChainFinalGBufferStandard(l, d, outGBuffer0, outGBuffer1, outGBuffer2, outEmission, outShadowMask); - #endif - + o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0); + // Note: unity_MotionVectorsParams.y is 0 is forceNoMotion is enabled + bool forceNoMotion = unity_MotionVectorsParams.y == 0.0; + + if (!forceNoMotion) + { + #if defined(HAVE_VFX_MODIFICATION) + float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS; + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + const bool applyDeformation = false; + #else + const bool applyDeformation = true; + #endif + #else + const bool hasDeformation = unity_MotionVectorsParams.x == 1; // Mesh has skinned deformation + float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz; + + #if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT) + const bool applyDeformation = true; + #else + const bool applyDeformation = hasDeformation; + #endif + #endif + // TODO + #if defined(FEATURES_GRAPH_VERTEX) + if (applyDeformation) + previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS); + else + previousPositionOS = previousMesh.positionOS; + + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + #endif + + #if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED) + // Deformed vertices in DOTS are not cumulative with built-in Unity skinning/blend shapes + // Needs to be called after vertex modification has been applied otherwise it will be + // overwritten by Compute Deform node + ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS); + #endif + #if defined (_ADD_PRECOMPUTED_VELOCITY) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f)); + + #if defined(HAVE_VFX_MODIFICATION) + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY) + #error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards. + #endif + o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS); + #else + #if VFX_WORLD_SPACE + //previousPositionOS is already in world space + const float3 previousPositionWS = previousPositionOS; + #else + const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz; + #endif + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f)); + #endif + #else + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1))); + #endif + } + #endif + + return o; } + + +#if _UNLIT + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Unlit.hlsl" +#endif + + // fragment shader + void Frag (VertexToPixel IN + , out half4 outColor : SV_Target0 + #ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 + #endif + #ifdef _DEPTHOFFSET_ON + , out float outputDepth : SV_Depth + #endif + #if NEED_FACING + , bool facing : SV_IsFrontFace + #endif + ) + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN); + + #if defined(LOD_FADE_CROSSFADE) + LODFadeCrossFade(IN.pos); + #endif - ENDCG + ShaderData d = CreateShaderData(IN + #if NEED_FACING + , facing + #endif + ); + Surface l = (Surface)0; + + #ifdef _DEPTHOFFSET_ON + l.outputDepth = outputDepth; + #endif + + l.Albedo = half3(0.5, 0.5, 0.5); + l.Normal = float3(0,0,1); + l.Occlusion = 1; + l.Alpha = 1; + + ChainSurfaceFunction(l, d); + + #ifdef _DEPTHOFFSET_ON + outputDepth = l.outputDepth; + #endif + + #if _USESPECULAR || _SIMPLELIT + float3 specular = l.Specular; + float metallic = 1; + #else + float3 specular = 0; + float metallic = l.Metallic; + #endif + + + + + InputData inputData = (InputData)0; + + inputData.positionWS = IN.worldPos; + #if _WORLDSPACENORMAL + inputData.normalWS = l.Normal; + #else + inputData.normalWS = normalize(TangentToWorldSpace(d, l.Normal)); + #endif + + inputData.viewDirectionWS = SafeNormalize(d.worldSpaceViewDir); + + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + inputData.shadowCoord = IN.shadowCoord; + #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) + inputData.shadowCoord = TransformWorldToShadowCoord(IN.worldPos); + #else + inputData.shadowCoord = float4(0, 0, 0, 0); + #endif + +#if _BAKEDLIT + inputData.fogCoord = IN.fogFactorAndVertexLight.x; + inputData.vertexLighting = 0; +#else + inputData.fogCoord = InitializeInputDataFog(float4(IN.worldPos, 1.0), IN.fogFactorAndVertexLight.x); + inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw; +#endif + + + + #if defined(_OVERRIDE_BAKEDGI) + inputData.bakedGI = l.DiffuseGI; + l.Emission += l.SpecularGI; + #elif _BAKEDLIT + inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.sh, inputData.normalWS); + #else + #if defined(DYNAMICLIGHTMAP_ON) + inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.dynamicLightmapUV.xy, IN.sh, inputData.normalWS); + #elif defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2) + #if UNITY_VERSION >= 60000009 + inputData.bakedGI = SAMPLE_GI(IN.sh, IN.worldPos, inputData.normalWS, inputData.viewDirectionWS, IN.pos, IN.probeOcclusion, inputData.shadowMask); + #else + inputData.bakedGI = SAMPLE_GI(IN.sh, IN.worldPos, inputData.normalWS, inputData.viewDirectionWS, IN.pos); + #endif + #else + inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.sh, inputData.normalWS); + #endif + #endif + inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(IN.pos); + #if !_BAKEDLIT + inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUV); + + #if defined(_OVERRIDE_SHADOWMASK) + float4 mulColor = saturate(dot(l.ShadowMask, _MainLightOcclusionProbes)); //unity_OcclusionMaskSelector)); + inputData.shadowMask = mulColor; + #endif + #else + inputData.shadowMask = float4(1,1,1,1); + #endif + + #if defined(DEBUG_DISPLAY) + #if defined(DYNAMICLIGHTMAP_ON) + inputData.dynamicLightmapUV = IN.dynamicLightmapUV.xy; + #endif + #if defined(LIGHTMAP_ON) + inputData.staticLightmapUV = IN.lightmapUV; + #else + inputData.vertexSH = IN.sh; + #endif + #endif + + #if _WORLDSPACENORMAL + float3 normalTS = WorldToTangentSpace(d, l.Normal); + #else + float3 normalTS = l.Normal; + #endif + + SurfaceData surface = (SurfaceData)0; + surface.albedo = l.Albedo; + surface.metallic = saturate(metallic); + surface.specular = specular; + surface.smoothness = saturate(l.Smoothness), + surface.occlusion = l.Occlusion, + surface.emission = l.Emission, + surface.alpha = saturate(l.Alpha); + surface.clearCoatMask = 0; + surface.clearCoatSmoothness = 1; + + #ifdef _CLEARCOAT + surface.clearCoatMask = saturate(l.CoatMask); + surface.clearCoatSmoothness = saturate(l.CoatSmoothness); + #endif + + #if !_UNLIT + half4 color = half4(l.Albedo, l.Alpha); + #ifdef _DBUFFER + #if _BAKEDLIT + half3 bakeColor = color.rgb; + float3 bakeNormal = inputData.normalWS.xyz; + ApplyDecalToBaseColorAndNormal(IN.pos, bakeColor, bakeNormal); + color.rgb = bakeColor; + inputData.normalWS.xyz = bakeNormal; + #else + ApplyDecalToSurfaceData(IN.pos, surface, inputData); + #endif + #endif + #if _SIMPLELIT + color = UniversalFragmentBlinnPhong( + inputData, + surface); + #elif _BAKEDLIT + color = UniversalFragmentBakedLit(inputData, color.rgb, color.a, normalTS); + #else + color = UniversalFragmentPBR(inputData, surface); + #endif + + #if !DISABLEFOG + color.rgb = MixFog(color.rgb, inputData.fogCoord); + #endif + + #else // unlit + #ifdef _DBUFFER + ApplyDecalToSurfaceData(IN.pos, surface, inputData); + #endif + half4 color = UniversalFragmentUnlit(inputData, l.Albedo, l.Alpha); + #if !DISABLEFOG + color.rgb = MixFog(color.rgb, inputData.fogCoord); + #endif + #endif + ChainFinalColorForward(l, d, color); + + outColor = color; + + #ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + #endif + + } + + ENDHLSL } + Pass + { + Name "GBuffer" + Tags + { + "LightMode" = "UniversalGBuffer" + } + + Blend One Zero + ZTest LEqual + ZWrite On - // ---- forward rendering additive lights pass: - Pass - { - Name "FORWARD" - Tags { "LightMode" = "ForwardAdd" } - ZWrite Off Blend One One - - Tags + Tags { "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" } @@ -7056,36 +2725,46 @@ Lighting Off Lighting Off - CGPROGRAM + HLSLPROGRAM - #pragma vertex Vert + #pragma vertex Vert #pragma fragment Frag - // compile directives - #pragma target 3.0 - #pragma multi_compile_instancing - #pragma multi_compile_fog - #pragma skip_variants INSTANCING_ON - #pragma multi_compile_fwdadd_fullshadows - #include "HLSLSupport.cginc" - #define UNITY_INSTANCED_LOD_FADE - #define UNITY_INSTANCED_SH - #define UNITY_INSTANCED_LIGHTMAPSTS - #include "UnityShaderVariables.cginc" - #include "UnityShaderUtilities.cginc" + #pragma target 3.0 + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + #pragma multi_compile_instancing + #pragma multi_compile_fog + #pragma instancing_options renderinglayer + + #pragma multi_compile _ LIGHTMAP_ON + #pragma multi_compile _ DYNAMICLIGHTMAP_ON + #pragma multi_compile _ DIRLIGHTMAP_COMBINED + #pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BLENDING + #pragma multi_compile_fragment _ _REFLECTION_PROBE_BOX_PROJECTION + #pragma multi_compile_fragment _ _SHADOWS_SOFT + #pragma multi_compile_fragment _ _SHADOWS_SOFT_LOW + #pragma multi_compile_fragment _ _SHADOWS_SOFT_MEDIUM + #pragma multi_compile_fragment _ _SHADOWS_SOFT_HIGH + #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING + #pragma multi_compile _ SHADOWS_SHADOWMASK + #pragma multi_compile _ _MIXED_LIGHTING_SUBTRACTIVE + #pragma multi_compile_fragment _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 + #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT + #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED + #pragma multi_compile_fragment _ DEBUG_DISPLAY + #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE + - #include "UnityCG.cginc" - #include "Lighting.cginc" - #include "UnityPBSLighting.cginc" - #include "AutoLight.cginc" + #define _FOG_FRAGMENT 1 - + #define VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + #define SHADERPASS SHADERPASS_GBUFFER + #define _PASSGBUFFER 1 - #define _PASSFORWARD 1 - #define _PASSFORWARDADD 1 - - + #pragma shader_feature_local TIMEISCUSTOM_ON #pragma shader_feature_local ADDITIVECONFIG_ON #pragma shader_feature_local PREMULTIPLYALPHA_ON @@ -7159,1263 +2838,158 @@ Lighting Off #pragma shader_feature NORMALMAP_ON - #define _STANDARD 1 -// If your looking in here and thinking WTF, yeah, I know. These are taken from the SRPs, to allow us to use the same -// texturing library they use. However, since they are not included in the standard pipeline by default, there is no -// way to include them in and they have to be inlined, since someone could copy this shader onto another machine without -// Better Shaders installed. Unfortunate, but I'd rather do this and have a nice library for texture sampling instead -// of the patchy one Unity provides being inlined/emulated in HDRP/URP. Strangely, PSSL and XBoxOne libraries are not -// included in the standard SRP code, but they are in tons of Unity own projects on the web, so I grabbed them from there. + #define _URP 1 +#define REQUIRE_DEPTH_TEXTURE -#if defined(SHADER_API_GAMECORE) - - #define ZERO_INITIALIZE(type, name) name = (type)0; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - #define ASSIGN_SAMPLER(samplerName, samplerValue) samplerName = samplerValue - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define SAMPLE_DEPTH_TEXTURE(textureName, samplerName, coord2) SAMPLE_TEXTURE2D(textureName, samplerName, coord2).r - #define SAMPLE_DEPTH_TEXTURE_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod).r - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_XBOXONE) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_PSSL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.GetLOD(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RW_Texture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RW_Texture2D_Array textureName - #define RW_TEXTURE3D(type, textureName) RW_Texture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - - -#elif defined(SHADER_API_D3D11) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_METAL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_VULKAN) -// This file assume SHADER_API_VULKAN is defined - // TODO: This is a straight copy from D3D11.hlsl. Go through all this stuff and adjust where needed. - - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_SWITCH) - // This file assume SHADER_API_SWITCH is defined - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_GLCORE) - - // OpenGL 4.1 SM 5.0 https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 46) - #define OPENGL4_1_SM5 1 - #else - #define OPENGL4_1_SM5 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - - #if OPENGL4_1_SM5 - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #endif - - - #elif defined(SHADER_API_GLES3) - - // GLES 3.1 + AEP shader feature https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 40) - #define GLES3_1_AEP 1 - #else - #define GLES3_1_AEP 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #if GLES3_1_AEP - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - #else - #define RW_TEXTURE2D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - #endif - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #if GLES3_1_AEP - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - #endif - - -#elif defined(SHADER_API_GLES) - - - #define uint int - - #define rcp(x) 1.0 / (x) - #define ddx_fine ddx - #define ddy_fine ddy - #define asfloat - #define asuint(x) asint(x) - #define f32tof16 - #define f16tof32 - - #define ERROR_ON_UNSUPPORTED_FUNCTION(funcName) #error #funcName is not supported on GLES 2.0 - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) #error calculate Level of Detail not supported in GLES2 - - // Texture abstraction - - #define TEXTURE2D(textureName) sampler2D textureName - #define TEXTURE2D_ARRAY(textureName) samplerCUBE textureName // No support to texture2DArray - #define TEXTURECUBE(textureName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY(textureName) samplerCUBE textureName // No supoport to textureCubeArray and can't emulate with texture2DArray - #define TEXTURE3D(textureName) sampler3D textureName - - #define TEXTURE2D_FLOAT(textureName) sampler2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to texture2DArray - #define TEXTURECUBE_FLOAT(textureName) samplerCUBE_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to textureCubeArray - #define TEXTURE3D_FLOAT(textureName) sampler3D_float textureName - - #define TEXTURE2D_HALF(textureName) sampler2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to texture2DArray - #define TEXTURECUBE_HALF(textureName) samplerCUBE_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to textureCubeArray - #define TEXTURE3D_HALF(textureName) sampler3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - #define TEXTURECUBE_SHADOW(textureName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - - #define RW_TEXTURE2D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - - #define SAMPLER(samplerName) - #define SAMPLER_CMP(samplerName) - - #define TEXTURE2D_PARAM(textureName, samplerName) sampler2D textureName - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURE3D_PARAM(textureName, samplerName) sampler3D textureName - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) tex2D(textureName, coord2) - - #if (SHADER_TARGET >= 30) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) tex2Dlod(textureName, float4(coord2, 0, lod)) - #else - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, lod) - #endif - - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) tex2Dbias(textureName, float4(coord2, 0, bias)) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_LOD) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_BIAS) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_GRAD) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) texCUBE(textureName, coord3) - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) texCUBEbias(textureName, float4(coord3, bias)) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) tex3D(textureName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE3D_LOD) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) SHADOW2D_SAMPLE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_SHADOW) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) SHADOWCUBE_SAMPLE(textureName, samplerName, coord4) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_SHADOW) - - - // Not supported. Can't define as error because shader library is calling these functions. - #define LOAD_TEXTURE2D(textureName, unCoord2) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE3D(textureName, unCoord3) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D_LOD) - - // Gather not supported. Fallback to regular texture sampling. - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - -#else -#error unsupported shader api -#endif - - - - -// default flow control attributes -#ifndef UNITY_BRANCH -# define UNITY_BRANCH -#endif -#ifndef UNITY_FLATTEN -# define UNITY_FLATTEN -#endif -#ifndef UNITY_UNROLL -# define UNITY_UNROLL -#endif -#ifndef UNITY_UNROLLX -# define UNITY_UNROLLX(_x) -#endif -#ifndef UNITY_LOOP -# define UNITY_LOOP -#endif - - - - - - // data across stages, stripped like the above. - struct VertexToPixel - { - UNITY_POSITION(pos); // must be named pos because Unity does stupid macro stuff - float3 worldPos : TEXCOORD0; - float3 worldNormal : TEXCOORD1; - float4 worldTangent : TEXCOORD2; - float4 texcoord0 : TEXCOORD3; - // float4 texcoord1 : TEXCOORD4; - // float4 texcoord2 : TEXCOORD5; - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD6; - // #endif - - // #if %SCREENPOSREQUIREKEY% - float4 screenPos : TEXCOORD7; - // #endif - - UNITY_LIGHTING_COORDS(8,9) - UNITY_FOG_COORDS(10) - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - // #if %EXTRAV2F0REQUIREKEY% - float4 extraV2F0 : TEXCOORD11; - // #endif + // Includes + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ProbeVolumeVariants.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DBuffer.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" - // #if %EXTRAV2F1REQUIREKEY% - float4 extraV2F1 : TEXCOORD12; - // #endif + - // #if %EXTRAV2F2REQUIREKEY% - float4 extraV2F2 : TEXCOORD13; - // #endif + #undef WorldNormalVector + #define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix) + + #define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal) - // #if %EXTRAV2F3REQUIREKEY% - float4 extraV2F3 : TEXCOORD14; - // #endif + #define _WorldSpaceLightPos0 _MainLightPosition + + #define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name); + #define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name); - // #if %EXTRAV2F4REQUIREKEY% - // float4 extraV2F4 : TEXCOORD15; - // #endif + #define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z) + #define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod) + #define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord) + #define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord) - // #if %EXTRAV2F5REQUIREKEY% - // float4 extraV2F5 : TEXCOORD16; - // #endif + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod) + + #if defined(UNITY_COMPILER_HLSL) + #define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0; + #else + #define UNITY_INITIALIZE_OUTPUT(type,name) + #endif - // #if %EXTRAV2F6REQUIREKEY% - // float4 extraV2F6 : TEXCOORD17; - // #endif + #define sampler2D_float sampler2D + #define sampler2D_half sampler2D - // #if %EXTRAV2F7REQUIREKEY% - // float4 extraV2F7 : TEXCOORD18; - // #endif + - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO + // data across stages, stripped like the above. + struct VertexToPixel + { + float4 pos : SV_POSITION; + float3 worldPos : TEXCOORD0; + float3 worldNormal : TEXCOORD1; + float4 worldTangent : TEXCOORD2; + float4 texcoord0 : TEXCOORD3; + // float4 texcoord1 : TEXCOORD4; + // float4 texcoord2 : TEXCOORD5; - }; + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD6; + // #endif - + // #if %SCREENPOSREQUIREKEY% + float4 screenPos : TEXCOORD7; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + half4 vertexColor : COLOR; + // #endif + + #if defined(LIGHTMAP_ON) + float2 lightmapUV : TEXCOORD8; + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float2 dynamicLightmapUV : TEXCOORD9; + #endif + #if !defined(LIGHTMAP_ON) + float4 probeOcclusion : TEXCOORD8; + float3 sh : TEXCOORD10; + #endif + + #if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT) + float4 fogFactorAndVertexLight : TEXCOORD11; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD12; + #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD13; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD14; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD15; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD16; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD17; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD18; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD19; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD20; + // #endif + + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : CUSTOM_INSTANCE_ID; + #endif + #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) + uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; + #endif + #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) + uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; + #endif + #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; + #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float4 previousPositionCS : TEXCOORD21; // Contain previous transform position (in case of skinning for example) + float4 positionCS : TEXCOORD22; + #endif + }; + + + + // data describing the user output of a pixel struct Surface @@ -8661,9 +3235,9 @@ Lighting Off #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) #endif - #undef UNITY_MATRIX_I_M + #undef GetWorldToObjectMatrix() - #define UNITY_MATRIX_I_M unity_WorldToObject + #define GetWorldToObjectMatrix() unity_WorldToObject #endif @@ -8709,7 +3283,7 @@ Lighting Off float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) { float eye = GetLinearEyeDepth(uv); - float3 camView = mul((float3x3)UNITY_MATRIX_M, transpose(mul(UNITY_MATRIX_I_M, UNITY_MATRIX_I_V)) [2].xyz); + float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz); float dt = dot(worldSpaceViewDir, camView); float3 div = worldSpaceViewDir/dt; @@ -8735,7 +3309,7 @@ Lighting Off { float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); float3 norms = DecodeViewNormalStereo(depthNorms); - norms = mul((float3x3)UNITY_MATRIX_V, norms) * 0.5 + 0.5; + norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5; return norms; } #elif _HDRP && !_DECALSHADER @@ -8825,7 +3399,9 @@ Lighting Off - + CBUFFER_START(UnityPerMaterial) + + half4 _Color; half _Alpha; half _AlphaCutoffValue; @@ -9043,11 +3619,13 @@ Lighting Off - + CBUFFER_END - + - + + + TEXTURE2D(_MainTex); SAMPLER(sampler_MainTex); @@ -10045,8 +4623,8 @@ Lighting Off } #endif - - + + #if _DECALSHADER @@ -10168,20 +4746,52 @@ Lighting Off #endif + + #if defined(_PASSSHADOW) + float3 _LightDirection; + float3 _LightPosition; + #endif + + #if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + + #define GetWorldToViewMatrix() _ViewMatrix + #define UNITY_MATRIX_I_V _InvViewMatrix + #define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix) + #define UNITY_MATRIX_I_P _InvProjMatrix + #define GetWorldToHClipMatrix() _ViewProjMatrix + #define UNITY_MATRIX_I_VP _InvViewProjMatrix + #define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix + #define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix + #define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix + + void MotionVectorPositionZBias(VertexToPixel input) + { + #if UNITY_REVERSED_Z + input.pos.z -= unity_MotionVectorsParams.z * input.pos.w; + #else + input.pos.z += unity_MotionVectorsParams.z * input.pos.w; + #endif + } + + #endif + // vertex shader VertexToPixel Vert (VertexData v) { + VertexToPixel o = (VertexToPixel)0; + UNITY_SETUP_INSTANCE_ID(v); - VertexToPixel o; - UNITY_INITIALIZE_OUTPUT(VertexToPixel,o); - UNITY_TRANSFER_INSTANCE_ID(v,o); + UNITY_TRANSFER_INSTANCE_ID(v, o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); -#if !_TESSELLATION_ON - ChainModifyVertex(v, o, _Time); -#endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + VertexData previousMesh = v; + #endif + #if !_TESSELLATION_ON + ChainModifyVertex(v, o, _Time); + #endif - o.pos = UnityObjectToClipPos(v.vertex); o.texcoord0 = v.texcoord0; // o.texcoord1 = v.texcoord1; // o.texcoord2 = v.texcoord2; @@ -10194,6626 +4804,11667 @@ Lighting Off o.vertexColor = v.vertexColor; // #endif - // #if %SCREENPOSREQUIREKEY% - o.screenPos = ComputeScreenPos(o.pos); + // This return the camera relative position (if enable) + float3 positionWS = TransformObjectToWorld(v.vertex.xyz); + float3 normalWS = TransformObjectToWorldNormal(v.normal); + float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + o.worldPos = positionWS; + o.worldNormal = normalWS; + o.worldTangent = tangentWS; + + + // For some very odd reason, in 2021.2, we can't use Unity's defines, but have to use our own.. + #if _PASSSHADOW + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - o.worldPos); + #else + float3 lightDirectionWS = _LightDirection; + #endif + // Define shadow pass specific clip position for Universal + o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS)); + #if UNITY_REVERSED_Z + o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #else + o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #endif + #elif _PASSMETA + o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); + #else + o.pos = TransformWorldToHClip(o.worldPos); + #endif + + // #if %SCREENPOSREQUIREKEY% + o.screenPos = ComputeScreenPos(o.pos, _ProjectionParams.x); + // #endif + + + #if _PASSFORWARD || _PASSGBUFFER + float2 uv1 = v.texcoord1.xy; + OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV); + // o.texcoord1.xy = uv1; + #if UNITY_VERSION < 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + + #if defined(DYNAMICLIGHTMAP_ON) + o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #if UNITY_VERSION >= 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + #elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009 + OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion); + #endif + #endif + + #ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + half fogFactor = 0; + #if defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(o.pos.z); + #endif + #if _BAKEDLIT + o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0); + #else + half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal); + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + #endif + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + o.shadowCoord = GetShadowCoord(vertexInput); + #endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + #if !defined(TESSELLATION_ON) + MotionVectorPositionZBias(o); + #endif + + o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0); + // Note: unity_MotionVectorsParams.y is 0 is forceNoMotion is enabled + bool forceNoMotion = unity_MotionVectorsParams.y == 0.0; + + if (!forceNoMotion) + { + #if defined(HAVE_VFX_MODIFICATION) + float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS; + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + const bool applyDeformation = false; + #else + const bool applyDeformation = true; + #endif + #else + const bool hasDeformation = unity_MotionVectorsParams.x == 1; // Mesh has skinned deformation + float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz; + + #if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT) + const bool applyDeformation = true; + #else + const bool applyDeformation = hasDeformation; + #endif + #endif + // TODO + #if defined(FEATURES_GRAPH_VERTEX) + if (applyDeformation) + previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS); + else + previousPositionOS = previousMesh.positionOS; + + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + #endif + + #if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED) + // Deformed vertices in DOTS are not cumulative with built-in Unity skinning/blend shapes + // Needs to be called after vertex modification has been applied otherwise it will be + // overwritten by Compute Deform node + ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS); + #endif + #if defined (_ADD_PRECOMPUTED_VELOCITY) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f)); + + #if defined(HAVE_VFX_MODIFICATION) + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY) + #error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards. + #endif + o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS); + #else + #if VFX_WORLD_SPACE + //previousPositionOS is already in world space + const float3 previousPositionWS = previousPositionOS; + #else + const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz; + #endif + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f)); + #endif + #else + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1))); + #endif + } + #endif + + return o; + } + + + + + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl" + + // fragment shader + FragmentOutput Frag (VertexToPixel IN + #ifdef _DEPTHOFFSET_ON + , out float outputDepth : SV_Depth + #endif + #if NEED_FACING + , bool facing : SV_IsFrontFace + #endif + ) + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN); + + #if defined(LOD_FADE_CROSSFADE) + LODFadeCrossFade(IN.pos); + #endif + + ShaderData d = CreateShaderData(IN + #if NEED_FACING + , facing + #endif + ); + Surface l = (Surface)0; + + #ifdef _DEPTHOFFSET_ON + l.outputDepth = outputDepth; + #endif + + l.Albedo = half3(0.5, 0.5, 0.5); + l.Normal = float3(0,0,1); + l.Occlusion = 1; + l.Alpha = 1; + + ChainSurfaceFunction(l, d); + + #ifdef _DEPTHOFFSET_ON + outputDepth = l.outputDepth; + #endif + + #if _USESPECULAR || _SIMPLELIT + float3 specular = l.Specular; + float metallic = 0; + #else + float3 specular = 0; + float metallic = l.Metallic; + #endif + + InputData inputData = (InputData)0; + + inputData.positionWS = IN.worldPos; + #if _WORLDSPACENORMAL + inputData.normalWS = l.Normal; + #else + inputData.normalWS = normalize(TangentToWorldSpace(d, l.Normal)); + #endif + + inputData.viewDirectionWS = SafeNormalize(d.worldSpaceViewDir); + + + #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) + inputData.shadowCoord = TransformWorldToShadowCoord(inputData.positionWS); + #else + inputData.shadowCoord = float4(0, 0, 0, 0); + #endif + + //inputData.fogCoord = IN.fogFactorAndVertexLight.x; + InitializeInputDataFog(float4(IN.worldPos, 1.0), IN.fogFactorAndVertexLight.x); + inputData.vertexLighting = IN.fogFactorAndVertexLight.yzw; + + + #if defined(_OVERRIDE_BAKEDGI) + inputData.bakedGI = l.DiffuseGI; + l.Emission += l.SpecularGI; + #else + #if defined(DYNAMICLIGHTMAP_ON) + inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.dynamicLightmapUV.xy, IN.sh, inputData.normalWS); + #elif defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2) + #if UNITY_VERSION >= 60000009 + inputData.bakedGI = SAMPLE_GI(IN.sh, IN.worldPos, inputData.normalWS, inputData.viewDirectionWS, IN.pos, IN.probeOcclusion, inputData.shadowMask); + #else + inputData.bakedGI = SAMPLE_GI(IN.sh, IN.worldPos, inputData.normalWS, inputData.viewDirectionWS, IN.pos); + #endif + #else + inputData.bakedGI = SAMPLE_GI(IN.lightmapUV, IN.sh, inputData.normalWS); + #endif + #endif + + inputData.normalizedScreenSpaceUV = GetNormalizedScreenSpaceUV(IN.pos); + inputData.shadowMask = SAMPLE_SHADOWMASK(IN.lightmapUV); + + #if defined(DEBUG_DISPLAY) + #if defined(DYNAMICLIGHTMAP_ON) + inputData.dynamicLightmapUV = IN.dynamicLightmapUV.xy; + #endif + #if defined(LIGHTMAP_ON) + inputData.staticLightmapUV = IN.lightmapUV; + #else + inputData.vertexSH = IN.sh; + #endif + #endif + + #ifdef _DBUFFER + ApplyDecal(IN.pos, + l.Albedo, + specular, + inputData.normalWS, + metallic, + l.Occlusion, + l.Smoothness); + #endif + + BRDFData brdfData; + InitializeBRDFData(l.Albedo, metallic, specular, l.Smoothness, l.Alpha, brdfData); + Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, inputData.shadowMask); + MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, inputData.shadowMask); + half3 color = GlobalIllumination(brdfData, inputData.bakedGI, l.Occlusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS); + + return BRDFDataToGbuffer(brdfData, inputData, l.Smoothness, l.Emission + color, l.Occlusion); + } + + ENDHLSL + + } + + + + Pass + { + Name "ShadowCaster" + Tags + { + "LightMode" = "ShadowCaster" + } + + // Render State + Blend One Zero, One Zero + Cull Back + ZTest LEqual + ZWrite On + // ColorMask: + + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" + } + Cull [_CullingOption] + ZWrite [_ZWrite] + ZTest [_ZTestMode] + ColorMask [_ColorMask] +Lighting Off + + + HLSLPROGRAM + + #pragma vertex Vert + #pragma fragment Frag + + #pragma target 3.0 + + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + #pragma multi_compile_instancing + + #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW + #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE + + #define _NORMAL_DROPOFF_TS 1 + #define ATTRIBUTES_NEED_NORMAL + #define ATTRIBUTES_NEED_TANGENT + #define _PASSSHADOW 1 + + + #pragma shader_feature_local TIMEISCUSTOM_ON + #pragma shader_feature_local ADDITIVECONFIG_ON + #pragma shader_feature_local PREMULTIPLYALPHA_ON + #pragma shader_feature_local PREMULTIPLYCOLOR_ON + #pragma shader_feature_local SPLITRGBA_ON + #pragma shader_feature_local SHAPEADD_ON + + #pragma shader_feature_local SHAPE1SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE2SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE3SCREENUV_ON /////////////////Pipeline specific implementation + + #pragma shader_feature_local SHAPEDEBUG_ON + + #pragma shader_feature_local SHAPE1CONTRAST_ON + #pragma shader_feature_local SHAPE1DISTORT_ON + #pragma shader_feature_local SHAPE1ROTATE_ON + #pragma shader_feature_local SHAPE1SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE2_ON + #pragma shader_feature_local SHAPE2CONTRAST_ON + #pragma shader_feature_local SHAPE2DISTORT_ON + #pragma shader_feature_local SHAPE2ROTATE_ON + #pragma shader_feature_local SHAPE2SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE3_ON + #pragma shader_feature_local SHAPE3CONTRAST_ON + #pragma shader_feature_local SHAPE3DISTORT_ON + #pragma shader_feature_local SHAPE3ROTATE_ON + #pragma shader_feature_local SHAPE3SHAPECOLOR_ON + + #pragma shader_feature_local GLOW_ON + #pragma shader_feature_local GLOWTEX_ON + #pragma shader_feature_local DEPTHGLOW_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local MASK_ON + #pragma shader_feature_local COLORRAMP_ON + #pragma shader_feature_local COLORRAMPGRAD_ON + #pragma shader_feature_local COLORGRADING_ON + #pragma shader_feature_local HSV_ON + #pragma shader_feature_local POSTERIZE_ON + #pragma shader_feature_local PIXELATE_ON + #pragma shader_feature_local DISTORT_ON + #pragma shader_feature_local SHAKEUV_ON + #pragma shader_feature_local WAVEUV_ON + #pragma shader_feature_local ROUNDWAVEUV_ON + #pragma shader_feature_local TWISTUV_ON + #pragma shader_feature_local DOODLE_ON + #pragma shader_feature_local OFFSETSTREAM_ON + #pragma shader_feature_local TEXTURESCROLL_ON + #pragma shader_feature_local VERTOFFSET_ON + #pragma shader_feature_local RIM_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local BACKFACETINT_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local POLARUV_ON + #pragma shader_feature_local POLARUVDISTORT_ON + #pragma shader_feature_local SHAPE1MASK_ON + #pragma shader_feature_local TRAILWIDTH_ON + #pragma shader_feature_local LIGHTANDSHADOW_ON + #pragma shader_feature_local SHAPETEXOFFSET_ON + #pragma shader_feature_local SHAPEWEIGHTS_ON + + #pragma shader_feature_local ALPHACUTOFF_ON + #pragma shader_feature_local ALPHASMOOTHSTEP_ON + #pragma shader_feature_local FADE_ON + #pragma shader_feature_local FADEBURN_ON + #pragma shader_feature_local ALPHAFADE_ON + #pragma shader_feature_local ALPHAFADEUSESHAPE1_ON + #pragma shader_feature_local ALPHAFADEUSEREDCHANNEL_ON + #pragma shader_feature_local ALPHAFADETRANSPARENCYTOO_ON + #pragma shader_feature_local ALPHAFADEINPUTSTREAM_ON + #pragma shader_feature_local CAMDISTFADE_ON + + #pragma shader_feature NORMALMAP_ON + + + #define _URP 1 +#define REQUIRE_DEPTH_TEXTURE + + + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" + + #undef WorldNormalVector + #define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix) + + #define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal) + + #define _WorldSpaceLightPos0 _MainLightPosition + + #define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name); + #define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name); + + #define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z) + #define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod) + #define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord) + #define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord) + + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod) + + #if defined(UNITY_COMPILER_HLSL) + #define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0; + #else + #define UNITY_INITIALIZE_OUTPUT(type,name) + #endif + + #define sampler2D_float sampler2D + #define sampler2D_half sampler2D + + + + // data across stages, stripped like the above. + struct VertexToPixel + { + float4 pos : SV_POSITION; + float3 worldPos : TEXCOORD0; + float3 worldNormal : TEXCOORD1; + float4 worldTangent : TEXCOORD2; + float4 texcoord0 : TEXCOORD3; + // float4 texcoord1 : TEXCOORD4; + // float4 texcoord2 : TEXCOORD5; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD6; + // #endif + + // #if %SCREENPOSREQUIREKEY% + float4 screenPos : TEXCOORD7; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + half4 vertexColor : COLOR; + // #endif + + #if defined(LIGHTMAP_ON) + float2 lightmapUV : TEXCOORD8; + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float2 dynamicLightmapUV : TEXCOORD9; + #endif + #if !defined(LIGHTMAP_ON) + float4 probeOcclusion : TEXCOORD8; + float3 sh : TEXCOORD10; + #endif + + #if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT) + float4 fogFactorAndVertexLight : TEXCOORD11; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD12; + #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD13; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD14; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD15; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD16; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD17; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD18; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD19; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD20; + // #endif + + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : CUSTOM_INSTANCE_ID; + #endif + #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) + uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; + #endif + #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) + uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; + #endif + #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; + #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float4 previousPositionCS : TEXCOORD21; // Contain previous transform position (in case of skinning for example) + float4 positionCS : TEXCOORD22; + #endif + }; + + + + + // data describing the user output of a pixel + struct Surface + { + half3 Albedo; + half Height; + half3 Normal; + half Smoothness; + half3 Emission; + half Metallic; + half3 Specular; + half Occlusion; + half SpecularPower; // for simple lighting + half Alpha; + float outputDepth; // if written, SV_Depth semantic is used. ShaderData.clipPos.z is unused value + // HDRP Only + half SpecularOcclusion; + half SubsurfaceMask; + half Thickness; + half CoatMask; + half CoatSmoothness; + half Anisotropy; + half IridescenceMask; + half IridescenceThickness; + int DiffusionProfileHash; + float SpecularAAThreshold; + float SpecularAAScreenSpaceVariance; + // requires _OVERRIDE_BAKEDGI to be defined, but is mapped in all pipelines + float3 DiffuseGI; + float3 BackDiffuseGI; + float3 SpecularGI; + float ior; + float3 transmittanceColor; + float atDistance; + float transmittanceMask; + // requires _OVERRIDE_SHADOWMASK to be defines + float4 ShadowMask; + + // for decals + float NormalAlpha; + float MAOSAlpha; + + + }; + + // Data the user declares in blackboard blocks + struct Blackboard + { + + float blackboardDummyData; + }; + + // data the user might need, this will grow to be big. But easy to strip + struct ShaderData + { + float4 clipPos; // SV_POSITION + float3 localSpacePosition; + float3 localSpaceNormal; + float3 localSpaceTangent; + + float3 worldSpacePosition; + float3 worldSpaceNormal; + float3 worldSpaceTangent; + float tangentSign; + + float3 worldSpaceViewDir; + float3 tangentSpaceViewDir; + + float4 texcoord0; + float4 texcoord1; + float4 texcoord2; + float4 texcoord3; + + float2 screenUV; + float4 screenPos; + + float4 vertexColor; + bool isFrontFace; + + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + + float3x3 TBNMatrix; + Blackboard blackboard; + }; + + struct VertexData + { + #if SHADER_TARGET > 30 + // uint vertexID : SV_VertexID; + #endif + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + + // optimize out mesh coords when not in use by user or lighting system + #if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER) + float4 texcoord1 : TEXCOORD1; + #endif + + #if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + #if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON))) + float4 texcoord1 : TEXCOORD1; + #endif + #if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + + #if _HDRP + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + #endif + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD4; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD5; // Add Precomputed Velocity (Alembic computes velocities on runtime side). + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessVertex + { + float4 vertex : INTERNALTESSPOS; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD5; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD6; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD7; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD8; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD9; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD10; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD11; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD12; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD13; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD14; + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + struct ExtraV2F + { + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + Blackboard blackboard; + float4 time; + }; + + + float3 WorldToTangentSpace(ShaderData d, float3 normal) + { + return mul(d.TBNMatrix, normal); + } + + float3 TangentToWorldSpace(ShaderData d, float3 normal) + { + return mul(normal, d.TBNMatrix); + } + + // in this case, make standard more like SRPs, because we can't fix + // unity_WorldToObject in HDRP, since it already does macro-fu there + + #if _STANDARD + float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); }; + float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); }; + float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); }; + float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); }; + float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; } + float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; } + #if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER)) + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod) + #else + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) + #endif + + #undef GetWorldToObjectMatrix() + + #define GetWorldToObjectMatrix() unity_WorldToObject + + + #endif + + float3 GetCameraWorldPosition() + { + #if _HDRP + return GetCameraRelativePositionWS(_WorldSpaceCameraPos); + #else + return _WorldSpaceCameraPos; + #endif + } + + #if _GRABPASSUSED + #if _STANDARD + TEXTURE2D(%GRABTEXTURE%); + SAMPLER(sampler_%GRABTEXTURE%); + #endif + + half3 GetSceneColor(float2 uv) + { + #if _STANDARD + return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb; + #else + return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv); + #endif + } + #endif + + + + #if _STANDARD + UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); + float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); } + #else + float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); } + #endif + + float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) + { + float eye = GetLinearEyeDepth(uv); + float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz); + + float dt = dot(worldSpaceViewDir, camView); + float3 div = worldSpaceViewDir/dt; + float3 wpos = (eye * div) + GetCameraWorldPosition(); + return wpos; + } + + #if _HDRP + float3 ObjectToWorldSpacePosition(float3 pos) + { + return GetAbsolutePositionWS(TransformObjectToWorld(pos)); + } + #else + float3 ObjectToWorldSpacePosition(float3 pos) + { + return TransformObjectToWorld(pos); + } + #endif + + #if _STANDARD + UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture); + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); + float3 norms = DecodeViewNormalStereo(depthNorms); + norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5; + return norms; + } + #elif _HDRP && !_DECALSHADER + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + NormalData nd; + DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd); + return nd.normalWS; + } + #elif _URP + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" + #endif + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + return SampleSceneNormals(uv); + #else + float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir); + return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5; + #endif + + } + #endif + + #if _HDRP + + half3 UnpackNormalmapRGorAG(half4 packednormal) + { + // This do the trick + packednormal.x *= packednormal.w; + + half3 normal; + normal.xy = packednormal.xy * 2 - 1; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 UnpackNormal(half4 packednormal) + { + #if defined(UNITY_NO_DXT5nm) + return packednormal.xyz * 2 - 1; + #else + return UnpackNormalmapRGorAG(packednormal); + #endif + } + #endif + #if _HDRP || _URP + + half3 UnpackScaleNormal(half4 packednormal, half scale) + { + #ifndef UNITY_NO_DXT5nm + // Unpack normal as DXT5nm (1, y, 1, x) or BC5 (x, y, 0, 1) + // Note neutral texture like "bump" is (0, 0, 1, 1) to work with both plain RGB normal and DXT5nm/BC5 + packednormal.x *= packednormal.w; + #endif + half3 normal; + normal.xy = (packednormal.xy * 2 - 1) * scale; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + + #endif + + + void GetSun(out float3 lightDir, out float3 color) + { + lightDir = float3(0.5, 0.5, 0); + color = 1; + #if _HDRP + if (_DirectionalLightCount > 0) + { + DirectionalLightData light = _DirectionalLightDatas[0]; + lightDir = -light.forward.xyz; + color = light.color; + } + #elif _STANDARD + lightDir = normalize(_WorldSpaceLightPos0.xyz); + color = _LightColor0.rgb; + #elif _URP + Light light = GetMainLight(); + lightDir = light.direction; + color = light.color; + #endif + } + + + + CBUFFER_START(UnityPerMaterial) + + + half4 _Color; + half _Alpha; + half _AlphaCutoffValue; + + half _TimingSeed; + + #if TIMEISCUSTOM_ON + float4 globalCustomTime; + #endif + + half4 _MainTex_ST, _ShapeColor; + half _ShapeXSpeed, _ShapeYSpeed, _ShapeColorWeight, _ShapeAlphaWeight; + + #if SHAPE1CONTRAST_ON + half _ShapeContrast, _ShapeBrightness; + #endif + + #if SHAPE1DISTORT_ON + half4 _ShapeDistortTex_ST; + half _ShapeDistortAmount, _ShapeDistortXSpeed, _ShapeDistortYSpeed; + #endif + + #if SHAPE1ROTATE_ON + half _ShapeRotationOffset, _ShapeRotationSpeed; + #endif + + #if OFFSETSTREAM_ON + half _OffsetSh1; + #endif + + #if SHAPEWEIGHTS_ON + half _Sh1BlendOffset; + #endif + + #if SHAPE2_ON + half4 _Shape2Tex_ST, _Shape2Color; + half _Shape2XSpeed, _Shape2YSpeed, _Shape2ColorWeight, _Shape2AlphaWeight; + #if SHAPE2CONTRAST_ON + half _Shape2Contrast, _Shape2Brightness; + #endif + #if SHAPE2DISTORT_ON + half4 _Shape2DistortTex_ST; + half _Shape2DistortAmount, _Shape2DistortXSpeed, _Shape2DistortYSpeed; + #endif + #if SHAPE2ROTATE_ON + half _Shape2RotationOffset, _Shape2RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh2; + #endif + #if SHAPEWEIGHTS_ON + half _Sh2BlendOffset; + #endif + #endif + + #if SHAPE3_ON + half4 _Shape3Tex_ST, _Shape3Color; + half _Shape3XSpeed, _Shape3YSpeed, _Shape3ColorWeight, _Shape3AlphaWeight; + #if SHAPE3CONTRAST_ON + half _Shape3Contrast, _Shape3Brightness; + #endif + #if SHAPE3DISTORT_ON + half4 _Shape3DistortTex_ST; + half _Shape3DistortAmount, _Shape3DistortXSpeed, _Shape3DistortYSpeed; + #endif + #if SHAPE3ROTATE_ON + half _Shape3RotationOffset, _Shape3RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh3; + #endif + #if SHAPEWEIGHTS_ON + half _Sh3BlendOffset; + #endif + #endif + + #if GLOW_ON + half4 _GlowColor; + half _Glow, _GlowGlobal; + #if GLOWTEX_ON + half4 _GlowTex_ST; + #endif + #endif + + #if MASK_ON + half4 _MaskTex_ST; + half _MaskPow; + #endif + + #if COLORRAMP_ON + half _ColorRampLuminosity, _ColorRampBlend; + #endif + + #if ALPHASMOOTHSTEP_ON + half _AlphaStepMin, _AlphaStepMax; + #endif + + #if ALPHAFADE_ON + half _AlphaFadeAmount, _AlphaFadeSmooth, _AlphaFadePow; + #endif + + #if HSV_ON + half _HsvShift, _HsvSaturation, _HsvBright; + #endif + + #if POSTERIZE_ON + half _PosterizeNumColors; + #endif + + #if PIXELATE_ON + half _PixelateSize; + #endif + + #if DISTORT_ON + half4 _DistortTex_ST; + half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount; + #endif + + #if TEXTURESCROLL_ON + half _TextureScrollXSpeed, _TextureScrollYSpeed; + #endif + + #if SHAKEUV_ON + half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY; + #endif + + #if WAVEUV_ON + half _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY; + #endif + + #if ROUNDWAVEUV_ON + half _RoundWaveStrength, _RoundWaveSpeed; + #endif + + #if TWISTUV_ON + half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius; + #endif + + #if DOODLE_ON + half _HandDrawnAmount, _HandDrawnSpeed; + #endif + + #if ROUNDWAVEUV_ON || PIXELATE_ON + half4 _MainTex_TexelSize; + #endif + + #if VERTOFFSET_ON + half4 _VertOffsetTex_ST; + half _VertOffsetAmount, _VertOffsetPower, _VertOffsetTexXSpeed, _VertOffsetTexYSpeed; + #endif + + #if FADE_ON + half4 _FadeTex_ST; + half _FadeAmount, _FadeTransition, _FadePower, _FadeScrollXSpeed, _FadeScrollYSpeed; + #if FADEBURN_ON + half4 _FadeBurnColor, _FadeBurnTex_ST; + half _FadeBurnWidth, _FadeBurnGlow; + #endif + #endif + + #if COLORGRADING_ON + half3 _ColorGradingLight, _ColorGradingMiddle, _ColorGradingDark; + half _ColorGradingMidPoint; + #endif + + #if CAMDISTFADE_ON + half _CamDistFadeStepMin, _CamDistFadeStepMax, _CamDistProximityFade; + #endif + + #if RIM_ON + half _RimBias, _RimScale, _RimPower, _RimIntensity, _RimAddAmount, _RimErodesAlpha; + half4 _RimColor; + #endif + + #if BACKFACETINT_ON + half4 _BackFaceTint, _FrontFaceTint; + #endif + + #if SHAPEDEBUG_ON + half _DebugShape; + #endif + + #if SHAPE1MASK_ON + half4 _Shape1MaskTex_ST; + half _Shape1MaskPow; + #endif + + #if TRAILWIDTH_ON + half _TrailWidthPower; + #endif + + #if LIGHTANDSHADOW_ON + half3 _All1VfxLightDir; + half _ShadowAmount, _ShadowStepMin, _ShadowStepMax, _LightAmount; + half4 _LightColor; + #endif + + #if SHAPETEXOFFSET_ON + half _RandomSh1Mult, _RandomSh2Mult, _RandomSh3Mult; + #endif + + #if DEPTHGLOW_ON + half _DepthGlowDist, _DepthGlowPow, _DepthGlow, _DepthGlowGlobal; + half4 _DepthGlowColor; + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half _ScreenUvShDistScale,_ScreenUvSh2DistScale, _ScreenUvSh3DistScale; + #endif + + #if NORMALMAP_ON + half _NormalStrength; + #endif + + + + + CBUFFER_END + + + + + + + + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + + #if SHAPE1DISTORT_ON + TEXTURE2D(_ShapeDistortTex); + SAMPLER(sampler_ShapeDistortTex); + #endif + + #if SHAPE2_ON + TEXTURE2D(_Shape2Tex); + SAMPLER(sampler_Shape2Tex); + #if SHAPE2DISTORT_ON + TEXTURE2D(_Shape2DistortTex); + SAMPLER(sampler_Shape2DistortTex); + #endif + #endif + + #if SHAPE3_ON + TEXTURE2D(_Shape3Tex); + SAMPLER(sampler_Shape3Tex); + #if SHAPE3DISTORT_ON + TEXTURE2D(_Shape3DistortTex); + SAMPLER(sampler_Shape3DistortTex); + #endif + #endif + + #if GLOW_ON + #if GLOWTEX_ON + TEXTURE2D(_GlowTex); + SAMPLER(sampler_GlowTex); + #endif + #endif + + #if MASK_ON + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); + #endif + + #if COLORRAMP_ON + TEXTURE2D(_ColorRampTex); + SAMPLER(sampler_ColorRampTex); + #endif + + #if COLORRAMPGRAD_ON + TEXTURE2D(_ColorRampTexGradient); + SAMPLER(sampler_ColorRampTexGradient); + #endif + + #if DISTORT_ON + TEXTURE2D(_DistortTex); + SAMPLER(sampler_DistortTex); + #endif + + #if VERTOFFSET_ON + TEXTURE2D(_VertOffsetTex); + SAMPLER(sampler_VertOffsetTex); + #endif + + #if FADE_ON + TEXTURE2D(_FadeTex); + SAMPLER(sampler_FadeTex); + #if FADEBURN_ON + TEXTURE2D(_FadeBurnTex); + SAMPLER(sampler_FadeBurnTex); + #endif + #endif + + #if SHAPE1MASK_ON + TEXTURE2D(_Shape1MaskTex); + SAMPLER(sampler_Shape1MaskTex); + #endif + + #if TRAILWIDTH_ON + TEXTURE2D(_TrailWidthGradient); + SAMPLER(sampler_TrailWidthGradient); + #endif + + #if NORMALMAP_ON + TEXTURE2D(_NormalMap); + SAMPLER(sampler_NormalMap); + #endif + + half4 SampleTextureWithScroll(in Texture2D _tex, in SamplerState _sampler, in float2 uv, in half scrollXSpeed, in half scrollYSpeed, in float time) + { + half2 _uv = uv; + _uv.x += (time * scrollXSpeed) % 1; + _uv.y += (time * scrollYSpeed) % 1; + return SAMPLE_TEXTURE2D(_tex, _sampler, _uv); + } + + half EaseOutQuint(half x) + { + return 1 - pow(1 - x, 5); + } + + half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax) + { + return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin); + } + + float2 RotateUvs(float2 uv, half rotation, half4 scaleAndTranslate) + { + half2 center = half2(0.5 * scaleAndTranslate.x + scaleAndTranslate.z, 0.5 * scaleAndTranslate.y + scaleAndTranslate.w); + half cosAngle = cos(rotation); + half sinAngle = sin(rotation); + uv -= center; + uv = mul(half2x2(cosAngle, -sinAngle, sinAngle, cosAngle), uv); + uv += center; + return uv; + } + + half4 GetDebugColor(float4 resColor, half4 shape1, half4 shape2, half4 shape3) + { + half4 res = resColor; + + //MAKE SURE THE FOLLOWING CODE BLOCK IS UNCOMMENTED------------------------------------------- + #if SHAPEDEBUG_ON + if(_DebugShape < 1.5) return shape1; + #if SHAPE2_ON + else if (_DebugShape < 2.5) return shape2; + #endif + #if SHAPE3_ON + else return shape3; + #endif + #endif + + return res; + } + + void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d) + { + //uvDistTex --> extraV2F0 + //uvSh1DistTex --> extraV2F1 + //uvSh2DistTex --> extraV2F2 + //uvSh3DistTex --> extraV2F3 + + #if VERTOFFSET_ON + #if TIMEISCUSTOM_ON + const half time = v.texcoord0.z + globalCustomTime.y; + #else + const half time = v.texcoord0.z + _Time.y; + #endif + half4 offsetUv = half4(TRANSFORM_TEX(v.texcoord0.xy, _VertOffsetTex), 0, 0); + offsetUv.x += (time * _VertOffsetTexXSpeed) % 1; + offsetUv.y += (time * _VertOffsetTexYSpeed) % 1; + v.vertex.xyz += v.normal * _VertOffsetAmount * pow(SAMPLE_TEXTURE2D_LOD(_VertOffsetTex, sampler_VertOffsetTex, offsetUv, 0).r, _VertOffsetPower); + #endif + + #if DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F0.xy = TRANSFORM_TEX(v.texcoord0.xy, _DistortTex); + #endif + + #if SHAPE1DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F1.xy = TRANSFORM_TEX(v.texcoord0.xy, _ShapeDistortTex); + #endif + + #if SHAPE2_ON + #if SHAPE2DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F2.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape2DistortTex);; + #endif + #endif + + #if SHAPE3_ON + #if SHAPE3DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F3.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape3DistortTex); + #endif + #endif + } + + void Ext_SurfaceFunction0 (inout Surface o, ShaderData d) + { + //i.uvSeed -> d.texcoord0.xy + + float seed = d.texcoord0.z + _TimingSeed; + #if TIMEISCUSTOM_ON + const float4 shaderTime = globalCustomTime; + #else + const float4 shaderTime = _Time; + #endif + float time = shaderTime.y + seed; + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 originalUvs = d.texcoord0.xy; + #endif + + #if PIXELATE_ON + half aspectRatio = _MainTex_TexelSize.x / _MainTex_TexelSize.y; + half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio); + d.texcoord0.xy = floor(d.texcoord0.xy * pixelSize) / pixelSize; + #endif + + #if NORMALMAP_ON + half4 normalSample = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, d.texcoord0.xy); + half3 normalTS = UnpackNormal(normalSample); + normalTS.xy *= _NormalStrength; + o.Normal = normalTS; + #endif + + #if TWISTUV_ON + half2 tempUv = d.texcoord0.xy - half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + _TwistUvRadius *= (_MainTex_ST.x + _MainTex_ST.y) / 2; + half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius; + half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0; + half s = sin(theta); + half c = cos(theta); + half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0); + tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta); + tempUv += half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + d.texcoord0.xy = tempUv; + #endif + + #if DOODLE_ON + half2 uvCopy = d.texcoord0.xy; + _HandDrawnSpeed = (floor((shaderTime.x + seed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed; + uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4); + uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4); + d.texcoord0.xy = lerp(d.texcoord0.xy, d.texcoord0.xy + uvCopy, 0.0005 * _HandDrawnAmount); + #endif + + #if SHAKEUV_ON + half xShake = sin((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvX; + half yShake = cos((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvY; + d.texcoord0.xy += half2(xShake * 0.012, yShake * 0.01); + #endif + + #if WAVEUV_ON + half2 uvWave = half2(_WaveX * _MainTex_ST.x, _WaveY * _MainTex_ST.y) - d.texcoord0.xy; + #if ATLAS_ON + uvWave = half2(_WaveX, _WaveY) - uvRect; + #endif + uvWave.x *= _ScreenParams.x / _ScreenParams.y; + half angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((time * _WaveSpeed) % 360.0); + d.texcoord0.xy = d.texcoord0.xy + normalize(uvWave) * sin(angWave) * (_WaveStrength / 1000.0); + #endif + + #if ROUNDWAVEUV_ON + half xWave = ((0.5 * _MainTex_ST.x) - d.texcoord0.x); + half yWave = ((0.5 * _MainTex_ST.y) - d.texcoord0.y) * (_MainTex_TexelSize.w / _MainTex_TexelSize.z); + half ripple = -sqrt(xWave*xWave + yWave* yWave); + d.texcoord0.xy += (sin((ripple + time * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1; + #endif + + #if POLARUV_ON + half2 prePolarUvs = d.texcoord0.xy; + d.texcoord0.xy = d.texcoord0.xy - half2(0.5, 0.5); + d.texcoord0.xy = half2(atan2(d.texcoord0.y, d.texcoord0.x) / (1.0 * 6.28318530718), length(d.texcoord0.xy) * 2.0); + d.texcoord0.xy *= _MainTex_ST.xy; + #endif + + #if DISTORT_ON + #if POLARUVDISTORT_ON + half2 distortUvs = TRANSFORM_TEX(d.texcoord0.xy, _DistortTex); + #else + half2 distortUvs = d.extraV2F0.xy; + #endif + distortUvs.x += ((shaderTime.x + seed) * _DistortTexXSpeed) % 1; + distortUvs.y += ((shaderTime.x + seed) * _DistortTexYSpeed) % 1; + #if ATLAS_ON + d.extraV2F0.xy = half2((d.extraV2F0.x - _MinXUV) / (_MaxXUV - _MinXUV), (d.extraV2F0.y - _MinYUV) / (_MaxYUV - _MinYUV)); + #endif + half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, distortUvs).r - 0.5) * 0.2 * _DistortAmount; + d.texcoord0.x += distortAmnt; + d.texcoord0.y += distortAmnt; + #endif + + #if TEXTURESCROLL_ON + d.texcoord0.x += (time * _TextureScrollXSpeed) % 1; + d.texcoord0.y += (time * _TextureScrollYSpeed) % 1; + #endif + + #if TRAILWIDTH_ON + half width = pow(SAMPLE_TEXTURE2D(_TrailWidthGradient, sampler_TrailWidthGradient, d.texcoord0).r, _TrailWidthPower); + d.texcoord0.y = (d.texcoord0.y * 2 - 1) / width * 0.5 + 0.5; + clip(d.texcoord0.y); + clip(1 - d.texcoord0.y); + #endif + + float2 shape1Uv = d.texcoord0.xy; + #if SHAPE2_ON + float2 shape2Uv = shape1Uv; + #endif + #if SHAPE3_ON + float2 shape3Uv = shape1Uv; + #endif + + #if CAMDISTFADE_ON || SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half camDistance = distance(d.worldSpacePosition, _WorldSpaceCameraPos); + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 uvOffsetPostFx = d.texcoord0.xy - originalUvs; + d.texcoord0.xy = d.screenPos.xy / d.screenPos.w; + d.texcoord0.x = d.texcoord0.x * (_ScreenParams.x / _ScreenParams.y); + d.texcoord0.x -= 0.5; + d.texcoord0.xy -= uvOffsetPostFx; + originalUvs += uvOffsetPostFx; + half distanceZoom = camDistance * 0.1; + half2 scaleWithDistUvs = d.texcoord0.xy * distanceZoom + ((-distanceZoom * 0.5) + 0.5); + #if SHAPE1SCREENUV_ON + shape1Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvShDistScale); + #else + shape1Uv = originalUvs; + #endif + #if SHAPE2SCREENUV_ON && SHAPE2_ON + shape2Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh2DistScale); + #else + #if SHAPE2_ON + shape2Uv = originalUvs; + #endif + #endif + #if SHAPE3SCREENUV_ON && SHAPE3_ON + shape3Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh3DistScale); + #else + #if SHAPE3_ON + shape3Uv = originalUvs; + #endif + #endif + #endif + + shape1Uv = TRANSFORM_TEX(shape1Uv, _MainTex); + #if OFFSETSTREAM_ON + shape1Uv.x += i.offsetCustomData.x * _OffsetSh1; + shape1Uv.y += i.offsetCustomData.y * _OffsetSh1; + #endif + #if SHAPETEXOFFSET_ON + shape1Uv += seed * _RandomSh1Mult; + #endif + + #if SHAPE1DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh1DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _ShapeDistortTex); + #else + half2 sh1DistortUvs = d.extraV2F1.xy; + #endif + + sh1DistortUvs.x += ((time + seed) * _ShapeDistortXSpeed) % 1; + sh1DistortUvs.y += ((time + seed) * _ShapeDistortYSpeed) % 1; + half distortAmount = (SAMPLE_TEXTURE2D(_ShapeDistortTex, sampler_ShapeDistortTex, sh1DistortUvs).r - 0.5) * 0.2 * _ShapeDistortAmount; + shape1Uv.x += distortAmount; + shape1Uv.y += distortAmount; + #endif + #if SHAPE1ROTATE_ON + shape1Uv = RotateUvs(shape1Uv, _ShapeRotationOffset + ((_ShapeRotationSpeed * time) % 6.28318530718), _MainTex_ST); + #endif + + half4 shape1 = SampleTextureWithScroll(_MainTex, sampler_MainTex, shape1Uv, _ShapeXSpeed, _ShapeYSpeed, time); + #if SHAPE1SHAPECOLOR_ON + shape1.a = shape1.r; + shape1.rgb = _ShapeColor.rgb; + #else + shape1 *= _ShapeColor; + #endif + #if SHAPE1CONTRAST_ON + #if SHAPE1SHAPECOLOR_ON + shape1.a = saturate((shape1.a - 0.5) * _ShapeContrast + 0.5 + _ShapeBrightness); + #else + shape1.rgb = max(0, (shape1.rgb - half3(0.5, 0.5, 0.5)) * _ShapeContrast + half3(0.5, 0.5, 0.5) + _ShapeBrightness); + #endif + #endif + + half4 shape2 = 1.0; + #if SHAPE2_ON + shape2Uv = TRANSFORM_TEX(shape2Uv, _Shape2Tex); + #if OFFSETSTREAM_ON + shape2Uv.x += i.offsetCustomData.x * _OffsetSh2; + shape2Uv.y += i.offsetCustomData.y * _OffsetSh2; + #endif + #if SHAPETEXOFFSET_ON + shape2Uv += seed * _RandomSh2Mult; + #endif + #if SHAPE2DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh2DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape2DistortTex); + #else + half2 sh2DistortUvs = d.extraV2F2.xy; + #endif + sh2DistortUvs.x += ((time + seed) * _Shape2DistortXSpeed) % 1; + sh2DistortUvs.y += ((time + seed) * _Shape2DistortYSpeed) % 1; + half distortAmnt2 = (SAMPLE_TEXTURE2D(_Shape2DistortTex, sampler_Shape2DistortTex, sh2DistortUvs).r - 0.5) * 0.2 * _Shape2DistortAmount; + shape2Uv.x += distortAmnt2; + shape2Uv.y += distortAmnt2; + #endif + #if SHAPE2ROTATE_ON + shape2Uv = RotateUvs(shape2Uv, _Shape2RotationOffset + ((_Shape2RotationSpeed * time) % 6.28318530718), _Shape2Tex_ST); + #endif + + shape2 = SampleTextureWithScroll(_Shape2Tex, sampler_Shape2Tex, shape2Uv, _Shape2XSpeed, _Shape2YSpeed, time); + #if SHAPE2SHAPECOLOR_ON + shape2.a = shape2.r; + shape2.rgb = _Shape2Color.rgb; + #else + shape2 *= _Shape2Color; + #endif + #if SHAPE2CONTRAST_ON + #if SHAPE2SHAPECOLOR_ON + shape2.a = max(0, (shape2.a - 0.5) * _Shape2Contrast + 0.5 + _Shape2Brightness); + #else + shape2.rgb = max(0, (shape2.rgb - half3(0.5, 0.5, 0.5)) * _Shape2Contrast + half3(0.5, 0.5, 0.5) + _Shape2Brightness); + #endif + #endif + #endif + + half4 shape3 = 1.0; + #if SHAPE3_ON + shape3Uv = TRANSFORM_TEX(shape3Uv, _Shape3Tex); + + #if OFFSETSTREAM_ON + shape3Uv.x += i.offsetCustomData.x * _OffsetSh3; + shape3Uv.y += i.offsetCustomData.y * _OffsetSh3; + #endif + #if SHAPETEXOFFSET_ON + shape3Uv += seed * _RandomSh3Mult; + #endif + #if SHAPE3DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh3DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape3DistortTex); + #else + half2 sh3DistortUvs = d.extraV2F3.xy; + #endif + sh3DistortUvs.x += ((time + seed) * _Shape3DistortXSpeed) % 1; + sh3DistortUvs.y += ((time + seed) * _Shape3DistortYSpeed) % 1; + half distortAmnt3 = (SAMPLE_TEXTURE2D(_Shape3DistortTex, sampler_Shape3DistortTex, sh3DistortUvs).r - 0.5) * 0.3 * _Shape3DistortAmount; + shape3Uv.x += distortAmnt3; + shape3Uv.y += distortAmnt3; + #endif + #if SHAPE3ROTATE_ON + shape3Uv = RotateUvs(shape3Uv, _Shape3RotationOffset + ((_Shape3RotationSpeed * time) % 6.28318530718), _Shape3Tex_ST); + #endif + shape3 = SampleTextureWithScroll(_Shape3Tex, sampler_Shape3Tex, shape3Uv, _Shape3XSpeed, _Shape3YSpeed, time); + #if SHAPE3SHAPECOLOR_ON + shape3.a = shape3.r; + shape3.rgb = _Shape3Color.rgb; + #else + shape3 *= _Shape3Color; + #endif + #if SHAPE3CONTRAST_ON + #if SHAPE3SHAPECOLOR_ON + shape3.a = max(0, (shape3.a - 0.5) * _Shape3Contrast + 0.5 + _Shape3Brightness); + #else + shape3.rgb = max(0, (shape3.rgb - half3(0.5, 0.5, 0.5)) * _Shape3Contrast + half3(0.5, 0.5, 0.5) + _Shape3Brightness); + #endif + #endif + #endif + + half4 col = shape1; + //Mix all shapes pre: change weights if custom vertex effect active + #if SHAPEWEIGHTS_ON + half shapeWeightOffset; + #if SHAPE2_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh1BlendOffset; + _ShapeColorWeight = max(0, _ShapeColorWeight + shapeWeightOffset); + _ShapeAlphaWeight = max(0, _ShapeAlphaWeight + shapeWeightOffset); + shapeWeightOffset = i.offsetCustomData.z * _Sh2BlendOffset; + _Shape2ColorWeight = max(0, _Shape2ColorWeight + shapeWeightOffset); + _Shape2AlphaWeight = max(0, _Shape2AlphaWeight + shapeWeightOffset); + #endif + #if SHAPE3_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh3BlendOffset; + _Shape3ColorWeight = max(0, _Shape3ColorWeight + shapeWeightOffset); + _Shape3AlphaWeight = max(0, _Shape3AlphaWeight + shapeWeightOffset); + #endif + #endif + + //Mix all shapes + #if SHAPE2_ON + #if !SPLITRGBA_ON + _ShapeAlphaWeight = _ShapeColorWeight; + _Shape2AlphaWeight = _Shape2ColorWeight; + #endif + #if SHAPE3_ON //Shape3 On + #if !SPLITRGBA_ON + _Shape3AlphaWeight = _Shape3ColorWeight; + #endif + #if SHAPEADD_ON + col.rgb = ((shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight)) + (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(max(shape3.a * _Shape3AlphaWeight, max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight))); + #else + col.rgb = ((shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight)) * (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)) * (shape3.a * _Shape3AlphaWeight)); + #endif + #else //Shape3 Off + #if SHAPEADD_ON + col.rgb = (shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight); + col.a = saturate(max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight)); + #else + col.rgb = (shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight); + col.a = saturate((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)); + #endif + #endif + #endif + + #if SHAPE1MASK_ON + col = lerp(col, shape1, pow(SAMPLE_TEXTURE2D(_Shape1MaskTex, sampler_Shape1MaskTex, TRANSFORM_TEX(i.uvSeed.xy, _Shape1MaskTex)).r, _Shape1MaskPow)); + #endif + + #if PREMULTIPLYCOLOR_ON + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + col.a = min(luminance, col.a); + #endif + + col.rgb *= _Color.rgb * d.vertexColor.rgb; + #if PREMULTIPLYALPHA_ON + col.rgb *= col.a; + #endif + + #if !PREMULTIPLYCOLOR_ON && (COLORRAMP_ON || ALPHAFADE_ON || COLORGRADING_ON || FADE_ON || (ADDITIVECONFIG_ON && (GLOW_ON || DEPTHGLOW_ON))) + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + #endif + + #if (FADE_ON || ALPHAFADE_ON) && ALPHAFADEINPUTSTREAM_ON + col.a *= d.vertexColor.a; + d.vertexColor.a = d.texcoord0.w; + #endif + + #if FADE_ON + half preFadeAlpha = col.a; + _FadeAmount = saturate(_FadeAmount + (1 - d.vertexColor.a)); + _FadeTransition = max(0.01, _FadeTransition * EaseOutQuint(saturate(_FadeAmount))); + half2 fadeUv; + fadeUv = d.texcoord0.xy + seed; + fadeUv.x += (time * _FadeScrollXSpeed) % 1; + fadeUv.y += (time * _FadeScrollYSpeed) % 1; + half2 tiledUvFade1 = TRANSFORM_TEX(fadeUv, _FadeTex); + #if ADDITIVECONFIG_ON && !PREMULTIPLYCOLOR_ON + preFadeAlpha *= luminance; + #endif + _FadeAmount = saturate(pow(_FadeAmount, _FadePower)); + #if FADEBURN_ON + half2 tiledUvFade2 = TRANSFORM_TEX(fadeUv, _FadeBurnTex); + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + half fadeNaturalEdge = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fadeNaturalEdge; + half fadeBurn = saturate(smoothstep(0.0 , _FadeTransition + _FadeBurnWidth, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + fadeBurn = fadeNaturalEdge - fadeBurn; + _FadeBurnColor.rgb *= _FadeBurnGlow; + col.rgb += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2).rgb * _FadeBurnColor.rgb * preFadeAlpha; + #else + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + float fade = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fade; + #endif + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _FadeAmount; + #endif + #endif + + #if ALPHAFADE_ON + half alphaFadeLuminance; + _AlphaFadeAmount = saturate(_AlphaFadeAmount + (1 - d.vertexColor.a)); + _AlphaFadeAmount = saturate(pow(_AlphaFadeAmount, _AlphaFadePow)); + _AlphaFadeSmooth = max(0.01, _AlphaFadeSmooth * EaseOutQuint(saturate(_AlphaFadeAmount))); + #if ALPHAFADEUSESHAPE1_ON + alphaFadeLuminance = shape1.r; + #else + alphaFadeLuminance = luminance; + #endif + alphaFadeLuminance = saturate(alphaFadeLuminance - 0.001); + #if ALPHAFADEUSEREDCHANNEL_ON + col.a *= col.r; + #endif + col.a = saturate(col.a); + float alphaFade = saturate(smoothstep(0.0 , _AlphaFadeSmooth, RemapFloat(1.0 - _AlphaFadeAmount, 0.0, 1.0, -1.0, 1.0) + alphaFadeLuminance)); + col.a *= alphaFade; + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _AlphaFadeAmount; + #endif + #endif + + #if BACKFACETINT_ON + col.rgb = lerp(col.rgb * _BackFaceTint, col.rgb * _FrontFaceTint, step(0, dot(d.worldSpaceNormal, d.worldSpaceViewDir))); + #endif + + //#if LIGHTANDSHADOW_ON + //half NdL = saturate(dot(d.worldSpaceNormal, -_All1VfxLightDir)); + //col.rgb += _LightColor * _LightAmount * NdL; + //NdL = max(_ShadowAmount, NdL); + //NdL = smoothstep(_ShadowStepMin, _ShadowStepMax, NdL); + //col.rgb *= NdL; + //#endif + + #if COLORGRADING_ON + col.rgb *= lerp(lerp(_ColorGradingDark, _ColorGradingMiddle, luminance/_ColorGradingMidPoint), + lerp(_ColorGradingMiddle, _ColorGradingLight, (luminance - _ColorGradingMidPoint)/(1.0 - _ColorGradingMidPoint)), step(_ColorGradingMidPoint, luminance)); + #endif + + #if COLORRAMP_ON + half colorRampLuminance = saturate(luminance + _ColorRampLuminosity); + #if COLORRAMPGRAD_ON + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(colorRampLuminance, 0)); + #else + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(colorRampLuminance, 0)); + #endif + col.rgb = lerp(col.rgb, colorRampRes.rgb, _ColorRampBlend); + col.a = lerp(col.a, saturate(col.a * colorRampRes.a), _ColorRampBlend); + #endif + + #if POSTERIZE_ON && !POSTERIZEOUTLINE_ON + col.rgb = floor(col.rgb / (1.0 / _PosterizeNumColors)) * (1.0 / _PosterizeNumColors); + #endif + + #if DEPTHGLOW_ON + half sceneDepthDiff = GetLinearEyeDepth(d.screenUV) - d.screenPos.w; + #endif + + #if RIM_ON + half NdV = 1 - abs(dot(d.worldSpaceNormal, d.worldSpaceViewDir)); + half rimFactor = saturate(_RimBias + _RimScale * pow(NdV, _RimPower)); + half4 rimCol = _RimColor * rimFactor; + rimCol.rgb *= _RimIntensity; + col.rgb = lerp(col.rgb * (rimCol.rgb + half3(1,1,1)), col.rgb + rimCol.rgb, _RimAddAmount); + col.a = saturate(col.a * (1 - rimFactor * _RimErodesAlpha)); + #endif + + #if DEPTHGLOW_ON + half depthGlowMask = saturate(_DepthGlowDist * pow((1 - sceneDepthDiff), _DepthGlowPow)); + col.rgb = lerp(col.rgb, _DepthGlowGlobal * col.rgb, depthGlowMask); + half depthGlowMult = 1; + #if ADDITIVECONFIG_ON + depthGlowMult = luminance; + #endif + col.rgb += _DepthGlowColor.rgb * _DepthGlow * depthGlowMask * col.a * depthGlowMult; + #endif + + #if GLOW_ON + half glowMask = 1; + #if GLOWTEX_ON + glowMask = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, TRANSFORM_TEX(d.texcoord0.xy, _GlowTex)); + #endif + col.rgb *= _GlowGlobal * glowMask; + half glowMult = 1; + #if ADDITIVECONFIG_ON + glowMult = luminance; + #endif + + col.rgb += _GlowColor.rgb * _Glow * glowMask * col.a * glowMult; + #endif + + #if HSV_ON + half3 resultHsv = half3(col.rgb); + half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180); + half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180); + resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x + + (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z; + resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x + + (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z; + resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x + + (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y + + (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z; + col.rgb = resultHsv; + #endif + + #if CAMDISTFADE_ON + col.a *= 1 - saturate(smoothstep(_CamDistFadeStepMin, _CamDistFadeStepMax, camDistance)); + col.a *= smoothstep(0.0, _CamDistProximityFade, camDistance); + #endif + + #if MASK_ON + half2 maskUv = d.texcoord0.xy; + #if POLARUV_ON + maskUv = prePolarUvs; + #endif + half4 maskSample = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, TRANSFORM_TEX(maskUv, _MaskTex)); + half mask = pow(min(maskSample.r, maskSample.a), _MaskPow); + col.a *= mask; + #endif + + #if ALPHASMOOTHSTEP_ON + col.a = smoothstep(_AlphaStepMin, _AlphaStepMax, col.a); + #endif + + half4 debugColor = col; + #if SHAPEDEBUG_ON + debugColor = GetDebugColor(col, shape1, shape2, shape3); + #endif + + clip(debugColor.a - _AlphaCutoffValue - 0.01); + + //#if FOG_ON + //UNITY_APPLY_FOG(i.fogCoord, col); + //#endif + + //Don't use a starting i.color.a lower than 1 unless using vertex stream dissolve when using a FADE effect + #if !FADE_ON && !ALPHAFADE_ON + col.a *= _Alpha * d.vertexColor.a; + #endif + #if FADE_ON || ALPHAFADE_ON + col.a *= _Alpha; + #endif + #if ADDITIVECONFIG_ON + col.rgb *= col.a; + #endif + + + #if SHAPEDEBUG_ON + o.Albedo = debugColor.rgb; + o.Alpha = debugColor.a; + #else + o.Albedo = col.rgb; + o.Alpha = col.a; + #endif + } + + + + + + void ChainSurfaceFunction(inout Surface l, inout ShaderData d) + { + Ext_SurfaceFunction0(l, d); + // Ext_SurfaceFunction1(l, d); + // Ext_SurfaceFunction2(l, d); + // Ext_SurfaceFunction3(l, d); + // Ext_SurfaceFunction4(l, d); + // Ext_SurfaceFunction5(l, d); + // Ext_SurfaceFunction6(l, d); + // Ext_SurfaceFunction7(l, d); + // Ext_SurfaceFunction8(l, d); + // Ext_SurfaceFunction9(l, d); + // Ext_SurfaceFunction10(l, d); + // Ext_SurfaceFunction11(l, d); + // Ext_SurfaceFunction12(l, d); + // Ext_SurfaceFunction13(l, d); + // Ext_SurfaceFunction14(l, d); + // Ext_SurfaceFunction15(l, d); + // Ext_SurfaceFunction16(l, d); + // Ext_SurfaceFunction17(l, d); + // Ext_SurfaceFunction18(l, d); + // Ext_SurfaceFunction19(l, d); + // Ext_SurfaceFunction20(l, d); + // Ext_SurfaceFunction21(l, d); + // Ext_SurfaceFunction22(l, d); + // Ext_SurfaceFunction23(l, d); + // Ext_SurfaceFunction24(l, d); + // Ext_SurfaceFunction25(l, d); + // Ext_SurfaceFunction26(l, d); + // Ext_SurfaceFunction27(l, d); + // Ext_SurfaceFunction28(l, d); + // Ext_SurfaceFunction29(l, d); + } + +#if !_DECALSHADER + + void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time) + { + ExtraV2F d; + + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + // due to motion vectors in HDRP, we need to use the last + // time in certain spots. So if you are going to use _Time to adjust vertices, + // you need to use this time or motion vectors will break. + d.time = time; + + Ext_ModifyVertex0(v, d); + // Ext_ModifyVertex1(v, d); + // Ext_ModifyVertex2(v, d); + // Ext_ModifyVertex3(v, d); + // Ext_ModifyVertex4(v, d); + // Ext_ModifyVertex5(v, d); + // Ext_ModifyVertex6(v, d); + // Ext_ModifyVertex7(v, d); + // Ext_ModifyVertex8(v, d); + // Ext_ModifyVertex9(v, d); + // Ext_ModifyVertex10(v, d); + // Ext_ModifyVertex11(v, d); + // Ext_ModifyVertex12(v, d); + // Ext_ModifyVertex13(v, d); + // Ext_ModifyVertex14(v, d); + // Ext_ModifyVertex15(v, d); + // Ext_ModifyVertex16(v, d); + // Ext_ModifyVertex17(v, d); + // Ext_ModifyVertex18(v, d); + // Ext_ModifyVertex19(v, d); + // Ext_ModifyVertex20(v, d); + // Ext_ModifyVertex21(v, d); + // Ext_ModifyVertex22(v, d); + // Ext_ModifyVertex23(v, d); + // Ext_ModifyVertex24(v, d); + // Ext_ModifyVertex25(v, d); + // Ext_ModifyVertex26(v, d); + // Ext_ModifyVertex27(v, d); + // Ext_ModifyVertex28(v, d); + // Ext_ModifyVertex29(v, d); + + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p) + { + ExtraV2F d; + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = v2p.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = v2p.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = v2p.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = v2p.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = v2p.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = v2p.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = v2p.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = v2p.extraV2F7; + // #endif + + + // Ext_ModifyTessellatedVertex0(v, d); + // Ext_ModifyTessellatedVertex1(v, d); + // Ext_ModifyTessellatedVertex2(v, d); + // Ext_ModifyTessellatedVertex3(v, d); + // Ext_ModifyTessellatedVertex4(v, d); + // Ext_ModifyTessellatedVertex5(v, d); + // Ext_ModifyTessellatedVertex6(v, d); + // Ext_ModifyTessellatedVertex7(v, d); + // Ext_ModifyTessellatedVertex8(v, d); + // Ext_ModifyTessellatedVertex9(v, d); + // Ext_ModifyTessellatedVertex10(v, d); + // Ext_ModifyTessellatedVertex11(v, d); + // Ext_ModifyTessellatedVertex12(v, d); + // Ext_ModifyTessellatedVertex13(v, d); + // Ext_ModifyTessellatedVertex14(v, d); + // Ext_ModifyTessellatedVertex15(v, d); + // Ext_ModifyTessellatedVertex16(v, d); + // Ext_ModifyTessellatedVertex17(v, d); + // Ext_ModifyTessellatedVertex18(v, d); + // Ext_ModifyTessellatedVertex19(v, d); + // Ext_ModifyTessellatedVertex20(v, d); + // Ext_ModifyTessellatedVertex21(v, d); + // Ext_ModifyTessellatedVertex22(v, d); + // Ext_ModifyTessellatedVertex23(v, d); + // Ext_ModifyTessellatedVertex24(v, d); + // Ext_ModifyTessellatedVertex25(v, d); + // Ext_ModifyTessellatedVertex26(v, d); + // Ext_ModifyTessellatedVertex27(v, d); + // Ext_ModifyTessellatedVertex28(v, d); + // Ext_ModifyTessellatedVertex29(v, d); + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color) + { + // Ext_FinalColorForward0(l, d, color); + // Ext_FinalColorForward1(l, d, color); + // Ext_FinalColorForward2(l, d, color); + // Ext_FinalColorForward3(l, d, color); + // Ext_FinalColorForward4(l, d, color); + // Ext_FinalColorForward5(l, d, color); + // Ext_FinalColorForward6(l, d, color); + // Ext_FinalColorForward7(l, d, color); + // Ext_FinalColorForward8(l, d, color); + // Ext_FinalColorForward9(l, d, color); + // Ext_FinalColorForward10(l, d, color); + // Ext_FinalColorForward11(l, d, color); + // Ext_FinalColorForward12(l, d, color); + // Ext_FinalColorForward13(l, d, color); + // Ext_FinalColorForward14(l, d, color); + // Ext_FinalColorForward15(l, d, color); + // Ext_FinalColorForward16(l, d, color); + // Ext_FinalColorForward17(l, d, color); + // Ext_FinalColorForward18(l, d, color); + // Ext_FinalColorForward19(l, d, color); + // Ext_FinalColorForward20(l, d, color); + // Ext_FinalColorForward21(l, d, color); + // Ext_FinalColorForward22(l, d, color); + // Ext_FinalColorForward23(l, d, color); + // Ext_FinalColorForward24(l, d, color); + // Ext_FinalColorForward25(l, d, color); + // Ext_FinalColorForward26(l, d, color); + // Ext_FinalColorForward27(l, d, color); + // Ext_FinalColorForward28(l, d, color); + // Ext_FinalColorForward29(l, d, color); + } + + void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask) + { + // Ext_FinalGBufferStandard0(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard1(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard2(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard3(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard4(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard5(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard6(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard7(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard8(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard9(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard10(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard11(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard12(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard13(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard14(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard15(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard16(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard17(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard18(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard19(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard20(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard21(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard22(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard23(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard24(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard25(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard26(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard27(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard28(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard29(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + } +#endif + + + + + +#if _DECALSHADER + + ShaderData CreateShaderData(SurfaceDescriptionInputs IN) + { + ShaderData d = (ShaderData)0; + d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal); + d.worldSpaceNormal = IN.WorldSpaceNormal; + d.worldSpaceTangent = IN.WorldSpaceTangent; + + d.worldSpacePosition = IN.WorldSpacePosition; + d.texcoord0 = IN.uv0.xyxy; + d.screenPos = IN.ScreenPosition; + + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(d.worldSpacePosition), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(d.worldSpacePosition, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenUV = (IN.ScreenPosition.xy / max(0.01, IN.ScreenPosition.w)); + // #endif + + return d; + } +#else + + ShaderData CreateShaderData(VertexToPixel i + #if NEED_FACING + , bool facing + #endif + ) + { + ShaderData d = (ShaderData)0; + d.clipPos = i.pos; + d.worldSpacePosition = i.worldPos; + + d.worldSpaceNormal = normalize(i.worldNormal); + d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz); + + d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w; + float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign; + + d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal); + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + d.texcoord0 = i.texcoord0; + // d.texcoord1 = i.texcoord1; + // d.texcoord2 = i.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // d.texcoord3 = i.texcoord3; + // #endif + + // d.isFrontFace = facing; + // #if %VERTEXCOLORREQUIREKEY% + d.vertexColor = i.vertexColor; + // #endif + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(i.worldPos), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(i.worldPos, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenPos = i.screenPos; + d.screenUV = (i.screenPos.xy / i.screenPos.w); + // #endif + + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = i.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = i.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = i.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = i.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = i.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = i.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = i.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = i.extraV2F7; + // #endif + + return d; + } + +#endif + + + #if defined(_PASSSHADOW) + float3 _LightDirection; + float3 _LightPosition; + #endif + + #if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + + #define GetWorldToViewMatrix() _ViewMatrix + #define UNITY_MATRIX_I_V _InvViewMatrix + #define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix) + #define UNITY_MATRIX_I_P _InvProjMatrix + #define GetWorldToHClipMatrix() _ViewProjMatrix + #define UNITY_MATRIX_I_VP _InvViewProjMatrix + #define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix + #define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix + #define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix + + void MotionVectorPositionZBias(VertexToPixel input) + { + #if UNITY_REVERSED_Z + input.pos.z -= unity_MotionVectorsParams.z * input.pos.w; + #else + input.pos.z += unity_MotionVectorsParams.z * input.pos.w; + #endif + } + + #endif + + // vertex shader + VertexToPixel Vert (VertexData v) + { + VertexToPixel o = (VertexToPixel)0; + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + VertexData previousMesh = v; + #endif + #if !_TESSELLATION_ON + ChainModifyVertex(v, o, _Time); + #endif + + o.texcoord0 = v.texcoord0; + // o.texcoord1 = v.texcoord1; + // o.texcoord2 = v.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // o.texcoord3 = v.texcoord3; // #endif - o.worldPos = mul(GetObjectToWorldMatrix(), v.vertex).xyz; - o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldTangent = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); + // #if %VERTEXCOLORREQUIREKEY% + o.vertexColor = v.vertexColor; + // #endif - - UNITY_TRANSFER_LIGHTING(o, v.texcoord1.xy); // pass shadow and, possibly, light cookie coordinates to pixel shader - UNITY_TRANSFER_FOG(o,o.pos); // pass fog coordinates to pixel shader - - return o; - } - - - - // fragment shader - fixed4 Frag (VertexToPixel IN - #ifdef _DEPTHOFFSET_ON - , out float outputDepth : SV_Depth - #endif - #if NEED_FACING - , bool facing : SV_IsFrontFace - #endif - ) : SV_Target - { - UNITY_SETUP_INSTANCE_ID(IN); - // prepare and unpack data - - #ifdef FOG_COMBINED_WITH_TSPACE - UNITY_EXTRACT_FOG_FROM_TSPACE(IN); - #elif defined (FOG_COMBINED_WITH_WORLD_POS) - UNITY_EXTRACT_FOG_FROM_WORLD_POS(IN); - #else - UNITY_EXTRACT_FOG(IN); - #endif - - - - ShaderData d = CreateShaderData(IN - #if NEED_FACING - , facing - #endif - ); - Surface l = (Surface)0; - - - #ifdef _DEPTHOFFSET_ON - l.outputDepth = outputDepth; - #endif - - l.Albedo = half3(0.5, 0.5, 0.5); - l.Normal = float3(0,0,1); - l.Occlusion = 1; - l.Alpha = 1; - - ChainSurfaceFunction(l, d); - - #ifdef _DEPTHOFFSET_ON - outputDepth = l.outputDepth; - #endif - - - #ifndef USING_DIRECTIONAL_LIGHT - fixed3 lightDir = normalize(UnityWorldSpaceLightDir(d.worldSpacePosition)); - #else - fixed3 lightDir = _WorldSpaceLightPos0.xyz; - #endif - float3 worldViewDir = normalize(UnityWorldSpaceViewDir(d.worldSpacePosition)); - - #if _USESPECULAR || _USESPECULARWORKFLOW || _SPECULARFROMMETALLIC - #ifdef UNITY_COMPILER_HLSL - SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0; - #else - SurfaceOutputStandardSpecular o; - #endif - o.Specular = l.Specular; - o.Occlusion = l.Occlusion; - o.Smoothness = l.Smoothness; - #elif _BDRFLAMBERT || _BDRF3 || _SIMPLELIT - #ifdef UNITY_COMPILER_HLSL - SurfaceOutput o = (SurfaceOutput)0; - #else - SurfaceOutput o; - #endif - - o.Specular = l.SpecularPower; - o.Gloss = l.Smoothness; - _SpecColor.rgb = l.Specular; // fucking hell Unity, wtf.. - #else - #ifdef UNITY_COMPILER_HLSL - SurfaceOutputStandard o = (SurfaceOutputStandard)0; - #else - SurfaceOutputStandard o; - #endif - o.Smoothness = l.Smoothness; - o.Metallic = l.Metallic; - o.Occlusion = l.Occlusion; - #endif - - - o.Albedo = l.Albedo; - o.Emission = l.Emission; - o.Alpha = l.Alpha; - - #if _WORLDSPACENORMAL - o.Normal = l.Normal; - #else - o.Normal = normalize(TangentToWorldSpace(d, l.Normal)); - #endif - - - - UNITY_LIGHT_ATTENUATION(atten, IN, d.worldSpacePosition) - half4 c = 0; - - // Setup lighting environment - UnityGI gi; - UNITY_INITIALIZE_OUTPUT(UnityGI, gi); - gi.indirect.diffuse = 0; - gi.indirect.specular = 0; - gi.light.color = _LightColor0.rgb; - gi.light.dir = lightDir; - gi.light.color *= atten; - - #if defined(_OVERRIDE_SHADOWMASK) - float4 mulColor = saturate(dot(l.ShadowMask, unity_OcclusionMaskSelector)); - gi.light.color *= mulColor; - #endif - - #if _USESPECULAR - c += LightingStandardSpecular (o, worldViewDir, gi); - #elif _BDRF3 || _SIMPLELIT - c += LightingBlinnPhong (o, d.worldSpaceViewDir, gi); - #else - c += LightingStandard (o, worldViewDir, gi); - #endif + // This return the camera relative position (if enable) + float3 positionWS = TransformObjectToWorld(v.vertex.xyz); + float3 normalWS = TransformObjectToWorldNormal(v.normal); + float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w); + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + o.worldPos = positionWS; + o.worldNormal = normalWS; + o.worldTangent = tangentWS; - ChainFinalColorForward(l, d, c); - #if !DISABLEFOG - UNITY_APPLY_FOG(_unity_fogCoord, c); // apply fog - #endif - #if !_ALPHABLEND_ON - UNITY_OPAQUE_ALPHA(c.a); - #endif - - return c; - } - - ENDCG - - } - - - Pass { - Name "ShadowCaster" - Tags { "LightMode" = "ShadowCaster" } - ZWrite On ZTest LEqual - - Tags - { - "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" - } - Cull [_CullingOption] - ZWrite [_ZWrite] - ZTest [_ZTestMode] - ColorMask [_ColorMask] -Lighting Off - - - CGPROGRAM - - #pragma vertex Vert - #pragma fragment Frag - // compile directives - #pragma target 3.0 - #pragma multi_compile_instancing - #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 - #pragma multi_compile_shadowcaster - #include "HLSLSupport.cginc" - #define UNITY_INSTANCED_LOD_FADE - #define UNITY_INSTANCED_SH - #define UNITY_INSTANCED_LIGHTMAPSTS - #include "UnityShaderVariables.cginc" - #include "UnityShaderUtilities.cginc" - - #include "UnityCG.cginc" - #include "Lighting.cginc" - #include "UnityPBSLighting.cginc" - - #define _PASSSHADOW 1 - - - #pragma shader_feature_local TIMEISCUSTOM_ON - #pragma shader_feature_local ADDITIVECONFIG_ON - #pragma shader_feature_local PREMULTIPLYALPHA_ON - #pragma shader_feature_local PREMULTIPLYCOLOR_ON - #pragma shader_feature_local SPLITRGBA_ON - #pragma shader_feature_local SHAPEADD_ON - - #pragma shader_feature_local SHAPE1SCREENUV_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local SHAPE2SCREENUV_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local SHAPE3SCREENUV_ON /////////////////Pipeline specific implementation - - #pragma shader_feature_local SHAPEDEBUG_ON - - #pragma shader_feature_local SHAPE1CONTRAST_ON - #pragma shader_feature_local SHAPE1DISTORT_ON - #pragma shader_feature_local SHAPE1ROTATE_ON - #pragma shader_feature_local SHAPE1SHAPECOLOR_ON - - #pragma shader_feature_local SHAPE2_ON - #pragma shader_feature_local SHAPE2CONTRAST_ON - #pragma shader_feature_local SHAPE2DISTORT_ON - #pragma shader_feature_local SHAPE2ROTATE_ON - #pragma shader_feature_local SHAPE2SHAPECOLOR_ON - - #pragma shader_feature_local SHAPE3_ON - #pragma shader_feature_local SHAPE3CONTRAST_ON - #pragma shader_feature_local SHAPE3DISTORT_ON - #pragma shader_feature_local SHAPE3ROTATE_ON - #pragma shader_feature_local SHAPE3SHAPECOLOR_ON - - #pragma shader_feature_local GLOW_ON - #pragma shader_feature_local GLOWTEX_ON - #pragma shader_feature_local DEPTHGLOW_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local MASK_ON - #pragma shader_feature_local COLORRAMP_ON - #pragma shader_feature_local COLORRAMPGRAD_ON - #pragma shader_feature_local COLORGRADING_ON - #pragma shader_feature_local HSV_ON - #pragma shader_feature_local POSTERIZE_ON - #pragma shader_feature_local PIXELATE_ON - #pragma shader_feature_local DISTORT_ON - #pragma shader_feature_local SHAKEUV_ON - #pragma shader_feature_local WAVEUV_ON - #pragma shader_feature_local ROUNDWAVEUV_ON - #pragma shader_feature_local TWISTUV_ON - #pragma shader_feature_local DOODLE_ON - #pragma shader_feature_local OFFSETSTREAM_ON - #pragma shader_feature_local TEXTURESCROLL_ON - #pragma shader_feature_local VERTOFFSET_ON - #pragma shader_feature_local RIM_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local BACKFACETINT_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local POLARUV_ON - #pragma shader_feature_local POLARUVDISTORT_ON - #pragma shader_feature_local SHAPE1MASK_ON - #pragma shader_feature_local TRAILWIDTH_ON - #pragma shader_feature_local LIGHTANDSHADOW_ON - #pragma shader_feature_local SHAPETEXOFFSET_ON - #pragma shader_feature_local SHAPEWEIGHTS_ON - - #pragma shader_feature_local ALPHACUTOFF_ON - #pragma shader_feature_local ALPHASMOOTHSTEP_ON - #pragma shader_feature_local FADE_ON - #pragma shader_feature_local FADEBURN_ON - #pragma shader_feature_local ALPHAFADE_ON - #pragma shader_feature_local ALPHAFADEUSESHAPE1_ON - #pragma shader_feature_local ALPHAFADEUSEREDCHANNEL_ON - #pragma shader_feature_local ALPHAFADETRANSPARENCYTOO_ON - #pragma shader_feature_local ALPHAFADEINPUTSTREAM_ON - #pragma shader_feature_local CAMDISTFADE_ON - - #pragma shader_feature NORMALMAP_ON - - - #define _STANDARD 1 -// If your looking in here and thinking WTF, yeah, I know. These are taken from the SRPs, to allow us to use the same -// texturing library they use. However, since they are not included in the standard pipeline by default, there is no -// way to include them in and they have to be inlined, since someone could copy this shader onto another machine without -// Better Shaders installed. Unfortunate, but I'd rather do this and have a nice library for texture sampling instead -// of the patchy one Unity provides being inlined/emulated in HDRP/URP. Strangely, PSSL and XBoxOne libraries are not -// included in the standard SRP code, but they are in tons of Unity own projects on the web, so I grabbed them from there. - -#if defined(SHADER_API_GAMECORE) - - #define ZERO_INITIALIZE(type, name) name = (type)0; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - #define ASSIGN_SAMPLER(samplerName, samplerValue) samplerName = samplerValue - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define SAMPLE_DEPTH_TEXTURE(textureName, samplerName, coord2) SAMPLE_TEXTURE2D(textureName, samplerName, coord2).r - #define SAMPLE_DEPTH_TEXTURE_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod).r - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_XBOXONE) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_PSSL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.GetLOD(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RW_Texture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RW_Texture2D_Array textureName - #define RW_TEXTURE3D(type, textureName) RW_Texture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - - -#elif defined(SHADER_API_D3D11) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_METAL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_VULKAN) -// This file assume SHADER_API_VULKAN is defined - // TODO: This is a straight copy from D3D11.hlsl. Go through all this stuff and adjust where needed. - - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_SWITCH) - // This file assume SHADER_API_SWITCH is defined - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_GLCORE) - - // OpenGL 4.1 SM 5.0 https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 46) - #define OPENGL4_1_SM5 1 - #else - #define OPENGL4_1_SM5 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - - #if OPENGL4_1_SM5 - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #endif - - - #elif defined(SHADER_API_GLES3) - - // GLES 3.1 + AEP shader feature https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 40) - #define GLES3_1_AEP 1 - #else - #define GLES3_1_AEP 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #if GLES3_1_AEP - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - #else - #define RW_TEXTURE2D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - #endif - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #if GLES3_1_AEP - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - #endif - - -#elif defined(SHADER_API_GLES) - - - #define uint int - - #define rcp(x) 1.0 / (x) - #define ddx_fine ddx - #define ddy_fine ddy - #define asfloat - #define asuint(x) asint(x) - #define f32tof16 - #define f16tof32 - - #define ERROR_ON_UNSUPPORTED_FUNCTION(funcName) #error #funcName is not supported on GLES 2.0 - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) #error calculate Level of Detail not supported in GLES2 - - // Texture abstraction - - #define TEXTURE2D(textureName) sampler2D textureName - #define TEXTURE2D_ARRAY(textureName) samplerCUBE textureName // No support to texture2DArray - #define TEXTURECUBE(textureName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY(textureName) samplerCUBE textureName // No supoport to textureCubeArray and can't emulate with texture2DArray - #define TEXTURE3D(textureName) sampler3D textureName - - #define TEXTURE2D_FLOAT(textureName) sampler2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to texture2DArray - #define TEXTURECUBE_FLOAT(textureName) samplerCUBE_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to textureCubeArray - #define TEXTURE3D_FLOAT(textureName) sampler3D_float textureName - - #define TEXTURE2D_HALF(textureName) sampler2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to texture2DArray - #define TEXTURECUBE_HALF(textureName) samplerCUBE_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to textureCubeArray - #define TEXTURE3D_HALF(textureName) sampler3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - #define TEXTURECUBE_SHADOW(textureName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - - #define RW_TEXTURE2D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - - #define SAMPLER(samplerName) - #define SAMPLER_CMP(samplerName) - - #define TEXTURE2D_PARAM(textureName, samplerName) sampler2D textureName - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURE3D_PARAM(textureName, samplerName) sampler3D textureName - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) tex2D(textureName, coord2) - - #if (SHADER_TARGET >= 30) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) tex2Dlod(textureName, float4(coord2, 0, lod)) - #else - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, lod) - #endif - - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) tex2Dbias(textureName, float4(coord2, 0, bias)) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_LOD) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_BIAS) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_GRAD) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) texCUBE(textureName, coord3) - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) texCUBEbias(textureName, float4(coord3, bias)) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) tex3D(textureName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE3D_LOD) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) SHADOW2D_SAMPLE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_SHADOW) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) SHADOWCUBE_SAMPLE(textureName, samplerName, coord4) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_SHADOW) - - - // Not supported. Can't define as error because shader library is calling these functions. - #define LOAD_TEXTURE2D(textureName, unCoord2) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE3D(textureName, unCoord3) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D_LOD) - - // Gather not supported. Fallback to regular texture sampling. - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - -#else -#error unsupported shader api -#endif - - - - -// default flow control attributes -#ifndef UNITY_BRANCH -# define UNITY_BRANCH -#endif -#ifndef UNITY_FLATTEN -# define UNITY_FLATTEN -#endif -#ifndef UNITY_UNROLL -# define UNITY_UNROLL -#endif -#ifndef UNITY_UNROLLX -# define UNITY_UNROLLX(_x) -#endif -#ifndef UNITY_LOOP -# define UNITY_LOOP -#endif - - - - - - - - - // data across stages, stripped like the above. - struct VertexToPixel - { - V2F_SHADOW_CASTER; // may declare TEXCOORD0 for the wonderfully named .vec - float3 worldPos : TEXCOORD1; - float3 worldNormal : TEXCOORD2; - float4 worldTangent : TEXCOORD3; - float4 texcoord0 : TEXCOORD4; - // float4 texcoord1 : TEXCOORD5; - // float4 texcoord2 : TEXCOORD6; - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD7; - // #endif - - // #if %SCREENPOSREQUIREKEY% - float4 screenPos : TEXCOORD8; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - // #if %EXTRAV2F0REQUIREKEY% - float4 extraV2F0 : TEXCOORD9; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - float4 extraV2F1 : TEXCOORD10; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - float4 extraV2F2 : TEXCOORD11; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - float4 extraV2F3 : TEXCOORD12; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // float4 extraV2F4 : TEXCOORD13; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // float4 extraV2F5 : TEXCOORD14; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // float4 extraV2F6 : TEXCOORD15; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // float4 extraV2F7 : TEXCOORD16; - // #endif - - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO - }; - - - - // data describing the user output of a pixel - struct Surface - { - half3 Albedo; - half Height; - half3 Normal; - half Smoothness; - half3 Emission; - half Metallic; - half3 Specular; - half Occlusion; - half SpecularPower; // for simple lighting - half Alpha; - float outputDepth; // if written, SV_Depth semantic is used. ShaderData.clipPos.z is unused value - // HDRP Only - half SpecularOcclusion; - half SubsurfaceMask; - half Thickness; - half CoatMask; - half CoatSmoothness; - half Anisotropy; - half IridescenceMask; - half IridescenceThickness; - int DiffusionProfileHash; - float SpecularAAThreshold; - float SpecularAAScreenSpaceVariance; - // requires _OVERRIDE_BAKEDGI to be defined, but is mapped in all pipelines - float3 DiffuseGI; - float3 BackDiffuseGI; - float3 SpecularGI; - float ior; - float3 transmittanceColor; - float atDistance; - float transmittanceMask; - // requires _OVERRIDE_SHADOWMASK to be defines - float4 ShadowMask; - - // for decals - float NormalAlpha; - float MAOSAlpha; - - - }; - - // Data the user declares in blackboard blocks - struct Blackboard - { - - float blackboardDummyData; - }; - - // data the user might need, this will grow to be big. But easy to strip - struct ShaderData - { - float4 clipPos; // SV_POSITION - float3 localSpacePosition; - float3 localSpaceNormal; - float3 localSpaceTangent; - - float3 worldSpacePosition; - float3 worldSpaceNormal; - float3 worldSpaceTangent; - float tangentSign; - - float3 worldSpaceViewDir; - float3 tangentSpaceViewDir; - - float4 texcoord0; - float4 texcoord1; - float4 texcoord2; - float4 texcoord3; - - float2 screenUV; - float4 screenPos; - - float4 vertexColor; - bool isFrontFace; - - float4 extraV2F0; - float4 extraV2F1; - float4 extraV2F2; - float4 extraV2F3; - float4 extraV2F4; - float4 extraV2F5; - float4 extraV2F6; - float4 extraV2F7; - - float3x3 TBNMatrix; - Blackboard blackboard; - }; - - struct VertexData - { - #if SHADER_TARGET > 30 - // uint vertexID : SV_VertexID; - #endif - float4 vertex : POSITION; - float3 normal : NORMAL; - float4 tangent : TANGENT; - float4 texcoord0 : TEXCOORD0; - - // optimize out mesh coords when not in use by user or lighting system - #if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER) - float4 texcoord1 : TEXCOORD1; - #endif - - #if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON))) - float4 texcoord2 : TEXCOORD2; - #endif - - #if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON))) - float4 texcoord1 : TEXCOORD1; - #endif - #if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON))) - float4 texcoord2 : TEXCOORD2; - #endif - - - #if _HDRP - float4 texcoord1 : TEXCOORD1; - float4 texcoord2 : TEXCOORD2; - #endif - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) - float3 previousPositionOS : TEXCOORD4; // Contain previous transform position (in case of skinning for example) - #if defined (_ADD_PRECOMPUTED_VELOCITY) - float3 precomputedVelocity : TEXCOORD5; // Add Precomputed Velocity (Alembic computes velocities on runtime side). - #endif - #endif - - UNITY_VERTEX_INPUT_INSTANCE_ID - }; - - struct TessVertex - { - float4 vertex : INTERNALTESSPOS; - float3 normal : NORMAL; - float4 tangent : TANGENT; - float4 texcoord0 : TEXCOORD0; - float4 texcoord1 : TEXCOORD1; - float4 texcoord2 : TEXCOORD2; - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - // #if %EXTRAV2F0REQUIREKEY% - float4 extraV2F0 : TEXCOORD5; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - float4 extraV2F1 : TEXCOORD6; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - float4 extraV2F2 : TEXCOORD7; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - float4 extraV2F3 : TEXCOORD8; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // float4 extraV2F4 : TEXCOORD9; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // float4 extraV2F5 : TEXCOORD10; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // float4 extraV2F6 : TEXCOORD11; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // float4 extraV2F7 : TEXCOORD12; - // #endif - - #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) - float3 previousPositionOS : TEXCOORD13; // Contain previous transform position (in case of skinning for example) - #if defined (_ADD_PRECOMPUTED_VELOCITY) - float3 precomputedVelocity : TEXCOORD14; - #endif - #endif - - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO - }; - - struct ExtraV2F - { - float4 extraV2F0; - float4 extraV2F1; - float4 extraV2F2; - float4 extraV2F3; - float4 extraV2F4; - float4 extraV2F5; - float4 extraV2F6; - float4 extraV2F7; - Blackboard blackboard; - float4 time; - }; - - - float3 WorldToTangentSpace(ShaderData d, float3 normal) - { - return mul(d.TBNMatrix, normal); - } - - float3 TangentToWorldSpace(ShaderData d, float3 normal) - { - return mul(normal, d.TBNMatrix); - } - - // in this case, make standard more like SRPs, because we can't fix - // unity_WorldToObject in HDRP, since it already does macro-fu there - - #if _STANDARD - float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); }; - float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); }; - float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); }; - float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); }; - float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; } - float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; } - #if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER)) - #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod) - #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod) + // For some very odd reason, in 2021.2, we can't use Unity's defines, but have to use our own.. + #if _PASSSHADOW + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - o.worldPos); #else - #define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod) - #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) + float3 lightDirectionWS = _LightDirection; #endif - - #undef UNITY_MATRIX_I_M - - #define UNITY_MATRIX_I_M unity_WorldToObject - - - #endif - - float3 GetCameraWorldPosition() - { - #if _HDRP - return GetCameraRelativePositionWS(_WorldSpaceCameraPos); - #else - return _WorldSpaceCameraPos; - #endif - } - - #if _GRABPASSUSED - #if _STANDARD - TEXTURE2D(%GRABTEXTURE%); - SAMPLER(sampler_%GRABTEXTURE%); - #endif - - half3 GetSceneColor(float2 uv) - { - #if _STANDARD - return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb; - #else - return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv); - #endif - } - #endif - - - - #if _STANDARD - UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); - float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); } - float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); } - float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); } - #else - float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); } - float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); } - float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); } - #endif - - float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) - { - float eye = GetLinearEyeDepth(uv); - float3 camView = mul((float3x3)UNITY_MATRIX_M, transpose(mul(UNITY_MATRIX_I_M, UNITY_MATRIX_I_V)) [2].xyz); - - float dt = dot(worldSpaceViewDir, camView); - float3 div = worldSpaceViewDir/dt; - float3 wpos = (eye * div) + GetCameraWorldPosition(); - return wpos; - } - - #if _HDRP - float3 ObjectToWorldSpacePosition(float3 pos) - { - return GetAbsolutePositionWS(TransformObjectToWorld(pos)); - } - #else - float3 ObjectToWorldSpacePosition(float3 pos) - { - return TransformObjectToWorld(pos); - } - #endif - - #if _STANDARD - UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture); - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); - float3 norms = DecodeViewNormalStereo(depthNorms); - norms = mul((float3x3)UNITY_MATRIX_V, norms) * 0.5 + 0.5; - return norms; - } - #elif _HDRP && !_DECALSHADER - - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - NormalData nd; - DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd); - return nd.normalWS; - } - #elif _URP - #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) - #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" - #endif - - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) - return SampleSceneNormals(uv); - #else - float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir); - return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5; - #endif - - } - #endif - - #if _HDRP - - half3 UnpackNormalmapRGorAG(half4 packednormal) - { - // This do the trick - packednormal.x *= packednormal.w; - - half3 normal; - normal.xy = packednormal.xy * 2 - 1; - normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); - return normal; - } - half3 UnpackNormal(half4 packednormal) - { - #if defined(UNITY_NO_DXT5nm) - return packednormal.xyz * 2 - 1; - #else - return UnpackNormalmapRGorAG(packednormal); - #endif - } - #endif - #if _HDRP || _URP - - half3 UnpackScaleNormal(half4 packednormal, half scale) - { - #ifndef UNITY_NO_DXT5nm - // Unpack normal as DXT5nm (1, y, 1, x) or BC5 (x, y, 0, 1) - // Note neutral texture like "bump" is (0, 0, 1, 1) to work with both plain RGB normal and DXT5nm/BC5 - packednormal.x *= packednormal.w; - #endif - half3 normal; - normal.xy = (packednormal.xy * 2 - 1) * scale; - normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); - return normal; - } - - #endif - - - void GetSun(out float3 lightDir, out float3 color) - { - lightDir = float3(0.5, 0.5, 0); - color = 1; - #if _HDRP - if (_DirectionalLightCount > 0) - { - DirectionalLightData light = _DirectionalLightDatas[0]; - lightDir = -light.forward.xyz; - color = light.color; - } - #elif _STANDARD - lightDir = normalize(_WorldSpaceLightPos0.xyz); - color = _LightColor0.rgb; - #elif _URP - Light light = GetMainLight(); - lightDir = light.direction; - color = light.color; - #endif - } - - - - - half4 _Color; - half _Alpha; - half _AlphaCutoffValue; - - half _TimingSeed; - - #if TIMEISCUSTOM_ON - float4 globalCustomTime; - #endif - - half4 _MainTex_ST, _ShapeColor; - half _ShapeXSpeed, _ShapeYSpeed, _ShapeColorWeight, _ShapeAlphaWeight; - - #if SHAPE1CONTRAST_ON - half _ShapeContrast, _ShapeBrightness; - #endif - - #if SHAPE1DISTORT_ON - half4 _ShapeDistortTex_ST; - half _ShapeDistortAmount, _ShapeDistortXSpeed, _ShapeDistortYSpeed; - #endif - - #if SHAPE1ROTATE_ON - half _ShapeRotationOffset, _ShapeRotationSpeed; - #endif - - #if OFFSETSTREAM_ON - half _OffsetSh1; - #endif - - #if SHAPEWEIGHTS_ON - half _Sh1BlendOffset; - #endif - - #if SHAPE2_ON - half4 _Shape2Tex_ST, _Shape2Color; - half _Shape2XSpeed, _Shape2YSpeed, _Shape2ColorWeight, _Shape2AlphaWeight; - #if SHAPE2CONTRAST_ON - half _Shape2Contrast, _Shape2Brightness; - #endif - #if SHAPE2DISTORT_ON - half4 _Shape2DistortTex_ST; - half _Shape2DistortAmount, _Shape2DistortXSpeed, _Shape2DistortYSpeed; - #endif - #if SHAPE2ROTATE_ON - half _Shape2RotationOffset, _Shape2RotationSpeed; - #endif - #if OFFSETSTREAM_ON - half _OffsetSh2; - #endif - #if SHAPEWEIGHTS_ON - half _Sh2BlendOffset; - #endif - #endif - - #if SHAPE3_ON - half4 _Shape3Tex_ST, _Shape3Color; - half _Shape3XSpeed, _Shape3YSpeed, _Shape3ColorWeight, _Shape3AlphaWeight; - #if SHAPE3CONTRAST_ON - half _Shape3Contrast, _Shape3Brightness; - #endif - #if SHAPE3DISTORT_ON - half4 _Shape3DistortTex_ST; - half _Shape3DistortAmount, _Shape3DistortXSpeed, _Shape3DistortYSpeed; - #endif - #if SHAPE3ROTATE_ON - half _Shape3RotationOffset, _Shape3RotationSpeed; - #endif - #if OFFSETSTREAM_ON - half _OffsetSh3; - #endif - #if SHAPEWEIGHTS_ON - half _Sh3BlendOffset; - #endif - #endif - - #if GLOW_ON - half4 _GlowColor; - half _Glow, _GlowGlobal; - #if GLOWTEX_ON - half4 _GlowTex_ST; - #endif - #endif - - #if MASK_ON - half4 _MaskTex_ST; - half _MaskPow; - #endif - - #if COLORRAMP_ON - half _ColorRampLuminosity, _ColorRampBlend; - #endif - - #if ALPHASMOOTHSTEP_ON - half _AlphaStepMin, _AlphaStepMax; - #endif - - #if ALPHAFADE_ON - half _AlphaFadeAmount, _AlphaFadeSmooth, _AlphaFadePow; - #endif - - #if HSV_ON - half _HsvShift, _HsvSaturation, _HsvBright; - #endif - - #if POSTERIZE_ON - half _PosterizeNumColors; - #endif - - #if PIXELATE_ON - half _PixelateSize; - #endif - - #if DISTORT_ON - half4 _DistortTex_ST; - half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount; - #endif - - #if TEXTURESCROLL_ON - half _TextureScrollXSpeed, _TextureScrollYSpeed; - #endif - - #if SHAKEUV_ON - half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY; - #endif - - #if WAVEUV_ON - half _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY; - #endif - - #if ROUNDWAVEUV_ON - half _RoundWaveStrength, _RoundWaveSpeed; - #endif - - #if TWISTUV_ON - half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius; - #endif - - #if DOODLE_ON - half _HandDrawnAmount, _HandDrawnSpeed; - #endif - - #if ROUNDWAVEUV_ON || PIXELATE_ON - half4 _MainTex_TexelSize; - #endif - - #if VERTOFFSET_ON - half4 _VertOffsetTex_ST; - half _VertOffsetAmount, _VertOffsetPower, _VertOffsetTexXSpeed, _VertOffsetTexYSpeed; - #endif - - #if FADE_ON - half4 _FadeTex_ST; - half _FadeAmount, _FadeTransition, _FadePower, _FadeScrollXSpeed, _FadeScrollYSpeed; - #if FADEBURN_ON - half4 _FadeBurnColor, _FadeBurnTex_ST; - half _FadeBurnWidth, _FadeBurnGlow; - #endif - #endif - - #if COLORGRADING_ON - half3 _ColorGradingLight, _ColorGradingMiddle, _ColorGradingDark; - half _ColorGradingMidPoint; - #endif - - #if CAMDISTFADE_ON - half _CamDistFadeStepMin, _CamDistFadeStepMax, _CamDistProximityFade; - #endif - - #if RIM_ON - half _RimBias, _RimScale, _RimPower, _RimIntensity, _RimAddAmount, _RimErodesAlpha; - half4 _RimColor; - #endif - - #if BACKFACETINT_ON - half4 _BackFaceTint, _FrontFaceTint; - #endif - - #if SHAPEDEBUG_ON - half _DebugShape; - #endif - - #if SHAPE1MASK_ON - half4 _Shape1MaskTex_ST; - half _Shape1MaskPow; - #endif - - #if TRAILWIDTH_ON - half _TrailWidthPower; - #endif - - #if LIGHTANDSHADOW_ON - half3 _All1VfxLightDir; - half _ShadowAmount, _ShadowStepMin, _ShadowStepMax, _LightAmount; - half4 _LightColor; - #endif - - #if SHAPETEXOFFSET_ON - half _RandomSh1Mult, _RandomSh2Mult, _RandomSh3Mult; - #endif - - #if DEPTHGLOW_ON - half _DepthGlowDist, _DepthGlowPow, _DepthGlow, _DepthGlowGlobal; - half4 _DepthGlowColor; - #endif - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half _ScreenUvShDistScale,_ScreenUvSh2DistScale, _ScreenUvSh3DistScale; - #endif - - #if NORMALMAP_ON - half _NormalStrength; - #endif - - - - - - - - - - - TEXTURE2D(_MainTex); - SAMPLER(sampler_MainTex); - - #if SHAPE1DISTORT_ON - TEXTURE2D(_ShapeDistortTex); - SAMPLER(sampler_ShapeDistortTex); - #endif - - #if SHAPE2_ON - TEXTURE2D(_Shape2Tex); - SAMPLER(sampler_Shape2Tex); - #if SHAPE2DISTORT_ON - TEXTURE2D(_Shape2DistortTex); - SAMPLER(sampler_Shape2DistortTex); - #endif - #endif - - #if SHAPE3_ON - TEXTURE2D(_Shape3Tex); - SAMPLER(sampler_Shape3Tex); - #if SHAPE3DISTORT_ON - TEXTURE2D(_Shape3DistortTex); - SAMPLER(sampler_Shape3DistortTex); - #endif - #endif - - #if GLOW_ON - #if GLOWTEX_ON - TEXTURE2D(_GlowTex); - SAMPLER(sampler_GlowTex); - #endif - #endif - - #if MASK_ON - TEXTURE2D(_MaskTex); - SAMPLER(sampler_MaskTex); - #endif - - #if COLORRAMP_ON - TEXTURE2D(_ColorRampTex); - SAMPLER(sampler_ColorRampTex); - #endif - - #if COLORRAMPGRAD_ON - TEXTURE2D(_ColorRampTexGradient); - SAMPLER(sampler_ColorRampTexGradient); - #endif - - #if DISTORT_ON - TEXTURE2D(_DistortTex); - SAMPLER(sampler_DistortTex); - #endif - - #if VERTOFFSET_ON - TEXTURE2D(_VertOffsetTex); - SAMPLER(sampler_VertOffsetTex); - #endif - - #if FADE_ON - TEXTURE2D(_FadeTex); - SAMPLER(sampler_FadeTex); - #if FADEBURN_ON - TEXTURE2D(_FadeBurnTex); - SAMPLER(sampler_FadeBurnTex); - #endif - #endif - - #if SHAPE1MASK_ON - TEXTURE2D(_Shape1MaskTex); - SAMPLER(sampler_Shape1MaskTex); - #endif - - #if TRAILWIDTH_ON - TEXTURE2D(_TrailWidthGradient); - SAMPLER(sampler_TrailWidthGradient); - #endif - - #if NORMALMAP_ON - TEXTURE2D(_NormalMap); - SAMPLER(sampler_NormalMap); - #endif - - half4 SampleTextureWithScroll(in Texture2D _tex, in SamplerState _sampler, in float2 uv, in half scrollXSpeed, in half scrollYSpeed, in float time) - { - half2 _uv = uv; - _uv.x += (time * scrollXSpeed) % 1; - _uv.y += (time * scrollYSpeed) % 1; - return SAMPLE_TEXTURE2D(_tex, _sampler, _uv); - } - - half EaseOutQuint(half x) - { - return 1 - pow(1 - x, 5); - } - - half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax) - { - return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin); - } - - float2 RotateUvs(float2 uv, half rotation, half4 scaleAndTranslate) - { - half2 center = half2(0.5 * scaleAndTranslate.x + scaleAndTranslate.z, 0.5 * scaleAndTranslate.y + scaleAndTranslate.w); - half cosAngle = cos(rotation); - half sinAngle = sin(rotation); - uv -= center; - uv = mul(half2x2(cosAngle, -sinAngle, sinAngle, cosAngle), uv); - uv += center; - return uv; - } - - half4 GetDebugColor(float4 resColor, half4 shape1, half4 shape2, half4 shape3) - { - half4 res = resColor; - - //MAKE SURE THE FOLLOWING CODE BLOCK IS UNCOMMENTED------------------------------------------- - #if SHAPEDEBUG_ON - if(_DebugShape < 1.5) return shape1; - #if SHAPE2_ON - else if (_DebugShape < 2.5) return shape2; - #endif - #if SHAPE3_ON - else return shape3; - #endif - #endif - - return res; - } - - void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d) - { - //uvDistTex --> extraV2F0 - //uvSh1DistTex --> extraV2F1 - //uvSh2DistTex --> extraV2F2 - //uvSh3DistTex --> extraV2F3 - - #if VERTOFFSET_ON - #if TIMEISCUSTOM_ON - const half time = v.texcoord0.z + globalCustomTime.y; - #else - const half time = v.texcoord0.z + _Time.y; - #endif - half4 offsetUv = half4(TRANSFORM_TEX(v.texcoord0.xy, _VertOffsetTex), 0, 0); - offsetUv.x += (time * _VertOffsetTexXSpeed) % 1; - offsetUv.y += (time * _VertOffsetTexYSpeed) % 1; - v.vertex.xyz += v.normal * _VertOffsetAmount * pow(SAMPLE_TEXTURE2D_LOD(_VertOffsetTex, sampler_VertOffsetTex, offsetUv, 0).r, _VertOffsetPower); - #endif - - #if DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F0.xy = TRANSFORM_TEX(v.texcoord0.xy, _DistortTex); - #endif - - #if SHAPE1DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F1.xy = TRANSFORM_TEX(v.texcoord0.xy, _ShapeDistortTex); - #endif - - #if SHAPE2_ON - #if SHAPE2DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F2.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape2DistortTex);; - #endif - #endif - - #if SHAPE3_ON - #if SHAPE3DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F3.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape3DistortTex); - #endif - #endif - } - - void Ext_SurfaceFunction0 (inout Surface o, ShaderData d) - { - //i.uvSeed -> d.texcoord0.xy - - float seed = d.texcoord0.z + _TimingSeed; - #if TIMEISCUSTOM_ON - const float4 shaderTime = globalCustomTime; - #else - const float4 shaderTime = _Time; - #endif - float time = shaderTime.y + seed; - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half2 originalUvs = d.texcoord0.xy; - #endif - - #if PIXELATE_ON - half aspectRatio = _MainTex_TexelSize.x / _MainTex_TexelSize.y; - half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio); - d.texcoord0.xy = floor(d.texcoord0.xy * pixelSize) / pixelSize; - #endif - - #if NORMALMAP_ON - half4 normalSample = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, d.texcoord0.xy); - half3 normalTS = UnpackNormal(normalSample); - normalTS.xy *= _NormalStrength; - o.Normal = normalTS; - #endif - - #if TWISTUV_ON - half2 tempUv = d.texcoord0.xy - half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); - _TwistUvRadius *= (_MainTex_ST.x + _MainTex_ST.y) / 2; - half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius; - half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0; - half s = sin(theta); - half c = cos(theta); - half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0); - tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta); - tempUv += half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); - d.texcoord0.xy = tempUv; - #endif - - #if DOODLE_ON - half2 uvCopy = d.texcoord0.xy; - _HandDrawnSpeed = (floor((shaderTime.x + seed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed; - uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4); - uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4); - d.texcoord0.xy = lerp(d.texcoord0.xy, d.texcoord0.xy + uvCopy, 0.0005 * _HandDrawnAmount); - #endif - - #if SHAKEUV_ON - half xShake = sin((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvX; - half yShake = cos((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvY; - d.texcoord0.xy += half2(xShake * 0.012, yShake * 0.01); - #endif - - #if WAVEUV_ON - half2 uvWave = half2(_WaveX * _MainTex_ST.x, _WaveY * _MainTex_ST.y) - d.texcoord0.xy; - #if ATLAS_ON - uvWave = half2(_WaveX, _WaveY) - uvRect; - #endif - uvWave.x *= _ScreenParams.x / _ScreenParams.y; - half angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((time * _WaveSpeed) % 360.0); - d.texcoord0.xy = d.texcoord0.xy + normalize(uvWave) * sin(angWave) * (_WaveStrength / 1000.0); - #endif - - #if ROUNDWAVEUV_ON - half xWave = ((0.5 * _MainTex_ST.x) - d.texcoord0.x); - half yWave = ((0.5 * _MainTex_ST.y) - d.texcoord0.y) * (_MainTex_TexelSize.w / _MainTex_TexelSize.z); - half ripple = -sqrt(xWave*xWave + yWave* yWave); - d.texcoord0.xy += (sin((ripple + time * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1; - #endif - - #if POLARUV_ON - half2 prePolarUvs = d.texcoord0.xy; - d.texcoord0.xy = d.texcoord0.xy - half2(0.5, 0.5); - d.texcoord0.xy = half2(atan2(d.texcoord0.y, d.texcoord0.x) / (1.0 * 6.28318530718), length(d.texcoord0.xy) * 2.0); - d.texcoord0.xy *= _MainTex_ST.xy; - #endif - - #if DISTORT_ON - #if POLARUVDISTORT_ON - half2 distortUvs = TRANSFORM_TEX(d.texcoord0.xy, _DistortTex); - #else - half2 distortUvs = d.extraV2F0.xy; - #endif - distortUvs.x += ((shaderTime.x + seed) * _DistortTexXSpeed) % 1; - distortUvs.y += ((shaderTime.x + seed) * _DistortTexYSpeed) % 1; - #if ATLAS_ON - d.extraV2F0.xy = half2((d.extraV2F0.x - _MinXUV) / (_MaxXUV - _MinXUV), (d.extraV2F0.y - _MinYUV) / (_MaxYUV - _MinYUV)); - #endif - half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, distortUvs).r - 0.5) * 0.2 * _DistortAmount; - d.texcoord0.x += distortAmnt; - d.texcoord0.y += distortAmnt; - #endif - - #if TEXTURESCROLL_ON - d.texcoord0.x += (time * _TextureScrollXSpeed) % 1; - d.texcoord0.y += (time * _TextureScrollYSpeed) % 1; - #endif - - #if TRAILWIDTH_ON - half width = pow(SAMPLE_TEXTURE2D(_TrailWidthGradient, sampler_TrailWidthGradient, d.texcoord0).r, _TrailWidthPower); - d.texcoord0.y = (d.texcoord0.y * 2 - 1) / width * 0.5 + 0.5; - clip(d.texcoord0.y); - clip(1 - d.texcoord0.y); - #endif - - float2 shape1Uv = d.texcoord0.xy; - #if SHAPE2_ON - float2 shape2Uv = shape1Uv; - #endif - #if SHAPE3_ON - float2 shape3Uv = shape1Uv; - #endif - - #if CAMDISTFADE_ON || SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half camDistance = distance(d.worldSpacePosition, _WorldSpaceCameraPos); - #endif - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half2 uvOffsetPostFx = d.texcoord0.xy - originalUvs; - d.texcoord0.xy = d.screenPos.xy / d.screenPos.w; - d.texcoord0.x = d.texcoord0.x * (_ScreenParams.x / _ScreenParams.y); - d.texcoord0.x -= 0.5; - d.texcoord0.xy -= uvOffsetPostFx; - originalUvs += uvOffsetPostFx; - half distanceZoom = camDistance * 0.1; - half2 scaleWithDistUvs = d.texcoord0.xy * distanceZoom + ((-distanceZoom * 0.5) + 0.5); - #if SHAPE1SCREENUV_ON - shape1Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvShDistScale); - #else - shape1Uv = originalUvs; - #endif - #if SHAPE2SCREENUV_ON && SHAPE2_ON - shape2Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh2DistScale); - #else - #if SHAPE2_ON - shape2Uv = originalUvs; - #endif - #endif - #if SHAPE3SCREENUV_ON && SHAPE3_ON - shape3Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh3DistScale); - #else - #if SHAPE3_ON - shape3Uv = originalUvs; - #endif - #endif - #endif - - shape1Uv = TRANSFORM_TEX(shape1Uv, _MainTex); - #if OFFSETSTREAM_ON - shape1Uv.x += i.offsetCustomData.x * _OffsetSh1; - shape1Uv.y += i.offsetCustomData.y * _OffsetSh1; - #endif - #if SHAPETEXOFFSET_ON - shape1Uv += seed * _RandomSh1Mult; - #endif - - #if SHAPE1DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh1DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _ShapeDistortTex); - #else - half2 sh1DistortUvs = d.extraV2F1.xy; - #endif - - sh1DistortUvs.x += ((time + seed) * _ShapeDistortXSpeed) % 1; - sh1DistortUvs.y += ((time + seed) * _ShapeDistortYSpeed) % 1; - half distortAmount = (SAMPLE_TEXTURE2D(_ShapeDistortTex, sampler_ShapeDistortTex, sh1DistortUvs).r - 0.5) * 0.2 * _ShapeDistortAmount; - shape1Uv.x += distortAmount; - shape1Uv.y += distortAmount; - #endif - #if SHAPE1ROTATE_ON - shape1Uv = RotateUvs(shape1Uv, _ShapeRotationOffset + ((_ShapeRotationSpeed * time) % 6.28318530718), _MainTex_ST); - #endif - - half4 shape1 = SampleTextureWithScroll(_MainTex, sampler_MainTex, shape1Uv, _ShapeXSpeed, _ShapeYSpeed, time); - #if SHAPE1SHAPECOLOR_ON - shape1.a = shape1.r; - shape1.rgb = _ShapeColor.rgb; - #else - shape1 *= _ShapeColor; - #endif - #if SHAPE1CONTRAST_ON - #if SHAPE1SHAPECOLOR_ON - shape1.a = saturate((shape1.a - 0.5) * _ShapeContrast + 0.5 + _ShapeBrightness); - #else - shape1.rgb = max(0, (shape1.rgb - half3(0.5, 0.5, 0.5)) * _ShapeContrast + half3(0.5, 0.5, 0.5) + _ShapeBrightness); - #endif - #endif - - half4 shape2 = 1.0; - #if SHAPE2_ON - shape2Uv = TRANSFORM_TEX(shape2Uv, _Shape2Tex); - #if OFFSETSTREAM_ON - shape2Uv.x += i.offsetCustomData.x * _OffsetSh2; - shape2Uv.y += i.offsetCustomData.y * _OffsetSh2; - #endif - #if SHAPETEXOFFSET_ON - shape2Uv += seed * _RandomSh2Mult; - #endif - #if SHAPE2DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh2DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape2DistortTex); - #else - half2 sh2DistortUvs = d.extraV2F2.xy; - #endif - sh2DistortUvs.x += ((time + seed) * _Shape2DistortXSpeed) % 1; - sh2DistortUvs.y += ((time + seed) * _Shape2DistortYSpeed) % 1; - half distortAmnt2 = (SAMPLE_TEXTURE2D(_Shape2DistortTex, sampler_Shape2DistortTex, sh2DistortUvs).r - 0.5) * 0.2 * _Shape2DistortAmount; - shape2Uv.x += distortAmnt2; - shape2Uv.y += distortAmnt2; - #endif - #if SHAPE2ROTATE_ON - shape2Uv = RotateUvs(shape2Uv, _Shape2RotationOffset + ((_Shape2RotationSpeed * time) % 6.28318530718), _Shape2Tex_ST); - #endif - - shape2 = SampleTextureWithScroll(_Shape2Tex, sampler_Shape2Tex, shape2Uv, _Shape2XSpeed, _Shape2YSpeed, time); - #if SHAPE2SHAPECOLOR_ON - shape2.a = shape2.r; - shape2.rgb = _Shape2Color.rgb; - #else - shape2 *= _Shape2Color; - #endif - #if SHAPE2CONTRAST_ON - #if SHAPE2SHAPECOLOR_ON - shape2.a = max(0, (shape2.a - 0.5) * _Shape2Contrast + 0.5 + _Shape2Brightness); - #else - shape2.rgb = max(0, (shape2.rgb - half3(0.5, 0.5, 0.5)) * _Shape2Contrast + half3(0.5, 0.5, 0.5) + _Shape2Brightness); - #endif - #endif - #endif - - half4 shape3 = 1.0; - #if SHAPE3_ON - shape3Uv = TRANSFORM_TEX(shape3Uv, _Shape3Tex); - - #if OFFSETSTREAM_ON - shape3Uv.x += i.offsetCustomData.x * _OffsetSh3; - shape3Uv.y += i.offsetCustomData.y * _OffsetSh3; - #endif - #if SHAPETEXOFFSET_ON - shape3Uv += seed * _RandomSh3Mult; - #endif - #if SHAPE3DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh3DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape3DistortTex); - #else - half2 sh3DistortUvs = d.extraV2F3.xy; - #endif - sh3DistortUvs.x += ((time + seed) * _Shape3DistortXSpeed) % 1; - sh3DistortUvs.y += ((time + seed) * _Shape3DistortYSpeed) % 1; - half distortAmnt3 = (SAMPLE_TEXTURE2D(_Shape3DistortTex, sampler_Shape3DistortTex, sh3DistortUvs).r - 0.5) * 0.3 * _Shape3DistortAmount; - shape3Uv.x += distortAmnt3; - shape3Uv.y += distortAmnt3; - #endif - #if SHAPE3ROTATE_ON - shape3Uv = RotateUvs(shape3Uv, _Shape3RotationOffset + ((_Shape3RotationSpeed * time) % 6.28318530718), _Shape3Tex_ST); - #endif - shape3 = SampleTextureWithScroll(_Shape3Tex, sampler_Shape3Tex, shape3Uv, _Shape3XSpeed, _Shape3YSpeed, time); - #if SHAPE3SHAPECOLOR_ON - shape3.a = shape3.r; - shape3.rgb = _Shape3Color.rgb; - #else - shape3 *= _Shape3Color; - #endif - #if SHAPE3CONTRAST_ON - #if SHAPE3SHAPECOLOR_ON - shape3.a = max(0, (shape3.a - 0.5) * _Shape3Contrast + 0.5 + _Shape3Brightness); - #else - shape3.rgb = max(0, (shape3.rgb - half3(0.5, 0.5, 0.5)) * _Shape3Contrast + half3(0.5, 0.5, 0.5) + _Shape3Brightness); - #endif - #endif - #endif - - half4 col = shape1; - //Mix all shapes pre: change weights if custom vertex effect active - #if SHAPEWEIGHTS_ON - half shapeWeightOffset; - #if SHAPE2_ON - shapeWeightOffset = i.offsetCustomData.z * _Sh1BlendOffset; - _ShapeColorWeight = max(0, _ShapeColorWeight + shapeWeightOffset); - _ShapeAlphaWeight = max(0, _ShapeAlphaWeight + shapeWeightOffset); - shapeWeightOffset = i.offsetCustomData.z * _Sh2BlendOffset; - _Shape2ColorWeight = max(0, _Shape2ColorWeight + shapeWeightOffset); - _Shape2AlphaWeight = max(0, _Shape2AlphaWeight + shapeWeightOffset); - #endif - #if SHAPE3_ON - shapeWeightOffset = i.offsetCustomData.z * _Sh3BlendOffset; - _Shape3ColorWeight = max(0, _Shape3ColorWeight + shapeWeightOffset); - _Shape3AlphaWeight = max(0, _Shape3AlphaWeight + shapeWeightOffset); - #endif - #endif - - //Mix all shapes - #if SHAPE2_ON - #if !SPLITRGBA_ON - _ShapeAlphaWeight = _ShapeColorWeight; - _Shape2AlphaWeight = _Shape2ColorWeight; - #endif - #if SHAPE3_ON //Shape3 On - #if !SPLITRGBA_ON - _Shape3AlphaWeight = _Shape3ColorWeight; - #endif - #if SHAPEADD_ON - col.rgb = ((shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight)) + (shape3.rgb * _Shape3ColorWeight); - col.a = saturate(max(shape3.a * _Shape3AlphaWeight, max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight))); - #else - col.rgb = ((shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight)) * (shape3.rgb * _Shape3ColorWeight); - col.a = saturate(((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)) * (shape3.a * _Shape3AlphaWeight)); - #endif - #else //Shape3 Off - #if SHAPEADD_ON - col.rgb = (shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight); - col.a = saturate(max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight)); - #else - col.rgb = (shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight); - col.a = saturate((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)); - #endif - #endif - #endif - - #if SHAPE1MASK_ON - col = lerp(col, shape1, pow(SAMPLE_TEXTURE2D(_Shape1MaskTex, sampler_Shape1MaskTex, TRANSFORM_TEX(i.uvSeed.xy, _Shape1MaskTex)).r, _Shape1MaskPow)); - #endif - - #if PREMULTIPLYCOLOR_ON - half luminance = 0; - luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; - luminance *= col.a; - col.a = min(luminance, col.a); - #endif - - col.rgb *= _Color.rgb * d.vertexColor.rgb; - #if PREMULTIPLYALPHA_ON - col.rgb *= col.a; - #endif - - #if !PREMULTIPLYCOLOR_ON && (COLORRAMP_ON || ALPHAFADE_ON || COLORGRADING_ON || FADE_ON || (ADDITIVECONFIG_ON && (GLOW_ON || DEPTHGLOW_ON))) - half luminance = 0; - luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; - luminance *= col.a; - #endif - - #if (FADE_ON || ALPHAFADE_ON) && ALPHAFADEINPUTSTREAM_ON - col.a *= d.vertexColor.a; - d.vertexColor.a = d.texcoord0.w; - #endif - - #if FADE_ON - half preFadeAlpha = col.a; - _FadeAmount = saturate(_FadeAmount + (1 - d.vertexColor.a)); - _FadeTransition = max(0.01, _FadeTransition * EaseOutQuint(saturate(_FadeAmount))); - half2 fadeUv; - fadeUv = d.texcoord0.xy + seed; - fadeUv.x += (time * _FadeScrollXSpeed) % 1; - fadeUv.y += (time * _FadeScrollYSpeed) % 1; - half2 tiledUvFade1 = TRANSFORM_TEX(fadeUv, _FadeTex); - #if ADDITIVECONFIG_ON && !PREMULTIPLYCOLOR_ON - preFadeAlpha *= luminance; - #endif - _FadeAmount = saturate(pow(_FadeAmount, _FadePower)); - #if FADEBURN_ON - half2 tiledUvFade2 = TRANSFORM_TEX(fadeUv, _FadeBurnTex); - half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; - half fadeNaturalEdge = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - col.a *= fadeNaturalEdge; - half fadeBurn = saturate(smoothstep(0.0 , _FadeTransition + _FadeBurnWidth, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - fadeBurn = fadeNaturalEdge - fadeBurn; - _FadeBurnColor.rgb *= _FadeBurnGlow; - col.rgb += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2).rgb * _FadeBurnColor.rgb * preFadeAlpha; - #else - half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; - float fade = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - col.a *= fade; - #endif - #if ALPHAFADETRANSPARENCYTOO_ON - col.a *= 1 - _FadeAmount; - #endif - #endif - - #if ALPHAFADE_ON - half alphaFadeLuminance; - _AlphaFadeAmount = saturate(_AlphaFadeAmount + (1 - d.vertexColor.a)); - _AlphaFadeAmount = saturate(pow(_AlphaFadeAmount, _AlphaFadePow)); - _AlphaFadeSmooth = max(0.01, _AlphaFadeSmooth * EaseOutQuint(saturate(_AlphaFadeAmount))); - #if ALPHAFADEUSESHAPE1_ON - alphaFadeLuminance = shape1.r; - #else - alphaFadeLuminance = luminance; - #endif - alphaFadeLuminance = saturate(alphaFadeLuminance - 0.001); - #if ALPHAFADEUSEREDCHANNEL_ON - col.a *= col.r; - #endif - col.a = saturate(col.a); - float alphaFade = saturate(smoothstep(0.0 , _AlphaFadeSmooth, RemapFloat(1.0 - _AlphaFadeAmount, 0.0, 1.0, -1.0, 1.0) + alphaFadeLuminance)); - col.a *= alphaFade; - #if ALPHAFADETRANSPARENCYTOO_ON - col.a *= 1 - _AlphaFadeAmount; - #endif - #endif - - #if BACKFACETINT_ON - col.rgb = lerp(col.rgb * _BackFaceTint, col.rgb * _FrontFaceTint, step(0, dot(d.worldSpaceNormal, d.worldSpaceViewDir))); - #endif - - //#if LIGHTANDSHADOW_ON - //half NdL = saturate(dot(d.worldSpaceNormal, -_All1VfxLightDir)); - //col.rgb += _LightColor * _LightAmount * NdL; - //NdL = max(_ShadowAmount, NdL); - //NdL = smoothstep(_ShadowStepMin, _ShadowStepMax, NdL); - //col.rgb *= NdL; - //#endif - - #if COLORGRADING_ON - col.rgb *= lerp(lerp(_ColorGradingDark, _ColorGradingMiddle, luminance/_ColorGradingMidPoint), - lerp(_ColorGradingMiddle, _ColorGradingLight, (luminance - _ColorGradingMidPoint)/(1.0 - _ColorGradingMidPoint)), step(_ColorGradingMidPoint, luminance)); - #endif - - #if COLORRAMP_ON - half colorRampLuminance = saturate(luminance + _ColorRampLuminosity); - #if COLORRAMPGRAD_ON - half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(colorRampLuminance, 0)); - #else - half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(colorRampLuminance, 0)); - #endif - col.rgb = lerp(col.rgb, colorRampRes.rgb, _ColorRampBlend); - col.a = lerp(col.a, saturate(col.a * colorRampRes.a), _ColorRampBlend); - #endif - - #if POSTERIZE_ON && !POSTERIZEOUTLINE_ON - col.rgb = floor(col.rgb / (1.0 / _PosterizeNumColors)) * (1.0 / _PosterizeNumColors); - #endif - - #if DEPTHGLOW_ON - half sceneDepthDiff = GetLinearEyeDepth(d.screenUV) - d.screenPos.w; - #endif - - #if RIM_ON - half NdV = 1 - abs(dot(d.worldSpaceNormal, d.worldSpaceViewDir)); - half rimFactor = saturate(_RimBias + _RimScale * pow(NdV, _RimPower)); - half4 rimCol = _RimColor * rimFactor; - rimCol.rgb *= _RimIntensity; - col.rgb = lerp(col.rgb * (rimCol.rgb + half3(1,1,1)), col.rgb + rimCol.rgb, _RimAddAmount); - col.a = saturate(col.a * (1 - rimFactor * _RimErodesAlpha)); - #endif - - #if DEPTHGLOW_ON - half depthGlowMask = saturate(_DepthGlowDist * pow((1 - sceneDepthDiff), _DepthGlowPow)); - col.rgb = lerp(col.rgb, _DepthGlowGlobal * col.rgb, depthGlowMask); - half depthGlowMult = 1; - #if ADDITIVECONFIG_ON - depthGlowMult = luminance; - #endif - col.rgb += _DepthGlowColor.rgb * _DepthGlow * depthGlowMask * col.a * depthGlowMult; - #endif - - #if GLOW_ON - half glowMask = 1; - #if GLOWTEX_ON - glowMask = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, TRANSFORM_TEX(d.texcoord0.xy, _GlowTex)); - #endif - col.rgb *= _GlowGlobal * glowMask; - half glowMult = 1; - #if ADDITIVECONFIG_ON - glowMult = luminance; - #endif - - col.rgb += _GlowColor.rgb * _Glow * glowMask * col.a * glowMult; - #endif - - #if HSV_ON - half3 resultHsv = half3(col.rgb); - half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180); - half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180); - resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x - + (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y - + (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z; - resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x - + (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y - + (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z; - resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x - + (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y - + (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z; - col.rgb = resultHsv; - #endif - - #if CAMDISTFADE_ON - col.a *= 1 - saturate(smoothstep(_CamDistFadeStepMin, _CamDistFadeStepMax, camDistance)); - col.a *= smoothstep(0.0, _CamDistProximityFade, camDistance); - #endif - - #if MASK_ON - half2 maskUv = d.texcoord0.xy; - #if POLARUV_ON - maskUv = prePolarUvs; - #endif - half4 maskSample = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, TRANSFORM_TEX(maskUv, _MaskTex)); - half mask = pow(min(maskSample.r, maskSample.a), _MaskPow); - col.a *= mask; - #endif - - #if ALPHASMOOTHSTEP_ON - col.a = smoothstep(_AlphaStepMin, _AlphaStepMax, col.a); - #endif - - half4 debugColor = col; - #if SHAPEDEBUG_ON - debugColor = GetDebugColor(col, shape1, shape2, shape3); - #endif - - clip(debugColor.a - _AlphaCutoffValue - 0.01); - - //#if FOG_ON - //UNITY_APPLY_FOG(i.fogCoord, col); - //#endif - - //Don't use a starting i.color.a lower than 1 unless using vertex stream dissolve when using a FADE effect - #if !FADE_ON && !ALPHAFADE_ON - col.a *= _Alpha * d.vertexColor.a; - #endif - #if FADE_ON || ALPHAFADE_ON - col.a *= _Alpha; - #endif - #if ADDITIVECONFIG_ON - col.rgb *= col.a; - #endif - - - #if SHAPEDEBUG_ON - o.Albedo = debugColor.rgb; - o.Alpha = debugColor.a; - #else - o.Albedo = col.rgb; - o.Alpha = col.a; - #endif - } - - - - - - void ChainSurfaceFunction(inout Surface l, inout ShaderData d) - { - Ext_SurfaceFunction0(l, d); - // Ext_SurfaceFunction1(l, d); - // Ext_SurfaceFunction2(l, d); - // Ext_SurfaceFunction3(l, d); - // Ext_SurfaceFunction4(l, d); - // Ext_SurfaceFunction5(l, d); - // Ext_SurfaceFunction6(l, d); - // Ext_SurfaceFunction7(l, d); - // Ext_SurfaceFunction8(l, d); - // Ext_SurfaceFunction9(l, d); - // Ext_SurfaceFunction10(l, d); - // Ext_SurfaceFunction11(l, d); - // Ext_SurfaceFunction12(l, d); - // Ext_SurfaceFunction13(l, d); - // Ext_SurfaceFunction14(l, d); - // Ext_SurfaceFunction15(l, d); - // Ext_SurfaceFunction16(l, d); - // Ext_SurfaceFunction17(l, d); - // Ext_SurfaceFunction18(l, d); - // Ext_SurfaceFunction19(l, d); - // Ext_SurfaceFunction20(l, d); - // Ext_SurfaceFunction21(l, d); - // Ext_SurfaceFunction22(l, d); - // Ext_SurfaceFunction23(l, d); - // Ext_SurfaceFunction24(l, d); - // Ext_SurfaceFunction25(l, d); - // Ext_SurfaceFunction26(l, d); - // Ext_SurfaceFunction27(l, d); - // Ext_SurfaceFunction28(l, d); - // Ext_SurfaceFunction29(l, d); - } - -#if !_DECALSHADER - - void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time) - { - ExtraV2F d; - - ZERO_INITIALIZE(ExtraV2F, d); - ZERO_INITIALIZE(Blackboard, d.blackboard); - // due to motion vectors in HDRP, we need to use the last - // time in certain spots. So if you are going to use _Time to adjust vertices, - // you need to use this time or motion vectors will break. - d.time = time; - - Ext_ModifyVertex0(v, d); - // Ext_ModifyVertex1(v, d); - // Ext_ModifyVertex2(v, d); - // Ext_ModifyVertex3(v, d); - // Ext_ModifyVertex4(v, d); - // Ext_ModifyVertex5(v, d); - // Ext_ModifyVertex6(v, d); - // Ext_ModifyVertex7(v, d); - // Ext_ModifyVertex8(v, d); - // Ext_ModifyVertex9(v, d); - // Ext_ModifyVertex10(v, d); - // Ext_ModifyVertex11(v, d); - // Ext_ModifyVertex12(v, d); - // Ext_ModifyVertex13(v, d); - // Ext_ModifyVertex14(v, d); - // Ext_ModifyVertex15(v, d); - // Ext_ModifyVertex16(v, d); - // Ext_ModifyVertex17(v, d); - // Ext_ModifyVertex18(v, d); - // Ext_ModifyVertex19(v, d); - // Ext_ModifyVertex20(v, d); - // Ext_ModifyVertex21(v, d); - // Ext_ModifyVertex22(v, d); - // Ext_ModifyVertex23(v, d); - // Ext_ModifyVertex24(v, d); - // Ext_ModifyVertex25(v, d); - // Ext_ModifyVertex26(v, d); - // Ext_ModifyVertex27(v, d); - // Ext_ModifyVertex28(v, d); - // Ext_ModifyVertex29(v, d); - - - // #if %EXTRAV2F0REQUIREKEY% - v2p.extraV2F0 = d.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - v2p.extraV2F1 = d.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - v2p.extraV2F2 = d.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - v2p.extraV2F3 = d.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // v2p.extraV2F4 = d.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // v2p.extraV2F5 = d.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // v2p.extraV2F6 = d.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // v2p.extraV2F7 = d.extraV2F7; - // #endif - } - - void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p) - { - ExtraV2F d; - ZERO_INITIALIZE(ExtraV2F, d); - ZERO_INITIALIZE(Blackboard, d.blackboard); - - // #if %EXTRAV2F0REQUIREKEY% - d.extraV2F0 = v2p.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - d.extraV2F1 = v2p.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - d.extraV2F2 = v2p.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - d.extraV2F3 = v2p.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // d.extraV2F4 = v2p.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // d.extraV2F5 = v2p.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // d.extraV2F6 = v2p.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // d.extraV2F7 = v2p.extraV2F7; - // #endif - - - // Ext_ModifyTessellatedVertex0(v, d); - // Ext_ModifyTessellatedVertex1(v, d); - // Ext_ModifyTessellatedVertex2(v, d); - // Ext_ModifyTessellatedVertex3(v, d); - // Ext_ModifyTessellatedVertex4(v, d); - // Ext_ModifyTessellatedVertex5(v, d); - // Ext_ModifyTessellatedVertex6(v, d); - // Ext_ModifyTessellatedVertex7(v, d); - // Ext_ModifyTessellatedVertex8(v, d); - // Ext_ModifyTessellatedVertex9(v, d); - // Ext_ModifyTessellatedVertex10(v, d); - // Ext_ModifyTessellatedVertex11(v, d); - // Ext_ModifyTessellatedVertex12(v, d); - // Ext_ModifyTessellatedVertex13(v, d); - // Ext_ModifyTessellatedVertex14(v, d); - // Ext_ModifyTessellatedVertex15(v, d); - // Ext_ModifyTessellatedVertex16(v, d); - // Ext_ModifyTessellatedVertex17(v, d); - // Ext_ModifyTessellatedVertex18(v, d); - // Ext_ModifyTessellatedVertex19(v, d); - // Ext_ModifyTessellatedVertex20(v, d); - // Ext_ModifyTessellatedVertex21(v, d); - // Ext_ModifyTessellatedVertex22(v, d); - // Ext_ModifyTessellatedVertex23(v, d); - // Ext_ModifyTessellatedVertex24(v, d); - // Ext_ModifyTessellatedVertex25(v, d); - // Ext_ModifyTessellatedVertex26(v, d); - // Ext_ModifyTessellatedVertex27(v, d); - // Ext_ModifyTessellatedVertex28(v, d); - // Ext_ModifyTessellatedVertex29(v, d); - - // #if %EXTRAV2F0REQUIREKEY% - v2p.extraV2F0 = d.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - v2p.extraV2F1 = d.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - v2p.extraV2F2 = d.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - v2p.extraV2F3 = d.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // v2p.extraV2F4 = d.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // v2p.extraV2F5 = d.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // v2p.extraV2F6 = d.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // v2p.extraV2F7 = d.extraV2F7; - // #endif - } - - void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color) - { - // Ext_FinalColorForward0(l, d, color); - // Ext_FinalColorForward1(l, d, color); - // Ext_FinalColorForward2(l, d, color); - // Ext_FinalColorForward3(l, d, color); - // Ext_FinalColorForward4(l, d, color); - // Ext_FinalColorForward5(l, d, color); - // Ext_FinalColorForward6(l, d, color); - // Ext_FinalColorForward7(l, d, color); - // Ext_FinalColorForward8(l, d, color); - // Ext_FinalColorForward9(l, d, color); - // Ext_FinalColorForward10(l, d, color); - // Ext_FinalColorForward11(l, d, color); - // Ext_FinalColorForward12(l, d, color); - // Ext_FinalColorForward13(l, d, color); - // Ext_FinalColorForward14(l, d, color); - // Ext_FinalColorForward15(l, d, color); - // Ext_FinalColorForward16(l, d, color); - // Ext_FinalColorForward17(l, d, color); - // Ext_FinalColorForward18(l, d, color); - // Ext_FinalColorForward19(l, d, color); - // Ext_FinalColorForward20(l, d, color); - // Ext_FinalColorForward21(l, d, color); - // Ext_FinalColorForward22(l, d, color); - // Ext_FinalColorForward23(l, d, color); - // Ext_FinalColorForward24(l, d, color); - // Ext_FinalColorForward25(l, d, color); - // Ext_FinalColorForward26(l, d, color); - // Ext_FinalColorForward27(l, d, color); - // Ext_FinalColorForward28(l, d, color); - // Ext_FinalColorForward29(l, d, color); - } - - void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask) - { - // Ext_FinalGBufferStandard0(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard1(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard2(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard3(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard4(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard5(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard6(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard7(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard8(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard9(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard10(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard11(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard12(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard13(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard14(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard15(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard16(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard17(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard18(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard19(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard20(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard21(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard22(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard23(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard24(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard25(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard26(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard27(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard28(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard29(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - } -#endif - - - - - -#if _DECALSHADER - - ShaderData CreateShaderData(SurfaceDescriptionInputs IN) - { - ShaderData d = (ShaderData)0; - d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal); - d.worldSpaceNormal = IN.WorldSpaceNormal; - d.worldSpaceTangent = IN.WorldSpaceTangent; - - d.worldSpacePosition = IN.WorldSpacePosition; - d.texcoord0 = IN.uv0.xyxy; - d.screenPos = IN.ScreenPosition; - - d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition); - - d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); - - // these rarely get used, so we back transform them. Usually will be stripped. - #if _HDRP - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(d.worldSpacePosition), 1)).xyz; - #else - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(d.worldSpacePosition, 1)).xyz; - #endif - // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceNormal)); - // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceTangent.xyz)); - - // #if %SCREENPOSREQUIREKEY% - d.screenUV = (IN.ScreenPosition.xy / max(0.01, IN.ScreenPosition.w)); - // #endif - - return d; - } -#else - - ShaderData CreateShaderData(VertexToPixel i - #if NEED_FACING - , bool facing - #endif - ) - { - ShaderData d = (ShaderData)0; - d.clipPos = i.pos; - d.worldSpacePosition = i.worldPos; - - d.worldSpaceNormal = normalize(i.worldNormal); - d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz); - - d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w; - float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign; - - d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal); - d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos); - - d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); - d.texcoord0 = i.texcoord0; - // d.texcoord1 = i.texcoord1; - // d.texcoord2 = i.texcoord2; - - // #if %TEXCOORD3REQUIREKEY% - // d.texcoord3 = i.texcoord3; - // #endif - - // d.isFrontFace = facing; - // #if %VERTEXCOLORREQUIREKEY% - d.vertexColor = i.vertexColor; - // #endif - - // these rarely get used, so we back transform them. Usually will be stripped. - #if _HDRP - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(i.worldPos), 1)).xyz; - #else - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(i.worldPos, 1)).xyz; - #endif - // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldNormal)); - // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldTangent.xyz)); - - // #if %SCREENPOSREQUIREKEY% - d.screenPos = i.screenPos; - d.screenUV = (i.screenPos.xy / i.screenPos.w); - // #endif - - - // #if %EXTRAV2F0REQUIREKEY% - d.extraV2F0 = i.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - d.extraV2F1 = i.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - d.extraV2F2 = i.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - d.extraV2F3 = i.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // d.extraV2F4 = i.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // d.extraV2F5 = i.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // d.extraV2F6 = i.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // d.extraV2F7 = i.extraV2F7; - // #endif - - return d; - } - -#endif - - - // vertex shader - VertexToPixel Vert (VertexData v) - { - UNITY_SETUP_INSTANCE_ID(v); - VertexToPixel o; - UNITY_INITIALIZE_OUTPUT(VertexToPixel,o); - UNITY_TRANSFER_INSTANCE_ID(v,o); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - -#if !_TESSELLATION_ON - ChainModifyVertex(v, o, _Time); -#endif - - o.texcoord0 = v.texcoord0; - // o.texcoord1 = v.texcoord1; - // o.texcoord2 = v.texcoord2; - - // #if %TEXCOORD3REQUIREKEY% - // o.texcoord3 = v.texcoord3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - o.vertexColor = v.vertexColor; - // #endif - - - - o.worldPos = mul(GetObjectToWorldMatrix(), v.vertex).xyz; - o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldTangent = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); - - - // sets o.pos, so do screenpos after. - TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) - - // #if %SCREENPOSREQUIREKEY% - o.screenPos = ComputeScreenPos(o.pos); - // #endif - - return o; - } - - - - // fragment shader - fixed4 Frag (VertexToPixel IN - #ifdef _DEPTHOFFSET_ON - , out float outputDepth : SV_Depth - #endif - #if NEED_FACING - , bool facing : SV_IsFrontFace - #endif - ) : SV_Target - { - UNITY_SETUP_INSTANCE_ID(IN); - // prepare and unpack data - - #ifdef FOG_COMBINED_WITH_TSPACE - UNITY_EXTRACT_FOG_FROM_TSPACE(IN); - #elif defined (FOG_COMBINED_WITH_WORLD_POS) - UNITY_EXTRACT_FOG_FROM_WORLD_POS(IN); - #else - UNITY_EXTRACT_FOG(IN); - #endif - - #ifndef USING_DIRECTIONAL_LIGHT - fixed3 lightDir = normalize(UnityWorldSpaceLightDir(IN.worldPos)); - #else - fixed3 lightDir = _WorldSpaceLightPos0.xyz; - #endif - - - - ShaderData d = CreateShaderData(IN - #if NEED_FACING - , facing - #endif - ); - - Surface l = (Surface)0; - - #ifdef _DEPTHOFFSET_ON - l.outputDepth = outputDepth; - #endif - - l.Albedo = half3(0.5, 0.5, 0.5); - l.Normal = float3(0,0,1); - l.Occlusion = 1; - l.Alpha = 1; - - ChainSurfaceFunction(l, d); - - #ifdef _DEPTHOFFSET_ON - outputDepth = l.outputDepth; - #endif - - SHADOW_CASTER_FRAGMENT(IN) - } - - - ENDCG - - } - - - // ---- meta information extraction pass: - Pass - { - Name "Meta" - Tags { "LightMode" = "Meta" } - Cull Off - - Tags - { - "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" - } - Cull [_CullingOption] - ZWrite [_ZWrite] - ZTest [_ZTestMode] - ColorMask [_ColorMask] -Lighting Off - - - CGPROGRAM - - #pragma vertex Vert - #pragma fragment Frag - - // compile directives - #pragma target 3.0 - #pragma multi_compile_instancing - #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 - #pragma shader_feature EDITOR_VISUALIZATION - - #include "HLSLSupport.cginc" - #define UNITY_INSTANCED_LOD_FADE - #define UNITY_INSTANCED_SH - #define UNITY_INSTANCED_LIGHTMAPSTS - #include "UnityShaderVariables.cginc" - #include "UnityShaderUtilities.cginc" - - #include "UnityCG.cginc" - #include "Lighting.cginc" - #include "UnityPBSLighting.cginc" - #include "UnityMetaPass.cginc" - - #define _PASSMETA 1 - - - #pragma shader_feature_local TIMEISCUSTOM_ON - #pragma shader_feature_local ADDITIVECONFIG_ON - #pragma shader_feature_local PREMULTIPLYALPHA_ON - #pragma shader_feature_local PREMULTIPLYCOLOR_ON - #pragma shader_feature_local SPLITRGBA_ON - #pragma shader_feature_local SHAPEADD_ON - - #pragma shader_feature_local SHAPE1SCREENUV_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local SHAPE2SCREENUV_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local SHAPE3SCREENUV_ON /////////////////Pipeline specific implementation - - #pragma shader_feature_local SHAPEDEBUG_ON - - #pragma shader_feature_local SHAPE1CONTRAST_ON - #pragma shader_feature_local SHAPE1DISTORT_ON - #pragma shader_feature_local SHAPE1ROTATE_ON - #pragma shader_feature_local SHAPE1SHAPECOLOR_ON - - #pragma shader_feature_local SHAPE2_ON - #pragma shader_feature_local SHAPE2CONTRAST_ON - #pragma shader_feature_local SHAPE2DISTORT_ON - #pragma shader_feature_local SHAPE2ROTATE_ON - #pragma shader_feature_local SHAPE2SHAPECOLOR_ON - - #pragma shader_feature_local SHAPE3_ON - #pragma shader_feature_local SHAPE3CONTRAST_ON - #pragma shader_feature_local SHAPE3DISTORT_ON - #pragma shader_feature_local SHAPE3ROTATE_ON - #pragma shader_feature_local SHAPE3SHAPECOLOR_ON - - #pragma shader_feature_local GLOW_ON - #pragma shader_feature_local GLOWTEX_ON - #pragma shader_feature_local DEPTHGLOW_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local MASK_ON - #pragma shader_feature_local COLORRAMP_ON - #pragma shader_feature_local COLORRAMPGRAD_ON - #pragma shader_feature_local COLORGRADING_ON - #pragma shader_feature_local HSV_ON - #pragma shader_feature_local POSTERIZE_ON - #pragma shader_feature_local PIXELATE_ON - #pragma shader_feature_local DISTORT_ON - #pragma shader_feature_local SHAKEUV_ON - #pragma shader_feature_local WAVEUV_ON - #pragma shader_feature_local ROUNDWAVEUV_ON - #pragma shader_feature_local TWISTUV_ON - #pragma shader_feature_local DOODLE_ON - #pragma shader_feature_local OFFSETSTREAM_ON - #pragma shader_feature_local TEXTURESCROLL_ON - #pragma shader_feature_local VERTOFFSET_ON - #pragma shader_feature_local RIM_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local BACKFACETINT_ON /////////////////Pipeline specific implementation - #pragma shader_feature_local POLARUV_ON - #pragma shader_feature_local POLARUVDISTORT_ON - #pragma shader_feature_local SHAPE1MASK_ON - #pragma shader_feature_local TRAILWIDTH_ON - #pragma shader_feature_local LIGHTANDSHADOW_ON - #pragma shader_feature_local SHAPETEXOFFSET_ON - #pragma shader_feature_local SHAPEWEIGHTS_ON - - #pragma shader_feature_local ALPHACUTOFF_ON - #pragma shader_feature_local ALPHASMOOTHSTEP_ON - #pragma shader_feature_local FADE_ON - #pragma shader_feature_local FADEBURN_ON - #pragma shader_feature_local ALPHAFADE_ON - #pragma shader_feature_local ALPHAFADEUSESHAPE1_ON - #pragma shader_feature_local ALPHAFADEUSEREDCHANNEL_ON - #pragma shader_feature_local ALPHAFADETRANSPARENCYTOO_ON - #pragma shader_feature_local ALPHAFADEINPUTSTREAM_ON - #pragma shader_feature_local CAMDISTFADE_ON - - #pragma shader_feature NORMALMAP_ON - - - #define _STANDARD 1 -// If your looking in here and thinking WTF, yeah, I know. These are taken from the SRPs, to allow us to use the same -// texturing library they use. However, since they are not included in the standard pipeline by default, there is no -// way to include them in and they have to be inlined, since someone could copy this shader onto another machine without -// Better Shaders installed. Unfortunate, but I'd rather do this and have a nice library for texture sampling instead -// of the patchy one Unity provides being inlined/emulated in HDRP/URP. Strangely, PSSL and XBoxOne libraries are not -// included in the standard SRP code, but they are in tons of Unity own projects on the web, so I grabbed them from there. - -#if defined(SHADER_API_GAMECORE) - - #define ZERO_INITIALIZE(type, name) name = (type)0; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - #define ASSIGN_SAMPLER(samplerName, samplerValue) samplerName = samplerValue - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) PLATFORM_SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) PLATFORM_SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) PLATFORM_SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) PLATFORM_SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) PLATFORM_SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) PLATFORM_SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) PLATFORM_SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) PLATFORM_SAMPLE_TEXTURE3D(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) PLATFORM_SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define SAMPLE_DEPTH_TEXTURE(textureName, samplerName, coord2) SAMPLE_TEXTURE2D(textureName, samplerName, coord2).r - #define SAMPLE_DEPTH_TEXTURE_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod).r - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_XBOXONE) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - -#elif defined(SHADER_API_PSSL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.GetLOD(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RW_Texture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RW_Texture2D_Array textureName - #define RW_TEXTURE3D(type, textureName) RW_Texture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - - - -#elif defined(SHADER_API_D3D11) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_METAL) - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_VULKAN) -// This file assume SHADER_API_VULKAN is defined - // TODO: This is a straight copy from D3D11.hlsl. Go through all this stuff and adjust where needed. - - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_SWITCH) - // This file assume SHADER_API_SWITCH is defined - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, dpdx, dpdy) textureName.SampleGrad(samplerName, coord2, dpdx, dpdy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) textureName.SampleBias(samplerName, float4(coord3, index), bias) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - -#elif defined(SHADER_API_GLCORE) - - // OpenGL 4.1 SM 5.0 https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 46) - #define OPENGL4_1_SM5 1 - #else - #define OPENGL4_1_SM5 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_FLOAT(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_FLOAT(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_HALF(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_HALF(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_ARRAY(textureName) - #define TEXTURE3D_HALF(textureName) TEXTURE3D(textureName) - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - - #if OPENGL4_1_SM5 - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #endif - - - #elif defined(SHADER_API_GLES3) - - // GLES 3.1 + AEP shader feature https://docs.unity3d.com/Manual/SL-ShaderCompileTargets.html - #if (SHADER_TARGET >= 40) - #define GLES3_1_AEP 1 - #else - #define GLES3_1_AEP 0 - #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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) textureName.CalculateLevelOfDetail(samplerName, coord2) - - // Texture abstraction - - #define TEXTURE2D(textureName) Texture2D textureName - #define TEXTURE2D_ARRAY(textureName) Texture2DArray textureName - #define TEXTURECUBE(textureName) TextureCube textureName - #define TEXTURECUBE_ARRAY(textureName) TextureCubeArray textureName - #define TEXTURE3D(textureName) Texture3D textureName - - #define TEXTURE2D_FLOAT(textureName) Texture2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_FLOAT(textureName) TextureCube_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_FLOAT(textureName) Texture3D_float textureName - - #define TEXTURE2D_HALF(textureName) Texture2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) Texture2DArray textureName // no support to _float on Array, it's being added - #define TEXTURECUBE_HALF(textureName) TextureCube_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TextureCubeArray textureName // no support to _float on Array, it's being added - #define TEXTURE3D_HALF(textureName) Texture3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) TEXTURE2D(textureName) - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURE2D_ARRAY(textureName) - #define TEXTURECUBE_SHADOW(textureName) TEXTURECUBE(textureName) - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_ARRAY(textureName) - - #if GLES3_1_AEP - #define RW_TEXTURE2D(type, textureName) RWTexture2D textureName - #define RW_TEXTURE2D_ARRAY(type, textureName) RWTexture2DArray textureName - #define RW_TEXTURE3D(type, textureName) RWTexture3D textureName - #else - #define RW_TEXTURE2D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - #endif - - #define SAMPLER(samplerName) SamplerState samplerName - #define SAMPLER_CMP(samplerName) SamplerComparisonState samplerName - - #define TEXTURE2D_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER(samplerName) - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER(samplerName) - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER(samplerName) - #define TEXTURE3D_PARAM(textureName, samplerName) TEXTURE3D(textureName), SAMPLER(samplerName) - - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) TEXTURE2D(textureName), SAMPLER_CMP(samplerName) - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURE2D_ARRAY(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE(textureName), SAMPLER_CMP(samplerName) - #define TEXTURECUBE_ARRAY_SHADOW_PARAM(textureName, samplerName) TEXTURECUBE_ARRAY(textureName), SAMPLER_CMP(samplerName) - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName, samplerName - - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - #define TEXTURECUBE_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName, samplerName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) textureName.Sample(samplerName, coord2) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) textureName.SampleLevel(samplerName, coord2, lod) - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) textureName.SampleBias(samplerName, coord2, bias) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) textureName.SampleGrad(samplerName, coord2, ddx, ddy) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Sample(samplerName, float3(coord2, index)) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) textureName.SampleLevel(samplerName, float3(coord2, index), lod) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) textureName.SampleBias(samplerName, float3(coord2, index), bias) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) textureName.SampleGrad(samplerName, float3(coord2, index), dpdx, dpdy) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) textureName.SampleBias(samplerName, coord3, bias) - - #ifdef UNITY_NO_CUBEMAP_ARRAY - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #else - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Sample(samplerName, float4(coord3, index)) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) textureName.SampleLevel(samplerName, float4(coord3, index), lod) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias)textureName.SampleBias(samplerName, float4(coord3, index), bias) - #endif - - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) textureName.Sample(samplerName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) textureName.SampleLevel(samplerName, coord3, lod) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) textureName.SampleCmpLevelZero(samplerName, (coord3).xy, (coord3).z) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) textureName.SampleCmpLevelZero(samplerName, float3((coord3).xy, index), (coord3).z) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) textureName.SampleCmpLevelZero(samplerName, (coord4).xyz, (coord4).w) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) textureName.SampleCmpLevelZero(samplerName, float4((coord4).xyz, index), (coord4).w) - - - #define LOAD_TEXTURE2D(textureName, unCoord2) textureName.Load(int3(unCoord2, 0)) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) textureName.Load(int3(unCoord2, lod)) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) textureName.Load(unCoord2, sampleIndex) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) textureName.Load(int4(unCoord2, index, 0)) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) textureName.Load(int3(unCoord2, index), sampleIndex) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) textureName.Load(int4(unCoord2, index, lod)) - #define LOAD_TEXTURE3D(textureName, unCoord3) textureName.Load(int4(unCoord3, 0)) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) textureName.Load(int4(unCoord3, lod)) - - #if GLES3_1_AEP - #define PLATFORM_SUPPORT_GATHER - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) textureName.Gather(samplerName, coord2) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) textureName.Gather(samplerName, float3(coord2, index)) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) textureName.Gather(samplerName, coord3) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) textureName.Gather(samplerName, float4(coord3, index)) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherRed(samplerName, coord2) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherGreen(samplerName, coord2) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherBlue(samplerName, coord2) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) textureName.GatherAlpha(samplerName, coord2) - #else - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - #endif - - -#elif defined(SHADER_API_GLES) - - - #define uint int - - #define rcp(x) 1.0 / (x) - #define ddx_fine ddx - #define ddy_fine ddy - #define asfloat - #define asuint(x) asint(x) - #define f32tof16 - #define f16tof32 - - #define ERROR_ON_UNSUPPORTED_FUNCTION(funcName) #error #funcName is not supported on GLES 2.0 - - // 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; - #define ZERO_INITIALIZE_ARRAY(type, name, arraySize) { for (int arrayIndex = 0; arrayIndex < arraySize; arrayIndex++) { name[arrayIndex] = (type)0; } } - - - // Texture util abstraction - - #define CALCULATE_TEXTURE2D_LOD(textureName, samplerName, coord2) #error calculate Level of Detail not supported in GLES2 - - // Texture abstraction - - #define TEXTURE2D(textureName) sampler2D textureName - #define TEXTURE2D_ARRAY(textureName) samplerCUBE textureName // No support to texture2DArray - #define TEXTURECUBE(textureName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY(textureName) samplerCUBE textureName // No supoport to textureCubeArray and can't emulate with texture2DArray - #define TEXTURE3D(textureName) sampler3D textureName - - #define TEXTURE2D_FLOAT(textureName) sampler2D_float textureName - #define TEXTURE2D_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to texture2DArray - #define TEXTURECUBE_FLOAT(textureName) samplerCUBE_float textureName - #define TEXTURECUBE_ARRAY_FLOAT(textureName) TEXTURECUBE_FLOAT(textureName) // No support to textureCubeArray - #define TEXTURE3D_FLOAT(textureName) sampler3D_float textureName - - #define TEXTURE2D_HALF(textureName) sampler2D_half textureName - #define TEXTURE2D_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to texture2DArray - #define TEXTURECUBE_HALF(textureName) samplerCUBE_half textureName - #define TEXTURECUBE_ARRAY_HALF(textureName) TEXTURECUBE_HALF(textureName) // No support to textureCubeArray - #define TEXTURE3D_HALF(textureName) sampler3D_half textureName - - #define TEXTURE2D_SHADOW(textureName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - #define TEXTURECUBE_SHADOW(textureName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_ARRAY_SHADOW(textureName) TEXTURECUBE_SHADOW(textureName) // No support to texture array - - #define RW_TEXTURE2D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2D) - #define RW_TEXTURE2D_ARRAY(type, textureName) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture2DArray) - #define RW_TEXTURE3D(type, textureNam) ERROR_ON_UNSUPPORTED_FUNCTION(RWTexture3D) - - #define SAMPLER(samplerName) - #define SAMPLER_CMP(samplerName) - - #define TEXTURE2D_PARAM(textureName, samplerName) sampler2D textureName - #define TEXTURE2D_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURECUBE_ARRAY_PARAM(textureName, samplerName) samplerCUBE textureName - #define TEXTURE3D_PARAM(textureName, samplerName) sampler3D textureName - #define TEXTURE2D_SHADOW_PARAM(textureName, samplerName) SHADOW2D_TEXTURE_AND_SAMPLER textureName - #define TEXTURE2D_ARRAY_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - #define TEXTURECUBE_SHADOW_PARAM(textureName, samplerName) SHADOWCUBE_TEXTURE_AND_SAMPLER textureName - - #define TEXTURE2D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_ARRAY_ARGS(textureName, samplerName) textureName - #define TEXTURE3D_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURE2D_ARRAY_SHADOW_ARGS(textureName, samplerName) textureName - #define TEXTURECUBE_SHADOW_ARGS(textureName, samplerName) textureName - - #define SAMPLE_TEXTURE2D(textureName, samplerName, coord2) tex2D(textureName, coord2) - - #if (SHADER_TARGET >= 30) - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) tex2Dlod(textureName, float4(coord2, 0, lod)) - #else - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURE2D_LOD(textureName, samplerName, coord2, lod) SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, lod) - #endif - - #define SAMPLE_TEXTURE2D_BIAS(textureName, samplerName, coord2, bias) tex2Dbias(textureName, float4(coord2, 0, bias)) - #define SAMPLE_TEXTURE2D_GRAD(textureName, samplerName, coord2, ddx, ddy) SAMPLE_TEXTURE2D(textureName, samplerName, coord2) - #define SAMPLE_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY) - #define SAMPLE_TEXTURE2D_ARRAY_LOD(textureName, samplerName, coord2, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_LOD) - #define SAMPLE_TEXTURE2D_ARRAY_BIAS(textureName, samplerName, coord2, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_BIAS) - #define SAMPLE_TEXTURE2D_ARRAY_GRAD(textureName, samplerName, coord2, index, dpdx, dpdy) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_GRAD) - #define SAMPLE_TEXTURECUBE(textureName, samplerName, coord3) texCUBE(textureName, coord3) - // No lod support. Very poor approximation with bias. - #define SAMPLE_TEXTURECUBE_LOD(textureName, samplerName, coord3, lod) SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, lod) - #define SAMPLE_TEXTURECUBE_BIAS(textureName, samplerName, coord3, bias) texCUBEbias(textureName, float4(coord3, bias)) - #define SAMPLE_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY) - #define SAMPLE_TEXTURECUBE_ARRAY_LOD(textureName, samplerName, coord3, index, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_LOD) - #define SAMPLE_TEXTURECUBE_ARRAY_BIAS(textureName, samplerName, coord3, index, bias) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_BIAS) - #define SAMPLE_TEXTURE3D(textureName, samplerName, coord3) tex3D(textureName, coord3) - #define SAMPLE_TEXTURE3D_LOD(textureName, samplerName, coord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE3D_LOD) - - #define SAMPLE_TEXTURE2D_SHADOW(textureName, samplerName, coord3) SHADOW2D_SAMPLE(textureName, samplerName, coord3) - #define SAMPLE_TEXTURE2D_ARRAY_SHADOW(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURE2D_ARRAY_SHADOW) - #define SAMPLE_TEXTURECUBE_SHADOW(textureName, samplerName, coord4) SHADOWCUBE_SAMPLE(textureName, samplerName, coord4) - #define SAMPLE_TEXTURECUBE_ARRAY_SHADOW(textureName, samplerName, coord4, index) ERROR_ON_UNSUPPORTED_FUNCTION(SAMPLE_TEXTURECUBE_ARRAY_SHADOW) - - - // Not supported. Can't define as error because shader library is calling these functions. - #define LOAD_TEXTURE2D(textureName, unCoord2) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_LOD(textureName, unCoord2, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_MSAA(textureName, unCoord2, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY(textureName, unCoord2, index) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_MSAA(textureName, unCoord2, index, sampleIndex) half4(0, 0, 0, 0) - #define LOAD_TEXTURE2D_ARRAY_LOD(textureName, unCoord2, index, lod) half4(0, 0, 0, 0) - #define LOAD_TEXTURE3D(textureName, unCoord3) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D) - #define LOAD_TEXTURE3D_LOD(textureName, unCoord3, lod) ERROR_ON_UNSUPPORTED_FUNCTION(LOAD_TEXTURE3D_LOD) - - // Gather not supported. Fallback to regular texture sampling. - #define GATHER_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D) - #define GATHER_TEXTURE2D_ARRAY(textureName, samplerName, coord2, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURE2D_ARRAY) - #define GATHER_TEXTURECUBE(textureName, samplerName, coord3) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE) - #define GATHER_TEXTURECUBE_ARRAY(textureName, samplerName, coord3, index) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_TEXTURECUBE_ARRAY) - #define GATHER_RED_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_RED_TEXTURE2D) - #define GATHER_GREEN_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_GREEN_TEXTURE2D) - #define GATHER_BLUE_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_BLUE_TEXTURE2D) - #define GATHER_ALPHA_TEXTURE2D(textureName, samplerName, coord2) ERROR_ON_UNSUPPORTED_FUNCTION(GATHER_ALPHA_TEXTURE2D) - -#else -#error unsupported shader api -#endif - - - - -// default flow control attributes -#ifndef UNITY_BRANCH -# define UNITY_BRANCH -#endif -#ifndef UNITY_FLATTEN -# define UNITY_FLATTEN -#endif -#ifndef UNITY_UNROLL -# define UNITY_UNROLL -#endif -#ifndef UNITY_UNROLLX -# define UNITY_UNROLLX(_x) -#endif -#ifndef UNITY_LOOP -# define UNITY_LOOP -#endif - - - - - - - - // data across stages, stripped like the above. - struct VertexToPixel - { - UNITY_POSITION(pos); - float3 worldPos : TEXCOORD0; - float3 worldNormal : TEXCOORD1; - float4 worldTangent : TEXCOORD2; - float4 texcoord0 : TEXCOORD3; - // float4 texcoord1 : TEXCOORD4; - // float4 texcoord2 : TEXCOORD5; - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD6; - // #endif - - // #if %SCREENPOSREQUIREKEY% - float4 screenPos : TEXCOORD7; - // #endif - - #ifdef EDITOR_VISUALIZATION - float2 vizUV : TEXCOORD8; - float4 lightCoord : TEXCOORD9; - #endif - - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - // #if %EXTRAV2F0REQUIREKEY% - float4 extraV2F0 : TEXCOORD10; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - float4 extraV2F1 : TEXCOORD11; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - float4 extraV2F2 : TEXCOORD12; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - float4 extraV2F3 : TEXCOORD13; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // float4 extraV2F4 : TEXCOORD14; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // float4 extraV2F5 : TEXCOORD15; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // float4 extraV2F6 : TEXCOORD16; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // float4 extraV2F7 : TEXCOORD17; - // #endif - - - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO - }; - - - - // data describing the user output of a pixel - struct Surface - { - half3 Albedo; - half Height; - half3 Normal; - half Smoothness; - half3 Emission; - half Metallic; - half3 Specular; - half Occlusion; - half SpecularPower; // for simple lighting - half Alpha; - float outputDepth; // if written, SV_Depth semantic is used. ShaderData.clipPos.z is unused value - // HDRP Only - half SpecularOcclusion; - half SubsurfaceMask; - half Thickness; - half CoatMask; - half CoatSmoothness; - half Anisotropy; - half IridescenceMask; - half IridescenceThickness; - int DiffusionProfileHash; - float SpecularAAThreshold; - float SpecularAAScreenSpaceVariance; - // requires _OVERRIDE_BAKEDGI to be defined, but is mapped in all pipelines - float3 DiffuseGI; - float3 BackDiffuseGI; - float3 SpecularGI; - float ior; - float3 transmittanceColor; - float atDistance; - float transmittanceMask; - // requires _OVERRIDE_SHADOWMASK to be defines - float4 ShadowMask; - - // for decals - float NormalAlpha; - float MAOSAlpha; - - - }; - - // Data the user declares in blackboard blocks - struct Blackboard - { - - float blackboardDummyData; - }; - - // data the user might need, this will grow to be big. But easy to strip - struct ShaderData - { - float4 clipPos; // SV_POSITION - float3 localSpacePosition; - float3 localSpaceNormal; - float3 localSpaceTangent; - - float3 worldSpacePosition; - float3 worldSpaceNormal; - float3 worldSpaceTangent; - float tangentSign; - - float3 worldSpaceViewDir; - float3 tangentSpaceViewDir; - - float4 texcoord0; - float4 texcoord1; - float4 texcoord2; - float4 texcoord3; - - float2 screenUV; - float4 screenPos; - - float4 vertexColor; - bool isFrontFace; - - float4 extraV2F0; - float4 extraV2F1; - float4 extraV2F2; - float4 extraV2F3; - float4 extraV2F4; - float4 extraV2F5; - float4 extraV2F6; - float4 extraV2F7; - - float3x3 TBNMatrix; - Blackboard blackboard; - }; - - struct VertexData - { - #if SHADER_TARGET > 30 - // uint vertexID : SV_VertexID; - #endif - float4 vertex : POSITION; - float3 normal : NORMAL; - float4 tangent : TANGENT; - float4 texcoord0 : TEXCOORD0; - - // optimize out mesh coords when not in use by user or lighting system - #if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER) - float4 texcoord1 : TEXCOORD1; - #endif - - #if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON))) - float4 texcoord2 : TEXCOORD2; - #endif - - #if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON))) - float4 texcoord1 : TEXCOORD1; - #endif - #if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON))) - float4 texcoord2 : TEXCOORD2; - #endif - - - #if _HDRP - float4 texcoord1 : TEXCOORD1; - float4 texcoord2 : TEXCOORD2; - #endif - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) - float3 previousPositionOS : TEXCOORD4; // Contain previous transform position (in case of skinning for example) - #if defined (_ADD_PRECOMPUTED_VELOCITY) - float3 precomputedVelocity : TEXCOORD5; // Add Precomputed Velocity (Alembic computes velocities on runtime side). - #endif - #endif - - UNITY_VERTEX_INPUT_INSTANCE_ID - }; - - struct TessVertex - { - float4 vertex : INTERNALTESSPOS; - float3 normal : NORMAL; - float4 tangent : TANGENT; - float4 texcoord0 : TEXCOORD0; - float4 texcoord1 : TEXCOORD1; - float4 texcoord2 : TEXCOORD2; - - // #if %TEXCOORD3REQUIREKEY% - // float4 texcoord3 : TEXCOORD3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - float4 vertexColor : COLOR; - // #endif - - // #if %EXTRAV2F0REQUIREKEY% - float4 extraV2F0 : TEXCOORD5; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - float4 extraV2F1 : TEXCOORD6; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - float4 extraV2F2 : TEXCOORD7; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - float4 extraV2F3 : TEXCOORD8; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // float4 extraV2F4 : TEXCOORD9; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // float4 extraV2F5 : TEXCOORD10; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // float4 extraV2F6 : TEXCOORD11; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // float4 extraV2F7 : TEXCOORD12; - // #endif - - #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) - float3 previousPositionOS : TEXCOORD13; // Contain previous transform position (in case of skinning for example) - #if defined (_ADD_PRECOMPUTED_VELOCITY) - float3 precomputedVelocity : TEXCOORD14; - #endif - #endif - - UNITY_VERTEX_INPUT_INSTANCE_ID - UNITY_VERTEX_OUTPUT_STEREO - }; - - struct ExtraV2F - { - float4 extraV2F0; - float4 extraV2F1; - float4 extraV2F2; - float4 extraV2F3; - float4 extraV2F4; - float4 extraV2F5; - float4 extraV2F6; - float4 extraV2F7; - Blackboard blackboard; - float4 time; - }; - - - float3 WorldToTangentSpace(ShaderData d, float3 normal) - { - return mul(d.TBNMatrix, normal); - } - - float3 TangentToWorldSpace(ShaderData d, float3 normal) - { - return mul(normal, d.TBNMatrix); - } - - // in this case, make standard more like SRPs, because we can't fix - // unity_WorldToObject in HDRP, since it already does macro-fu there - - #if _STANDARD - float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); }; - float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); }; - float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); }; - float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); }; - float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; } - float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; } - #if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER)) - #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod) - #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod) + // Define shadow pass specific clip position for Universal + o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS)); + #if UNITY_REVERSED_Z + o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE); #else - #define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod) - #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) + o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE); #endif + #elif _PASSMETA + o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); + #else + o.pos = TransformWorldToHClip(o.worldPos); + #endif - #undef UNITY_MATRIX_I_M + // #if %SCREENPOSREQUIREKEY% + o.screenPos = ComputeScreenPos(o.pos, _ProjectionParams.x); + // #endif - #define UNITY_MATRIX_I_M unity_WorldToObject - - - #endif - - float3 GetCameraWorldPosition() - { - #if _HDRP - return GetCameraRelativePositionWS(_WorldSpaceCameraPos); - #else - return _WorldSpaceCameraPos; - #endif - } - - #if _GRABPASSUSED - #if _STANDARD - TEXTURE2D(%GRABTEXTURE%); - SAMPLER(sampler_%GRABTEXTURE%); - #endif - - half3 GetSceneColor(float2 uv) - { - #if _STANDARD - return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb; - #else - return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv); - #endif - } - #endif - - - - #if _STANDARD - UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); - float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); } - float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); } - float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); } - #else - float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); } - float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); } - float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); } - #endif - - float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) - { - float eye = GetLinearEyeDepth(uv); - float3 camView = mul((float3x3)UNITY_MATRIX_M, transpose(mul(UNITY_MATRIX_I_M, UNITY_MATRIX_I_V)) [2].xyz); - - float dt = dot(worldSpaceViewDir, camView); - float3 div = worldSpaceViewDir/dt; - float3 wpos = (eye * div) + GetCameraWorldPosition(); - return wpos; - } - - #if _HDRP - float3 ObjectToWorldSpacePosition(float3 pos) - { - return GetAbsolutePositionWS(TransformObjectToWorld(pos)); - } - #else - float3 ObjectToWorldSpacePosition(float3 pos) - { - return TransformObjectToWorld(pos); - } - #endif - - #if _STANDARD - UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture); - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); - float3 norms = DecodeViewNormalStereo(depthNorms); - norms = mul((float3x3)UNITY_MATRIX_V, norms) * 0.5 + 0.5; - return norms; - } - #elif _HDRP && !_DECALSHADER - - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - NormalData nd; - DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd); - return nd.normalWS; - } - #elif _URP - #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) - #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" - #endif - - float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) - { - #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) - return SampleSceneNormals(uv); - #else - float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir); - return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5; - #endif - - } - #endif - - #if _HDRP - - half3 UnpackNormalmapRGorAG(half4 packednormal) - { - // This do the trick - packednormal.x *= packednormal.w; - - half3 normal; - normal.xy = packednormal.xy * 2 - 1; - normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); - return normal; - } - half3 UnpackNormal(half4 packednormal) - { - #if defined(UNITY_NO_DXT5nm) - return packednormal.xyz * 2 - 1; - #else - return UnpackNormalmapRGorAG(packednormal); - #endif - } - #endif - #if _HDRP || _URP - - half3 UnpackScaleNormal(half4 packednormal, half scale) - { - #ifndef UNITY_NO_DXT5nm - // Unpack normal as DXT5nm (1, y, 1, x) or BC5 (x, y, 0, 1) - // Note neutral texture like "bump" is (0, 0, 1, 1) to work with both plain RGB normal and DXT5nm/BC5 - packednormal.x *= packednormal.w; - #endif - half3 normal; - normal.xy = (packednormal.xy * 2 - 1) * scale; - normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); - return normal; - } - - #endif - - - void GetSun(out float3 lightDir, out float3 color) - { - lightDir = float3(0.5, 0.5, 0); - color = 1; - #if _HDRP - if (_DirectionalLightCount > 0) - { - DirectionalLightData light = _DirectionalLightDatas[0]; - lightDir = -light.forward.xyz; - color = light.color; - } - #elif _STANDARD - lightDir = normalize(_WorldSpaceLightPos0.xyz); - color = _LightColor0.rgb; - #elif _URP - Light light = GetMainLight(); - lightDir = light.direction; - color = light.color; - #endif - } - - - - - half4 _Color; - half _Alpha; - half _AlphaCutoffValue; - - half _TimingSeed; - - #if TIMEISCUSTOM_ON - float4 globalCustomTime; - #endif - - half4 _MainTex_ST, _ShapeColor; - half _ShapeXSpeed, _ShapeYSpeed, _ShapeColorWeight, _ShapeAlphaWeight; - - #if SHAPE1CONTRAST_ON - half _ShapeContrast, _ShapeBrightness; - #endif - - #if SHAPE1DISTORT_ON - half4 _ShapeDistortTex_ST; - half _ShapeDistortAmount, _ShapeDistortXSpeed, _ShapeDistortYSpeed; - #endif - - #if SHAPE1ROTATE_ON - half _ShapeRotationOffset, _ShapeRotationSpeed; - #endif - - #if OFFSETSTREAM_ON - half _OffsetSh1; - #endif - - #if SHAPEWEIGHTS_ON - half _Sh1BlendOffset; - #endif - - #if SHAPE2_ON - half4 _Shape2Tex_ST, _Shape2Color; - half _Shape2XSpeed, _Shape2YSpeed, _Shape2ColorWeight, _Shape2AlphaWeight; - #if SHAPE2CONTRAST_ON - half _Shape2Contrast, _Shape2Brightness; - #endif - #if SHAPE2DISTORT_ON - half4 _Shape2DistortTex_ST; - half _Shape2DistortAmount, _Shape2DistortXSpeed, _Shape2DistortYSpeed; - #endif - #if SHAPE2ROTATE_ON - half _Shape2RotationOffset, _Shape2RotationSpeed; - #endif - #if OFFSETSTREAM_ON - half _OffsetSh2; - #endif - #if SHAPEWEIGHTS_ON - half _Sh2BlendOffset; - #endif - #endif - - #if SHAPE3_ON - half4 _Shape3Tex_ST, _Shape3Color; - half _Shape3XSpeed, _Shape3YSpeed, _Shape3ColorWeight, _Shape3AlphaWeight; - #if SHAPE3CONTRAST_ON - half _Shape3Contrast, _Shape3Brightness; - #endif - #if SHAPE3DISTORT_ON - half4 _Shape3DistortTex_ST; - half _Shape3DistortAmount, _Shape3DistortXSpeed, _Shape3DistortYSpeed; - #endif - #if SHAPE3ROTATE_ON - half _Shape3RotationOffset, _Shape3RotationSpeed; - #endif - #if OFFSETSTREAM_ON - half _OffsetSh3; - #endif - #if SHAPEWEIGHTS_ON - half _Sh3BlendOffset; - #endif - #endif - - #if GLOW_ON - half4 _GlowColor; - half _Glow, _GlowGlobal; - #if GLOWTEX_ON - half4 _GlowTex_ST; - #endif - #endif - - #if MASK_ON - half4 _MaskTex_ST; - half _MaskPow; - #endif - - #if COLORRAMP_ON - half _ColorRampLuminosity, _ColorRampBlend; - #endif - - #if ALPHASMOOTHSTEP_ON - half _AlphaStepMin, _AlphaStepMax; - #endif - - #if ALPHAFADE_ON - half _AlphaFadeAmount, _AlphaFadeSmooth, _AlphaFadePow; - #endif - - #if HSV_ON - half _HsvShift, _HsvSaturation, _HsvBright; - #endif - - #if POSTERIZE_ON - half _PosterizeNumColors; - #endif - - #if PIXELATE_ON - half _PixelateSize; - #endif - - #if DISTORT_ON - half4 _DistortTex_ST; - half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount; - #endif - - #if TEXTURESCROLL_ON - half _TextureScrollXSpeed, _TextureScrollYSpeed; - #endif - - #if SHAKEUV_ON - half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY; - #endif - - #if WAVEUV_ON - half _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY; - #endif - - #if ROUNDWAVEUV_ON - half _RoundWaveStrength, _RoundWaveSpeed; - #endif - - #if TWISTUV_ON - half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius; - #endif - - #if DOODLE_ON - half _HandDrawnAmount, _HandDrawnSpeed; - #endif - - #if ROUNDWAVEUV_ON || PIXELATE_ON - half4 _MainTex_TexelSize; - #endif - - #if VERTOFFSET_ON - half4 _VertOffsetTex_ST; - half _VertOffsetAmount, _VertOffsetPower, _VertOffsetTexXSpeed, _VertOffsetTexYSpeed; - #endif - - #if FADE_ON - half4 _FadeTex_ST; - half _FadeAmount, _FadeTransition, _FadePower, _FadeScrollXSpeed, _FadeScrollYSpeed; - #if FADEBURN_ON - half4 _FadeBurnColor, _FadeBurnTex_ST; - half _FadeBurnWidth, _FadeBurnGlow; - #endif - #endif - - #if COLORGRADING_ON - half3 _ColorGradingLight, _ColorGradingMiddle, _ColorGradingDark; - half _ColorGradingMidPoint; - #endif - - #if CAMDISTFADE_ON - half _CamDistFadeStepMin, _CamDistFadeStepMax, _CamDistProximityFade; - #endif - - #if RIM_ON - half _RimBias, _RimScale, _RimPower, _RimIntensity, _RimAddAmount, _RimErodesAlpha; - half4 _RimColor; - #endif - - #if BACKFACETINT_ON - half4 _BackFaceTint, _FrontFaceTint; - #endif - - #if SHAPEDEBUG_ON - half _DebugShape; - #endif - - #if SHAPE1MASK_ON - half4 _Shape1MaskTex_ST; - half _Shape1MaskPow; - #endif - - #if TRAILWIDTH_ON - half _TrailWidthPower; - #endif - - #if LIGHTANDSHADOW_ON - half3 _All1VfxLightDir; - half _ShadowAmount, _ShadowStepMin, _ShadowStepMax, _LightAmount; - half4 _LightColor; - #endif - - #if SHAPETEXOFFSET_ON - half _RandomSh1Mult, _RandomSh2Mult, _RandomSh3Mult; - #endif - - #if DEPTHGLOW_ON - half _DepthGlowDist, _DepthGlowPow, _DepthGlow, _DepthGlowGlobal; - half4 _DepthGlowColor; - #endif - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half _ScreenUvShDistScale,_ScreenUvSh2DistScale, _ScreenUvSh3DistScale; - #endif - - #if NORMALMAP_ON - half _NormalStrength; - #endif - - - - - - - - - - - TEXTURE2D(_MainTex); - SAMPLER(sampler_MainTex); - - #if SHAPE1DISTORT_ON - TEXTURE2D(_ShapeDistortTex); - SAMPLER(sampler_ShapeDistortTex); - #endif - - #if SHAPE2_ON - TEXTURE2D(_Shape2Tex); - SAMPLER(sampler_Shape2Tex); - #if SHAPE2DISTORT_ON - TEXTURE2D(_Shape2DistortTex); - SAMPLER(sampler_Shape2DistortTex); - #endif - #endif - - #if SHAPE3_ON - TEXTURE2D(_Shape3Tex); - SAMPLER(sampler_Shape3Tex); - #if SHAPE3DISTORT_ON - TEXTURE2D(_Shape3DistortTex); - SAMPLER(sampler_Shape3DistortTex); - #endif - #endif - - #if GLOW_ON - #if GLOWTEX_ON - TEXTURE2D(_GlowTex); - SAMPLER(sampler_GlowTex); - #endif - #endif - - #if MASK_ON - TEXTURE2D(_MaskTex); - SAMPLER(sampler_MaskTex); - #endif - - #if COLORRAMP_ON - TEXTURE2D(_ColorRampTex); - SAMPLER(sampler_ColorRampTex); - #endif - - #if COLORRAMPGRAD_ON - TEXTURE2D(_ColorRampTexGradient); - SAMPLER(sampler_ColorRampTexGradient); - #endif - - #if DISTORT_ON - TEXTURE2D(_DistortTex); - SAMPLER(sampler_DistortTex); - #endif - - #if VERTOFFSET_ON - TEXTURE2D(_VertOffsetTex); - SAMPLER(sampler_VertOffsetTex); - #endif - - #if FADE_ON - TEXTURE2D(_FadeTex); - SAMPLER(sampler_FadeTex); - #if FADEBURN_ON - TEXTURE2D(_FadeBurnTex); - SAMPLER(sampler_FadeBurnTex); - #endif - #endif - - #if SHAPE1MASK_ON - TEXTURE2D(_Shape1MaskTex); - SAMPLER(sampler_Shape1MaskTex); - #endif - - #if TRAILWIDTH_ON - TEXTURE2D(_TrailWidthGradient); - SAMPLER(sampler_TrailWidthGradient); - #endif - - #if NORMALMAP_ON - TEXTURE2D(_NormalMap); - SAMPLER(sampler_NormalMap); - #endif - - half4 SampleTextureWithScroll(in Texture2D _tex, in SamplerState _sampler, in float2 uv, in half scrollXSpeed, in half scrollYSpeed, in float time) - { - half2 _uv = uv; - _uv.x += (time * scrollXSpeed) % 1; - _uv.y += (time * scrollYSpeed) % 1; - return SAMPLE_TEXTURE2D(_tex, _sampler, _uv); - } - - half EaseOutQuint(half x) - { - return 1 - pow(1 - x, 5); - } - - half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax) - { - return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin); - } - - float2 RotateUvs(float2 uv, half rotation, half4 scaleAndTranslate) - { - half2 center = half2(0.5 * scaleAndTranslate.x + scaleAndTranslate.z, 0.5 * scaleAndTranslate.y + scaleAndTranslate.w); - half cosAngle = cos(rotation); - half sinAngle = sin(rotation); - uv -= center; - uv = mul(half2x2(cosAngle, -sinAngle, sinAngle, cosAngle), uv); - uv += center; - return uv; - } - - half4 GetDebugColor(float4 resColor, half4 shape1, half4 shape2, half4 shape3) - { - half4 res = resColor; - - //MAKE SURE THE FOLLOWING CODE BLOCK IS UNCOMMENTED------------------------------------------- - #if SHAPEDEBUG_ON - if(_DebugShape < 1.5) return shape1; - #if SHAPE2_ON - else if (_DebugShape < 2.5) return shape2; - #endif - #if SHAPE3_ON - else return shape3; - #endif - #endif - - return res; - } - - void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d) - { - //uvDistTex --> extraV2F0 - //uvSh1DistTex --> extraV2F1 - //uvSh2DistTex --> extraV2F2 - //uvSh3DistTex --> extraV2F3 - - #if VERTOFFSET_ON - #if TIMEISCUSTOM_ON - const half time = v.texcoord0.z + globalCustomTime.y; - #else - const half time = v.texcoord0.z + _Time.y; - #endif - half4 offsetUv = half4(TRANSFORM_TEX(v.texcoord0.xy, _VertOffsetTex), 0, 0); - offsetUv.x += (time * _VertOffsetTexXSpeed) % 1; - offsetUv.y += (time * _VertOffsetTexYSpeed) % 1; - v.vertex.xyz += v.normal * _VertOffsetAmount * pow(SAMPLE_TEXTURE2D_LOD(_VertOffsetTex, sampler_VertOffsetTex, offsetUv, 0).r, _VertOffsetPower); - #endif - - #if DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F0.xy = TRANSFORM_TEX(v.texcoord0.xy, _DistortTex); - #endif - - #if SHAPE1DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F1.xy = TRANSFORM_TEX(v.texcoord0.xy, _ShapeDistortTex); - #endif - - #if SHAPE2_ON - #if SHAPE2DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F2.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape2DistortTex);; - #endif - #endif - - #if SHAPE3_ON - #if SHAPE3DISTORT_ON && !POLARUVDISTORT_ON - d.extraV2F3.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape3DistortTex); - #endif - #endif - } - - void Ext_SurfaceFunction0 (inout Surface o, ShaderData d) - { - //i.uvSeed -> d.texcoord0.xy - - float seed = d.texcoord0.z + _TimingSeed; - #if TIMEISCUSTOM_ON - const float4 shaderTime = globalCustomTime; - #else - const float4 shaderTime = _Time; - #endif - float time = shaderTime.y + seed; - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half2 originalUvs = d.texcoord0.xy; - #endif - - #if PIXELATE_ON - half aspectRatio = _MainTex_TexelSize.x / _MainTex_TexelSize.y; - half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio); - d.texcoord0.xy = floor(d.texcoord0.xy * pixelSize) / pixelSize; - #endif - - #if NORMALMAP_ON - half4 normalSample = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, d.texcoord0.xy); - half3 normalTS = UnpackNormal(normalSample); - normalTS.xy *= _NormalStrength; - o.Normal = normalTS; - #endif - - #if TWISTUV_ON - half2 tempUv = d.texcoord0.xy - half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); - _TwistUvRadius *= (_MainTex_ST.x + _MainTex_ST.y) / 2; - half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius; - half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0; - half s = sin(theta); - half c = cos(theta); - half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0); - tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta); - tempUv += half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); - d.texcoord0.xy = tempUv; - #endif - - #if DOODLE_ON - half2 uvCopy = d.texcoord0.xy; - _HandDrawnSpeed = (floor((shaderTime.x + seed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed; - uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4); - uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4); - d.texcoord0.xy = lerp(d.texcoord0.xy, d.texcoord0.xy + uvCopy, 0.0005 * _HandDrawnAmount); - #endif - - #if SHAKEUV_ON - half xShake = sin((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvX; - half yShake = cos((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvY; - d.texcoord0.xy += half2(xShake * 0.012, yShake * 0.01); - #endif - - #if WAVEUV_ON - half2 uvWave = half2(_WaveX * _MainTex_ST.x, _WaveY * _MainTex_ST.y) - d.texcoord0.xy; - #if ATLAS_ON - uvWave = half2(_WaveX, _WaveY) - uvRect; - #endif - uvWave.x *= _ScreenParams.x / _ScreenParams.y; - half angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((time * _WaveSpeed) % 360.0); - d.texcoord0.xy = d.texcoord0.xy + normalize(uvWave) * sin(angWave) * (_WaveStrength / 1000.0); - #endif - - #if ROUNDWAVEUV_ON - half xWave = ((0.5 * _MainTex_ST.x) - d.texcoord0.x); - half yWave = ((0.5 * _MainTex_ST.y) - d.texcoord0.y) * (_MainTex_TexelSize.w / _MainTex_TexelSize.z); - half ripple = -sqrt(xWave*xWave + yWave* yWave); - d.texcoord0.xy += (sin((ripple + time * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1; - #endif - - #if POLARUV_ON - half2 prePolarUvs = d.texcoord0.xy; - d.texcoord0.xy = d.texcoord0.xy - half2(0.5, 0.5); - d.texcoord0.xy = half2(atan2(d.texcoord0.y, d.texcoord0.x) / (1.0 * 6.28318530718), length(d.texcoord0.xy) * 2.0); - d.texcoord0.xy *= _MainTex_ST.xy; - #endif - - #if DISTORT_ON - #if POLARUVDISTORT_ON - half2 distortUvs = TRANSFORM_TEX(d.texcoord0.xy, _DistortTex); - #else - half2 distortUvs = d.extraV2F0.xy; - #endif - distortUvs.x += ((shaderTime.x + seed) * _DistortTexXSpeed) % 1; - distortUvs.y += ((shaderTime.x + seed) * _DistortTexYSpeed) % 1; - #if ATLAS_ON - d.extraV2F0.xy = half2((d.extraV2F0.x - _MinXUV) / (_MaxXUV - _MinXUV), (d.extraV2F0.y - _MinYUV) / (_MaxYUV - _MinYUV)); - #endif - half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, distortUvs).r - 0.5) * 0.2 * _DistortAmount; - d.texcoord0.x += distortAmnt; - d.texcoord0.y += distortAmnt; - #endif - - #if TEXTURESCROLL_ON - d.texcoord0.x += (time * _TextureScrollXSpeed) % 1; - d.texcoord0.y += (time * _TextureScrollYSpeed) % 1; - #endif - - #if TRAILWIDTH_ON - half width = pow(SAMPLE_TEXTURE2D(_TrailWidthGradient, sampler_TrailWidthGradient, d.texcoord0).r, _TrailWidthPower); - d.texcoord0.y = (d.texcoord0.y * 2 - 1) / width * 0.5 + 0.5; - clip(d.texcoord0.y); - clip(1 - d.texcoord0.y); - #endif - - float2 shape1Uv = d.texcoord0.xy; - #if SHAPE2_ON - float2 shape2Uv = shape1Uv; - #endif - #if SHAPE3_ON - float2 shape3Uv = shape1Uv; - #endif - - #if CAMDISTFADE_ON || SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half camDistance = distance(d.worldSpacePosition, _WorldSpaceCameraPos); - #endif - - #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON - half2 uvOffsetPostFx = d.texcoord0.xy - originalUvs; - d.texcoord0.xy = d.screenPos.xy / d.screenPos.w; - d.texcoord0.x = d.texcoord0.x * (_ScreenParams.x / _ScreenParams.y); - d.texcoord0.x -= 0.5; - d.texcoord0.xy -= uvOffsetPostFx; - originalUvs += uvOffsetPostFx; - half distanceZoom = camDistance * 0.1; - half2 scaleWithDistUvs = d.texcoord0.xy * distanceZoom + ((-distanceZoom * 0.5) + 0.5); - #if SHAPE1SCREENUV_ON - shape1Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvShDistScale); - #else - shape1Uv = originalUvs; - #endif - #if SHAPE2SCREENUV_ON && SHAPE2_ON - shape2Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh2DistScale); - #else - #if SHAPE2_ON - shape2Uv = originalUvs; - #endif - #endif - #if SHAPE3SCREENUV_ON && SHAPE3_ON - shape3Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh3DistScale); - #else - #if SHAPE3_ON - shape3Uv = originalUvs; - #endif - #endif - #endif - - shape1Uv = TRANSFORM_TEX(shape1Uv, _MainTex); - #if OFFSETSTREAM_ON - shape1Uv.x += i.offsetCustomData.x * _OffsetSh1; - shape1Uv.y += i.offsetCustomData.y * _OffsetSh1; - #endif - #if SHAPETEXOFFSET_ON - shape1Uv += seed * _RandomSh1Mult; - #endif - - #if SHAPE1DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh1DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _ShapeDistortTex); - #else - half2 sh1DistortUvs = d.extraV2F1.xy; - #endif - - sh1DistortUvs.x += ((time + seed) * _ShapeDistortXSpeed) % 1; - sh1DistortUvs.y += ((time + seed) * _ShapeDistortYSpeed) % 1; - half distortAmount = (SAMPLE_TEXTURE2D(_ShapeDistortTex, sampler_ShapeDistortTex, sh1DistortUvs).r - 0.5) * 0.2 * _ShapeDistortAmount; - shape1Uv.x += distortAmount; - shape1Uv.y += distortAmount; - #endif - #if SHAPE1ROTATE_ON - shape1Uv = RotateUvs(shape1Uv, _ShapeRotationOffset + ((_ShapeRotationSpeed * time) % 6.28318530718), _MainTex_ST); - #endif - - half4 shape1 = SampleTextureWithScroll(_MainTex, sampler_MainTex, shape1Uv, _ShapeXSpeed, _ShapeYSpeed, time); - #if SHAPE1SHAPECOLOR_ON - shape1.a = shape1.r; - shape1.rgb = _ShapeColor.rgb; - #else - shape1 *= _ShapeColor; - #endif - #if SHAPE1CONTRAST_ON - #if SHAPE1SHAPECOLOR_ON - shape1.a = saturate((shape1.a - 0.5) * _ShapeContrast + 0.5 + _ShapeBrightness); - #else - shape1.rgb = max(0, (shape1.rgb - half3(0.5, 0.5, 0.5)) * _ShapeContrast + half3(0.5, 0.5, 0.5) + _ShapeBrightness); - #endif - #endif - - half4 shape2 = 1.0; - #if SHAPE2_ON - shape2Uv = TRANSFORM_TEX(shape2Uv, _Shape2Tex); - #if OFFSETSTREAM_ON - shape2Uv.x += i.offsetCustomData.x * _OffsetSh2; - shape2Uv.y += i.offsetCustomData.y * _OffsetSh2; - #endif - #if SHAPETEXOFFSET_ON - shape2Uv += seed * _RandomSh2Mult; - #endif - #if SHAPE2DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh2DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape2DistortTex); - #else - half2 sh2DistortUvs = d.extraV2F2.xy; - #endif - sh2DistortUvs.x += ((time + seed) * _Shape2DistortXSpeed) % 1; - sh2DistortUvs.y += ((time + seed) * _Shape2DistortYSpeed) % 1; - half distortAmnt2 = (SAMPLE_TEXTURE2D(_Shape2DistortTex, sampler_Shape2DistortTex, sh2DistortUvs).r - 0.5) * 0.2 * _Shape2DistortAmount; - shape2Uv.x += distortAmnt2; - shape2Uv.y += distortAmnt2; - #endif - #if SHAPE2ROTATE_ON - shape2Uv = RotateUvs(shape2Uv, _Shape2RotationOffset + ((_Shape2RotationSpeed * time) % 6.28318530718), _Shape2Tex_ST); - #endif - - shape2 = SampleTextureWithScroll(_Shape2Tex, sampler_Shape2Tex, shape2Uv, _Shape2XSpeed, _Shape2YSpeed, time); - #if SHAPE2SHAPECOLOR_ON - shape2.a = shape2.r; - shape2.rgb = _Shape2Color.rgb; - #else - shape2 *= _Shape2Color; - #endif - #if SHAPE2CONTRAST_ON - #if SHAPE2SHAPECOLOR_ON - shape2.a = max(0, (shape2.a - 0.5) * _Shape2Contrast + 0.5 + _Shape2Brightness); - #else - shape2.rgb = max(0, (shape2.rgb - half3(0.5, 0.5, 0.5)) * _Shape2Contrast + half3(0.5, 0.5, 0.5) + _Shape2Brightness); - #endif - #endif - #endif - - half4 shape3 = 1.0; - #if SHAPE3_ON - shape3Uv = TRANSFORM_TEX(shape3Uv, _Shape3Tex); - - #if OFFSETSTREAM_ON - shape3Uv.x += i.offsetCustomData.x * _OffsetSh3; - shape3Uv.y += i.offsetCustomData.y * _OffsetSh3; - #endif - #if SHAPETEXOFFSET_ON - shape3Uv += seed * _RandomSh3Mult; - #endif - #if SHAPE3DISTORT_ON - #if POLARUVDISTORT_ON - half2 sh3DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape3DistortTex); - #else - half2 sh3DistortUvs = d.extraV2F3.xy; - #endif - sh3DistortUvs.x += ((time + seed) * _Shape3DistortXSpeed) % 1; - sh3DistortUvs.y += ((time + seed) * _Shape3DistortYSpeed) % 1; - half distortAmnt3 = (SAMPLE_TEXTURE2D(_Shape3DistortTex, sampler_Shape3DistortTex, sh3DistortUvs).r - 0.5) * 0.3 * _Shape3DistortAmount; - shape3Uv.x += distortAmnt3; - shape3Uv.y += distortAmnt3; - #endif - #if SHAPE3ROTATE_ON - shape3Uv = RotateUvs(shape3Uv, _Shape3RotationOffset + ((_Shape3RotationSpeed * time) % 6.28318530718), _Shape3Tex_ST); - #endif - shape3 = SampleTextureWithScroll(_Shape3Tex, sampler_Shape3Tex, shape3Uv, _Shape3XSpeed, _Shape3YSpeed, time); - #if SHAPE3SHAPECOLOR_ON - shape3.a = shape3.r; - shape3.rgb = _Shape3Color.rgb; - #else - shape3 *= _Shape3Color; - #endif - #if SHAPE3CONTRAST_ON - #if SHAPE3SHAPECOLOR_ON - shape3.a = max(0, (shape3.a - 0.5) * _Shape3Contrast + 0.5 + _Shape3Brightness); - #else - shape3.rgb = max(0, (shape3.rgb - half3(0.5, 0.5, 0.5)) * _Shape3Contrast + half3(0.5, 0.5, 0.5) + _Shape3Brightness); - #endif - #endif - #endif - - half4 col = shape1; - //Mix all shapes pre: change weights if custom vertex effect active - #if SHAPEWEIGHTS_ON - half shapeWeightOffset; - #if SHAPE2_ON - shapeWeightOffset = i.offsetCustomData.z * _Sh1BlendOffset; - _ShapeColorWeight = max(0, _ShapeColorWeight + shapeWeightOffset); - _ShapeAlphaWeight = max(0, _ShapeAlphaWeight + shapeWeightOffset); - shapeWeightOffset = i.offsetCustomData.z * _Sh2BlendOffset; - _Shape2ColorWeight = max(0, _Shape2ColorWeight + shapeWeightOffset); - _Shape2AlphaWeight = max(0, _Shape2AlphaWeight + shapeWeightOffset); - #endif - #if SHAPE3_ON - shapeWeightOffset = i.offsetCustomData.z * _Sh3BlendOffset; - _Shape3ColorWeight = max(0, _Shape3ColorWeight + shapeWeightOffset); - _Shape3AlphaWeight = max(0, _Shape3AlphaWeight + shapeWeightOffset); - #endif - #endif - - //Mix all shapes - #if SHAPE2_ON - #if !SPLITRGBA_ON - _ShapeAlphaWeight = _ShapeColorWeight; - _Shape2AlphaWeight = _Shape2ColorWeight; - #endif - #if SHAPE3_ON //Shape3 On - #if !SPLITRGBA_ON - _Shape3AlphaWeight = _Shape3ColorWeight; - #endif - #if SHAPEADD_ON - col.rgb = ((shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight)) + (shape3.rgb * _Shape3ColorWeight); - col.a = saturate(max(shape3.a * _Shape3AlphaWeight, max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight))); - #else - col.rgb = ((shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight)) * (shape3.rgb * _Shape3ColorWeight); - col.a = saturate(((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)) * (shape3.a * _Shape3AlphaWeight)); - #endif - #else //Shape3 Off - #if SHAPEADD_ON - col.rgb = (shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight); - col.a = saturate(max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight)); - #else - col.rgb = (shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight); - col.a = saturate((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)); - #endif - #endif - #endif - - #if SHAPE1MASK_ON - col = lerp(col, shape1, pow(SAMPLE_TEXTURE2D(_Shape1MaskTex, sampler_Shape1MaskTex, TRANSFORM_TEX(i.uvSeed.xy, _Shape1MaskTex)).r, _Shape1MaskPow)); - #endif - - #if PREMULTIPLYCOLOR_ON - half luminance = 0; - luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; - luminance *= col.a; - col.a = min(luminance, col.a); - #endif - - col.rgb *= _Color.rgb * d.vertexColor.rgb; - #if PREMULTIPLYALPHA_ON - col.rgb *= col.a; - #endif - - #if !PREMULTIPLYCOLOR_ON && (COLORRAMP_ON || ALPHAFADE_ON || COLORGRADING_ON || FADE_ON || (ADDITIVECONFIG_ON && (GLOW_ON || DEPTHGLOW_ON))) - half luminance = 0; - luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; - luminance *= col.a; - #endif - - #if (FADE_ON || ALPHAFADE_ON) && ALPHAFADEINPUTSTREAM_ON - col.a *= d.vertexColor.a; - d.vertexColor.a = d.texcoord0.w; - #endif - - #if FADE_ON - half preFadeAlpha = col.a; - _FadeAmount = saturate(_FadeAmount + (1 - d.vertexColor.a)); - _FadeTransition = max(0.01, _FadeTransition * EaseOutQuint(saturate(_FadeAmount))); - half2 fadeUv; - fadeUv = d.texcoord0.xy + seed; - fadeUv.x += (time * _FadeScrollXSpeed) % 1; - fadeUv.y += (time * _FadeScrollYSpeed) % 1; - half2 tiledUvFade1 = TRANSFORM_TEX(fadeUv, _FadeTex); - #if ADDITIVECONFIG_ON && !PREMULTIPLYCOLOR_ON - preFadeAlpha *= luminance; - #endif - _FadeAmount = saturate(pow(_FadeAmount, _FadePower)); - #if FADEBURN_ON - half2 tiledUvFade2 = TRANSFORM_TEX(fadeUv, _FadeBurnTex); - half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; - half fadeNaturalEdge = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - col.a *= fadeNaturalEdge; - half fadeBurn = saturate(smoothstep(0.0 , _FadeTransition + _FadeBurnWidth, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - fadeBurn = fadeNaturalEdge - fadeBurn; - _FadeBurnColor.rgb *= _FadeBurnGlow; - col.rgb += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2).rgb * _FadeBurnColor.rgb * preFadeAlpha; - #else - half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; - float fade = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); - col.a *= fade; - #endif - #if ALPHAFADETRANSPARENCYTOO_ON - col.a *= 1 - _FadeAmount; - #endif - #endif - - #if ALPHAFADE_ON - half alphaFadeLuminance; - _AlphaFadeAmount = saturate(_AlphaFadeAmount + (1 - d.vertexColor.a)); - _AlphaFadeAmount = saturate(pow(_AlphaFadeAmount, _AlphaFadePow)); - _AlphaFadeSmooth = max(0.01, _AlphaFadeSmooth * EaseOutQuint(saturate(_AlphaFadeAmount))); - #if ALPHAFADEUSESHAPE1_ON - alphaFadeLuminance = shape1.r; - #else - alphaFadeLuminance = luminance; - #endif - alphaFadeLuminance = saturate(alphaFadeLuminance - 0.001); - #if ALPHAFADEUSEREDCHANNEL_ON - col.a *= col.r; - #endif - col.a = saturate(col.a); - float alphaFade = saturate(smoothstep(0.0 , _AlphaFadeSmooth, RemapFloat(1.0 - _AlphaFadeAmount, 0.0, 1.0, -1.0, 1.0) + alphaFadeLuminance)); - col.a *= alphaFade; - #if ALPHAFADETRANSPARENCYTOO_ON - col.a *= 1 - _AlphaFadeAmount; - #endif - #endif - - #if BACKFACETINT_ON - col.rgb = lerp(col.rgb * _BackFaceTint, col.rgb * _FrontFaceTint, step(0, dot(d.worldSpaceNormal, d.worldSpaceViewDir))); - #endif - - //#if LIGHTANDSHADOW_ON - //half NdL = saturate(dot(d.worldSpaceNormal, -_All1VfxLightDir)); - //col.rgb += _LightColor * _LightAmount * NdL; - //NdL = max(_ShadowAmount, NdL); - //NdL = smoothstep(_ShadowStepMin, _ShadowStepMax, NdL); - //col.rgb *= NdL; - //#endif - - #if COLORGRADING_ON - col.rgb *= lerp(lerp(_ColorGradingDark, _ColorGradingMiddle, luminance/_ColorGradingMidPoint), - lerp(_ColorGradingMiddle, _ColorGradingLight, (luminance - _ColorGradingMidPoint)/(1.0 - _ColorGradingMidPoint)), step(_ColorGradingMidPoint, luminance)); - #endif - - #if COLORRAMP_ON - half colorRampLuminance = saturate(luminance + _ColorRampLuminosity); - #if COLORRAMPGRAD_ON - half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(colorRampLuminance, 0)); - #else - half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(colorRampLuminance, 0)); - #endif - col.rgb = lerp(col.rgb, colorRampRes.rgb, _ColorRampBlend); - col.a = lerp(col.a, saturate(col.a * colorRampRes.a), _ColorRampBlend); - #endif - - #if POSTERIZE_ON && !POSTERIZEOUTLINE_ON - col.rgb = floor(col.rgb / (1.0 / _PosterizeNumColors)) * (1.0 / _PosterizeNumColors); - #endif - - #if DEPTHGLOW_ON - half sceneDepthDiff = GetLinearEyeDepth(d.screenUV) - d.screenPos.w; - #endif - - #if RIM_ON - half NdV = 1 - abs(dot(d.worldSpaceNormal, d.worldSpaceViewDir)); - half rimFactor = saturate(_RimBias + _RimScale * pow(NdV, _RimPower)); - half4 rimCol = _RimColor * rimFactor; - rimCol.rgb *= _RimIntensity; - col.rgb = lerp(col.rgb * (rimCol.rgb + half3(1,1,1)), col.rgb + rimCol.rgb, _RimAddAmount); - col.a = saturate(col.a * (1 - rimFactor * _RimErodesAlpha)); - #endif - - #if DEPTHGLOW_ON - half depthGlowMask = saturate(_DepthGlowDist * pow((1 - sceneDepthDiff), _DepthGlowPow)); - col.rgb = lerp(col.rgb, _DepthGlowGlobal * col.rgb, depthGlowMask); - half depthGlowMult = 1; - #if ADDITIVECONFIG_ON - depthGlowMult = luminance; - #endif - col.rgb += _DepthGlowColor.rgb * _DepthGlow * depthGlowMask * col.a * depthGlowMult; - #endif - - #if GLOW_ON - half glowMask = 1; - #if GLOWTEX_ON - glowMask = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, TRANSFORM_TEX(d.texcoord0.xy, _GlowTex)); - #endif - col.rgb *= _GlowGlobal * glowMask; - half glowMult = 1; - #if ADDITIVECONFIG_ON - glowMult = luminance; - #endif - - col.rgb += _GlowColor.rgb * _Glow * glowMask * col.a * glowMult; - #endif - - #if HSV_ON - half3 resultHsv = half3(col.rgb); - half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180); - half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180); - resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x - + (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y - + (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z; - resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x - + (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y - + (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z; - resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x - + (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y - + (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z; - col.rgb = resultHsv; - #endif - - #if CAMDISTFADE_ON - col.a *= 1 - saturate(smoothstep(_CamDistFadeStepMin, _CamDistFadeStepMax, camDistance)); - col.a *= smoothstep(0.0, _CamDistProximityFade, camDistance); - #endif - - #if MASK_ON - half2 maskUv = d.texcoord0.xy; - #if POLARUV_ON - maskUv = prePolarUvs; - #endif - half4 maskSample = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, TRANSFORM_TEX(maskUv, _MaskTex)); - half mask = pow(min(maskSample.r, maskSample.a), _MaskPow); - col.a *= mask; - #endif - - #if ALPHASMOOTHSTEP_ON - col.a = smoothstep(_AlphaStepMin, _AlphaStepMax, col.a); - #endif - - half4 debugColor = col; - #if SHAPEDEBUG_ON - debugColor = GetDebugColor(col, shape1, shape2, shape3); - #endif - - clip(debugColor.a - _AlphaCutoffValue - 0.01); - - //#if FOG_ON - //UNITY_APPLY_FOG(i.fogCoord, col); - //#endif - - //Don't use a starting i.color.a lower than 1 unless using vertex stream dissolve when using a FADE effect - #if !FADE_ON && !ALPHAFADE_ON - col.a *= _Alpha * d.vertexColor.a; - #endif - #if FADE_ON || ALPHAFADE_ON - col.a *= _Alpha; - #endif - #if ADDITIVECONFIG_ON - col.rgb *= col.a; - #endif - - - #if SHAPEDEBUG_ON - o.Albedo = debugColor.rgb; - o.Alpha = debugColor.a; - #else - o.Albedo = col.rgb; - o.Alpha = col.a; - #endif - } - - - - - - void ChainSurfaceFunction(inout Surface l, inout ShaderData d) - { - Ext_SurfaceFunction0(l, d); - // Ext_SurfaceFunction1(l, d); - // Ext_SurfaceFunction2(l, d); - // Ext_SurfaceFunction3(l, d); - // Ext_SurfaceFunction4(l, d); - // Ext_SurfaceFunction5(l, d); - // Ext_SurfaceFunction6(l, d); - // Ext_SurfaceFunction7(l, d); - // Ext_SurfaceFunction8(l, d); - // Ext_SurfaceFunction9(l, d); - // Ext_SurfaceFunction10(l, d); - // Ext_SurfaceFunction11(l, d); - // Ext_SurfaceFunction12(l, d); - // Ext_SurfaceFunction13(l, d); - // Ext_SurfaceFunction14(l, d); - // Ext_SurfaceFunction15(l, d); - // Ext_SurfaceFunction16(l, d); - // Ext_SurfaceFunction17(l, d); - // Ext_SurfaceFunction18(l, d); - // Ext_SurfaceFunction19(l, d); - // Ext_SurfaceFunction20(l, d); - // Ext_SurfaceFunction21(l, d); - // Ext_SurfaceFunction22(l, d); - // Ext_SurfaceFunction23(l, d); - // Ext_SurfaceFunction24(l, d); - // Ext_SurfaceFunction25(l, d); - // Ext_SurfaceFunction26(l, d); - // Ext_SurfaceFunction27(l, d); - // Ext_SurfaceFunction28(l, d); - // Ext_SurfaceFunction29(l, d); - } - -#if !_DECALSHADER - - void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time) - { - ExtraV2F d; - - ZERO_INITIALIZE(ExtraV2F, d); - ZERO_INITIALIZE(Blackboard, d.blackboard); - // due to motion vectors in HDRP, we need to use the last - // time in certain spots. So if you are going to use _Time to adjust vertices, - // you need to use this time or motion vectors will break. - d.time = time; - - Ext_ModifyVertex0(v, d); - // Ext_ModifyVertex1(v, d); - // Ext_ModifyVertex2(v, d); - // Ext_ModifyVertex3(v, d); - // Ext_ModifyVertex4(v, d); - // Ext_ModifyVertex5(v, d); - // Ext_ModifyVertex6(v, d); - // Ext_ModifyVertex7(v, d); - // Ext_ModifyVertex8(v, d); - // Ext_ModifyVertex9(v, d); - // Ext_ModifyVertex10(v, d); - // Ext_ModifyVertex11(v, d); - // Ext_ModifyVertex12(v, d); - // Ext_ModifyVertex13(v, d); - // Ext_ModifyVertex14(v, d); - // Ext_ModifyVertex15(v, d); - // Ext_ModifyVertex16(v, d); - // Ext_ModifyVertex17(v, d); - // Ext_ModifyVertex18(v, d); - // Ext_ModifyVertex19(v, d); - // Ext_ModifyVertex20(v, d); - // Ext_ModifyVertex21(v, d); - // Ext_ModifyVertex22(v, d); - // Ext_ModifyVertex23(v, d); - // Ext_ModifyVertex24(v, d); - // Ext_ModifyVertex25(v, d); - // Ext_ModifyVertex26(v, d); - // Ext_ModifyVertex27(v, d); - // Ext_ModifyVertex28(v, d); - // Ext_ModifyVertex29(v, d); - - - // #if %EXTRAV2F0REQUIREKEY% - v2p.extraV2F0 = d.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - v2p.extraV2F1 = d.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - v2p.extraV2F2 = d.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - v2p.extraV2F3 = d.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // v2p.extraV2F4 = d.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // v2p.extraV2F5 = d.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // v2p.extraV2F6 = d.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // v2p.extraV2F7 = d.extraV2F7; - // #endif - } - - void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p) - { - ExtraV2F d; - ZERO_INITIALIZE(ExtraV2F, d); - ZERO_INITIALIZE(Blackboard, d.blackboard); - - // #if %EXTRAV2F0REQUIREKEY% - d.extraV2F0 = v2p.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - d.extraV2F1 = v2p.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - d.extraV2F2 = v2p.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - d.extraV2F3 = v2p.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // d.extraV2F4 = v2p.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // d.extraV2F5 = v2p.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // d.extraV2F6 = v2p.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // d.extraV2F7 = v2p.extraV2F7; - // #endif - - - // Ext_ModifyTessellatedVertex0(v, d); - // Ext_ModifyTessellatedVertex1(v, d); - // Ext_ModifyTessellatedVertex2(v, d); - // Ext_ModifyTessellatedVertex3(v, d); - // Ext_ModifyTessellatedVertex4(v, d); - // Ext_ModifyTessellatedVertex5(v, d); - // Ext_ModifyTessellatedVertex6(v, d); - // Ext_ModifyTessellatedVertex7(v, d); - // Ext_ModifyTessellatedVertex8(v, d); - // Ext_ModifyTessellatedVertex9(v, d); - // Ext_ModifyTessellatedVertex10(v, d); - // Ext_ModifyTessellatedVertex11(v, d); - // Ext_ModifyTessellatedVertex12(v, d); - // Ext_ModifyTessellatedVertex13(v, d); - // Ext_ModifyTessellatedVertex14(v, d); - // Ext_ModifyTessellatedVertex15(v, d); - // Ext_ModifyTessellatedVertex16(v, d); - // Ext_ModifyTessellatedVertex17(v, d); - // Ext_ModifyTessellatedVertex18(v, d); - // Ext_ModifyTessellatedVertex19(v, d); - // Ext_ModifyTessellatedVertex20(v, d); - // Ext_ModifyTessellatedVertex21(v, d); - // Ext_ModifyTessellatedVertex22(v, d); - // Ext_ModifyTessellatedVertex23(v, d); - // Ext_ModifyTessellatedVertex24(v, d); - // Ext_ModifyTessellatedVertex25(v, d); - // Ext_ModifyTessellatedVertex26(v, d); - // Ext_ModifyTessellatedVertex27(v, d); - // Ext_ModifyTessellatedVertex28(v, d); - // Ext_ModifyTessellatedVertex29(v, d); - - // #if %EXTRAV2F0REQUIREKEY% - v2p.extraV2F0 = d.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - v2p.extraV2F1 = d.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - v2p.extraV2F2 = d.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - v2p.extraV2F3 = d.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // v2p.extraV2F4 = d.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // v2p.extraV2F5 = d.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // v2p.extraV2F6 = d.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // v2p.extraV2F7 = d.extraV2F7; - // #endif - } - - void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color) - { - // Ext_FinalColorForward0(l, d, color); - // Ext_FinalColorForward1(l, d, color); - // Ext_FinalColorForward2(l, d, color); - // Ext_FinalColorForward3(l, d, color); - // Ext_FinalColorForward4(l, d, color); - // Ext_FinalColorForward5(l, d, color); - // Ext_FinalColorForward6(l, d, color); - // Ext_FinalColorForward7(l, d, color); - // Ext_FinalColorForward8(l, d, color); - // Ext_FinalColorForward9(l, d, color); - // Ext_FinalColorForward10(l, d, color); - // Ext_FinalColorForward11(l, d, color); - // Ext_FinalColorForward12(l, d, color); - // Ext_FinalColorForward13(l, d, color); - // Ext_FinalColorForward14(l, d, color); - // Ext_FinalColorForward15(l, d, color); - // Ext_FinalColorForward16(l, d, color); - // Ext_FinalColorForward17(l, d, color); - // Ext_FinalColorForward18(l, d, color); - // Ext_FinalColorForward19(l, d, color); - // Ext_FinalColorForward20(l, d, color); - // Ext_FinalColorForward21(l, d, color); - // Ext_FinalColorForward22(l, d, color); - // Ext_FinalColorForward23(l, d, color); - // Ext_FinalColorForward24(l, d, color); - // Ext_FinalColorForward25(l, d, color); - // Ext_FinalColorForward26(l, d, color); - // Ext_FinalColorForward27(l, d, color); - // Ext_FinalColorForward28(l, d, color); - // Ext_FinalColorForward29(l, d, color); - } - - void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask) - { - // Ext_FinalGBufferStandard0(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard1(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard2(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard3(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard4(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard5(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard6(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard7(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard8(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard9(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard10(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard11(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard12(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard13(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard14(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard15(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard16(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard17(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard18(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard19(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard20(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard21(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard22(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard23(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard24(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard25(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard26(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard27(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard28(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - // Ext_FinalGBufferStandard29(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); - } -#endif - - - - - -#if _DECALSHADER - - ShaderData CreateShaderData(SurfaceDescriptionInputs IN) - { - ShaderData d = (ShaderData)0; - d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal); - d.worldSpaceNormal = IN.WorldSpaceNormal; - d.worldSpaceTangent = IN.WorldSpaceTangent; - - d.worldSpacePosition = IN.WorldSpacePosition; - d.texcoord0 = IN.uv0.xyxy; - d.screenPos = IN.ScreenPosition; - - d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition); - - d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); - - // these rarely get used, so we back transform them. Usually will be stripped. - #if _HDRP - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(d.worldSpacePosition), 1)).xyz; - #else - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(d.worldSpacePosition, 1)).xyz; - #endif - // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceNormal)); - // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceTangent.xyz)); - - // #if %SCREENPOSREQUIREKEY% - d.screenUV = (IN.ScreenPosition.xy / max(0.01, IN.ScreenPosition.w)); - // #endif - - return d; - } -#else - - ShaderData CreateShaderData(VertexToPixel i - #if NEED_FACING - , bool facing - #endif - ) - { - ShaderData d = (ShaderData)0; - d.clipPos = i.pos; - d.worldSpacePosition = i.worldPos; - - d.worldSpaceNormal = normalize(i.worldNormal); - d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz); - - d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w; - float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign; - - d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal); - d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos); - - d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); - d.texcoord0 = i.texcoord0; - // d.texcoord1 = i.texcoord1; - // d.texcoord2 = i.texcoord2; - - // #if %TEXCOORD3REQUIREKEY% - // d.texcoord3 = i.texcoord3; - // #endif - - // d.isFrontFace = facing; - // #if %VERTEXCOLORREQUIREKEY% - d.vertexColor = i.vertexColor; - // #endif - - // these rarely get used, so we back transform them. Usually will be stripped. - #if _HDRP - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(i.worldPos), 1)).xyz; - #else - // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(i.worldPos, 1)).xyz; - #endif - // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldNormal)); - // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldTangent.xyz)); - - // #if %SCREENPOSREQUIREKEY% - d.screenPos = i.screenPos; - d.screenUV = (i.screenPos.xy / i.screenPos.w); - // #endif - - - // #if %EXTRAV2F0REQUIREKEY% - d.extraV2F0 = i.extraV2F0; - // #endif - - // #if %EXTRAV2F1REQUIREKEY% - d.extraV2F1 = i.extraV2F1; - // #endif - - // #if %EXTRAV2F2REQUIREKEY% - d.extraV2F2 = i.extraV2F2; - // #endif - - // #if %EXTRAV2F3REQUIREKEY% - d.extraV2F3 = i.extraV2F3; - // #endif - - // #if %EXTRAV2F4REQUIREKEY% - // d.extraV2F4 = i.extraV2F4; - // #endif - - // #if %EXTRAV2F5REQUIREKEY% - // d.extraV2F5 = i.extraV2F5; - // #endif - - // #if %EXTRAV2F6REQUIREKEY% - // d.extraV2F6 = i.extraV2F6; - // #endif - - // #if %EXTRAV2F7REQUIREKEY% - // d.extraV2F7 = i.extraV2F7; - // #endif - - return d; - } - -#endif - - // vertex shader - VertexToPixel Vert (VertexData v) - { - UNITY_SETUP_INSTANCE_ID(v); - VertexToPixel o; - UNITY_INITIALIZE_OUTPUT(VertexToPixel,o); - UNITY_TRANSFER_INSTANCE_ID(v,o); - UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); - -#if !_TESSELLATION_ON - ChainModifyVertex(v, o, _Time); -#endif - - - o.pos = UnityMetaVertexPosition(v.vertex, v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); - #ifdef EDITOR_VISUALIZATION - o.vizUV = 0; - o.lightCoord = 0; - if (unity_VisualizationMode == EDITORVIZ_TEXTURE) - o.vizUV = UnityMetaVizUV(unity_EditorViz_UVIndex, v.texcoord0.xy, v.texcoord1.xy, v.texcoord2.xy, unity_EditorViz_Texture_ST); - else if (unity_VisualizationMode == EDITORVIZ_SHOWLIGHTMASK) - { - o.vizUV = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; - o.lightCoord = mul(unity_EditorViz_WorldToLight, mul(GetObjectToWorldMatrix(), float4(v.vertex.xyz, 1))); - } - #endif - - - o.texcoord0 = v.texcoord0; - // o.texcoord1 = v.texcoord1; - // o.texcoord2 = v.texcoord2; - - // #if %TEXCOORD3REQUIREKEY% - // o.texcoord3 = v.texcoord3; - // #endif - - // #if %VERTEXCOLORREQUIREKEY% - o.vertexColor = v.vertexColor; - // #endif - - // #if %SCREENPOSREQUIREKEY% - o.screenPos = ComputeScreenPos(o.pos); - // #endif - - o.worldPos = mul(GetObjectToWorldMatrix(), v.vertex).xyz; - o.worldNormal = UnityObjectToWorldNormal(v.normal); - o.worldTangent = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w); - - return o; - } - - - - // fragment shader - fixed4 Frag (VertexToPixel IN - #if NEED_FACING - , bool facing : SV_IsFrontFace - #endif - ) : SV_Target - { - UNITY_SETUP_INSTANCE_ID(IN); - - #ifdef FOG_COMBINED_WITH_TSPACE - UNITY_EXTRACT_FOG_FROM_TSPACE(IN); - #elif defined (FOG_COMBINED_WITH_WORLD_POS) - UNITY_EXTRACT_FOG_FROM_WORLD_POS(IN); - #else - UNITY_EXTRACT_FOG(IN); - #endif - - ShaderData d = CreateShaderData(IN - #if NEED_FACING - , facing - #endif - ); - - Surface l = (Surface)0; - - l.Albedo = half3(0.5, 0.5, 0.5); - l.Normal = float3(0,0,1); - l.Occlusion = 1; - l.Alpha = 1; - - - ChainSurfaceFunction(l, d); - - UnityMetaInput metaIN; - UNITY_INITIALIZE_OUTPUT(UnityMetaInput, metaIN); - metaIN.Albedo = l.Albedo; - metaIN.Emission = l.Emission; - #if _USESPECULAR - metaIN.SpecularColor = l.Specular; + #if _PASSFORWARD || _PASSGBUFFER + float2 uv1 = v.texcoord1.xy; + OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV); + // o.texcoord1.xy = uv1; + #if UNITY_VERSION < 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + + #if defined(DYNAMICLIGHTMAP_ON) + o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #if UNITY_VERSION >= 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + #elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009 + OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion); + #endif + #endif + + #ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + half fogFactor = 0; + #if defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(o.pos.z); + #endif + #if _BAKEDLIT + o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0); + #else + half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal); + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + #endif + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + o.shadowCoord = GetShadowCoord(vertexInput); + #endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + #if !defined(TESSELLATION_ON) + MotionVectorPositionZBias(o); #endif - #ifdef EDITOR_VISUALIZATION - metaIN.VizUV = IN.vizUV; - metaIN.LightCoord = IN.lightCoord; - #endif - return UnityMetaFragment(metaIN); + o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0); + // Note: unity_MotionVectorsParams.y is 0 is forceNoMotion is enabled + bool forceNoMotion = unity_MotionVectorsParams.y == 0.0; + + if (!forceNoMotion) + { + #if defined(HAVE_VFX_MODIFICATION) + float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS; + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + const bool applyDeformation = false; + #else + const bool applyDeformation = true; + #endif + #else + const bool hasDeformation = unity_MotionVectorsParams.x == 1; // Mesh has skinned deformation + float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz; + + #if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT) + const bool applyDeformation = true; + #else + const bool applyDeformation = hasDeformation; + #endif + #endif + // TODO + #if defined(FEATURES_GRAPH_VERTEX) + if (applyDeformation) + previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS); + else + previousPositionOS = previousMesh.positionOS; + + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + #endif + + #if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED) + // Deformed vertices in DOTS are not cumulative with built-in Unity skinning/blend shapes + // Needs to be called after vertex modification has been applied otherwise it will be + // overwritten by Compute Deform node + ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS); + #endif + #if defined (_ADD_PRECOMPUTED_VELOCITY) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f)); + + #if defined(HAVE_VFX_MODIFICATION) + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY) + #error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards. + #endif + o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS); + #else + #if VFX_WORLD_SPACE + //previousPositionOS is already in world space + const float3 previousPositionWS = previousPositionOS; + #else + const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz; + #endif + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f)); + #endif + #else + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1))); + #endif + } + #endif + + return o; } - ENDCG + + + + + // fragment shader + half4 Frag (VertexToPixel IN + #ifdef _DEPTHOFFSET_ON + , out float outputDepth : SV_Depth + #endif + #if NEED_FACING + , bool facing : SV_IsFrontFace + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + + #if defined(LOD_FADE_CROSSFADE) + LODFadeCrossFade(IN.pos); + #endif + + ShaderData d = CreateShaderData(IN + #if NEED_FACING + , facing + #endif + ); + Surface l = (Surface)0; + + #ifdef _DEPTHOFFSET_ON + l.outputDepth = outputDepth; + #endif + + l.Albedo = half3(0.5, 0.5, 0.5); + l.Normal = float3(0,0,1); + l.Occlusion = 1; + l.Alpha = 1; + + ChainSurfaceFunction(l, d); + + #ifdef _DEPTHOFFSET_ON + outputDepth = l.outputDepth; + #endif + + return 0; + + } + + ENDHLSL } + + + Pass + { + Name "DepthOnly" + Tags + { + "LightMode" = "DepthOnly" + } + + // Render State + Blend One Zero, One Zero + Cull Back + ZTest LEqual + ZWrite On + ColorMask 0 + + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" + } + Cull [_CullingOption] + ZWrite [_ZWrite] + ZTest [_ZTestMode] + ColorMask [_ColorMask] +Lighting Off + + + HLSLPROGRAM + + #pragma vertex Vert + #pragma fragment Frag + + + #define _PASSDEPTH 1 + + #pragma target 3.0 + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + #pragma multi_compile_instancing + + + #pragma shader_feature_local TIMEISCUSTOM_ON + #pragma shader_feature_local ADDITIVECONFIG_ON + #pragma shader_feature_local PREMULTIPLYALPHA_ON + #pragma shader_feature_local PREMULTIPLYCOLOR_ON + #pragma shader_feature_local SPLITRGBA_ON + #pragma shader_feature_local SHAPEADD_ON + + #pragma shader_feature_local SHAPE1SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE2SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE3SCREENUV_ON /////////////////Pipeline specific implementation + + #pragma shader_feature_local SHAPEDEBUG_ON + + #pragma shader_feature_local SHAPE1CONTRAST_ON + #pragma shader_feature_local SHAPE1DISTORT_ON + #pragma shader_feature_local SHAPE1ROTATE_ON + #pragma shader_feature_local SHAPE1SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE2_ON + #pragma shader_feature_local SHAPE2CONTRAST_ON + #pragma shader_feature_local SHAPE2DISTORT_ON + #pragma shader_feature_local SHAPE2ROTATE_ON + #pragma shader_feature_local SHAPE2SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE3_ON + #pragma shader_feature_local SHAPE3CONTRAST_ON + #pragma shader_feature_local SHAPE3DISTORT_ON + #pragma shader_feature_local SHAPE3ROTATE_ON + #pragma shader_feature_local SHAPE3SHAPECOLOR_ON + + #pragma shader_feature_local GLOW_ON + #pragma shader_feature_local GLOWTEX_ON + #pragma shader_feature_local DEPTHGLOW_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local MASK_ON + #pragma shader_feature_local COLORRAMP_ON + #pragma shader_feature_local COLORRAMPGRAD_ON + #pragma shader_feature_local COLORGRADING_ON + #pragma shader_feature_local HSV_ON + #pragma shader_feature_local POSTERIZE_ON + #pragma shader_feature_local PIXELATE_ON + #pragma shader_feature_local DISTORT_ON + #pragma shader_feature_local SHAKEUV_ON + #pragma shader_feature_local WAVEUV_ON + #pragma shader_feature_local ROUNDWAVEUV_ON + #pragma shader_feature_local TWISTUV_ON + #pragma shader_feature_local DOODLE_ON + #pragma shader_feature_local OFFSETSTREAM_ON + #pragma shader_feature_local TEXTURESCROLL_ON + #pragma shader_feature_local VERTOFFSET_ON + #pragma shader_feature_local RIM_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local BACKFACETINT_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local POLARUV_ON + #pragma shader_feature_local POLARUVDISTORT_ON + #pragma shader_feature_local SHAPE1MASK_ON + #pragma shader_feature_local TRAILWIDTH_ON + #pragma shader_feature_local LIGHTANDSHADOW_ON + #pragma shader_feature_local SHAPETEXOFFSET_ON + #pragma shader_feature_local SHAPEWEIGHTS_ON + + #pragma shader_feature_local ALPHACUTOFF_ON + #pragma shader_feature_local ALPHASMOOTHSTEP_ON + #pragma shader_feature_local FADE_ON + #pragma shader_feature_local FADEBURN_ON + #pragma shader_feature_local ALPHAFADE_ON + #pragma shader_feature_local ALPHAFADEUSESHAPE1_ON + #pragma shader_feature_local ALPHAFADEUSEREDCHANNEL_ON + #pragma shader_feature_local ALPHAFADETRANSPARENCYTOO_ON + #pragma shader_feature_local ALPHAFADEINPUTSTREAM_ON + #pragma shader_feature_local CAMDISTFADE_ON + + #pragma shader_feature NORMALMAP_ON + + + #define _URP 1 +#define REQUIRE_DEPTH_TEXTURE + + // Includes + //#include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + //#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + + #undef WorldNormalVector + #define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix) + + #define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal) + + #define _WorldSpaceLightPos0 _MainLightPosition + + #define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name); + #define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name); + + #define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z) + #define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod) + #define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord) + #define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord) + + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod) + + #if defined(UNITY_COMPILER_HLSL) + #define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0; + #else + #define UNITY_INITIALIZE_OUTPUT(type,name) + #endif + + #define sampler2D_float sampler2D + #define sampler2D_half sampler2D + + + + // data across stages, stripped like the above. + struct VertexToPixel + { + float4 pos : SV_POSITION; + float3 worldPos : TEXCOORD0; + float3 worldNormal : TEXCOORD1; + float4 worldTangent : TEXCOORD2; + float4 texcoord0 : TEXCOORD3; + // float4 texcoord1 : TEXCOORD4; + // float4 texcoord2 : TEXCOORD5; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD6; + // #endif + + // #if %SCREENPOSREQUIREKEY% + float4 screenPos : TEXCOORD7; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + half4 vertexColor : COLOR; + // #endif + + #if defined(LIGHTMAP_ON) + float2 lightmapUV : TEXCOORD8; + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float2 dynamicLightmapUV : TEXCOORD9; + #endif + #if !defined(LIGHTMAP_ON) + float4 probeOcclusion : TEXCOORD8; + float3 sh : TEXCOORD10; + #endif + + #if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT) + float4 fogFactorAndVertexLight : TEXCOORD11; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD12; + #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD13; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD14; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD15; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD16; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD17; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD18; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD19; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD20; + // #endif + + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : CUSTOM_INSTANCE_ID; + #endif + #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) + uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; + #endif + #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) + uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; + #endif + #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; + #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float4 previousPositionCS : TEXCOORD21; // Contain previous transform position (in case of skinning for example) + float4 positionCS : TEXCOORD22; + #endif + }; + + + + + // data describing the user output of a pixel + struct Surface + { + half3 Albedo; + half Height; + half3 Normal; + half Smoothness; + half3 Emission; + half Metallic; + half3 Specular; + half Occlusion; + half SpecularPower; // for simple lighting + half Alpha; + float outputDepth; // if written, SV_Depth semantic is used. ShaderData.clipPos.z is unused value + // HDRP Only + half SpecularOcclusion; + half SubsurfaceMask; + half Thickness; + half CoatMask; + half CoatSmoothness; + half Anisotropy; + half IridescenceMask; + half IridescenceThickness; + int DiffusionProfileHash; + float SpecularAAThreshold; + float SpecularAAScreenSpaceVariance; + // requires _OVERRIDE_BAKEDGI to be defined, but is mapped in all pipelines + float3 DiffuseGI; + float3 BackDiffuseGI; + float3 SpecularGI; + float ior; + float3 transmittanceColor; + float atDistance; + float transmittanceMask; + // requires _OVERRIDE_SHADOWMASK to be defines + float4 ShadowMask; + + // for decals + float NormalAlpha; + float MAOSAlpha; + + + }; + + // Data the user declares in blackboard blocks + struct Blackboard + { + + float blackboardDummyData; + }; + + // data the user might need, this will grow to be big. But easy to strip + struct ShaderData + { + float4 clipPos; // SV_POSITION + float3 localSpacePosition; + float3 localSpaceNormal; + float3 localSpaceTangent; + + float3 worldSpacePosition; + float3 worldSpaceNormal; + float3 worldSpaceTangent; + float tangentSign; + + float3 worldSpaceViewDir; + float3 tangentSpaceViewDir; + + float4 texcoord0; + float4 texcoord1; + float4 texcoord2; + float4 texcoord3; + + float2 screenUV; + float4 screenPos; + + float4 vertexColor; + bool isFrontFace; + + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + + float3x3 TBNMatrix; + Blackboard blackboard; + }; + + struct VertexData + { + #if SHADER_TARGET > 30 + // uint vertexID : SV_VertexID; + #endif + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + + // optimize out mesh coords when not in use by user or lighting system + #if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER) + float4 texcoord1 : TEXCOORD1; + #endif + + #if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + #if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON))) + float4 texcoord1 : TEXCOORD1; + #endif + #if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + + #if _HDRP + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + #endif + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD4; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD5; // Add Precomputed Velocity (Alembic computes velocities on runtime side). + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessVertex + { + float4 vertex : INTERNALTESSPOS; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD5; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD6; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD7; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD8; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD9; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD10; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD11; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD12; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD13; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD14; + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + struct ExtraV2F + { + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + Blackboard blackboard; + float4 time; + }; + + + float3 WorldToTangentSpace(ShaderData d, float3 normal) + { + return mul(d.TBNMatrix, normal); + } + + float3 TangentToWorldSpace(ShaderData d, float3 normal) + { + return mul(normal, d.TBNMatrix); + } + + // in this case, make standard more like SRPs, because we can't fix + // unity_WorldToObject in HDRP, since it already does macro-fu there + + #if _STANDARD + float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); }; + float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); }; + float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); }; + float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); }; + float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; } + float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; } + #if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER)) + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod) + #else + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) + #endif + + #undef GetWorldToObjectMatrix() + + #define GetWorldToObjectMatrix() unity_WorldToObject + + + #endif + + float3 GetCameraWorldPosition() + { + #if _HDRP + return GetCameraRelativePositionWS(_WorldSpaceCameraPos); + #else + return _WorldSpaceCameraPos; + #endif + } + + #if _GRABPASSUSED + #if _STANDARD + TEXTURE2D(%GRABTEXTURE%); + SAMPLER(sampler_%GRABTEXTURE%); + #endif + + half3 GetSceneColor(float2 uv) + { + #if _STANDARD + return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb; + #else + return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv); + #endif + } + #endif + + + + #if _STANDARD + UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); + float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); } + #else + float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); } + #endif + + float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) + { + float eye = GetLinearEyeDepth(uv); + float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz); + + float dt = dot(worldSpaceViewDir, camView); + float3 div = worldSpaceViewDir/dt; + float3 wpos = (eye * div) + GetCameraWorldPosition(); + return wpos; + } + + #if _HDRP + float3 ObjectToWorldSpacePosition(float3 pos) + { + return GetAbsolutePositionWS(TransformObjectToWorld(pos)); + } + #else + float3 ObjectToWorldSpacePosition(float3 pos) + { + return TransformObjectToWorld(pos); + } + #endif + + #if _STANDARD + UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture); + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); + float3 norms = DecodeViewNormalStereo(depthNorms); + norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5; + return norms; + } + #elif _HDRP && !_DECALSHADER + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + NormalData nd; + DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd); + return nd.normalWS; + } + #elif _URP + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" + #endif + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + return SampleSceneNormals(uv); + #else + float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir); + return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5; + #endif + + } + #endif + + #if _HDRP + + half3 UnpackNormalmapRGorAG(half4 packednormal) + { + // This do the trick + packednormal.x *= packednormal.w; + + half3 normal; + normal.xy = packednormal.xy * 2 - 1; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 UnpackNormal(half4 packednormal) + { + #if defined(UNITY_NO_DXT5nm) + return packednormal.xyz * 2 - 1; + #else + return UnpackNormalmapRGorAG(packednormal); + #endif + } + #endif + #if _HDRP || _URP + + half3 UnpackScaleNormal(half4 packednormal, half scale) + { + #ifndef UNITY_NO_DXT5nm + // Unpack normal as DXT5nm (1, y, 1, x) or BC5 (x, y, 0, 1) + // Note neutral texture like "bump" is (0, 0, 1, 1) to work with both plain RGB normal and DXT5nm/BC5 + packednormal.x *= packednormal.w; + #endif + half3 normal; + normal.xy = (packednormal.xy * 2 - 1) * scale; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + + #endif + + + void GetSun(out float3 lightDir, out float3 color) + { + lightDir = float3(0.5, 0.5, 0); + color = 1; + #if _HDRP + if (_DirectionalLightCount > 0) + { + DirectionalLightData light = _DirectionalLightDatas[0]; + lightDir = -light.forward.xyz; + color = light.color; + } + #elif _STANDARD + lightDir = normalize(_WorldSpaceLightPos0.xyz); + color = _LightColor0.rgb; + #elif _URP + Light light = GetMainLight(); + lightDir = light.direction; + color = light.color; + #endif + } + + + + CBUFFER_START(UnityPerMaterial) + + + half4 _Color; + half _Alpha; + half _AlphaCutoffValue; + + half _TimingSeed; + + #if TIMEISCUSTOM_ON + float4 globalCustomTime; + #endif + + half4 _MainTex_ST, _ShapeColor; + half _ShapeXSpeed, _ShapeYSpeed, _ShapeColorWeight, _ShapeAlphaWeight; + + #if SHAPE1CONTRAST_ON + half _ShapeContrast, _ShapeBrightness; + #endif + + #if SHAPE1DISTORT_ON + half4 _ShapeDistortTex_ST; + half _ShapeDistortAmount, _ShapeDistortXSpeed, _ShapeDistortYSpeed; + #endif + + #if SHAPE1ROTATE_ON + half _ShapeRotationOffset, _ShapeRotationSpeed; + #endif + + #if OFFSETSTREAM_ON + half _OffsetSh1; + #endif + + #if SHAPEWEIGHTS_ON + half _Sh1BlendOffset; + #endif + + #if SHAPE2_ON + half4 _Shape2Tex_ST, _Shape2Color; + half _Shape2XSpeed, _Shape2YSpeed, _Shape2ColorWeight, _Shape2AlphaWeight; + #if SHAPE2CONTRAST_ON + half _Shape2Contrast, _Shape2Brightness; + #endif + #if SHAPE2DISTORT_ON + half4 _Shape2DistortTex_ST; + half _Shape2DistortAmount, _Shape2DistortXSpeed, _Shape2DistortYSpeed; + #endif + #if SHAPE2ROTATE_ON + half _Shape2RotationOffset, _Shape2RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh2; + #endif + #if SHAPEWEIGHTS_ON + half _Sh2BlendOffset; + #endif + #endif + + #if SHAPE3_ON + half4 _Shape3Tex_ST, _Shape3Color; + half _Shape3XSpeed, _Shape3YSpeed, _Shape3ColorWeight, _Shape3AlphaWeight; + #if SHAPE3CONTRAST_ON + half _Shape3Contrast, _Shape3Brightness; + #endif + #if SHAPE3DISTORT_ON + half4 _Shape3DistortTex_ST; + half _Shape3DistortAmount, _Shape3DistortXSpeed, _Shape3DistortYSpeed; + #endif + #if SHAPE3ROTATE_ON + half _Shape3RotationOffset, _Shape3RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh3; + #endif + #if SHAPEWEIGHTS_ON + half _Sh3BlendOffset; + #endif + #endif + + #if GLOW_ON + half4 _GlowColor; + half _Glow, _GlowGlobal; + #if GLOWTEX_ON + half4 _GlowTex_ST; + #endif + #endif + + #if MASK_ON + half4 _MaskTex_ST; + half _MaskPow; + #endif + + #if COLORRAMP_ON + half _ColorRampLuminosity, _ColorRampBlend; + #endif + + #if ALPHASMOOTHSTEP_ON + half _AlphaStepMin, _AlphaStepMax; + #endif + + #if ALPHAFADE_ON + half _AlphaFadeAmount, _AlphaFadeSmooth, _AlphaFadePow; + #endif + + #if HSV_ON + half _HsvShift, _HsvSaturation, _HsvBright; + #endif + + #if POSTERIZE_ON + half _PosterizeNumColors; + #endif + + #if PIXELATE_ON + half _PixelateSize; + #endif + + #if DISTORT_ON + half4 _DistortTex_ST; + half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount; + #endif + + #if TEXTURESCROLL_ON + half _TextureScrollXSpeed, _TextureScrollYSpeed; + #endif + + #if SHAKEUV_ON + half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY; + #endif + + #if WAVEUV_ON + half _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY; + #endif + + #if ROUNDWAVEUV_ON + half _RoundWaveStrength, _RoundWaveSpeed; + #endif + + #if TWISTUV_ON + half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius; + #endif + + #if DOODLE_ON + half _HandDrawnAmount, _HandDrawnSpeed; + #endif + + #if ROUNDWAVEUV_ON || PIXELATE_ON + half4 _MainTex_TexelSize; + #endif + + #if VERTOFFSET_ON + half4 _VertOffsetTex_ST; + half _VertOffsetAmount, _VertOffsetPower, _VertOffsetTexXSpeed, _VertOffsetTexYSpeed; + #endif + + #if FADE_ON + half4 _FadeTex_ST; + half _FadeAmount, _FadeTransition, _FadePower, _FadeScrollXSpeed, _FadeScrollYSpeed; + #if FADEBURN_ON + half4 _FadeBurnColor, _FadeBurnTex_ST; + half _FadeBurnWidth, _FadeBurnGlow; + #endif + #endif + + #if COLORGRADING_ON + half3 _ColorGradingLight, _ColorGradingMiddle, _ColorGradingDark; + half _ColorGradingMidPoint; + #endif + + #if CAMDISTFADE_ON + half _CamDistFadeStepMin, _CamDistFadeStepMax, _CamDistProximityFade; + #endif + + #if RIM_ON + half _RimBias, _RimScale, _RimPower, _RimIntensity, _RimAddAmount, _RimErodesAlpha; + half4 _RimColor; + #endif + + #if BACKFACETINT_ON + half4 _BackFaceTint, _FrontFaceTint; + #endif + + #if SHAPEDEBUG_ON + half _DebugShape; + #endif + + #if SHAPE1MASK_ON + half4 _Shape1MaskTex_ST; + half _Shape1MaskPow; + #endif + + #if TRAILWIDTH_ON + half _TrailWidthPower; + #endif + + #if LIGHTANDSHADOW_ON + half3 _All1VfxLightDir; + half _ShadowAmount, _ShadowStepMin, _ShadowStepMax, _LightAmount; + half4 _LightColor; + #endif + + #if SHAPETEXOFFSET_ON + half _RandomSh1Mult, _RandomSh2Mult, _RandomSh3Mult; + #endif + + #if DEPTHGLOW_ON + half _DepthGlowDist, _DepthGlowPow, _DepthGlow, _DepthGlowGlobal; + half4 _DepthGlowColor; + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half _ScreenUvShDistScale,_ScreenUvSh2DistScale, _ScreenUvSh3DistScale; + #endif + + #if NORMALMAP_ON + half _NormalStrength; + #endif + + + + + CBUFFER_END + + + + + + + + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + + #if SHAPE1DISTORT_ON + TEXTURE2D(_ShapeDistortTex); + SAMPLER(sampler_ShapeDistortTex); + #endif + + #if SHAPE2_ON + TEXTURE2D(_Shape2Tex); + SAMPLER(sampler_Shape2Tex); + #if SHAPE2DISTORT_ON + TEXTURE2D(_Shape2DistortTex); + SAMPLER(sampler_Shape2DistortTex); + #endif + #endif + + #if SHAPE3_ON + TEXTURE2D(_Shape3Tex); + SAMPLER(sampler_Shape3Tex); + #if SHAPE3DISTORT_ON + TEXTURE2D(_Shape3DistortTex); + SAMPLER(sampler_Shape3DistortTex); + #endif + #endif + + #if GLOW_ON + #if GLOWTEX_ON + TEXTURE2D(_GlowTex); + SAMPLER(sampler_GlowTex); + #endif + #endif + + #if MASK_ON + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); + #endif + + #if COLORRAMP_ON + TEXTURE2D(_ColorRampTex); + SAMPLER(sampler_ColorRampTex); + #endif + + #if COLORRAMPGRAD_ON + TEXTURE2D(_ColorRampTexGradient); + SAMPLER(sampler_ColorRampTexGradient); + #endif + + #if DISTORT_ON + TEXTURE2D(_DistortTex); + SAMPLER(sampler_DistortTex); + #endif + + #if VERTOFFSET_ON + TEXTURE2D(_VertOffsetTex); + SAMPLER(sampler_VertOffsetTex); + #endif + + #if FADE_ON + TEXTURE2D(_FadeTex); + SAMPLER(sampler_FadeTex); + #if FADEBURN_ON + TEXTURE2D(_FadeBurnTex); + SAMPLER(sampler_FadeBurnTex); + #endif + #endif + + #if SHAPE1MASK_ON + TEXTURE2D(_Shape1MaskTex); + SAMPLER(sampler_Shape1MaskTex); + #endif + + #if TRAILWIDTH_ON + TEXTURE2D(_TrailWidthGradient); + SAMPLER(sampler_TrailWidthGradient); + #endif + + #if NORMALMAP_ON + TEXTURE2D(_NormalMap); + SAMPLER(sampler_NormalMap); + #endif + + half4 SampleTextureWithScroll(in Texture2D _tex, in SamplerState _sampler, in float2 uv, in half scrollXSpeed, in half scrollYSpeed, in float time) + { + half2 _uv = uv; + _uv.x += (time * scrollXSpeed) % 1; + _uv.y += (time * scrollYSpeed) % 1; + return SAMPLE_TEXTURE2D(_tex, _sampler, _uv); + } + + half EaseOutQuint(half x) + { + return 1 - pow(1 - x, 5); + } + + half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax) + { + return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin); + } + + float2 RotateUvs(float2 uv, half rotation, half4 scaleAndTranslate) + { + half2 center = half2(0.5 * scaleAndTranslate.x + scaleAndTranslate.z, 0.5 * scaleAndTranslate.y + scaleAndTranslate.w); + half cosAngle = cos(rotation); + half sinAngle = sin(rotation); + uv -= center; + uv = mul(half2x2(cosAngle, -sinAngle, sinAngle, cosAngle), uv); + uv += center; + return uv; + } + + half4 GetDebugColor(float4 resColor, half4 shape1, half4 shape2, half4 shape3) + { + half4 res = resColor; + + //MAKE SURE THE FOLLOWING CODE BLOCK IS UNCOMMENTED------------------------------------------- + #if SHAPEDEBUG_ON + if(_DebugShape < 1.5) return shape1; + #if SHAPE2_ON + else if (_DebugShape < 2.5) return shape2; + #endif + #if SHAPE3_ON + else return shape3; + #endif + #endif + + return res; + } + + void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d) + { + //uvDistTex --> extraV2F0 + //uvSh1DistTex --> extraV2F1 + //uvSh2DistTex --> extraV2F2 + //uvSh3DistTex --> extraV2F3 + + #if VERTOFFSET_ON + #if TIMEISCUSTOM_ON + const half time = v.texcoord0.z + globalCustomTime.y; + #else + const half time = v.texcoord0.z + _Time.y; + #endif + half4 offsetUv = half4(TRANSFORM_TEX(v.texcoord0.xy, _VertOffsetTex), 0, 0); + offsetUv.x += (time * _VertOffsetTexXSpeed) % 1; + offsetUv.y += (time * _VertOffsetTexYSpeed) % 1; + v.vertex.xyz += v.normal * _VertOffsetAmount * pow(SAMPLE_TEXTURE2D_LOD(_VertOffsetTex, sampler_VertOffsetTex, offsetUv, 0).r, _VertOffsetPower); + #endif + + #if DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F0.xy = TRANSFORM_TEX(v.texcoord0.xy, _DistortTex); + #endif + + #if SHAPE1DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F1.xy = TRANSFORM_TEX(v.texcoord0.xy, _ShapeDistortTex); + #endif + + #if SHAPE2_ON + #if SHAPE2DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F2.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape2DistortTex);; + #endif + #endif + + #if SHAPE3_ON + #if SHAPE3DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F3.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape3DistortTex); + #endif + #endif + } + + void Ext_SurfaceFunction0 (inout Surface o, ShaderData d) + { + //i.uvSeed -> d.texcoord0.xy + + float seed = d.texcoord0.z + _TimingSeed; + #if TIMEISCUSTOM_ON + const float4 shaderTime = globalCustomTime; + #else + const float4 shaderTime = _Time; + #endif + float time = shaderTime.y + seed; + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 originalUvs = d.texcoord0.xy; + #endif + + #if PIXELATE_ON + half aspectRatio = _MainTex_TexelSize.x / _MainTex_TexelSize.y; + half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio); + d.texcoord0.xy = floor(d.texcoord0.xy * pixelSize) / pixelSize; + #endif + + #if NORMALMAP_ON + half4 normalSample = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, d.texcoord0.xy); + half3 normalTS = UnpackNormal(normalSample); + normalTS.xy *= _NormalStrength; + o.Normal = normalTS; + #endif + + #if TWISTUV_ON + half2 tempUv = d.texcoord0.xy - half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + _TwistUvRadius *= (_MainTex_ST.x + _MainTex_ST.y) / 2; + half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius; + half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0; + half s = sin(theta); + half c = cos(theta); + half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0); + tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta); + tempUv += half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + d.texcoord0.xy = tempUv; + #endif + + #if DOODLE_ON + half2 uvCopy = d.texcoord0.xy; + _HandDrawnSpeed = (floor((shaderTime.x + seed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed; + uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4); + uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4); + d.texcoord0.xy = lerp(d.texcoord0.xy, d.texcoord0.xy + uvCopy, 0.0005 * _HandDrawnAmount); + #endif + + #if SHAKEUV_ON + half xShake = sin((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvX; + half yShake = cos((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvY; + d.texcoord0.xy += half2(xShake * 0.012, yShake * 0.01); + #endif + + #if WAVEUV_ON + half2 uvWave = half2(_WaveX * _MainTex_ST.x, _WaveY * _MainTex_ST.y) - d.texcoord0.xy; + #if ATLAS_ON + uvWave = half2(_WaveX, _WaveY) - uvRect; + #endif + uvWave.x *= _ScreenParams.x / _ScreenParams.y; + half angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((time * _WaveSpeed) % 360.0); + d.texcoord0.xy = d.texcoord0.xy + normalize(uvWave) * sin(angWave) * (_WaveStrength / 1000.0); + #endif + + #if ROUNDWAVEUV_ON + half xWave = ((0.5 * _MainTex_ST.x) - d.texcoord0.x); + half yWave = ((0.5 * _MainTex_ST.y) - d.texcoord0.y) * (_MainTex_TexelSize.w / _MainTex_TexelSize.z); + half ripple = -sqrt(xWave*xWave + yWave* yWave); + d.texcoord0.xy += (sin((ripple + time * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1; + #endif + + #if POLARUV_ON + half2 prePolarUvs = d.texcoord0.xy; + d.texcoord0.xy = d.texcoord0.xy - half2(0.5, 0.5); + d.texcoord0.xy = half2(atan2(d.texcoord0.y, d.texcoord0.x) / (1.0 * 6.28318530718), length(d.texcoord0.xy) * 2.0); + d.texcoord0.xy *= _MainTex_ST.xy; + #endif + + #if DISTORT_ON + #if POLARUVDISTORT_ON + half2 distortUvs = TRANSFORM_TEX(d.texcoord0.xy, _DistortTex); + #else + half2 distortUvs = d.extraV2F0.xy; + #endif + distortUvs.x += ((shaderTime.x + seed) * _DistortTexXSpeed) % 1; + distortUvs.y += ((shaderTime.x + seed) * _DistortTexYSpeed) % 1; + #if ATLAS_ON + d.extraV2F0.xy = half2((d.extraV2F0.x - _MinXUV) / (_MaxXUV - _MinXUV), (d.extraV2F0.y - _MinYUV) / (_MaxYUV - _MinYUV)); + #endif + half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, distortUvs).r - 0.5) * 0.2 * _DistortAmount; + d.texcoord0.x += distortAmnt; + d.texcoord0.y += distortAmnt; + #endif + + #if TEXTURESCROLL_ON + d.texcoord0.x += (time * _TextureScrollXSpeed) % 1; + d.texcoord0.y += (time * _TextureScrollYSpeed) % 1; + #endif + + #if TRAILWIDTH_ON + half width = pow(SAMPLE_TEXTURE2D(_TrailWidthGradient, sampler_TrailWidthGradient, d.texcoord0).r, _TrailWidthPower); + d.texcoord0.y = (d.texcoord0.y * 2 - 1) / width * 0.5 + 0.5; + clip(d.texcoord0.y); + clip(1 - d.texcoord0.y); + #endif + + float2 shape1Uv = d.texcoord0.xy; + #if SHAPE2_ON + float2 shape2Uv = shape1Uv; + #endif + #if SHAPE3_ON + float2 shape3Uv = shape1Uv; + #endif + + #if CAMDISTFADE_ON || SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half camDistance = distance(d.worldSpacePosition, _WorldSpaceCameraPos); + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 uvOffsetPostFx = d.texcoord0.xy - originalUvs; + d.texcoord0.xy = d.screenPos.xy / d.screenPos.w; + d.texcoord0.x = d.texcoord0.x * (_ScreenParams.x / _ScreenParams.y); + d.texcoord0.x -= 0.5; + d.texcoord0.xy -= uvOffsetPostFx; + originalUvs += uvOffsetPostFx; + half distanceZoom = camDistance * 0.1; + half2 scaleWithDistUvs = d.texcoord0.xy * distanceZoom + ((-distanceZoom * 0.5) + 0.5); + #if SHAPE1SCREENUV_ON + shape1Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvShDistScale); + #else + shape1Uv = originalUvs; + #endif + #if SHAPE2SCREENUV_ON && SHAPE2_ON + shape2Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh2DistScale); + #else + #if SHAPE2_ON + shape2Uv = originalUvs; + #endif + #endif + #if SHAPE3SCREENUV_ON && SHAPE3_ON + shape3Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh3DistScale); + #else + #if SHAPE3_ON + shape3Uv = originalUvs; + #endif + #endif + #endif + + shape1Uv = TRANSFORM_TEX(shape1Uv, _MainTex); + #if OFFSETSTREAM_ON + shape1Uv.x += i.offsetCustomData.x * _OffsetSh1; + shape1Uv.y += i.offsetCustomData.y * _OffsetSh1; + #endif + #if SHAPETEXOFFSET_ON + shape1Uv += seed * _RandomSh1Mult; + #endif + + #if SHAPE1DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh1DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _ShapeDistortTex); + #else + half2 sh1DistortUvs = d.extraV2F1.xy; + #endif + + sh1DistortUvs.x += ((time + seed) * _ShapeDistortXSpeed) % 1; + sh1DistortUvs.y += ((time + seed) * _ShapeDistortYSpeed) % 1; + half distortAmount = (SAMPLE_TEXTURE2D(_ShapeDistortTex, sampler_ShapeDistortTex, sh1DistortUvs).r - 0.5) * 0.2 * _ShapeDistortAmount; + shape1Uv.x += distortAmount; + shape1Uv.y += distortAmount; + #endif + #if SHAPE1ROTATE_ON + shape1Uv = RotateUvs(shape1Uv, _ShapeRotationOffset + ((_ShapeRotationSpeed * time) % 6.28318530718), _MainTex_ST); + #endif + + half4 shape1 = SampleTextureWithScroll(_MainTex, sampler_MainTex, shape1Uv, _ShapeXSpeed, _ShapeYSpeed, time); + #if SHAPE1SHAPECOLOR_ON + shape1.a = shape1.r; + shape1.rgb = _ShapeColor.rgb; + #else + shape1 *= _ShapeColor; + #endif + #if SHAPE1CONTRAST_ON + #if SHAPE1SHAPECOLOR_ON + shape1.a = saturate((shape1.a - 0.5) * _ShapeContrast + 0.5 + _ShapeBrightness); + #else + shape1.rgb = max(0, (shape1.rgb - half3(0.5, 0.5, 0.5)) * _ShapeContrast + half3(0.5, 0.5, 0.5) + _ShapeBrightness); + #endif + #endif + + half4 shape2 = 1.0; + #if SHAPE2_ON + shape2Uv = TRANSFORM_TEX(shape2Uv, _Shape2Tex); + #if OFFSETSTREAM_ON + shape2Uv.x += i.offsetCustomData.x * _OffsetSh2; + shape2Uv.y += i.offsetCustomData.y * _OffsetSh2; + #endif + #if SHAPETEXOFFSET_ON + shape2Uv += seed * _RandomSh2Mult; + #endif + #if SHAPE2DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh2DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape2DistortTex); + #else + half2 sh2DistortUvs = d.extraV2F2.xy; + #endif + sh2DistortUvs.x += ((time + seed) * _Shape2DistortXSpeed) % 1; + sh2DistortUvs.y += ((time + seed) * _Shape2DistortYSpeed) % 1; + half distortAmnt2 = (SAMPLE_TEXTURE2D(_Shape2DistortTex, sampler_Shape2DistortTex, sh2DistortUvs).r - 0.5) * 0.2 * _Shape2DistortAmount; + shape2Uv.x += distortAmnt2; + shape2Uv.y += distortAmnt2; + #endif + #if SHAPE2ROTATE_ON + shape2Uv = RotateUvs(shape2Uv, _Shape2RotationOffset + ((_Shape2RotationSpeed * time) % 6.28318530718), _Shape2Tex_ST); + #endif + + shape2 = SampleTextureWithScroll(_Shape2Tex, sampler_Shape2Tex, shape2Uv, _Shape2XSpeed, _Shape2YSpeed, time); + #if SHAPE2SHAPECOLOR_ON + shape2.a = shape2.r; + shape2.rgb = _Shape2Color.rgb; + #else + shape2 *= _Shape2Color; + #endif + #if SHAPE2CONTRAST_ON + #if SHAPE2SHAPECOLOR_ON + shape2.a = max(0, (shape2.a - 0.5) * _Shape2Contrast + 0.5 + _Shape2Brightness); + #else + shape2.rgb = max(0, (shape2.rgb - half3(0.5, 0.5, 0.5)) * _Shape2Contrast + half3(0.5, 0.5, 0.5) + _Shape2Brightness); + #endif + #endif + #endif + + half4 shape3 = 1.0; + #if SHAPE3_ON + shape3Uv = TRANSFORM_TEX(shape3Uv, _Shape3Tex); + + #if OFFSETSTREAM_ON + shape3Uv.x += i.offsetCustomData.x * _OffsetSh3; + shape3Uv.y += i.offsetCustomData.y * _OffsetSh3; + #endif + #if SHAPETEXOFFSET_ON + shape3Uv += seed * _RandomSh3Mult; + #endif + #if SHAPE3DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh3DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape3DistortTex); + #else + half2 sh3DistortUvs = d.extraV2F3.xy; + #endif + sh3DistortUvs.x += ((time + seed) * _Shape3DistortXSpeed) % 1; + sh3DistortUvs.y += ((time + seed) * _Shape3DistortYSpeed) % 1; + half distortAmnt3 = (SAMPLE_TEXTURE2D(_Shape3DistortTex, sampler_Shape3DistortTex, sh3DistortUvs).r - 0.5) * 0.3 * _Shape3DistortAmount; + shape3Uv.x += distortAmnt3; + shape3Uv.y += distortAmnt3; + #endif + #if SHAPE3ROTATE_ON + shape3Uv = RotateUvs(shape3Uv, _Shape3RotationOffset + ((_Shape3RotationSpeed * time) % 6.28318530718), _Shape3Tex_ST); + #endif + shape3 = SampleTextureWithScroll(_Shape3Tex, sampler_Shape3Tex, shape3Uv, _Shape3XSpeed, _Shape3YSpeed, time); + #if SHAPE3SHAPECOLOR_ON + shape3.a = shape3.r; + shape3.rgb = _Shape3Color.rgb; + #else + shape3 *= _Shape3Color; + #endif + #if SHAPE3CONTRAST_ON + #if SHAPE3SHAPECOLOR_ON + shape3.a = max(0, (shape3.a - 0.5) * _Shape3Contrast + 0.5 + _Shape3Brightness); + #else + shape3.rgb = max(0, (shape3.rgb - half3(0.5, 0.5, 0.5)) * _Shape3Contrast + half3(0.5, 0.5, 0.5) + _Shape3Brightness); + #endif + #endif + #endif + + half4 col = shape1; + //Mix all shapes pre: change weights if custom vertex effect active + #if SHAPEWEIGHTS_ON + half shapeWeightOffset; + #if SHAPE2_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh1BlendOffset; + _ShapeColorWeight = max(0, _ShapeColorWeight + shapeWeightOffset); + _ShapeAlphaWeight = max(0, _ShapeAlphaWeight + shapeWeightOffset); + shapeWeightOffset = i.offsetCustomData.z * _Sh2BlendOffset; + _Shape2ColorWeight = max(0, _Shape2ColorWeight + shapeWeightOffset); + _Shape2AlphaWeight = max(0, _Shape2AlphaWeight + shapeWeightOffset); + #endif + #if SHAPE3_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh3BlendOffset; + _Shape3ColorWeight = max(0, _Shape3ColorWeight + shapeWeightOffset); + _Shape3AlphaWeight = max(0, _Shape3AlphaWeight + shapeWeightOffset); + #endif + #endif + + //Mix all shapes + #if SHAPE2_ON + #if !SPLITRGBA_ON + _ShapeAlphaWeight = _ShapeColorWeight; + _Shape2AlphaWeight = _Shape2ColorWeight; + #endif + #if SHAPE3_ON //Shape3 On + #if !SPLITRGBA_ON + _Shape3AlphaWeight = _Shape3ColorWeight; + #endif + #if SHAPEADD_ON + col.rgb = ((shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight)) + (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(max(shape3.a * _Shape3AlphaWeight, max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight))); + #else + col.rgb = ((shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight)) * (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)) * (shape3.a * _Shape3AlphaWeight)); + #endif + #else //Shape3 Off + #if SHAPEADD_ON + col.rgb = (shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight); + col.a = saturate(max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight)); + #else + col.rgb = (shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight); + col.a = saturate((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)); + #endif + #endif + #endif + + #if SHAPE1MASK_ON + col = lerp(col, shape1, pow(SAMPLE_TEXTURE2D(_Shape1MaskTex, sampler_Shape1MaskTex, TRANSFORM_TEX(i.uvSeed.xy, _Shape1MaskTex)).r, _Shape1MaskPow)); + #endif + + #if PREMULTIPLYCOLOR_ON + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + col.a = min(luminance, col.a); + #endif + + col.rgb *= _Color.rgb * d.vertexColor.rgb; + #if PREMULTIPLYALPHA_ON + col.rgb *= col.a; + #endif + + #if !PREMULTIPLYCOLOR_ON && (COLORRAMP_ON || ALPHAFADE_ON || COLORGRADING_ON || FADE_ON || (ADDITIVECONFIG_ON && (GLOW_ON || DEPTHGLOW_ON))) + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + #endif + + #if (FADE_ON || ALPHAFADE_ON) && ALPHAFADEINPUTSTREAM_ON + col.a *= d.vertexColor.a; + d.vertexColor.a = d.texcoord0.w; + #endif + + #if FADE_ON + half preFadeAlpha = col.a; + _FadeAmount = saturate(_FadeAmount + (1 - d.vertexColor.a)); + _FadeTransition = max(0.01, _FadeTransition * EaseOutQuint(saturate(_FadeAmount))); + half2 fadeUv; + fadeUv = d.texcoord0.xy + seed; + fadeUv.x += (time * _FadeScrollXSpeed) % 1; + fadeUv.y += (time * _FadeScrollYSpeed) % 1; + half2 tiledUvFade1 = TRANSFORM_TEX(fadeUv, _FadeTex); + #if ADDITIVECONFIG_ON && !PREMULTIPLYCOLOR_ON + preFadeAlpha *= luminance; + #endif + _FadeAmount = saturate(pow(_FadeAmount, _FadePower)); + #if FADEBURN_ON + half2 tiledUvFade2 = TRANSFORM_TEX(fadeUv, _FadeBurnTex); + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + half fadeNaturalEdge = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fadeNaturalEdge; + half fadeBurn = saturate(smoothstep(0.0 , _FadeTransition + _FadeBurnWidth, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + fadeBurn = fadeNaturalEdge - fadeBurn; + _FadeBurnColor.rgb *= _FadeBurnGlow; + col.rgb += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2).rgb * _FadeBurnColor.rgb * preFadeAlpha; + #else + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + float fade = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fade; + #endif + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _FadeAmount; + #endif + #endif + + #if ALPHAFADE_ON + half alphaFadeLuminance; + _AlphaFadeAmount = saturate(_AlphaFadeAmount + (1 - d.vertexColor.a)); + _AlphaFadeAmount = saturate(pow(_AlphaFadeAmount, _AlphaFadePow)); + _AlphaFadeSmooth = max(0.01, _AlphaFadeSmooth * EaseOutQuint(saturate(_AlphaFadeAmount))); + #if ALPHAFADEUSESHAPE1_ON + alphaFadeLuminance = shape1.r; + #else + alphaFadeLuminance = luminance; + #endif + alphaFadeLuminance = saturate(alphaFadeLuminance - 0.001); + #if ALPHAFADEUSEREDCHANNEL_ON + col.a *= col.r; + #endif + col.a = saturate(col.a); + float alphaFade = saturate(smoothstep(0.0 , _AlphaFadeSmooth, RemapFloat(1.0 - _AlphaFadeAmount, 0.0, 1.0, -1.0, 1.0) + alphaFadeLuminance)); + col.a *= alphaFade; + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _AlphaFadeAmount; + #endif + #endif + + #if BACKFACETINT_ON + col.rgb = lerp(col.rgb * _BackFaceTint, col.rgb * _FrontFaceTint, step(0, dot(d.worldSpaceNormal, d.worldSpaceViewDir))); + #endif + + //#if LIGHTANDSHADOW_ON + //half NdL = saturate(dot(d.worldSpaceNormal, -_All1VfxLightDir)); + //col.rgb += _LightColor * _LightAmount * NdL; + //NdL = max(_ShadowAmount, NdL); + //NdL = smoothstep(_ShadowStepMin, _ShadowStepMax, NdL); + //col.rgb *= NdL; + //#endif + + #if COLORGRADING_ON + col.rgb *= lerp(lerp(_ColorGradingDark, _ColorGradingMiddle, luminance/_ColorGradingMidPoint), + lerp(_ColorGradingMiddle, _ColorGradingLight, (luminance - _ColorGradingMidPoint)/(1.0 - _ColorGradingMidPoint)), step(_ColorGradingMidPoint, luminance)); + #endif + + #if COLORRAMP_ON + half colorRampLuminance = saturate(luminance + _ColorRampLuminosity); + #if COLORRAMPGRAD_ON + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(colorRampLuminance, 0)); + #else + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(colorRampLuminance, 0)); + #endif + col.rgb = lerp(col.rgb, colorRampRes.rgb, _ColorRampBlend); + col.a = lerp(col.a, saturate(col.a * colorRampRes.a), _ColorRampBlend); + #endif + + #if POSTERIZE_ON && !POSTERIZEOUTLINE_ON + col.rgb = floor(col.rgb / (1.0 / _PosterizeNumColors)) * (1.0 / _PosterizeNumColors); + #endif + + #if DEPTHGLOW_ON + half sceneDepthDiff = GetLinearEyeDepth(d.screenUV) - d.screenPos.w; + #endif + + #if RIM_ON + half NdV = 1 - abs(dot(d.worldSpaceNormal, d.worldSpaceViewDir)); + half rimFactor = saturate(_RimBias + _RimScale * pow(NdV, _RimPower)); + half4 rimCol = _RimColor * rimFactor; + rimCol.rgb *= _RimIntensity; + col.rgb = lerp(col.rgb * (rimCol.rgb + half3(1,1,1)), col.rgb + rimCol.rgb, _RimAddAmount); + col.a = saturate(col.a * (1 - rimFactor * _RimErodesAlpha)); + #endif + + #if DEPTHGLOW_ON + half depthGlowMask = saturate(_DepthGlowDist * pow((1 - sceneDepthDiff), _DepthGlowPow)); + col.rgb = lerp(col.rgb, _DepthGlowGlobal * col.rgb, depthGlowMask); + half depthGlowMult = 1; + #if ADDITIVECONFIG_ON + depthGlowMult = luminance; + #endif + col.rgb += _DepthGlowColor.rgb * _DepthGlow * depthGlowMask * col.a * depthGlowMult; + #endif + + #if GLOW_ON + half glowMask = 1; + #if GLOWTEX_ON + glowMask = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, TRANSFORM_TEX(d.texcoord0.xy, _GlowTex)); + #endif + col.rgb *= _GlowGlobal * glowMask; + half glowMult = 1; + #if ADDITIVECONFIG_ON + glowMult = luminance; + #endif + + col.rgb += _GlowColor.rgb * _Glow * glowMask * col.a * glowMult; + #endif + + #if HSV_ON + half3 resultHsv = half3(col.rgb); + half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180); + half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180); + resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x + + (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z; + resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x + + (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z; + resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x + + (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y + + (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z; + col.rgb = resultHsv; + #endif + + #if CAMDISTFADE_ON + col.a *= 1 - saturate(smoothstep(_CamDistFadeStepMin, _CamDistFadeStepMax, camDistance)); + col.a *= smoothstep(0.0, _CamDistProximityFade, camDistance); + #endif + + #if MASK_ON + half2 maskUv = d.texcoord0.xy; + #if POLARUV_ON + maskUv = prePolarUvs; + #endif + half4 maskSample = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, TRANSFORM_TEX(maskUv, _MaskTex)); + half mask = pow(min(maskSample.r, maskSample.a), _MaskPow); + col.a *= mask; + #endif + + #if ALPHASMOOTHSTEP_ON + col.a = smoothstep(_AlphaStepMin, _AlphaStepMax, col.a); + #endif + + half4 debugColor = col; + #if SHAPEDEBUG_ON + debugColor = GetDebugColor(col, shape1, shape2, shape3); + #endif + + clip(debugColor.a - _AlphaCutoffValue - 0.01); + + //#if FOG_ON + //UNITY_APPLY_FOG(i.fogCoord, col); + //#endif + + //Don't use a starting i.color.a lower than 1 unless using vertex stream dissolve when using a FADE effect + #if !FADE_ON && !ALPHAFADE_ON + col.a *= _Alpha * d.vertexColor.a; + #endif + #if FADE_ON || ALPHAFADE_ON + col.a *= _Alpha; + #endif + #if ADDITIVECONFIG_ON + col.rgb *= col.a; + #endif + + + #if SHAPEDEBUG_ON + o.Albedo = debugColor.rgb; + o.Alpha = debugColor.a; + #else + o.Albedo = col.rgb; + o.Alpha = col.a; + #endif + } + + + + + + void ChainSurfaceFunction(inout Surface l, inout ShaderData d) + { + Ext_SurfaceFunction0(l, d); + // Ext_SurfaceFunction1(l, d); + // Ext_SurfaceFunction2(l, d); + // Ext_SurfaceFunction3(l, d); + // Ext_SurfaceFunction4(l, d); + // Ext_SurfaceFunction5(l, d); + // Ext_SurfaceFunction6(l, d); + // Ext_SurfaceFunction7(l, d); + // Ext_SurfaceFunction8(l, d); + // Ext_SurfaceFunction9(l, d); + // Ext_SurfaceFunction10(l, d); + // Ext_SurfaceFunction11(l, d); + // Ext_SurfaceFunction12(l, d); + // Ext_SurfaceFunction13(l, d); + // Ext_SurfaceFunction14(l, d); + // Ext_SurfaceFunction15(l, d); + // Ext_SurfaceFunction16(l, d); + // Ext_SurfaceFunction17(l, d); + // Ext_SurfaceFunction18(l, d); + // Ext_SurfaceFunction19(l, d); + // Ext_SurfaceFunction20(l, d); + // Ext_SurfaceFunction21(l, d); + // Ext_SurfaceFunction22(l, d); + // Ext_SurfaceFunction23(l, d); + // Ext_SurfaceFunction24(l, d); + // Ext_SurfaceFunction25(l, d); + // Ext_SurfaceFunction26(l, d); + // Ext_SurfaceFunction27(l, d); + // Ext_SurfaceFunction28(l, d); + // Ext_SurfaceFunction29(l, d); + } + +#if !_DECALSHADER + + void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time) + { + ExtraV2F d; + + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + // due to motion vectors in HDRP, we need to use the last + // time in certain spots. So if you are going to use _Time to adjust vertices, + // you need to use this time or motion vectors will break. + d.time = time; + + Ext_ModifyVertex0(v, d); + // Ext_ModifyVertex1(v, d); + // Ext_ModifyVertex2(v, d); + // Ext_ModifyVertex3(v, d); + // Ext_ModifyVertex4(v, d); + // Ext_ModifyVertex5(v, d); + // Ext_ModifyVertex6(v, d); + // Ext_ModifyVertex7(v, d); + // Ext_ModifyVertex8(v, d); + // Ext_ModifyVertex9(v, d); + // Ext_ModifyVertex10(v, d); + // Ext_ModifyVertex11(v, d); + // Ext_ModifyVertex12(v, d); + // Ext_ModifyVertex13(v, d); + // Ext_ModifyVertex14(v, d); + // Ext_ModifyVertex15(v, d); + // Ext_ModifyVertex16(v, d); + // Ext_ModifyVertex17(v, d); + // Ext_ModifyVertex18(v, d); + // Ext_ModifyVertex19(v, d); + // Ext_ModifyVertex20(v, d); + // Ext_ModifyVertex21(v, d); + // Ext_ModifyVertex22(v, d); + // Ext_ModifyVertex23(v, d); + // Ext_ModifyVertex24(v, d); + // Ext_ModifyVertex25(v, d); + // Ext_ModifyVertex26(v, d); + // Ext_ModifyVertex27(v, d); + // Ext_ModifyVertex28(v, d); + // Ext_ModifyVertex29(v, d); + + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p) + { + ExtraV2F d; + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = v2p.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = v2p.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = v2p.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = v2p.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = v2p.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = v2p.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = v2p.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = v2p.extraV2F7; + // #endif + + + // Ext_ModifyTessellatedVertex0(v, d); + // Ext_ModifyTessellatedVertex1(v, d); + // Ext_ModifyTessellatedVertex2(v, d); + // Ext_ModifyTessellatedVertex3(v, d); + // Ext_ModifyTessellatedVertex4(v, d); + // Ext_ModifyTessellatedVertex5(v, d); + // Ext_ModifyTessellatedVertex6(v, d); + // Ext_ModifyTessellatedVertex7(v, d); + // Ext_ModifyTessellatedVertex8(v, d); + // Ext_ModifyTessellatedVertex9(v, d); + // Ext_ModifyTessellatedVertex10(v, d); + // Ext_ModifyTessellatedVertex11(v, d); + // Ext_ModifyTessellatedVertex12(v, d); + // Ext_ModifyTessellatedVertex13(v, d); + // Ext_ModifyTessellatedVertex14(v, d); + // Ext_ModifyTessellatedVertex15(v, d); + // Ext_ModifyTessellatedVertex16(v, d); + // Ext_ModifyTessellatedVertex17(v, d); + // Ext_ModifyTessellatedVertex18(v, d); + // Ext_ModifyTessellatedVertex19(v, d); + // Ext_ModifyTessellatedVertex20(v, d); + // Ext_ModifyTessellatedVertex21(v, d); + // Ext_ModifyTessellatedVertex22(v, d); + // Ext_ModifyTessellatedVertex23(v, d); + // Ext_ModifyTessellatedVertex24(v, d); + // Ext_ModifyTessellatedVertex25(v, d); + // Ext_ModifyTessellatedVertex26(v, d); + // Ext_ModifyTessellatedVertex27(v, d); + // Ext_ModifyTessellatedVertex28(v, d); + // Ext_ModifyTessellatedVertex29(v, d); + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color) + { + // Ext_FinalColorForward0(l, d, color); + // Ext_FinalColorForward1(l, d, color); + // Ext_FinalColorForward2(l, d, color); + // Ext_FinalColorForward3(l, d, color); + // Ext_FinalColorForward4(l, d, color); + // Ext_FinalColorForward5(l, d, color); + // Ext_FinalColorForward6(l, d, color); + // Ext_FinalColorForward7(l, d, color); + // Ext_FinalColorForward8(l, d, color); + // Ext_FinalColorForward9(l, d, color); + // Ext_FinalColorForward10(l, d, color); + // Ext_FinalColorForward11(l, d, color); + // Ext_FinalColorForward12(l, d, color); + // Ext_FinalColorForward13(l, d, color); + // Ext_FinalColorForward14(l, d, color); + // Ext_FinalColorForward15(l, d, color); + // Ext_FinalColorForward16(l, d, color); + // Ext_FinalColorForward17(l, d, color); + // Ext_FinalColorForward18(l, d, color); + // Ext_FinalColorForward19(l, d, color); + // Ext_FinalColorForward20(l, d, color); + // Ext_FinalColorForward21(l, d, color); + // Ext_FinalColorForward22(l, d, color); + // Ext_FinalColorForward23(l, d, color); + // Ext_FinalColorForward24(l, d, color); + // Ext_FinalColorForward25(l, d, color); + // Ext_FinalColorForward26(l, d, color); + // Ext_FinalColorForward27(l, d, color); + // Ext_FinalColorForward28(l, d, color); + // Ext_FinalColorForward29(l, d, color); + } + + void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask) + { + // Ext_FinalGBufferStandard0(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard1(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard2(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard3(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard4(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard5(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard6(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard7(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard8(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard9(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard10(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard11(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard12(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard13(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard14(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard15(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard16(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard17(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard18(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard19(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard20(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard21(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard22(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard23(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard24(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard25(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard26(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard27(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard28(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard29(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + } +#endif + + + + + +#if _DECALSHADER + + ShaderData CreateShaderData(SurfaceDescriptionInputs IN) + { + ShaderData d = (ShaderData)0; + d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal); + d.worldSpaceNormal = IN.WorldSpaceNormal; + d.worldSpaceTangent = IN.WorldSpaceTangent; + + d.worldSpacePosition = IN.WorldSpacePosition; + d.texcoord0 = IN.uv0.xyxy; + d.screenPos = IN.ScreenPosition; + + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(d.worldSpacePosition), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(d.worldSpacePosition, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenUV = (IN.ScreenPosition.xy / max(0.01, IN.ScreenPosition.w)); + // #endif + + return d; + } +#else + + ShaderData CreateShaderData(VertexToPixel i + #if NEED_FACING + , bool facing + #endif + ) + { + ShaderData d = (ShaderData)0; + d.clipPos = i.pos; + d.worldSpacePosition = i.worldPos; + + d.worldSpaceNormal = normalize(i.worldNormal); + d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz); + + d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w; + float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign; + + d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal); + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + d.texcoord0 = i.texcoord0; + // d.texcoord1 = i.texcoord1; + // d.texcoord2 = i.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // d.texcoord3 = i.texcoord3; + // #endif + + // d.isFrontFace = facing; + // #if %VERTEXCOLORREQUIREKEY% + d.vertexColor = i.vertexColor; + // #endif + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(i.worldPos), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(i.worldPos, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenPos = i.screenPos; + d.screenUV = (i.screenPos.xy / i.screenPos.w); + // #endif + + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = i.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = i.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = i.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = i.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = i.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = i.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = i.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = i.extraV2F7; + // #endif + + return d; + } + +#endif + + + #if defined(_PASSSHADOW) + float3 _LightDirection; + float3 _LightPosition; + #endif + + #if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + + #define GetWorldToViewMatrix() _ViewMatrix + #define UNITY_MATRIX_I_V _InvViewMatrix + #define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix) + #define UNITY_MATRIX_I_P _InvProjMatrix + #define GetWorldToHClipMatrix() _ViewProjMatrix + #define UNITY_MATRIX_I_VP _InvViewProjMatrix + #define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix + #define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix + #define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix + + void MotionVectorPositionZBias(VertexToPixel input) + { + #if UNITY_REVERSED_Z + input.pos.z -= unity_MotionVectorsParams.z * input.pos.w; + #else + input.pos.z += unity_MotionVectorsParams.z * input.pos.w; + #endif + } + + #endif + + // vertex shader + VertexToPixel Vert (VertexData v) + { + VertexToPixel o = (VertexToPixel)0; + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + VertexData previousMesh = v; + #endif + #if !_TESSELLATION_ON + ChainModifyVertex(v, o, _Time); + #endif + + o.texcoord0 = v.texcoord0; + // o.texcoord1 = v.texcoord1; + // o.texcoord2 = v.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // o.texcoord3 = v.texcoord3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + o.vertexColor = v.vertexColor; + // #endif + + // This return the camera relative position (if enable) + float3 positionWS = TransformObjectToWorld(v.vertex.xyz); + float3 normalWS = TransformObjectToWorldNormal(v.normal); + float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + o.worldPos = positionWS; + o.worldNormal = normalWS; + o.worldTangent = tangentWS; + + + // For some very odd reason, in 2021.2, we can't use Unity's defines, but have to use our own.. + #if _PASSSHADOW + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - o.worldPos); + #else + float3 lightDirectionWS = _LightDirection; + #endif + // Define shadow pass specific clip position for Universal + o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS)); + #if UNITY_REVERSED_Z + o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #else + o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #endif + #elif _PASSMETA + o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); + #else + o.pos = TransformWorldToHClip(o.worldPos); + #endif + + // #if %SCREENPOSREQUIREKEY% + o.screenPos = ComputeScreenPos(o.pos, _ProjectionParams.x); + // #endif + + + #if _PASSFORWARD || _PASSGBUFFER + float2 uv1 = v.texcoord1.xy; + OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV); + // o.texcoord1.xy = uv1; + #if UNITY_VERSION < 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + + #if defined(DYNAMICLIGHTMAP_ON) + o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #if UNITY_VERSION >= 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + #elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009 + OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion); + #endif + #endif + + #ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + half fogFactor = 0; + #if defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(o.pos.z); + #endif + #if _BAKEDLIT + o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0); + #else + half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal); + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + #endif + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + o.shadowCoord = GetShadowCoord(vertexInput); + #endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + #if !defined(TESSELLATION_ON) + MotionVectorPositionZBias(o); + #endif + + o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0); + // Note: unity_MotionVectorsParams.y is 0 is forceNoMotion is enabled + bool forceNoMotion = unity_MotionVectorsParams.y == 0.0; + + if (!forceNoMotion) + { + #if defined(HAVE_VFX_MODIFICATION) + float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS; + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + const bool applyDeformation = false; + #else + const bool applyDeformation = true; + #endif + #else + const bool hasDeformation = unity_MotionVectorsParams.x == 1; // Mesh has skinned deformation + float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz; + + #if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT) + const bool applyDeformation = true; + #else + const bool applyDeformation = hasDeformation; + #endif + #endif + // TODO + #if defined(FEATURES_GRAPH_VERTEX) + if (applyDeformation) + previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS); + else + previousPositionOS = previousMesh.positionOS; + + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + #endif + + #if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED) + // Deformed vertices in DOTS are not cumulative with built-in Unity skinning/blend shapes + // Needs to be called after vertex modification has been applied otherwise it will be + // overwritten by Compute Deform node + ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS); + #endif + #if defined (_ADD_PRECOMPUTED_VELOCITY) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f)); + + #if defined(HAVE_VFX_MODIFICATION) + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY) + #error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards. + #endif + o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS); + #else + #if VFX_WORLD_SPACE + //previousPositionOS is already in world space + const float3 previousPositionWS = previousPositionOS; + #else + const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz; + #endif + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f)); + #endif + #else + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1))); + #endif + } + #endif + + return o; + } + + + + + // fragment shader + half4 Frag (VertexToPixel IN + #ifdef _DEPTHOFFSET_ON + , out float outputDepth : SV_Depth + #endif + #if NEED_FACING + , bool facing : SV_IsFrontFace + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN); + + #if defined(LOD_FADE_CROSSFADE) && USE_UNITY_CROSSFADE + LODFadeCrossFade(IN.pos); + #endif + + ShaderData d = CreateShaderData(IN + #if NEED_FACING + , facing + #endif + ); + Surface l = (Surface)0; + + #ifdef _DEPTHOFFSET_ON + l.outputDepth = outputDepth; + #endif + + l.Albedo = half3(0.5, 0.5, 0.5); + l.Normal = float3(0,0,1); + l.Occlusion = 1; + l.Alpha = 1; + + ChainSurfaceFunction(l, d); + + #ifdef _DEPTHOFFSET_ON + outputDepth = l.outputDepth; + #endif + + return 0; + + } + + ENDHLSL + + } + + + + Pass + { + Name "Meta" + Tags + { + "LightMode" = "Meta" + } + + Cull Off + + + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" + } + Cull [_CullingOption] + ZWrite [_ZWrite] + ZTest [_ZTestMode] + ColorMask [_ColorMask] +Lighting Off + + + HLSLPROGRAM + + #pragma vertex Vert + #pragma fragment Frag + + #pragma target 3.0 + + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + + #define SHADERPASS SHADERPASS_META + #define _PASSMETA 1 + + + + #pragma shader_feature_local TIMEISCUSTOM_ON + #pragma shader_feature_local ADDITIVECONFIG_ON + #pragma shader_feature_local PREMULTIPLYALPHA_ON + #pragma shader_feature_local PREMULTIPLYCOLOR_ON + #pragma shader_feature_local SPLITRGBA_ON + #pragma shader_feature_local SHAPEADD_ON + + #pragma shader_feature_local SHAPE1SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE2SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE3SCREENUV_ON /////////////////Pipeline specific implementation + + #pragma shader_feature_local SHAPEDEBUG_ON + + #pragma shader_feature_local SHAPE1CONTRAST_ON + #pragma shader_feature_local SHAPE1DISTORT_ON + #pragma shader_feature_local SHAPE1ROTATE_ON + #pragma shader_feature_local SHAPE1SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE2_ON + #pragma shader_feature_local SHAPE2CONTRAST_ON + #pragma shader_feature_local SHAPE2DISTORT_ON + #pragma shader_feature_local SHAPE2ROTATE_ON + #pragma shader_feature_local SHAPE2SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE3_ON + #pragma shader_feature_local SHAPE3CONTRAST_ON + #pragma shader_feature_local SHAPE3DISTORT_ON + #pragma shader_feature_local SHAPE3ROTATE_ON + #pragma shader_feature_local SHAPE3SHAPECOLOR_ON + + #pragma shader_feature_local GLOW_ON + #pragma shader_feature_local GLOWTEX_ON + #pragma shader_feature_local DEPTHGLOW_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local MASK_ON + #pragma shader_feature_local COLORRAMP_ON + #pragma shader_feature_local COLORRAMPGRAD_ON + #pragma shader_feature_local COLORGRADING_ON + #pragma shader_feature_local HSV_ON + #pragma shader_feature_local POSTERIZE_ON + #pragma shader_feature_local PIXELATE_ON + #pragma shader_feature_local DISTORT_ON + #pragma shader_feature_local SHAKEUV_ON + #pragma shader_feature_local WAVEUV_ON + #pragma shader_feature_local ROUNDWAVEUV_ON + #pragma shader_feature_local TWISTUV_ON + #pragma shader_feature_local DOODLE_ON + #pragma shader_feature_local OFFSETSTREAM_ON + #pragma shader_feature_local TEXTURESCROLL_ON + #pragma shader_feature_local VERTOFFSET_ON + #pragma shader_feature_local RIM_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local BACKFACETINT_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local POLARUV_ON + #pragma shader_feature_local POLARUVDISTORT_ON + #pragma shader_feature_local SHAPE1MASK_ON + #pragma shader_feature_local TRAILWIDTH_ON + #pragma shader_feature_local LIGHTANDSHADOW_ON + #pragma shader_feature_local SHAPETEXOFFSET_ON + #pragma shader_feature_local SHAPEWEIGHTS_ON + + #pragma shader_feature_local ALPHACUTOFF_ON + #pragma shader_feature_local ALPHASMOOTHSTEP_ON + #pragma shader_feature_local FADE_ON + #pragma shader_feature_local FADEBURN_ON + #pragma shader_feature_local ALPHAFADE_ON + #pragma shader_feature_local ALPHAFADEUSESHAPE1_ON + #pragma shader_feature_local ALPHAFADEUSEREDCHANNEL_ON + #pragma shader_feature_local ALPHAFADETRANSPARENCYTOO_ON + #pragma shader_feature_local ALPHAFADEINPUTSTREAM_ON + #pragma shader_feature_local CAMDISTFADE_ON + + #pragma shader_feature NORMALMAP_ON + + + #define _URP 1 +#define REQUIRE_DEPTH_TEXTURE + + + + // Includes + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/MetaInput.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #undef WorldNormalVector + #define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix) + + #define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal) + + #define _WorldSpaceLightPos0 _MainLightPosition + + #define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name); + #define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name); + + #define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z) + #define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod) + #define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord) + #define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord) + + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod) + + #if defined(UNITY_COMPILER_HLSL) + #define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0; + #else + #define UNITY_INITIALIZE_OUTPUT(type,name) + #endif + + #define sampler2D_float sampler2D + #define sampler2D_half sampler2D + + + + // data across stages, stripped like the above. + struct VertexToPixel + { + float4 pos : SV_POSITION; + float3 worldPos : TEXCOORD0; + float3 worldNormal : TEXCOORD1; + float4 worldTangent : TEXCOORD2; + float4 texcoord0 : TEXCOORD3; + // float4 texcoord1 : TEXCOORD4; + // float4 texcoord2 : TEXCOORD5; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD6; + // #endif + + // #if %SCREENPOSREQUIREKEY% + float4 screenPos : TEXCOORD7; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + half4 vertexColor : COLOR; + // #endif + + #if defined(LIGHTMAP_ON) + float2 lightmapUV : TEXCOORD8; + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float2 dynamicLightmapUV : TEXCOORD9; + #endif + #if !defined(LIGHTMAP_ON) + float4 probeOcclusion : TEXCOORD8; + float3 sh : TEXCOORD10; + #endif + + #if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT) + float4 fogFactorAndVertexLight : TEXCOORD11; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD12; + #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD13; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD14; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD15; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD16; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD17; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD18; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD19; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD20; + // #endif + + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : CUSTOM_INSTANCE_ID; + #endif + #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) + uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; + #endif + #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) + uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; + #endif + #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; + #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float4 previousPositionCS : TEXCOORD21; // Contain previous transform position (in case of skinning for example) + float4 positionCS : TEXCOORD22; + #endif + }; + + + + + // data describing the user output of a pixel + struct Surface + { + half3 Albedo; + half Height; + half3 Normal; + half Smoothness; + half3 Emission; + half Metallic; + half3 Specular; + half Occlusion; + half SpecularPower; // for simple lighting + half Alpha; + float outputDepth; // if written, SV_Depth semantic is used. ShaderData.clipPos.z is unused value + // HDRP Only + half SpecularOcclusion; + half SubsurfaceMask; + half Thickness; + half CoatMask; + half CoatSmoothness; + half Anisotropy; + half IridescenceMask; + half IridescenceThickness; + int DiffusionProfileHash; + float SpecularAAThreshold; + float SpecularAAScreenSpaceVariance; + // requires _OVERRIDE_BAKEDGI to be defined, but is mapped in all pipelines + float3 DiffuseGI; + float3 BackDiffuseGI; + float3 SpecularGI; + float ior; + float3 transmittanceColor; + float atDistance; + float transmittanceMask; + // requires _OVERRIDE_SHADOWMASK to be defines + float4 ShadowMask; + + // for decals + float NormalAlpha; + float MAOSAlpha; + + + }; + + // Data the user declares in blackboard blocks + struct Blackboard + { + + float blackboardDummyData; + }; + + // data the user might need, this will grow to be big. But easy to strip + struct ShaderData + { + float4 clipPos; // SV_POSITION + float3 localSpacePosition; + float3 localSpaceNormal; + float3 localSpaceTangent; + + float3 worldSpacePosition; + float3 worldSpaceNormal; + float3 worldSpaceTangent; + float tangentSign; + + float3 worldSpaceViewDir; + float3 tangentSpaceViewDir; + + float4 texcoord0; + float4 texcoord1; + float4 texcoord2; + float4 texcoord3; + + float2 screenUV; + float4 screenPos; + + float4 vertexColor; + bool isFrontFace; + + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + + float3x3 TBNMatrix; + Blackboard blackboard; + }; + + struct VertexData + { + #if SHADER_TARGET > 30 + // uint vertexID : SV_VertexID; + #endif + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + + // optimize out mesh coords when not in use by user or lighting system + #if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER) + float4 texcoord1 : TEXCOORD1; + #endif + + #if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + #if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON))) + float4 texcoord1 : TEXCOORD1; + #endif + #if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + + #if _HDRP + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + #endif + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD4; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD5; // Add Precomputed Velocity (Alembic computes velocities on runtime side). + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessVertex + { + float4 vertex : INTERNALTESSPOS; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD5; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD6; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD7; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD8; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD9; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD10; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD11; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD12; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD13; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD14; + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + struct ExtraV2F + { + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + Blackboard blackboard; + float4 time; + }; + + + float3 WorldToTangentSpace(ShaderData d, float3 normal) + { + return mul(d.TBNMatrix, normal); + } + + float3 TangentToWorldSpace(ShaderData d, float3 normal) + { + return mul(normal, d.TBNMatrix); + } + + // in this case, make standard more like SRPs, because we can't fix + // unity_WorldToObject in HDRP, since it already does macro-fu there + + #if _STANDARD + float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); }; + float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); }; + float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); }; + float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); }; + float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; } + float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; } + #if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER)) + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod) + #else + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) + #endif + + #undef GetWorldToObjectMatrix() + + #define GetWorldToObjectMatrix() unity_WorldToObject + + + #endif + + float3 GetCameraWorldPosition() + { + #if _HDRP + return GetCameraRelativePositionWS(_WorldSpaceCameraPos); + #else + return _WorldSpaceCameraPos; + #endif + } + + #if _GRABPASSUSED + #if _STANDARD + TEXTURE2D(%GRABTEXTURE%); + SAMPLER(sampler_%GRABTEXTURE%); + #endif + + half3 GetSceneColor(float2 uv) + { + #if _STANDARD + return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb; + #else + return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv); + #endif + } + #endif + + + + #if _STANDARD + UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); + float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); } + #else + float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); } + #endif + + float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) + { + float eye = GetLinearEyeDepth(uv); + float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz); + + float dt = dot(worldSpaceViewDir, camView); + float3 div = worldSpaceViewDir/dt; + float3 wpos = (eye * div) + GetCameraWorldPosition(); + return wpos; + } + + #if _HDRP + float3 ObjectToWorldSpacePosition(float3 pos) + { + return GetAbsolutePositionWS(TransformObjectToWorld(pos)); + } + #else + float3 ObjectToWorldSpacePosition(float3 pos) + { + return TransformObjectToWorld(pos); + } + #endif + + #if _STANDARD + UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture); + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); + float3 norms = DecodeViewNormalStereo(depthNorms); + norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5; + return norms; + } + #elif _HDRP && !_DECALSHADER + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + NormalData nd; + DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd); + return nd.normalWS; + } + #elif _URP + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" + #endif + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + return SampleSceneNormals(uv); + #else + float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir); + return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5; + #endif + + } + #endif + + #if _HDRP + + half3 UnpackNormalmapRGorAG(half4 packednormal) + { + // This do the trick + packednormal.x *= packednormal.w; + + half3 normal; + normal.xy = packednormal.xy * 2 - 1; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 UnpackNormal(half4 packednormal) + { + #if defined(UNITY_NO_DXT5nm) + return packednormal.xyz * 2 - 1; + #else + return UnpackNormalmapRGorAG(packednormal); + #endif + } + #endif + #if _HDRP || _URP + + half3 UnpackScaleNormal(half4 packednormal, half scale) + { + #ifndef UNITY_NO_DXT5nm + // Unpack normal as DXT5nm (1, y, 1, x) or BC5 (x, y, 0, 1) + // Note neutral texture like "bump" is (0, 0, 1, 1) to work with both plain RGB normal and DXT5nm/BC5 + packednormal.x *= packednormal.w; + #endif + half3 normal; + normal.xy = (packednormal.xy * 2 - 1) * scale; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + + #endif + + + void GetSun(out float3 lightDir, out float3 color) + { + lightDir = float3(0.5, 0.5, 0); + color = 1; + #if _HDRP + if (_DirectionalLightCount > 0) + { + DirectionalLightData light = _DirectionalLightDatas[0]; + lightDir = -light.forward.xyz; + color = light.color; + } + #elif _STANDARD + lightDir = normalize(_WorldSpaceLightPos0.xyz); + color = _LightColor0.rgb; + #elif _URP + Light light = GetMainLight(); + lightDir = light.direction; + color = light.color; + #endif + } + + + + CBUFFER_START(UnityPerMaterial) + + + half4 _Color; + half _Alpha; + half _AlphaCutoffValue; + + half _TimingSeed; + + #if TIMEISCUSTOM_ON + float4 globalCustomTime; + #endif + + half4 _MainTex_ST, _ShapeColor; + half _ShapeXSpeed, _ShapeYSpeed, _ShapeColorWeight, _ShapeAlphaWeight; + + #if SHAPE1CONTRAST_ON + half _ShapeContrast, _ShapeBrightness; + #endif + + #if SHAPE1DISTORT_ON + half4 _ShapeDistortTex_ST; + half _ShapeDistortAmount, _ShapeDistortXSpeed, _ShapeDistortYSpeed; + #endif + + #if SHAPE1ROTATE_ON + half _ShapeRotationOffset, _ShapeRotationSpeed; + #endif + + #if OFFSETSTREAM_ON + half _OffsetSh1; + #endif + + #if SHAPEWEIGHTS_ON + half _Sh1BlendOffset; + #endif + + #if SHAPE2_ON + half4 _Shape2Tex_ST, _Shape2Color; + half _Shape2XSpeed, _Shape2YSpeed, _Shape2ColorWeight, _Shape2AlphaWeight; + #if SHAPE2CONTRAST_ON + half _Shape2Contrast, _Shape2Brightness; + #endif + #if SHAPE2DISTORT_ON + half4 _Shape2DistortTex_ST; + half _Shape2DistortAmount, _Shape2DistortXSpeed, _Shape2DistortYSpeed; + #endif + #if SHAPE2ROTATE_ON + half _Shape2RotationOffset, _Shape2RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh2; + #endif + #if SHAPEWEIGHTS_ON + half _Sh2BlendOffset; + #endif + #endif + + #if SHAPE3_ON + half4 _Shape3Tex_ST, _Shape3Color; + half _Shape3XSpeed, _Shape3YSpeed, _Shape3ColorWeight, _Shape3AlphaWeight; + #if SHAPE3CONTRAST_ON + half _Shape3Contrast, _Shape3Brightness; + #endif + #if SHAPE3DISTORT_ON + half4 _Shape3DistortTex_ST; + half _Shape3DistortAmount, _Shape3DistortXSpeed, _Shape3DistortYSpeed; + #endif + #if SHAPE3ROTATE_ON + half _Shape3RotationOffset, _Shape3RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh3; + #endif + #if SHAPEWEIGHTS_ON + half _Sh3BlendOffset; + #endif + #endif + + #if GLOW_ON + half4 _GlowColor; + half _Glow, _GlowGlobal; + #if GLOWTEX_ON + half4 _GlowTex_ST; + #endif + #endif + + #if MASK_ON + half4 _MaskTex_ST; + half _MaskPow; + #endif + + #if COLORRAMP_ON + half _ColorRampLuminosity, _ColorRampBlend; + #endif + + #if ALPHASMOOTHSTEP_ON + half _AlphaStepMin, _AlphaStepMax; + #endif + + #if ALPHAFADE_ON + half _AlphaFadeAmount, _AlphaFadeSmooth, _AlphaFadePow; + #endif + + #if HSV_ON + half _HsvShift, _HsvSaturation, _HsvBright; + #endif + + #if POSTERIZE_ON + half _PosterizeNumColors; + #endif + + #if PIXELATE_ON + half _PixelateSize; + #endif + + #if DISTORT_ON + half4 _DistortTex_ST; + half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount; + #endif + + #if TEXTURESCROLL_ON + half _TextureScrollXSpeed, _TextureScrollYSpeed; + #endif + + #if SHAKEUV_ON + half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY; + #endif + + #if WAVEUV_ON + half _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY; + #endif + + #if ROUNDWAVEUV_ON + half _RoundWaveStrength, _RoundWaveSpeed; + #endif + + #if TWISTUV_ON + half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius; + #endif + + #if DOODLE_ON + half _HandDrawnAmount, _HandDrawnSpeed; + #endif + + #if ROUNDWAVEUV_ON || PIXELATE_ON + half4 _MainTex_TexelSize; + #endif + + #if VERTOFFSET_ON + half4 _VertOffsetTex_ST; + half _VertOffsetAmount, _VertOffsetPower, _VertOffsetTexXSpeed, _VertOffsetTexYSpeed; + #endif + + #if FADE_ON + half4 _FadeTex_ST; + half _FadeAmount, _FadeTransition, _FadePower, _FadeScrollXSpeed, _FadeScrollYSpeed; + #if FADEBURN_ON + half4 _FadeBurnColor, _FadeBurnTex_ST; + half _FadeBurnWidth, _FadeBurnGlow; + #endif + #endif + + #if COLORGRADING_ON + half3 _ColorGradingLight, _ColorGradingMiddle, _ColorGradingDark; + half _ColorGradingMidPoint; + #endif + + #if CAMDISTFADE_ON + half _CamDistFadeStepMin, _CamDistFadeStepMax, _CamDistProximityFade; + #endif + + #if RIM_ON + half _RimBias, _RimScale, _RimPower, _RimIntensity, _RimAddAmount, _RimErodesAlpha; + half4 _RimColor; + #endif + + #if BACKFACETINT_ON + half4 _BackFaceTint, _FrontFaceTint; + #endif + + #if SHAPEDEBUG_ON + half _DebugShape; + #endif + + #if SHAPE1MASK_ON + half4 _Shape1MaskTex_ST; + half _Shape1MaskPow; + #endif + + #if TRAILWIDTH_ON + half _TrailWidthPower; + #endif + + #if LIGHTANDSHADOW_ON + half3 _All1VfxLightDir; + half _ShadowAmount, _ShadowStepMin, _ShadowStepMax, _LightAmount; + half4 _LightColor; + #endif + + #if SHAPETEXOFFSET_ON + half _RandomSh1Mult, _RandomSh2Mult, _RandomSh3Mult; + #endif + + #if DEPTHGLOW_ON + half _DepthGlowDist, _DepthGlowPow, _DepthGlow, _DepthGlowGlobal; + half4 _DepthGlowColor; + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half _ScreenUvShDistScale,_ScreenUvSh2DistScale, _ScreenUvSh3DistScale; + #endif + + #if NORMALMAP_ON + half _NormalStrength; + #endif + + + + + CBUFFER_END + + + + + + + + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + + #if SHAPE1DISTORT_ON + TEXTURE2D(_ShapeDistortTex); + SAMPLER(sampler_ShapeDistortTex); + #endif + + #if SHAPE2_ON + TEXTURE2D(_Shape2Tex); + SAMPLER(sampler_Shape2Tex); + #if SHAPE2DISTORT_ON + TEXTURE2D(_Shape2DistortTex); + SAMPLER(sampler_Shape2DistortTex); + #endif + #endif + + #if SHAPE3_ON + TEXTURE2D(_Shape3Tex); + SAMPLER(sampler_Shape3Tex); + #if SHAPE3DISTORT_ON + TEXTURE2D(_Shape3DistortTex); + SAMPLER(sampler_Shape3DistortTex); + #endif + #endif + + #if GLOW_ON + #if GLOWTEX_ON + TEXTURE2D(_GlowTex); + SAMPLER(sampler_GlowTex); + #endif + #endif + + #if MASK_ON + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); + #endif + + #if COLORRAMP_ON + TEXTURE2D(_ColorRampTex); + SAMPLER(sampler_ColorRampTex); + #endif + + #if COLORRAMPGRAD_ON + TEXTURE2D(_ColorRampTexGradient); + SAMPLER(sampler_ColorRampTexGradient); + #endif + + #if DISTORT_ON + TEXTURE2D(_DistortTex); + SAMPLER(sampler_DistortTex); + #endif + + #if VERTOFFSET_ON + TEXTURE2D(_VertOffsetTex); + SAMPLER(sampler_VertOffsetTex); + #endif + + #if FADE_ON + TEXTURE2D(_FadeTex); + SAMPLER(sampler_FadeTex); + #if FADEBURN_ON + TEXTURE2D(_FadeBurnTex); + SAMPLER(sampler_FadeBurnTex); + #endif + #endif + + #if SHAPE1MASK_ON + TEXTURE2D(_Shape1MaskTex); + SAMPLER(sampler_Shape1MaskTex); + #endif + + #if TRAILWIDTH_ON + TEXTURE2D(_TrailWidthGradient); + SAMPLER(sampler_TrailWidthGradient); + #endif + + #if NORMALMAP_ON + TEXTURE2D(_NormalMap); + SAMPLER(sampler_NormalMap); + #endif + + half4 SampleTextureWithScroll(in Texture2D _tex, in SamplerState _sampler, in float2 uv, in half scrollXSpeed, in half scrollYSpeed, in float time) + { + half2 _uv = uv; + _uv.x += (time * scrollXSpeed) % 1; + _uv.y += (time * scrollYSpeed) % 1; + return SAMPLE_TEXTURE2D(_tex, _sampler, _uv); + } + + half EaseOutQuint(half x) + { + return 1 - pow(1 - x, 5); + } + + half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax) + { + return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin); + } + + float2 RotateUvs(float2 uv, half rotation, half4 scaleAndTranslate) + { + half2 center = half2(0.5 * scaleAndTranslate.x + scaleAndTranslate.z, 0.5 * scaleAndTranslate.y + scaleAndTranslate.w); + half cosAngle = cos(rotation); + half sinAngle = sin(rotation); + uv -= center; + uv = mul(half2x2(cosAngle, -sinAngle, sinAngle, cosAngle), uv); + uv += center; + return uv; + } + + half4 GetDebugColor(float4 resColor, half4 shape1, half4 shape2, half4 shape3) + { + half4 res = resColor; + + //MAKE SURE THE FOLLOWING CODE BLOCK IS UNCOMMENTED------------------------------------------- + #if SHAPEDEBUG_ON + if(_DebugShape < 1.5) return shape1; + #if SHAPE2_ON + else if (_DebugShape < 2.5) return shape2; + #endif + #if SHAPE3_ON + else return shape3; + #endif + #endif + + return res; + } + + void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d) + { + //uvDistTex --> extraV2F0 + //uvSh1DistTex --> extraV2F1 + //uvSh2DistTex --> extraV2F2 + //uvSh3DistTex --> extraV2F3 + + #if VERTOFFSET_ON + #if TIMEISCUSTOM_ON + const half time = v.texcoord0.z + globalCustomTime.y; + #else + const half time = v.texcoord0.z + _Time.y; + #endif + half4 offsetUv = half4(TRANSFORM_TEX(v.texcoord0.xy, _VertOffsetTex), 0, 0); + offsetUv.x += (time * _VertOffsetTexXSpeed) % 1; + offsetUv.y += (time * _VertOffsetTexYSpeed) % 1; + v.vertex.xyz += v.normal * _VertOffsetAmount * pow(SAMPLE_TEXTURE2D_LOD(_VertOffsetTex, sampler_VertOffsetTex, offsetUv, 0).r, _VertOffsetPower); + #endif + + #if DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F0.xy = TRANSFORM_TEX(v.texcoord0.xy, _DistortTex); + #endif + + #if SHAPE1DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F1.xy = TRANSFORM_TEX(v.texcoord0.xy, _ShapeDistortTex); + #endif + + #if SHAPE2_ON + #if SHAPE2DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F2.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape2DistortTex);; + #endif + #endif + + #if SHAPE3_ON + #if SHAPE3DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F3.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape3DistortTex); + #endif + #endif + } + + void Ext_SurfaceFunction0 (inout Surface o, ShaderData d) + { + //i.uvSeed -> d.texcoord0.xy + + float seed = d.texcoord0.z + _TimingSeed; + #if TIMEISCUSTOM_ON + const float4 shaderTime = globalCustomTime; + #else + const float4 shaderTime = _Time; + #endif + float time = shaderTime.y + seed; + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 originalUvs = d.texcoord0.xy; + #endif + + #if PIXELATE_ON + half aspectRatio = _MainTex_TexelSize.x / _MainTex_TexelSize.y; + half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio); + d.texcoord0.xy = floor(d.texcoord0.xy * pixelSize) / pixelSize; + #endif + + #if NORMALMAP_ON + half4 normalSample = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, d.texcoord0.xy); + half3 normalTS = UnpackNormal(normalSample); + normalTS.xy *= _NormalStrength; + o.Normal = normalTS; + #endif + + #if TWISTUV_ON + half2 tempUv = d.texcoord0.xy - half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + _TwistUvRadius *= (_MainTex_ST.x + _MainTex_ST.y) / 2; + half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius; + half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0; + half s = sin(theta); + half c = cos(theta); + half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0); + tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta); + tempUv += half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + d.texcoord0.xy = tempUv; + #endif + + #if DOODLE_ON + half2 uvCopy = d.texcoord0.xy; + _HandDrawnSpeed = (floor((shaderTime.x + seed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed; + uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4); + uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4); + d.texcoord0.xy = lerp(d.texcoord0.xy, d.texcoord0.xy + uvCopy, 0.0005 * _HandDrawnAmount); + #endif + + #if SHAKEUV_ON + half xShake = sin((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvX; + half yShake = cos((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvY; + d.texcoord0.xy += half2(xShake * 0.012, yShake * 0.01); + #endif + + #if WAVEUV_ON + half2 uvWave = half2(_WaveX * _MainTex_ST.x, _WaveY * _MainTex_ST.y) - d.texcoord0.xy; + #if ATLAS_ON + uvWave = half2(_WaveX, _WaveY) - uvRect; + #endif + uvWave.x *= _ScreenParams.x / _ScreenParams.y; + half angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((time * _WaveSpeed) % 360.0); + d.texcoord0.xy = d.texcoord0.xy + normalize(uvWave) * sin(angWave) * (_WaveStrength / 1000.0); + #endif + + #if ROUNDWAVEUV_ON + half xWave = ((0.5 * _MainTex_ST.x) - d.texcoord0.x); + half yWave = ((0.5 * _MainTex_ST.y) - d.texcoord0.y) * (_MainTex_TexelSize.w / _MainTex_TexelSize.z); + half ripple = -sqrt(xWave*xWave + yWave* yWave); + d.texcoord0.xy += (sin((ripple + time * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1; + #endif + + #if POLARUV_ON + half2 prePolarUvs = d.texcoord0.xy; + d.texcoord0.xy = d.texcoord0.xy - half2(0.5, 0.5); + d.texcoord0.xy = half2(atan2(d.texcoord0.y, d.texcoord0.x) / (1.0 * 6.28318530718), length(d.texcoord0.xy) * 2.0); + d.texcoord0.xy *= _MainTex_ST.xy; + #endif + + #if DISTORT_ON + #if POLARUVDISTORT_ON + half2 distortUvs = TRANSFORM_TEX(d.texcoord0.xy, _DistortTex); + #else + half2 distortUvs = d.extraV2F0.xy; + #endif + distortUvs.x += ((shaderTime.x + seed) * _DistortTexXSpeed) % 1; + distortUvs.y += ((shaderTime.x + seed) * _DistortTexYSpeed) % 1; + #if ATLAS_ON + d.extraV2F0.xy = half2((d.extraV2F0.x - _MinXUV) / (_MaxXUV - _MinXUV), (d.extraV2F0.y - _MinYUV) / (_MaxYUV - _MinYUV)); + #endif + half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, distortUvs).r - 0.5) * 0.2 * _DistortAmount; + d.texcoord0.x += distortAmnt; + d.texcoord0.y += distortAmnt; + #endif + + #if TEXTURESCROLL_ON + d.texcoord0.x += (time * _TextureScrollXSpeed) % 1; + d.texcoord0.y += (time * _TextureScrollYSpeed) % 1; + #endif + + #if TRAILWIDTH_ON + half width = pow(SAMPLE_TEXTURE2D(_TrailWidthGradient, sampler_TrailWidthGradient, d.texcoord0).r, _TrailWidthPower); + d.texcoord0.y = (d.texcoord0.y * 2 - 1) / width * 0.5 + 0.5; + clip(d.texcoord0.y); + clip(1 - d.texcoord0.y); + #endif + + float2 shape1Uv = d.texcoord0.xy; + #if SHAPE2_ON + float2 shape2Uv = shape1Uv; + #endif + #if SHAPE3_ON + float2 shape3Uv = shape1Uv; + #endif + + #if CAMDISTFADE_ON || SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half camDistance = distance(d.worldSpacePosition, _WorldSpaceCameraPos); + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 uvOffsetPostFx = d.texcoord0.xy - originalUvs; + d.texcoord0.xy = d.screenPos.xy / d.screenPos.w; + d.texcoord0.x = d.texcoord0.x * (_ScreenParams.x / _ScreenParams.y); + d.texcoord0.x -= 0.5; + d.texcoord0.xy -= uvOffsetPostFx; + originalUvs += uvOffsetPostFx; + half distanceZoom = camDistance * 0.1; + half2 scaleWithDistUvs = d.texcoord0.xy * distanceZoom + ((-distanceZoom * 0.5) + 0.5); + #if SHAPE1SCREENUV_ON + shape1Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvShDistScale); + #else + shape1Uv = originalUvs; + #endif + #if SHAPE2SCREENUV_ON && SHAPE2_ON + shape2Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh2DistScale); + #else + #if SHAPE2_ON + shape2Uv = originalUvs; + #endif + #endif + #if SHAPE3SCREENUV_ON && SHAPE3_ON + shape3Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh3DistScale); + #else + #if SHAPE3_ON + shape3Uv = originalUvs; + #endif + #endif + #endif + + shape1Uv = TRANSFORM_TEX(shape1Uv, _MainTex); + #if OFFSETSTREAM_ON + shape1Uv.x += i.offsetCustomData.x * _OffsetSh1; + shape1Uv.y += i.offsetCustomData.y * _OffsetSh1; + #endif + #if SHAPETEXOFFSET_ON + shape1Uv += seed * _RandomSh1Mult; + #endif + + #if SHAPE1DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh1DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _ShapeDistortTex); + #else + half2 sh1DistortUvs = d.extraV2F1.xy; + #endif + + sh1DistortUvs.x += ((time + seed) * _ShapeDistortXSpeed) % 1; + sh1DistortUvs.y += ((time + seed) * _ShapeDistortYSpeed) % 1; + half distortAmount = (SAMPLE_TEXTURE2D(_ShapeDistortTex, sampler_ShapeDistortTex, sh1DistortUvs).r - 0.5) * 0.2 * _ShapeDistortAmount; + shape1Uv.x += distortAmount; + shape1Uv.y += distortAmount; + #endif + #if SHAPE1ROTATE_ON + shape1Uv = RotateUvs(shape1Uv, _ShapeRotationOffset + ((_ShapeRotationSpeed * time) % 6.28318530718), _MainTex_ST); + #endif + + half4 shape1 = SampleTextureWithScroll(_MainTex, sampler_MainTex, shape1Uv, _ShapeXSpeed, _ShapeYSpeed, time); + #if SHAPE1SHAPECOLOR_ON + shape1.a = shape1.r; + shape1.rgb = _ShapeColor.rgb; + #else + shape1 *= _ShapeColor; + #endif + #if SHAPE1CONTRAST_ON + #if SHAPE1SHAPECOLOR_ON + shape1.a = saturate((shape1.a - 0.5) * _ShapeContrast + 0.5 + _ShapeBrightness); + #else + shape1.rgb = max(0, (shape1.rgb - half3(0.5, 0.5, 0.5)) * _ShapeContrast + half3(0.5, 0.5, 0.5) + _ShapeBrightness); + #endif + #endif + + half4 shape2 = 1.0; + #if SHAPE2_ON + shape2Uv = TRANSFORM_TEX(shape2Uv, _Shape2Tex); + #if OFFSETSTREAM_ON + shape2Uv.x += i.offsetCustomData.x * _OffsetSh2; + shape2Uv.y += i.offsetCustomData.y * _OffsetSh2; + #endif + #if SHAPETEXOFFSET_ON + shape2Uv += seed * _RandomSh2Mult; + #endif + #if SHAPE2DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh2DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape2DistortTex); + #else + half2 sh2DistortUvs = d.extraV2F2.xy; + #endif + sh2DistortUvs.x += ((time + seed) * _Shape2DistortXSpeed) % 1; + sh2DistortUvs.y += ((time + seed) * _Shape2DistortYSpeed) % 1; + half distortAmnt2 = (SAMPLE_TEXTURE2D(_Shape2DistortTex, sampler_Shape2DistortTex, sh2DistortUvs).r - 0.5) * 0.2 * _Shape2DistortAmount; + shape2Uv.x += distortAmnt2; + shape2Uv.y += distortAmnt2; + #endif + #if SHAPE2ROTATE_ON + shape2Uv = RotateUvs(shape2Uv, _Shape2RotationOffset + ((_Shape2RotationSpeed * time) % 6.28318530718), _Shape2Tex_ST); + #endif + + shape2 = SampleTextureWithScroll(_Shape2Tex, sampler_Shape2Tex, shape2Uv, _Shape2XSpeed, _Shape2YSpeed, time); + #if SHAPE2SHAPECOLOR_ON + shape2.a = shape2.r; + shape2.rgb = _Shape2Color.rgb; + #else + shape2 *= _Shape2Color; + #endif + #if SHAPE2CONTRAST_ON + #if SHAPE2SHAPECOLOR_ON + shape2.a = max(0, (shape2.a - 0.5) * _Shape2Contrast + 0.5 + _Shape2Brightness); + #else + shape2.rgb = max(0, (shape2.rgb - half3(0.5, 0.5, 0.5)) * _Shape2Contrast + half3(0.5, 0.5, 0.5) + _Shape2Brightness); + #endif + #endif + #endif + + half4 shape3 = 1.0; + #if SHAPE3_ON + shape3Uv = TRANSFORM_TEX(shape3Uv, _Shape3Tex); + + #if OFFSETSTREAM_ON + shape3Uv.x += i.offsetCustomData.x * _OffsetSh3; + shape3Uv.y += i.offsetCustomData.y * _OffsetSh3; + #endif + #if SHAPETEXOFFSET_ON + shape3Uv += seed * _RandomSh3Mult; + #endif + #if SHAPE3DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh3DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape3DistortTex); + #else + half2 sh3DistortUvs = d.extraV2F3.xy; + #endif + sh3DistortUvs.x += ((time + seed) * _Shape3DistortXSpeed) % 1; + sh3DistortUvs.y += ((time + seed) * _Shape3DistortYSpeed) % 1; + half distortAmnt3 = (SAMPLE_TEXTURE2D(_Shape3DistortTex, sampler_Shape3DistortTex, sh3DistortUvs).r - 0.5) * 0.3 * _Shape3DistortAmount; + shape3Uv.x += distortAmnt3; + shape3Uv.y += distortAmnt3; + #endif + #if SHAPE3ROTATE_ON + shape3Uv = RotateUvs(shape3Uv, _Shape3RotationOffset + ((_Shape3RotationSpeed * time) % 6.28318530718), _Shape3Tex_ST); + #endif + shape3 = SampleTextureWithScroll(_Shape3Tex, sampler_Shape3Tex, shape3Uv, _Shape3XSpeed, _Shape3YSpeed, time); + #if SHAPE3SHAPECOLOR_ON + shape3.a = shape3.r; + shape3.rgb = _Shape3Color.rgb; + #else + shape3 *= _Shape3Color; + #endif + #if SHAPE3CONTRAST_ON + #if SHAPE3SHAPECOLOR_ON + shape3.a = max(0, (shape3.a - 0.5) * _Shape3Contrast + 0.5 + _Shape3Brightness); + #else + shape3.rgb = max(0, (shape3.rgb - half3(0.5, 0.5, 0.5)) * _Shape3Contrast + half3(0.5, 0.5, 0.5) + _Shape3Brightness); + #endif + #endif + #endif + + half4 col = shape1; + //Mix all shapes pre: change weights if custom vertex effect active + #if SHAPEWEIGHTS_ON + half shapeWeightOffset; + #if SHAPE2_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh1BlendOffset; + _ShapeColorWeight = max(0, _ShapeColorWeight + shapeWeightOffset); + _ShapeAlphaWeight = max(0, _ShapeAlphaWeight + shapeWeightOffset); + shapeWeightOffset = i.offsetCustomData.z * _Sh2BlendOffset; + _Shape2ColorWeight = max(0, _Shape2ColorWeight + shapeWeightOffset); + _Shape2AlphaWeight = max(0, _Shape2AlphaWeight + shapeWeightOffset); + #endif + #if SHAPE3_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh3BlendOffset; + _Shape3ColorWeight = max(0, _Shape3ColorWeight + shapeWeightOffset); + _Shape3AlphaWeight = max(0, _Shape3AlphaWeight + shapeWeightOffset); + #endif + #endif + + //Mix all shapes + #if SHAPE2_ON + #if !SPLITRGBA_ON + _ShapeAlphaWeight = _ShapeColorWeight; + _Shape2AlphaWeight = _Shape2ColorWeight; + #endif + #if SHAPE3_ON //Shape3 On + #if !SPLITRGBA_ON + _Shape3AlphaWeight = _Shape3ColorWeight; + #endif + #if SHAPEADD_ON + col.rgb = ((shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight)) + (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(max(shape3.a * _Shape3AlphaWeight, max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight))); + #else + col.rgb = ((shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight)) * (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)) * (shape3.a * _Shape3AlphaWeight)); + #endif + #else //Shape3 Off + #if SHAPEADD_ON + col.rgb = (shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight); + col.a = saturate(max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight)); + #else + col.rgb = (shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight); + col.a = saturate((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)); + #endif + #endif + #endif + + #if SHAPE1MASK_ON + col = lerp(col, shape1, pow(SAMPLE_TEXTURE2D(_Shape1MaskTex, sampler_Shape1MaskTex, TRANSFORM_TEX(i.uvSeed.xy, _Shape1MaskTex)).r, _Shape1MaskPow)); + #endif + + #if PREMULTIPLYCOLOR_ON + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + col.a = min(luminance, col.a); + #endif + + col.rgb *= _Color.rgb * d.vertexColor.rgb; + #if PREMULTIPLYALPHA_ON + col.rgb *= col.a; + #endif + + #if !PREMULTIPLYCOLOR_ON && (COLORRAMP_ON || ALPHAFADE_ON || COLORGRADING_ON || FADE_ON || (ADDITIVECONFIG_ON && (GLOW_ON || DEPTHGLOW_ON))) + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + #endif + + #if (FADE_ON || ALPHAFADE_ON) && ALPHAFADEINPUTSTREAM_ON + col.a *= d.vertexColor.a; + d.vertexColor.a = d.texcoord0.w; + #endif + + #if FADE_ON + half preFadeAlpha = col.a; + _FadeAmount = saturate(_FadeAmount + (1 - d.vertexColor.a)); + _FadeTransition = max(0.01, _FadeTransition * EaseOutQuint(saturate(_FadeAmount))); + half2 fadeUv; + fadeUv = d.texcoord0.xy + seed; + fadeUv.x += (time * _FadeScrollXSpeed) % 1; + fadeUv.y += (time * _FadeScrollYSpeed) % 1; + half2 tiledUvFade1 = TRANSFORM_TEX(fadeUv, _FadeTex); + #if ADDITIVECONFIG_ON && !PREMULTIPLYCOLOR_ON + preFadeAlpha *= luminance; + #endif + _FadeAmount = saturate(pow(_FadeAmount, _FadePower)); + #if FADEBURN_ON + half2 tiledUvFade2 = TRANSFORM_TEX(fadeUv, _FadeBurnTex); + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + half fadeNaturalEdge = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fadeNaturalEdge; + half fadeBurn = saturate(smoothstep(0.0 , _FadeTransition + _FadeBurnWidth, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + fadeBurn = fadeNaturalEdge - fadeBurn; + _FadeBurnColor.rgb *= _FadeBurnGlow; + col.rgb += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2).rgb * _FadeBurnColor.rgb * preFadeAlpha; + #else + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + float fade = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fade; + #endif + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _FadeAmount; + #endif + #endif + + #if ALPHAFADE_ON + half alphaFadeLuminance; + _AlphaFadeAmount = saturate(_AlphaFadeAmount + (1 - d.vertexColor.a)); + _AlphaFadeAmount = saturate(pow(_AlphaFadeAmount, _AlphaFadePow)); + _AlphaFadeSmooth = max(0.01, _AlphaFadeSmooth * EaseOutQuint(saturate(_AlphaFadeAmount))); + #if ALPHAFADEUSESHAPE1_ON + alphaFadeLuminance = shape1.r; + #else + alphaFadeLuminance = luminance; + #endif + alphaFadeLuminance = saturate(alphaFadeLuminance - 0.001); + #if ALPHAFADEUSEREDCHANNEL_ON + col.a *= col.r; + #endif + col.a = saturate(col.a); + float alphaFade = saturate(smoothstep(0.0 , _AlphaFadeSmooth, RemapFloat(1.0 - _AlphaFadeAmount, 0.0, 1.0, -1.0, 1.0) + alphaFadeLuminance)); + col.a *= alphaFade; + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _AlphaFadeAmount; + #endif + #endif + + #if BACKFACETINT_ON + col.rgb = lerp(col.rgb * _BackFaceTint, col.rgb * _FrontFaceTint, step(0, dot(d.worldSpaceNormal, d.worldSpaceViewDir))); + #endif + + //#if LIGHTANDSHADOW_ON + //half NdL = saturate(dot(d.worldSpaceNormal, -_All1VfxLightDir)); + //col.rgb += _LightColor * _LightAmount * NdL; + //NdL = max(_ShadowAmount, NdL); + //NdL = smoothstep(_ShadowStepMin, _ShadowStepMax, NdL); + //col.rgb *= NdL; + //#endif + + #if COLORGRADING_ON + col.rgb *= lerp(lerp(_ColorGradingDark, _ColorGradingMiddle, luminance/_ColorGradingMidPoint), + lerp(_ColorGradingMiddle, _ColorGradingLight, (luminance - _ColorGradingMidPoint)/(1.0 - _ColorGradingMidPoint)), step(_ColorGradingMidPoint, luminance)); + #endif + + #if COLORRAMP_ON + half colorRampLuminance = saturate(luminance + _ColorRampLuminosity); + #if COLORRAMPGRAD_ON + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(colorRampLuminance, 0)); + #else + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(colorRampLuminance, 0)); + #endif + col.rgb = lerp(col.rgb, colorRampRes.rgb, _ColorRampBlend); + col.a = lerp(col.a, saturate(col.a * colorRampRes.a), _ColorRampBlend); + #endif + + #if POSTERIZE_ON && !POSTERIZEOUTLINE_ON + col.rgb = floor(col.rgb / (1.0 / _PosterizeNumColors)) * (1.0 / _PosterizeNumColors); + #endif + + #if DEPTHGLOW_ON + half sceneDepthDiff = GetLinearEyeDepth(d.screenUV) - d.screenPos.w; + #endif + + #if RIM_ON + half NdV = 1 - abs(dot(d.worldSpaceNormal, d.worldSpaceViewDir)); + half rimFactor = saturate(_RimBias + _RimScale * pow(NdV, _RimPower)); + half4 rimCol = _RimColor * rimFactor; + rimCol.rgb *= _RimIntensity; + col.rgb = lerp(col.rgb * (rimCol.rgb + half3(1,1,1)), col.rgb + rimCol.rgb, _RimAddAmount); + col.a = saturate(col.a * (1 - rimFactor * _RimErodesAlpha)); + #endif + + #if DEPTHGLOW_ON + half depthGlowMask = saturate(_DepthGlowDist * pow((1 - sceneDepthDiff), _DepthGlowPow)); + col.rgb = lerp(col.rgb, _DepthGlowGlobal * col.rgb, depthGlowMask); + half depthGlowMult = 1; + #if ADDITIVECONFIG_ON + depthGlowMult = luminance; + #endif + col.rgb += _DepthGlowColor.rgb * _DepthGlow * depthGlowMask * col.a * depthGlowMult; + #endif + + #if GLOW_ON + half glowMask = 1; + #if GLOWTEX_ON + glowMask = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, TRANSFORM_TEX(d.texcoord0.xy, _GlowTex)); + #endif + col.rgb *= _GlowGlobal * glowMask; + half glowMult = 1; + #if ADDITIVECONFIG_ON + glowMult = luminance; + #endif + + col.rgb += _GlowColor.rgb * _Glow * glowMask * col.a * glowMult; + #endif + + #if HSV_ON + half3 resultHsv = half3(col.rgb); + half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180); + half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180); + resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x + + (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z; + resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x + + (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z; + resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x + + (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y + + (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z; + col.rgb = resultHsv; + #endif + + #if CAMDISTFADE_ON + col.a *= 1 - saturate(smoothstep(_CamDistFadeStepMin, _CamDistFadeStepMax, camDistance)); + col.a *= smoothstep(0.0, _CamDistProximityFade, camDistance); + #endif + + #if MASK_ON + half2 maskUv = d.texcoord0.xy; + #if POLARUV_ON + maskUv = prePolarUvs; + #endif + half4 maskSample = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, TRANSFORM_TEX(maskUv, _MaskTex)); + half mask = pow(min(maskSample.r, maskSample.a), _MaskPow); + col.a *= mask; + #endif + + #if ALPHASMOOTHSTEP_ON + col.a = smoothstep(_AlphaStepMin, _AlphaStepMax, col.a); + #endif + + half4 debugColor = col; + #if SHAPEDEBUG_ON + debugColor = GetDebugColor(col, shape1, shape2, shape3); + #endif + + clip(debugColor.a - _AlphaCutoffValue - 0.01); + + //#if FOG_ON + //UNITY_APPLY_FOG(i.fogCoord, col); + //#endif + + //Don't use a starting i.color.a lower than 1 unless using vertex stream dissolve when using a FADE effect + #if !FADE_ON && !ALPHAFADE_ON + col.a *= _Alpha * d.vertexColor.a; + #endif + #if FADE_ON || ALPHAFADE_ON + col.a *= _Alpha; + #endif + #if ADDITIVECONFIG_ON + col.rgb *= col.a; + #endif + + + #if SHAPEDEBUG_ON + o.Albedo = debugColor.rgb; + o.Alpha = debugColor.a; + #else + o.Albedo = col.rgb; + o.Alpha = col.a; + #endif + } + + + + + + void ChainSurfaceFunction(inout Surface l, inout ShaderData d) + { + Ext_SurfaceFunction0(l, d); + // Ext_SurfaceFunction1(l, d); + // Ext_SurfaceFunction2(l, d); + // Ext_SurfaceFunction3(l, d); + // Ext_SurfaceFunction4(l, d); + // Ext_SurfaceFunction5(l, d); + // Ext_SurfaceFunction6(l, d); + // Ext_SurfaceFunction7(l, d); + // Ext_SurfaceFunction8(l, d); + // Ext_SurfaceFunction9(l, d); + // Ext_SurfaceFunction10(l, d); + // Ext_SurfaceFunction11(l, d); + // Ext_SurfaceFunction12(l, d); + // Ext_SurfaceFunction13(l, d); + // Ext_SurfaceFunction14(l, d); + // Ext_SurfaceFunction15(l, d); + // Ext_SurfaceFunction16(l, d); + // Ext_SurfaceFunction17(l, d); + // Ext_SurfaceFunction18(l, d); + // Ext_SurfaceFunction19(l, d); + // Ext_SurfaceFunction20(l, d); + // Ext_SurfaceFunction21(l, d); + // Ext_SurfaceFunction22(l, d); + // Ext_SurfaceFunction23(l, d); + // Ext_SurfaceFunction24(l, d); + // Ext_SurfaceFunction25(l, d); + // Ext_SurfaceFunction26(l, d); + // Ext_SurfaceFunction27(l, d); + // Ext_SurfaceFunction28(l, d); + // Ext_SurfaceFunction29(l, d); + } + +#if !_DECALSHADER + + void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time) + { + ExtraV2F d; + + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + // due to motion vectors in HDRP, we need to use the last + // time in certain spots. So if you are going to use _Time to adjust vertices, + // you need to use this time or motion vectors will break. + d.time = time; + + Ext_ModifyVertex0(v, d); + // Ext_ModifyVertex1(v, d); + // Ext_ModifyVertex2(v, d); + // Ext_ModifyVertex3(v, d); + // Ext_ModifyVertex4(v, d); + // Ext_ModifyVertex5(v, d); + // Ext_ModifyVertex6(v, d); + // Ext_ModifyVertex7(v, d); + // Ext_ModifyVertex8(v, d); + // Ext_ModifyVertex9(v, d); + // Ext_ModifyVertex10(v, d); + // Ext_ModifyVertex11(v, d); + // Ext_ModifyVertex12(v, d); + // Ext_ModifyVertex13(v, d); + // Ext_ModifyVertex14(v, d); + // Ext_ModifyVertex15(v, d); + // Ext_ModifyVertex16(v, d); + // Ext_ModifyVertex17(v, d); + // Ext_ModifyVertex18(v, d); + // Ext_ModifyVertex19(v, d); + // Ext_ModifyVertex20(v, d); + // Ext_ModifyVertex21(v, d); + // Ext_ModifyVertex22(v, d); + // Ext_ModifyVertex23(v, d); + // Ext_ModifyVertex24(v, d); + // Ext_ModifyVertex25(v, d); + // Ext_ModifyVertex26(v, d); + // Ext_ModifyVertex27(v, d); + // Ext_ModifyVertex28(v, d); + // Ext_ModifyVertex29(v, d); + + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p) + { + ExtraV2F d; + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = v2p.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = v2p.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = v2p.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = v2p.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = v2p.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = v2p.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = v2p.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = v2p.extraV2F7; + // #endif + + + // Ext_ModifyTessellatedVertex0(v, d); + // Ext_ModifyTessellatedVertex1(v, d); + // Ext_ModifyTessellatedVertex2(v, d); + // Ext_ModifyTessellatedVertex3(v, d); + // Ext_ModifyTessellatedVertex4(v, d); + // Ext_ModifyTessellatedVertex5(v, d); + // Ext_ModifyTessellatedVertex6(v, d); + // Ext_ModifyTessellatedVertex7(v, d); + // Ext_ModifyTessellatedVertex8(v, d); + // Ext_ModifyTessellatedVertex9(v, d); + // Ext_ModifyTessellatedVertex10(v, d); + // Ext_ModifyTessellatedVertex11(v, d); + // Ext_ModifyTessellatedVertex12(v, d); + // Ext_ModifyTessellatedVertex13(v, d); + // Ext_ModifyTessellatedVertex14(v, d); + // Ext_ModifyTessellatedVertex15(v, d); + // Ext_ModifyTessellatedVertex16(v, d); + // Ext_ModifyTessellatedVertex17(v, d); + // Ext_ModifyTessellatedVertex18(v, d); + // Ext_ModifyTessellatedVertex19(v, d); + // Ext_ModifyTessellatedVertex20(v, d); + // Ext_ModifyTessellatedVertex21(v, d); + // Ext_ModifyTessellatedVertex22(v, d); + // Ext_ModifyTessellatedVertex23(v, d); + // Ext_ModifyTessellatedVertex24(v, d); + // Ext_ModifyTessellatedVertex25(v, d); + // Ext_ModifyTessellatedVertex26(v, d); + // Ext_ModifyTessellatedVertex27(v, d); + // Ext_ModifyTessellatedVertex28(v, d); + // Ext_ModifyTessellatedVertex29(v, d); + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color) + { + // Ext_FinalColorForward0(l, d, color); + // Ext_FinalColorForward1(l, d, color); + // Ext_FinalColorForward2(l, d, color); + // Ext_FinalColorForward3(l, d, color); + // Ext_FinalColorForward4(l, d, color); + // Ext_FinalColorForward5(l, d, color); + // Ext_FinalColorForward6(l, d, color); + // Ext_FinalColorForward7(l, d, color); + // Ext_FinalColorForward8(l, d, color); + // Ext_FinalColorForward9(l, d, color); + // Ext_FinalColorForward10(l, d, color); + // Ext_FinalColorForward11(l, d, color); + // Ext_FinalColorForward12(l, d, color); + // Ext_FinalColorForward13(l, d, color); + // Ext_FinalColorForward14(l, d, color); + // Ext_FinalColorForward15(l, d, color); + // Ext_FinalColorForward16(l, d, color); + // Ext_FinalColorForward17(l, d, color); + // Ext_FinalColorForward18(l, d, color); + // Ext_FinalColorForward19(l, d, color); + // Ext_FinalColorForward20(l, d, color); + // Ext_FinalColorForward21(l, d, color); + // Ext_FinalColorForward22(l, d, color); + // Ext_FinalColorForward23(l, d, color); + // Ext_FinalColorForward24(l, d, color); + // Ext_FinalColorForward25(l, d, color); + // Ext_FinalColorForward26(l, d, color); + // Ext_FinalColorForward27(l, d, color); + // Ext_FinalColorForward28(l, d, color); + // Ext_FinalColorForward29(l, d, color); + } + + void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask) + { + // Ext_FinalGBufferStandard0(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard1(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard2(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard3(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard4(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard5(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard6(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard7(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard8(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard9(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard10(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard11(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard12(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard13(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard14(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard15(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard16(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard17(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard18(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard19(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard20(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard21(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard22(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard23(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard24(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard25(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard26(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard27(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard28(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard29(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + } +#endif + + + + + +#if _DECALSHADER + + ShaderData CreateShaderData(SurfaceDescriptionInputs IN) + { + ShaderData d = (ShaderData)0; + d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal); + d.worldSpaceNormal = IN.WorldSpaceNormal; + d.worldSpaceTangent = IN.WorldSpaceTangent; + + d.worldSpacePosition = IN.WorldSpacePosition; + d.texcoord0 = IN.uv0.xyxy; + d.screenPos = IN.ScreenPosition; + + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(d.worldSpacePosition), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(d.worldSpacePosition, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenUV = (IN.ScreenPosition.xy / max(0.01, IN.ScreenPosition.w)); + // #endif + + return d; + } +#else + + ShaderData CreateShaderData(VertexToPixel i + #if NEED_FACING + , bool facing + #endif + ) + { + ShaderData d = (ShaderData)0; + d.clipPos = i.pos; + d.worldSpacePosition = i.worldPos; + + d.worldSpaceNormal = normalize(i.worldNormal); + d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz); + + d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w; + float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign; + + d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal); + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + d.texcoord0 = i.texcoord0; + // d.texcoord1 = i.texcoord1; + // d.texcoord2 = i.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // d.texcoord3 = i.texcoord3; + // #endif + + // d.isFrontFace = facing; + // #if %VERTEXCOLORREQUIREKEY% + d.vertexColor = i.vertexColor; + // #endif + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(i.worldPos), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(i.worldPos, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenPos = i.screenPos; + d.screenUV = (i.screenPos.xy / i.screenPos.w); + // #endif + + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = i.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = i.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = i.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = i.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = i.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = i.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = i.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = i.extraV2F7; + // #endif + + return d; + } + +#endif + + + #if defined(_PASSSHADOW) + float3 _LightDirection; + float3 _LightPosition; + #endif + + #if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + + #define GetWorldToViewMatrix() _ViewMatrix + #define UNITY_MATRIX_I_V _InvViewMatrix + #define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix) + #define UNITY_MATRIX_I_P _InvProjMatrix + #define GetWorldToHClipMatrix() _ViewProjMatrix + #define UNITY_MATRIX_I_VP _InvViewProjMatrix + #define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix + #define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix + #define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix + + void MotionVectorPositionZBias(VertexToPixel input) + { + #if UNITY_REVERSED_Z + input.pos.z -= unity_MotionVectorsParams.z * input.pos.w; + #else + input.pos.z += unity_MotionVectorsParams.z * input.pos.w; + #endif + } + + #endif + + // vertex shader + VertexToPixel Vert (VertexData v) + { + VertexToPixel o = (VertexToPixel)0; + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + VertexData previousMesh = v; + #endif + #if !_TESSELLATION_ON + ChainModifyVertex(v, o, _Time); + #endif + + o.texcoord0 = v.texcoord0; + // o.texcoord1 = v.texcoord1; + // o.texcoord2 = v.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // o.texcoord3 = v.texcoord3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + o.vertexColor = v.vertexColor; + // #endif + + // This return the camera relative position (if enable) + float3 positionWS = TransformObjectToWorld(v.vertex.xyz); + float3 normalWS = TransformObjectToWorldNormal(v.normal); + float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + o.worldPos = positionWS; + o.worldNormal = normalWS; + o.worldTangent = tangentWS; + + + // For some very odd reason, in 2021.2, we can't use Unity's defines, but have to use our own.. + #if _PASSSHADOW + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - o.worldPos); + #else + float3 lightDirectionWS = _LightDirection; + #endif + // Define shadow pass specific clip position for Universal + o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS)); + #if UNITY_REVERSED_Z + o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #else + o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #endif + #elif _PASSMETA + o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); + #else + o.pos = TransformWorldToHClip(o.worldPos); + #endif + + // #if %SCREENPOSREQUIREKEY% + o.screenPos = ComputeScreenPos(o.pos, _ProjectionParams.x); + // #endif + + + #if _PASSFORWARD || _PASSGBUFFER + float2 uv1 = v.texcoord1.xy; + OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV); + // o.texcoord1.xy = uv1; + #if UNITY_VERSION < 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + + #if defined(DYNAMICLIGHTMAP_ON) + o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #if UNITY_VERSION >= 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + #elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009 + OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion); + #endif + #endif + + #ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + half fogFactor = 0; + #if defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(o.pos.z); + #endif + #if _BAKEDLIT + o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0); + #else + half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal); + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + #endif + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + o.shadowCoord = GetShadowCoord(vertexInput); + #endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + #if !defined(TESSELLATION_ON) + MotionVectorPositionZBias(o); + #endif + + o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0); + // Note: unity_MotionVectorsParams.y is 0 is forceNoMotion is enabled + bool forceNoMotion = unity_MotionVectorsParams.y == 0.0; + + if (!forceNoMotion) + { + #if defined(HAVE_VFX_MODIFICATION) + float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS; + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + const bool applyDeformation = false; + #else + const bool applyDeformation = true; + #endif + #else + const bool hasDeformation = unity_MotionVectorsParams.x == 1; // Mesh has skinned deformation + float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz; + + #if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT) + const bool applyDeformation = true; + #else + const bool applyDeformation = hasDeformation; + #endif + #endif + // TODO + #if defined(FEATURES_GRAPH_VERTEX) + if (applyDeformation) + previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS); + else + previousPositionOS = previousMesh.positionOS; + + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + #endif + + #if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED) + // Deformed vertices in DOTS are not cumulative with built-in Unity skinning/blend shapes + // Needs to be called after vertex modification has been applied otherwise it will be + // overwritten by Compute Deform node + ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS); + #endif + #if defined (_ADD_PRECOMPUTED_VELOCITY) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f)); + + #if defined(HAVE_VFX_MODIFICATION) + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY) + #error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards. + #endif + o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS); + #else + #if VFX_WORLD_SPACE + //previousPositionOS is already in world space + const float3 previousPositionWS = previousPositionOS; + #else + const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz; + #endif + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f)); + #endif + #else + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1))); + #endif + } + #endif + + return o; + } + + + + + // fragment shader + half4 Frag (VertexToPixel IN + #if NEED_FACING + , bool facing : SV_IsFrontFace + #endif + ) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(IN); + + ShaderData d = CreateShaderData(IN + #if NEED_FACING + , facing + #endif + ); + + Surface l = (Surface)0; + + l.Albedo = half3(0.5, 0.5, 0.5); + l.Normal = float3(0,0,1); + l.Occlusion = 1; + l.Alpha = 1; + + ChainSurfaceFunction(l, d); + + MetaInput metaInput = (MetaInput)0; + metaInput.Albedo = l.Albedo; + metaInput.Emission = l.Emission; + + return MetaFragment(metaInput); + + } + + ENDHLSL + + } + + + + Pass + { + Name "DepthNormals" + Tags + { + "LightMode" = "DepthNormals" + } + + // Render State + Cull Back + ZTest LEqual + ZWrite On + + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" + } + Cull [_CullingOption] + ZWrite [_ZWrite] + ZTest [_ZTestMode] + ColorMask [_ColorMask] +Lighting Off + + + HLSLPROGRAM + + #pragma vertex Vert + #pragma fragment Frag + + #pragma target 3.0 + + #pragma prefer_hlslcc gles + #pragma exclude_renderers d3d11_9x + #pragma multi_compile_fog + #pragma multi_compile_instancing + #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE + #pragma multi_compile_fragment _ _WRITE_RENDERING_LAYERS + + #define SHADERPASS SHADERPASS_DEPTHNORMALSONLY + #define _PASSDEPTH 1 + #define _PASSDEPTHNORMALS 1 + + + + #pragma shader_feature_local TIMEISCUSTOM_ON + #pragma shader_feature_local ADDITIVECONFIG_ON + #pragma shader_feature_local PREMULTIPLYALPHA_ON + #pragma shader_feature_local PREMULTIPLYCOLOR_ON + #pragma shader_feature_local SPLITRGBA_ON + #pragma shader_feature_local SHAPEADD_ON + + #pragma shader_feature_local SHAPE1SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE2SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE3SCREENUV_ON /////////////////Pipeline specific implementation + + #pragma shader_feature_local SHAPEDEBUG_ON + + #pragma shader_feature_local SHAPE1CONTRAST_ON + #pragma shader_feature_local SHAPE1DISTORT_ON + #pragma shader_feature_local SHAPE1ROTATE_ON + #pragma shader_feature_local SHAPE1SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE2_ON + #pragma shader_feature_local SHAPE2CONTRAST_ON + #pragma shader_feature_local SHAPE2DISTORT_ON + #pragma shader_feature_local SHAPE2ROTATE_ON + #pragma shader_feature_local SHAPE2SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE3_ON + #pragma shader_feature_local SHAPE3CONTRAST_ON + #pragma shader_feature_local SHAPE3DISTORT_ON + #pragma shader_feature_local SHAPE3ROTATE_ON + #pragma shader_feature_local SHAPE3SHAPECOLOR_ON + + #pragma shader_feature_local GLOW_ON + #pragma shader_feature_local GLOWTEX_ON + #pragma shader_feature_local DEPTHGLOW_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local MASK_ON + #pragma shader_feature_local COLORRAMP_ON + #pragma shader_feature_local COLORRAMPGRAD_ON + #pragma shader_feature_local COLORGRADING_ON + #pragma shader_feature_local HSV_ON + #pragma shader_feature_local POSTERIZE_ON + #pragma shader_feature_local PIXELATE_ON + #pragma shader_feature_local DISTORT_ON + #pragma shader_feature_local SHAKEUV_ON + #pragma shader_feature_local WAVEUV_ON + #pragma shader_feature_local ROUNDWAVEUV_ON + #pragma shader_feature_local TWISTUV_ON + #pragma shader_feature_local DOODLE_ON + #pragma shader_feature_local OFFSETSTREAM_ON + #pragma shader_feature_local TEXTURESCROLL_ON + #pragma shader_feature_local VERTOFFSET_ON + #pragma shader_feature_local RIM_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local BACKFACETINT_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local POLARUV_ON + #pragma shader_feature_local POLARUVDISTORT_ON + #pragma shader_feature_local SHAPE1MASK_ON + #pragma shader_feature_local TRAILWIDTH_ON + #pragma shader_feature_local LIGHTANDSHADOW_ON + #pragma shader_feature_local SHAPETEXOFFSET_ON + #pragma shader_feature_local SHAPEWEIGHTS_ON + + #pragma shader_feature_local ALPHACUTOFF_ON + #pragma shader_feature_local ALPHASMOOTHSTEP_ON + #pragma shader_feature_local FADE_ON + #pragma shader_feature_local FADEBURN_ON + #pragma shader_feature_local ALPHAFADE_ON + #pragma shader_feature_local ALPHAFADEUSESHAPE1_ON + #pragma shader_feature_local ALPHAFADEUSEREDCHANNEL_ON + #pragma shader_feature_local ALPHAFADETRANSPARENCYTOO_ON + #pragma shader_feature_local ALPHAFADEINPUTSTREAM_ON + #pragma shader_feature_local CAMDISTFADE_ON + + #pragma shader_feature NORMALMAP_ON + + + #define _URP 1 +#define REQUIRE_DEPTH_TEXTURE + + + // this has to be here or specular color will be ignored. Not in SG code + #if _SIMPLELIT + #define _SPECULAR_COLOR + #endif + + + // Includes + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/LODCrossFade.hlsl" + + + + + + #undef WorldNormalVector + #define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix) + + #define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal) + + #define _WorldSpaceLightPos0 _MainLightPosition + + #define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name); + #define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name); + + #define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z) + #define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod) + #define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord) + #define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord) + + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod) + + #if defined(UNITY_COMPILER_HLSL) + #define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0; + #else + #define UNITY_INITIALIZE_OUTPUT(type,name) + #endif + + #define sampler2D_float sampler2D + #define sampler2D_half sampler2D + + + + // data across stages, stripped like the above. + struct VertexToPixel + { + float4 pos : SV_POSITION; + float3 worldPos : TEXCOORD0; + float3 worldNormal : TEXCOORD1; + float4 worldTangent : TEXCOORD2; + float4 texcoord0 : TEXCOORD3; + // float4 texcoord1 : TEXCOORD4; + // float4 texcoord2 : TEXCOORD5; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD6; + // #endif + + // #if %SCREENPOSREQUIREKEY% + float4 screenPos : TEXCOORD7; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + half4 vertexColor : COLOR; + // #endif + + #if defined(LIGHTMAP_ON) + float2 lightmapUV : TEXCOORD8; + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float2 dynamicLightmapUV : TEXCOORD9; + #endif + #if !defined(LIGHTMAP_ON) + float4 probeOcclusion : TEXCOORD8; + float3 sh : TEXCOORD10; + #endif + + #if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT) + float4 fogFactorAndVertexLight : TEXCOORD11; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD12; + #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD13; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD14; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD15; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD16; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD17; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD18; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD19; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD20; + // #endif + + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : CUSTOM_INSTANCE_ID; + #endif + #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) + uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; + #endif + #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) + uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; + #endif + #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; + #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float4 previousPositionCS : TEXCOORD21; // Contain previous transform position (in case of skinning for example) + float4 positionCS : TEXCOORD22; + #endif + }; + + + + + // data describing the user output of a pixel + struct Surface + { + half3 Albedo; + half Height; + half3 Normal; + half Smoothness; + half3 Emission; + half Metallic; + half3 Specular; + half Occlusion; + half SpecularPower; // for simple lighting + half Alpha; + float outputDepth; // if written, SV_Depth semantic is used. ShaderData.clipPos.z is unused value + // HDRP Only + half SpecularOcclusion; + half SubsurfaceMask; + half Thickness; + half CoatMask; + half CoatSmoothness; + half Anisotropy; + half IridescenceMask; + half IridescenceThickness; + int DiffusionProfileHash; + float SpecularAAThreshold; + float SpecularAAScreenSpaceVariance; + // requires _OVERRIDE_BAKEDGI to be defined, but is mapped in all pipelines + float3 DiffuseGI; + float3 BackDiffuseGI; + float3 SpecularGI; + float ior; + float3 transmittanceColor; + float atDistance; + float transmittanceMask; + // requires _OVERRIDE_SHADOWMASK to be defines + float4 ShadowMask; + + // for decals + float NormalAlpha; + float MAOSAlpha; + + + }; + + // Data the user declares in blackboard blocks + struct Blackboard + { + + float blackboardDummyData; + }; + + // data the user might need, this will grow to be big. But easy to strip + struct ShaderData + { + float4 clipPos; // SV_POSITION + float3 localSpacePosition; + float3 localSpaceNormal; + float3 localSpaceTangent; + + float3 worldSpacePosition; + float3 worldSpaceNormal; + float3 worldSpaceTangent; + float tangentSign; + + float3 worldSpaceViewDir; + float3 tangentSpaceViewDir; + + float4 texcoord0; + float4 texcoord1; + float4 texcoord2; + float4 texcoord3; + + float2 screenUV; + float4 screenPos; + + float4 vertexColor; + bool isFrontFace; + + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + + float3x3 TBNMatrix; + Blackboard blackboard; + }; + + struct VertexData + { + #if SHADER_TARGET > 30 + // uint vertexID : SV_VertexID; + #endif + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + + // optimize out mesh coords when not in use by user or lighting system + #if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER) + float4 texcoord1 : TEXCOORD1; + #endif + + #if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + #if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON))) + float4 texcoord1 : TEXCOORD1; + #endif + #if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + + #if _HDRP + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + #endif + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD4; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD5; // Add Precomputed Velocity (Alembic computes velocities on runtime side). + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessVertex + { + float4 vertex : INTERNALTESSPOS; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD5; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD6; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD7; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD8; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD9; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD10; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD11; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD12; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD13; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD14; + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + struct ExtraV2F + { + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + Blackboard blackboard; + float4 time; + }; + + + float3 WorldToTangentSpace(ShaderData d, float3 normal) + { + return mul(d.TBNMatrix, normal); + } + + float3 TangentToWorldSpace(ShaderData d, float3 normal) + { + return mul(normal, d.TBNMatrix); + } + + // in this case, make standard more like SRPs, because we can't fix + // unity_WorldToObject in HDRP, since it already does macro-fu there + + #if _STANDARD + float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); }; + float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); }; + float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); }; + float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); }; + float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; } + float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; } + #if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER)) + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod) + #else + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) + #endif + + #undef GetWorldToObjectMatrix() + + #define GetWorldToObjectMatrix() unity_WorldToObject + + + #endif + + float3 GetCameraWorldPosition() + { + #if _HDRP + return GetCameraRelativePositionWS(_WorldSpaceCameraPos); + #else + return _WorldSpaceCameraPos; + #endif + } + + #if _GRABPASSUSED + #if _STANDARD + TEXTURE2D(%GRABTEXTURE%); + SAMPLER(sampler_%GRABTEXTURE%); + #endif + + half3 GetSceneColor(float2 uv) + { + #if _STANDARD + return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb; + #else + return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv); + #endif + } + #endif + + + + #if _STANDARD + UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); + float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); } + #else + float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); } + #endif + + float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) + { + float eye = GetLinearEyeDepth(uv); + float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz); + + float dt = dot(worldSpaceViewDir, camView); + float3 div = worldSpaceViewDir/dt; + float3 wpos = (eye * div) + GetCameraWorldPosition(); + return wpos; + } + + #if _HDRP + float3 ObjectToWorldSpacePosition(float3 pos) + { + return GetAbsolutePositionWS(TransformObjectToWorld(pos)); + } + #else + float3 ObjectToWorldSpacePosition(float3 pos) + { + return TransformObjectToWorld(pos); + } + #endif + + #if _STANDARD + UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture); + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); + float3 norms = DecodeViewNormalStereo(depthNorms); + norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5; + return norms; + } + #elif _HDRP && !_DECALSHADER + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + NormalData nd; + DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd); + return nd.normalWS; + } + #elif _URP + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" + #endif + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + return SampleSceneNormals(uv); + #else + float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir); + return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5; + #endif + + } + #endif + + #if _HDRP + + half3 UnpackNormalmapRGorAG(half4 packednormal) + { + // This do the trick + packednormal.x *= packednormal.w; + + half3 normal; + normal.xy = packednormal.xy * 2 - 1; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 UnpackNormal(half4 packednormal) + { + #if defined(UNITY_NO_DXT5nm) + return packednormal.xyz * 2 - 1; + #else + return UnpackNormalmapRGorAG(packednormal); + #endif + } + #endif + #if _HDRP || _URP + + half3 UnpackScaleNormal(half4 packednormal, half scale) + { + #ifndef UNITY_NO_DXT5nm + // Unpack normal as DXT5nm (1, y, 1, x) or BC5 (x, y, 0, 1) + // Note neutral texture like "bump" is (0, 0, 1, 1) to work with both plain RGB normal and DXT5nm/BC5 + packednormal.x *= packednormal.w; + #endif + half3 normal; + normal.xy = (packednormal.xy * 2 - 1) * scale; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + + #endif + + + void GetSun(out float3 lightDir, out float3 color) + { + lightDir = float3(0.5, 0.5, 0); + color = 1; + #if _HDRP + if (_DirectionalLightCount > 0) + { + DirectionalLightData light = _DirectionalLightDatas[0]; + lightDir = -light.forward.xyz; + color = light.color; + } + #elif _STANDARD + lightDir = normalize(_WorldSpaceLightPos0.xyz); + color = _LightColor0.rgb; + #elif _URP + Light light = GetMainLight(); + lightDir = light.direction; + color = light.color; + #endif + } + + + + CBUFFER_START(UnityPerMaterial) + + + half4 _Color; + half _Alpha; + half _AlphaCutoffValue; + + half _TimingSeed; + + #if TIMEISCUSTOM_ON + float4 globalCustomTime; + #endif + + half4 _MainTex_ST, _ShapeColor; + half _ShapeXSpeed, _ShapeYSpeed, _ShapeColorWeight, _ShapeAlphaWeight; + + #if SHAPE1CONTRAST_ON + half _ShapeContrast, _ShapeBrightness; + #endif + + #if SHAPE1DISTORT_ON + half4 _ShapeDistortTex_ST; + half _ShapeDistortAmount, _ShapeDistortXSpeed, _ShapeDistortYSpeed; + #endif + + #if SHAPE1ROTATE_ON + half _ShapeRotationOffset, _ShapeRotationSpeed; + #endif + + #if OFFSETSTREAM_ON + half _OffsetSh1; + #endif + + #if SHAPEWEIGHTS_ON + half _Sh1BlendOffset; + #endif + + #if SHAPE2_ON + half4 _Shape2Tex_ST, _Shape2Color; + half _Shape2XSpeed, _Shape2YSpeed, _Shape2ColorWeight, _Shape2AlphaWeight; + #if SHAPE2CONTRAST_ON + half _Shape2Contrast, _Shape2Brightness; + #endif + #if SHAPE2DISTORT_ON + half4 _Shape2DistortTex_ST; + half _Shape2DistortAmount, _Shape2DistortXSpeed, _Shape2DistortYSpeed; + #endif + #if SHAPE2ROTATE_ON + half _Shape2RotationOffset, _Shape2RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh2; + #endif + #if SHAPEWEIGHTS_ON + half _Sh2BlendOffset; + #endif + #endif + + #if SHAPE3_ON + half4 _Shape3Tex_ST, _Shape3Color; + half _Shape3XSpeed, _Shape3YSpeed, _Shape3ColorWeight, _Shape3AlphaWeight; + #if SHAPE3CONTRAST_ON + half _Shape3Contrast, _Shape3Brightness; + #endif + #if SHAPE3DISTORT_ON + half4 _Shape3DistortTex_ST; + half _Shape3DistortAmount, _Shape3DistortXSpeed, _Shape3DistortYSpeed; + #endif + #if SHAPE3ROTATE_ON + half _Shape3RotationOffset, _Shape3RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh3; + #endif + #if SHAPEWEIGHTS_ON + half _Sh3BlendOffset; + #endif + #endif + + #if GLOW_ON + half4 _GlowColor; + half _Glow, _GlowGlobal; + #if GLOWTEX_ON + half4 _GlowTex_ST; + #endif + #endif + + #if MASK_ON + half4 _MaskTex_ST; + half _MaskPow; + #endif + + #if COLORRAMP_ON + half _ColorRampLuminosity, _ColorRampBlend; + #endif + + #if ALPHASMOOTHSTEP_ON + half _AlphaStepMin, _AlphaStepMax; + #endif + + #if ALPHAFADE_ON + half _AlphaFadeAmount, _AlphaFadeSmooth, _AlphaFadePow; + #endif + + #if HSV_ON + half _HsvShift, _HsvSaturation, _HsvBright; + #endif + + #if POSTERIZE_ON + half _PosterizeNumColors; + #endif + + #if PIXELATE_ON + half _PixelateSize; + #endif + + #if DISTORT_ON + half4 _DistortTex_ST; + half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount; + #endif + + #if TEXTURESCROLL_ON + half _TextureScrollXSpeed, _TextureScrollYSpeed; + #endif + + #if SHAKEUV_ON + half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY; + #endif + + #if WAVEUV_ON + half _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY; + #endif + + #if ROUNDWAVEUV_ON + half _RoundWaveStrength, _RoundWaveSpeed; + #endif + + #if TWISTUV_ON + half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius; + #endif + + #if DOODLE_ON + half _HandDrawnAmount, _HandDrawnSpeed; + #endif + + #if ROUNDWAVEUV_ON || PIXELATE_ON + half4 _MainTex_TexelSize; + #endif + + #if VERTOFFSET_ON + half4 _VertOffsetTex_ST; + half _VertOffsetAmount, _VertOffsetPower, _VertOffsetTexXSpeed, _VertOffsetTexYSpeed; + #endif + + #if FADE_ON + half4 _FadeTex_ST; + half _FadeAmount, _FadeTransition, _FadePower, _FadeScrollXSpeed, _FadeScrollYSpeed; + #if FADEBURN_ON + half4 _FadeBurnColor, _FadeBurnTex_ST; + half _FadeBurnWidth, _FadeBurnGlow; + #endif + #endif + + #if COLORGRADING_ON + half3 _ColorGradingLight, _ColorGradingMiddle, _ColorGradingDark; + half _ColorGradingMidPoint; + #endif + + #if CAMDISTFADE_ON + half _CamDistFadeStepMin, _CamDistFadeStepMax, _CamDistProximityFade; + #endif + + #if RIM_ON + half _RimBias, _RimScale, _RimPower, _RimIntensity, _RimAddAmount, _RimErodesAlpha; + half4 _RimColor; + #endif + + #if BACKFACETINT_ON + half4 _BackFaceTint, _FrontFaceTint; + #endif + + #if SHAPEDEBUG_ON + half _DebugShape; + #endif + + #if SHAPE1MASK_ON + half4 _Shape1MaskTex_ST; + half _Shape1MaskPow; + #endif + + #if TRAILWIDTH_ON + half _TrailWidthPower; + #endif + + #if LIGHTANDSHADOW_ON + half3 _All1VfxLightDir; + half _ShadowAmount, _ShadowStepMin, _ShadowStepMax, _LightAmount; + half4 _LightColor; + #endif + + #if SHAPETEXOFFSET_ON + half _RandomSh1Mult, _RandomSh2Mult, _RandomSh3Mult; + #endif + + #if DEPTHGLOW_ON + half _DepthGlowDist, _DepthGlowPow, _DepthGlow, _DepthGlowGlobal; + half4 _DepthGlowColor; + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half _ScreenUvShDistScale,_ScreenUvSh2DistScale, _ScreenUvSh3DistScale; + #endif + + #if NORMALMAP_ON + half _NormalStrength; + #endif + + + + + CBUFFER_END + + + + + + + + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + + #if SHAPE1DISTORT_ON + TEXTURE2D(_ShapeDistortTex); + SAMPLER(sampler_ShapeDistortTex); + #endif + + #if SHAPE2_ON + TEXTURE2D(_Shape2Tex); + SAMPLER(sampler_Shape2Tex); + #if SHAPE2DISTORT_ON + TEXTURE2D(_Shape2DistortTex); + SAMPLER(sampler_Shape2DistortTex); + #endif + #endif + + #if SHAPE3_ON + TEXTURE2D(_Shape3Tex); + SAMPLER(sampler_Shape3Tex); + #if SHAPE3DISTORT_ON + TEXTURE2D(_Shape3DistortTex); + SAMPLER(sampler_Shape3DistortTex); + #endif + #endif + + #if GLOW_ON + #if GLOWTEX_ON + TEXTURE2D(_GlowTex); + SAMPLER(sampler_GlowTex); + #endif + #endif + + #if MASK_ON + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); + #endif + + #if COLORRAMP_ON + TEXTURE2D(_ColorRampTex); + SAMPLER(sampler_ColorRampTex); + #endif + + #if COLORRAMPGRAD_ON + TEXTURE2D(_ColorRampTexGradient); + SAMPLER(sampler_ColorRampTexGradient); + #endif + + #if DISTORT_ON + TEXTURE2D(_DistortTex); + SAMPLER(sampler_DistortTex); + #endif + + #if VERTOFFSET_ON + TEXTURE2D(_VertOffsetTex); + SAMPLER(sampler_VertOffsetTex); + #endif + + #if FADE_ON + TEXTURE2D(_FadeTex); + SAMPLER(sampler_FadeTex); + #if FADEBURN_ON + TEXTURE2D(_FadeBurnTex); + SAMPLER(sampler_FadeBurnTex); + #endif + #endif + + #if SHAPE1MASK_ON + TEXTURE2D(_Shape1MaskTex); + SAMPLER(sampler_Shape1MaskTex); + #endif + + #if TRAILWIDTH_ON + TEXTURE2D(_TrailWidthGradient); + SAMPLER(sampler_TrailWidthGradient); + #endif + + #if NORMALMAP_ON + TEXTURE2D(_NormalMap); + SAMPLER(sampler_NormalMap); + #endif + + half4 SampleTextureWithScroll(in Texture2D _tex, in SamplerState _sampler, in float2 uv, in half scrollXSpeed, in half scrollYSpeed, in float time) + { + half2 _uv = uv; + _uv.x += (time * scrollXSpeed) % 1; + _uv.y += (time * scrollYSpeed) % 1; + return SAMPLE_TEXTURE2D(_tex, _sampler, _uv); + } + + half EaseOutQuint(half x) + { + return 1 - pow(1 - x, 5); + } + + half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax) + { + return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin); + } + + float2 RotateUvs(float2 uv, half rotation, half4 scaleAndTranslate) + { + half2 center = half2(0.5 * scaleAndTranslate.x + scaleAndTranslate.z, 0.5 * scaleAndTranslate.y + scaleAndTranslate.w); + half cosAngle = cos(rotation); + half sinAngle = sin(rotation); + uv -= center; + uv = mul(half2x2(cosAngle, -sinAngle, sinAngle, cosAngle), uv); + uv += center; + return uv; + } + + half4 GetDebugColor(float4 resColor, half4 shape1, half4 shape2, half4 shape3) + { + half4 res = resColor; + + //MAKE SURE THE FOLLOWING CODE BLOCK IS UNCOMMENTED------------------------------------------- + #if SHAPEDEBUG_ON + if(_DebugShape < 1.5) return shape1; + #if SHAPE2_ON + else if (_DebugShape < 2.5) return shape2; + #endif + #if SHAPE3_ON + else return shape3; + #endif + #endif + + return res; + } + + void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d) + { + //uvDistTex --> extraV2F0 + //uvSh1DistTex --> extraV2F1 + //uvSh2DistTex --> extraV2F2 + //uvSh3DistTex --> extraV2F3 + + #if VERTOFFSET_ON + #if TIMEISCUSTOM_ON + const half time = v.texcoord0.z + globalCustomTime.y; + #else + const half time = v.texcoord0.z + _Time.y; + #endif + half4 offsetUv = half4(TRANSFORM_TEX(v.texcoord0.xy, _VertOffsetTex), 0, 0); + offsetUv.x += (time * _VertOffsetTexXSpeed) % 1; + offsetUv.y += (time * _VertOffsetTexYSpeed) % 1; + v.vertex.xyz += v.normal * _VertOffsetAmount * pow(SAMPLE_TEXTURE2D_LOD(_VertOffsetTex, sampler_VertOffsetTex, offsetUv, 0).r, _VertOffsetPower); + #endif + + #if DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F0.xy = TRANSFORM_TEX(v.texcoord0.xy, _DistortTex); + #endif + + #if SHAPE1DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F1.xy = TRANSFORM_TEX(v.texcoord0.xy, _ShapeDistortTex); + #endif + + #if SHAPE2_ON + #if SHAPE2DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F2.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape2DistortTex);; + #endif + #endif + + #if SHAPE3_ON + #if SHAPE3DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F3.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape3DistortTex); + #endif + #endif + } + + void Ext_SurfaceFunction0 (inout Surface o, ShaderData d) + { + //i.uvSeed -> d.texcoord0.xy + + float seed = d.texcoord0.z + _TimingSeed; + #if TIMEISCUSTOM_ON + const float4 shaderTime = globalCustomTime; + #else + const float4 shaderTime = _Time; + #endif + float time = shaderTime.y + seed; + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 originalUvs = d.texcoord0.xy; + #endif + + #if PIXELATE_ON + half aspectRatio = _MainTex_TexelSize.x / _MainTex_TexelSize.y; + half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio); + d.texcoord0.xy = floor(d.texcoord0.xy * pixelSize) / pixelSize; + #endif + + #if NORMALMAP_ON + half4 normalSample = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, d.texcoord0.xy); + half3 normalTS = UnpackNormal(normalSample); + normalTS.xy *= _NormalStrength; + o.Normal = normalTS; + #endif + + #if TWISTUV_ON + half2 tempUv = d.texcoord0.xy - half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + _TwistUvRadius *= (_MainTex_ST.x + _MainTex_ST.y) / 2; + half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius; + half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0; + half s = sin(theta); + half c = cos(theta); + half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0); + tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta); + tempUv += half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + d.texcoord0.xy = tempUv; + #endif + + #if DOODLE_ON + half2 uvCopy = d.texcoord0.xy; + _HandDrawnSpeed = (floor((shaderTime.x + seed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed; + uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4); + uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4); + d.texcoord0.xy = lerp(d.texcoord0.xy, d.texcoord0.xy + uvCopy, 0.0005 * _HandDrawnAmount); + #endif + + #if SHAKEUV_ON + half xShake = sin((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvX; + half yShake = cos((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvY; + d.texcoord0.xy += half2(xShake * 0.012, yShake * 0.01); + #endif + + #if WAVEUV_ON + half2 uvWave = half2(_WaveX * _MainTex_ST.x, _WaveY * _MainTex_ST.y) - d.texcoord0.xy; + #if ATLAS_ON + uvWave = half2(_WaveX, _WaveY) - uvRect; + #endif + uvWave.x *= _ScreenParams.x / _ScreenParams.y; + half angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((time * _WaveSpeed) % 360.0); + d.texcoord0.xy = d.texcoord0.xy + normalize(uvWave) * sin(angWave) * (_WaveStrength / 1000.0); + #endif + + #if ROUNDWAVEUV_ON + half xWave = ((0.5 * _MainTex_ST.x) - d.texcoord0.x); + half yWave = ((0.5 * _MainTex_ST.y) - d.texcoord0.y) * (_MainTex_TexelSize.w / _MainTex_TexelSize.z); + half ripple = -sqrt(xWave*xWave + yWave* yWave); + d.texcoord0.xy += (sin((ripple + time * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1; + #endif + + #if POLARUV_ON + half2 prePolarUvs = d.texcoord0.xy; + d.texcoord0.xy = d.texcoord0.xy - half2(0.5, 0.5); + d.texcoord0.xy = half2(atan2(d.texcoord0.y, d.texcoord0.x) / (1.0 * 6.28318530718), length(d.texcoord0.xy) * 2.0); + d.texcoord0.xy *= _MainTex_ST.xy; + #endif + + #if DISTORT_ON + #if POLARUVDISTORT_ON + half2 distortUvs = TRANSFORM_TEX(d.texcoord0.xy, _DistortTex); + #else + half2 distortUvs = d.extraV2F0.xy; + #endif + distortUvs.x += ((shaderTime.x + seed) * _DistortTexXSpeed) % 1; + distortUvs.y += ((shaderTime.x + seed) * _DistortTexYSpeed) % 1; + #if ATLAS_ON + d.extraV2F0.xy = half2((d.extraV2F0.x - _MinXUV) / (_MaxXUV - _MinXUV), (d.extraV2F0.y - _MinYUV) / (_MaxYUV - _MinYUV)); + #endif + half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, distortUvs).r - 0.5) * 0.2 * _DistortAmount; + d.texcoord0.x += distortAmnt; + d.texcoord0.y += distortAmnt; + #endif + + #if TEXTURESCROLL_ON + d.texcoord0.x += (time * _TextureScrollXSpeed) % 1; + d.texcoord0.y += (time * _TextureScrollYSpeed) % 1; + #endif + + #if TRAILWIDTH_ON + half width = pow(SAMPLE_TEXTURE2D(_TrailWidthGradient, sampler_TrailWidthGradient, d.texcoord0).r, _TrailWidthPower); + d.texcoord0.y = (d.texcoord0.y * 2 - 1) / width * 0.5 + 0.5; + clip(d.texcoord0.y); + clip(1 - d.texcoord0.y); + #endif + + float2 shape1Uv = d.texcoord0.xy; + #if SHAPE2_ON + float2 shape2Uv = shape1Uv; + #endif + #if SHAPE3_ON + float2 shape3Uv = shape1Uv; + #endif + + #if CAMDISTFADE_ON || SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half camDistance = distance(d.worldSpacePosition, _WorldSpaceCameraPos); + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 uvOffsetPostFx = d.texcoord0.xy - originalUvs; + d.texcoord0.xy = d.screenPos.xy / d.screenPos.w; + d.texcoord0.x = d.texcoord0.x * (_ScreenParams.x / _ScreenParams.y); + d.texcoord0.x -= 0.5; + d.texcoord0.xy -= uvOffsetPostFx; + originalUvs += uvOffsetPostFx; + half distanceZoom = camDistance * 0.1; + half2 scaleWithDistUvs = d.texcoord0.xy * distanceZoom + ((-distanceZoom * 0.5) + 0.5); + #if SHAPE1SCREENUV_ON + shape1Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvShDistScale); + #else + shape1Uv = originalUvs; + #endif + #if SHAPE2SCREENUV_ON && SHAPE2_ON + shape2Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh2DistScale); + #else + #if SHAPE2_ON + shape2Uv = originalUvs; + #endif + #endif + #if SHAPE3SCREENUV_ON && SHAPE3_ON + shape3Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh3DistScale); + #else + #if SHAPE3_ON + shape3Uv = originalUvs; + #endif + #endif + #endif + + shape1Uv = TRANSFORM_TEX(shape1Uv, _MainTex); + #if OFFSETSTREAM_ON + shape1Uv.x += i.offsetCustomData.x * _OffsetSh1; + shape1Uv.y += i.offsetCustomData.y * _OffsetSh1; + #endif + #if SHAPETEXOFFSET_ON + shape1Uv += seed * _RandomSh1Mult; + #endif + + #if SHAPE1DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh1DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _ShapeDistortTex); + #else + half2 sh1DistortUvs = d.extraV2F1.xy; + #endif + + sh1DistortUvs.x += ((time + seed) * _ShapeDistortXSpeed) % 1; + sh1DistortUvs.y += ((time + seed) * _ShapeDistortYSpeed) % 1; + half distortAmount = (SAMPLE_TEXTURE2D(_ShapeDistortTex, sampler_ShapeDistortTex, sh1DistortUvs).r - 0.5) * 0.2 * _ShapeDistortAmount; + shape1Uv.x += distortAmount; + shape1Uv.y += distortAmount; + #endif + #if SHAPE1ROTATE_ON + shape1Uv = RotateUvs(shape1Uv, _ShapeRotationOffset + ((_ShapeRotationSpeed * time) % 6.28318530718), _MainTex_ST); + #endif + + half4 shape1 = SampleTextureWithScroll(_MainTex, sampler_MainTex, shape1Uv, _ShapeXSpeed, _ShapeYSpeed, time); + #if SHAPE1SHAPECOLOR_ON + shape1.a = shape1.r; + shape1.rgb = _ShapeColor.rgb; + #else + shape1 *= _ShapeColor; + #endif + #if SHAPE1CONTRAST_ON + #if SHAPE1SHAPECOLOR_ON + shape1.a = saturate((shape1.a - 0.5) * _ShapeContrast + 0.5 + _ShapeBrightness); + #else + shape1.rgb = max(0, (shape1.rgb - half3(0.5, 0.5, 0.5)) * _ShapeContrast + half3(0.5, 0.5, 0.5) + _ShapeBrightness); + #endif + #endif + + half4 shape2 = 1.0; + #if SHAPE2_ON + shape2Uv = TRANSFORM_TEX(shape2Uv, _Shape2Tex); + #if OFFSETSTREAM_ON + shape2Uv.x += i.offsetCustomData.x * _OffsetSh2; + shape2Uv.y += i.offsetCustomData.y * _OffsetSh2; + #endif + #if SHAPETEXOFFSET_ON + shape2Uv += seed * _RandomSh2Mult; + #endif + #if SHAPE2DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh2DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape2DistortTex); + #else + half2 sh2DistortUvs = d.extraV2F2.xy; + #endif + sh2DistortUvs.x += ((time + seed) * _Shape2DistortXSpeed) % 1; + sh2DistortUvs.y += ((time + seed) * _Shape2DistortYSpeed) % 1; + half distortAmnt2 = (SAMPLE_TEXTURE2D(_Shape2DistortTex, sampler_Shape2DistortTex, sh2DistortUvs).r - 0.5) * 0.2 * _Shape2DistortAmount; + shape2Uv.x += distortAmnt2; + shape2Uv.y += distortAmnt2; + #endif + #if SHAPE2ROTATE_ON + shape2Uv = RotateUvs(shape2Uv, _Shape2RotationOffset + ((_Shape2RotationSpeed * time) % 6.28318530718), _Shape2Tex_ST); + #endif + + shape2 = SampleTextureWithScroll(_Shape2Tex, sampler_Shape2Tex, shape2Uv, _Shape2XSpeed, _Shape2YSpeed, time); + #if SHAPE2SHAPECOLOR_ON + shape2.a = shape2.r; + shape2.rgb = _Shape2Color.rgb; + #else + shape2 *= _Shape2Color; + #endif + #if SHAPE2CONTRAST_ON + #if SHAPE2SHAPECOLOR_ON + shape2.a = max(0, (shape2.a - 0.5) * _Shape2Contrast + 0.5 + _Shape2Brightness); + #else + shape2.rgb = max(0, (shape2.rgb - half3(0.5, 0.5, 0.5)) * _Shape2Contrast + half3(0.5, 0.5, 0.5) + _Shape2Brightness); + #endif + #endif + #endif + + half4 shape3 = 1.0; + #if SHAPE3_ON + shape3Uv = TRANSFORM_TEX(shape3Uv, _Shape3Tex); + + #if OFFSETSTREAM_ON + shape3Uv.x += i.offsetCustomData.x * _OffsetSh3; + shape3Uv.y += i.offsetCustomData.y * _OffsetSh3; + #endif + #if SHAPETEXOFFSET_ON + shape3Uv += seed * _RandomSh3Mult; + #endif + #if SHAPE3DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh3DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape3DistortTex); + #else + half2 sh3DistortUvs = d.extraV2F3.xy; + #endif + sh3DistortUvs.x += ((time + seed) * _Shape3DistortXSpeed) % 1; + sh3DistortUvs.y += ((time + seed) * _Shape3DistortYSpeed) % 1; + half distortAmnt3 = (SAMPLE_TEXTURE2D(_Shape3DistortTex, sampler_Shape3DistortTex, sh3DistortUvs).r - 0.5) * 0.3 * _Shape3DistortAmount; + shape3Uv.x += distortAmnt3; + shape3Uv.y += distortAmnt3; + #endif + #if SHAPE3ROTATE_ON + shape3Uv = RotateUvs(shape3Uv, _Shape3RotationOffset + ((_Shape3RotationSpeed * time) % 6.28318530718), _Shape3Tex_ST); + #endif + shape3 = SampleTextureWithScroll(_Shape3Tex, sampler_Shape3Tex, shape3Uv, _Shape3XSpeed, _Shape3YSpeed, time); + #if SHAPE3SHAPECOLOR_ON + shape3.a = shape3.r; + shape3.rgb = _Shape3Color.rgb; + #else + shape3 *= _Shape3Color; + #endif + #if SHAPE3CONTRAST_ON + #if SHAPE3SHAPECOLOR_ON + shape3.a = max(0, (shape3.a - 0.5) * _Shape3Contrast + 0.5 + _Shape3Brightness); + #else + shape3.rgb = max(0, (shape3.rgb - half3(0.5, 0.5, 0.5)) * _Shape3Contrast + half3(0.5, 0.5, 0.5) + _Shape3Brightness); + #endif + #endif + #endif + + half4 col = shape1; + //Mix all shapes pre: change weights if custom vertex effect active + #if SHAPEWEIGHTS_ON + half shapeWeightOffset; + #if SHAPE2_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh1BlendOffset; + _ShapeColorWeight = max(0, _ShapeColorWeight + shapeWeightOffset); + _ShapeAlphaWeight = max(0, _ShapeAlphaWeight + shapeWeightOffset); + shapeWeightOffset = i.offsetCustomData.z * _Sh2BlendOffset; + _Shape2ColorWeight = max(0, _Shape2ColorWeight + shapeWeightOffset); + _Shape2AlphaWeight = max(0, _Shape2AlphaWeight + shapeWeightOffset); + #endif + #if SHAPE3_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh3BlendOffset; + _Shape3ColorWeight = max(0, _Shape3ColorWeight + shapeWeightOffset); + _Shape3AlphaWeight = max(0, _Shape3AlphaWeight + shapeWeightOffset); + #endif + #endif + + //Mix all shapes + #if SHAPE2_ON + #if !SPLITRGBA_ON + _ShapeAlphaWeight = _ShapeColorWeight; + _Shape2AlphaWeight = _Shape2ColorWeight; + #endif + #if SHAPE3_ON //Shape3 On + #if !SPLITRGBA_ON + _Shape3AlphaWeight = _Shape3ColorWeight; + #endif + #if SHAPEADD_ON + col.rgb = ((shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight)) + (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(max(shape3.a * _Shape3AlphaWeight, max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight))); + #else + col.rgb = ((shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight)) * (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)) * (shape3.a * _Shape3AlphaWeight)); + #endif + #else //Shape3 Off + #if SHAPEADD_ON + col.rgb = (shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight); + col.a = saturate(max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight)); + #else + col.rgb = (shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight); + col.a = saturate((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)); + #endif + #endif + #endif + + #if SHAPE1MASK_ON + col = lerp(col, shape1, pow(SAMPLE_TEXTURE2D(_Shape1MaskTex, sampler_Shape1MaskTex, TRANSFORM_TEX(i.uvSeed.xy, _Shape1MaskTex)).r, _Shape1MaskPow)); + #endif + + #if PREMULTIPLYCOLOR_ON + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + col.a = min(luminance, col.a); + #endif + + col.rgb *= _Color.rgb * d.vertexColor.rgb; + #if PREMULTIPLYALPHA_ON + col.rgb *= col.a; + #endif + + #if !PREMULTIPLYCOLOR_ON && (COLORRAMP_ON || ALPHAFADE_ON || COLORGRADING_ON || FADE_ON || (ADDITIVECONFIG_ON && (GLOW_ON || DEPTHGLOW_ON))) + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + #endif + + #if (FADE_ON || ALPHAFADE_ON) && ALPHAFADEINPUTSTREAM_ON + col.a *= d.vertexColor.a; + d.vertexColor.a = d.texcoord0.w; + #endif + + #if FADE_ON + half preFadeAlpha = col.a; + _FadeAmount = saturate(_FadeAmount + (1 - d.vertexColor.a)); + _FadeTransition = max(0.01, _FadeTransition * EaseOutQuint(saturate(_FadeAmount))); + half2 fadeUv; + fadeUv = d.texcoord0.xy + seed; + fadeUv.x += (time * _FadeScrollXSpeed) % 1; + fadeUv.y += (time * _FadeScrollYSpeed) % 1; + half2 tiledUvFade1 = TRANSFORM_TEX(fadeUv, _FadeTex); + #if ADDITIVECONFIG_ON && !PREMULTIPLYCOLOR_ON + preFadeAlpha *= luminance; + #endif + _FadeAmount = saturate(pow(_FadeAmount, _FadePower)); + #if FADEBURN_ON + half2 tiledUvFade2 = TRANSFORM_TEX(fadeUv, _FadeBurnTex); + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + half fadeNaturalEdge = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fadeNaturalEdge; + half fadeBurn = saturate(smoothstep(0.0 , _FadeTransition + _FadeBurnWidth, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + fadeBurn = fadeNaturalEdge - fadeBurn; + _FadeBurnColor.rgb *= _FadeBurnGlow; + col.rgb += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2).rgb * _FadeBurnColor.rgb * preFadeAlpha; + #else + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + float fade = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fade; + #endif + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _FadeAmount; + #endif + #endif + + #if ALPHAFADE_ON + half alphaFadeLuminance; + _AlphaFadeAmount = saturate(_AlphaFadeAmount + (1 - d.vertexColor.a)); + _AlphaFadeAmount = saturate(pow(_AlphaFadeAmount, _AlphaFadePow)); + _AlphaFadeSmooth = max(0.01, _AlphaFadeSmooth * EaseOutQuint(saturate(_AlphaFadeAmount))); + #if ALPHAFADEUSESHAPE1_ON + alphaFadeLuminance = shape1.r; + #else + alphaFadeLuminance = luminance; + #endif + alphaFadeLuminance = saturate(alphaFadeLuminance - 0.001); + #if ALPHAFADEUSEREDCHANNEL_ON + col.a *= col.r; + #endif + col.a = saturate(col.a); + float alphaFade = saturate(smoothstep(0.0 , _AlphaFadeSmooth, RemapFloat(1.0 - _AlphaFadeAmount, 0.0, 1.0, -1.0, 1.0) + alphaFadeLuminance)); + col.a *= alphaFade; + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _AlphaFadeAmount; + #endif + #endif + + #if BACKFACETINT_ON + col.rgb = lerp(col.rgb * _BackFaceTint, col.rgb * _FrontFaceTint, step(0, dot(d.worldSpaceNormal, d.worldSpaceViewDir))); + #endif + + //#if LIGHTANDSHADOW_ON + //half NdL = saturate(dot(d.worldSpaceNormal, -_All1VfxLightDir)); + //col.rgb += _LightColor * _LightAmount * NdL; + //NdL = max(_ShadowAmount, NdL); + //NdL = smoothstep(_ShadowStepMin, _ShadowStepMax, NdL); + //col.rgb *= NdL; + //#endif + + #if COLORGRADING_ON + col.rgb *= lerp(lerp(_ColorGradingDark, _ColorGradingMiddle, luminance/_ColorGradingMidPoint), + lerp(_ColorGradingMiddle, _ColorGradingLight, (luminance - _ColorGradingMidPoint)/(1.0 - _ColorGradingMidPoint)), step(_ColorGradingMidPoint, luminance)); + #endif + + #if COLORRAMP_ON + half colorRampLuminance = saturate(luminance + _ColorRampLuminosity); + #if COLORRAMPGRAD_ON + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(colorRampLuminance, 0)); + #else + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(colorRampLuminance, 0)); + #endif + col.rgb = lerp(col.rgb, colorRampRes.rgb, _ColorRampBlend); + col.a = lerp(col.a, saturate(col.a * colorRampRes.a), _ColorRampBlend); + #endif + + #if POSTERIZE_ON && !POSTERIZEOUTLINE_ON + col.rgb = floor(col.rgb / (1.0 / _PosterizeNumColors)) * (1.0 / _PosterizeNumColors); + #endif + + #if DEPTHGLOW_ON + half sceneDepthDiff = GetLinearEyeDepth(d.screenUV) - d.screenPos.w; + #endif + + #if RIM_ON + half NdV = 1 - abs(dot(d.worldSpaceNormal, d.worldSpaceViewDir)); + half rimFactor = saturate(_RimBias + _RimScale * pow(NdV, _RimPower)); + half4 rimCol = _RimColor * rimFactor; + rimCol.rgb *= _RimIntensity; + col.rgb = lerp(col.rgb * (rimCol.rgb + half3(1,1,1)), col.rgb + rimCol.rgb, _RimAddAmount); + col.a = saturate(col.a * (1 - rimFactor * _RimErodesAlpha)); + #endif + + #if DEPTHGLOW_ON + half depthGlowMask = saturate(_DepthGlowDist * pow((1 - sceneDepthDiff), _DepthGlowPow)); + col.rgb = lerp(col.rgb, _DepthGlowGlobal * col.rgb, depthGlowMask); + half depthGlowMult = 1; + #if ADDITIVECONFIG_ON + depthGlowMult = luminance; + #endif + col.rgb += _DepthGlowColor.rgb * _DepthGlow * depthGlowMask * col.a * depthGlowMult; + #endif + + #if GLOW_ON + half glowMask = 1; + #if GLOWTEX_ON + glowMask = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, TRANSFORM_TEX(d.texcoord0.xy, _GlowTex)); + #endif + col.rgb *= _GlowGlobal * glowMask; + half glowMult = 1; + #if ADDITIVECONFIG_ON + glowMult = luminance; + #endif + + col.rgb += _GlowColor.rgb * _Glow * glowMask * col.a * glowMult; + #endif + + #if HSV_ON + half3 resultHsv = half3(col.rgb); + half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180); + half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180); + resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x + + (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z; + resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x + + (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z; + resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x + + (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y + + (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z; + col.rgb = resultHsv; + #endif + + #if CAMDISTFADE_ON + col.a *= 1 - saturate(smoothstep(_CamDistFadeStepMin, _CamDistFadeStepMax, camDistance)); + col.a *= smoothstep(0.0, _CamDistProximityFade, camDistance); + #endif + + #if MASK_ON + half2 maskUv = d.texcoord0.xy; + #if POLARUV_ON + maskUv = prePolarUvs; + #endif + half4 maskSample = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, TRANSFORM_TEX(maskUv, _MaskTex)); + half mask = pow(min(maskSample.r, maskSample.a), _MaskPow); + col.a *= mask; + #endif + + #if ALPHASMOOTHSTEP_ON + col.a = smoothstep(_AlphaStepMin, _AlphaStepMax, col.a); + #endif + + half4 debugColor = col; + #if SHAPEDEBUG_ON + debugColor = GetDebugColor(col, shape1, shape2, shape3); + #endif + + clip(debugColor.a - _AlphaCutoffValue - 0.01); + + //#if FOG_ON + //UNITY_APPLY_FOG(i.fogCoord, col); + //#endif + + //Don't use a starting i.color.a lower than 1 unless using vertex stream dissolve when using a FADE effect + #if !FADE_ON && !ALPHAFADE_ON + col.a *= _Alpha * d.vertexColor.a; + #endif + #if FADE_ON || ALPHAFADE_ON + col.a *= _Alpha; + #endif + #if ADDITIVECONFIG_ON + col.rgb *= col.a; + #endif + + + #if SHAPEDEBUG_ON + o.Albedo = debugColor.rgb; + o.Alpha = debugColor.a; + #else + o.Albedo = col.rgb; + o.Alpha = col.a; + #endif + } + + + + + + void ChainSurfaceFunction(inout Surface l, inout ShaderData d) + { + Ext_SurfaceFunction0(l, d); + // Ext_SurfaceFunction1(l, d); + // Ext_SurfaceFunction2(l, d); + // Ext_SurfaceFunction3(l, d); + // Ext_SurfaceFunction4(l, d); + // Ext_SurfaceFunction5(l, d); + // Ext_SurfaceFunction6(l, d); + // Ext_SurfaceFunction7(l, d); + // Ext_SurfaceFunction8(l, d); + // Ext_SurfaceFunction9(l, d); + // Ext_SurfaceFunction10(l, d); + // Ext_SurfaceFunction11(l, d); + // Ext_SurfaceFunction12(l, d); + // Ext_SurfaceFunction13(l, d); + // Ext_SurfaceFunction14(l, d); + // Ext_SurfaceFunction15(l, d); + // Ext_SurfaceFunction16(l, d); + // Ext_SurfaceFunction17(l, d); + // Ext_SurfaceFunction18(l, d); + // Ext_SurfaceFunction19(l, d); + // Ext_SurfaceFunction20(l, d); + // Ext_SurfaceFunction21(l, d); + // Ext_SurfaceFunction22(l, d); + // Ext_SurfaceFunction23(l, d); + // Ext_SurfaceFunction24(l, d); + // Ext_SurfaceFunction25(l, d); + // Ext_SurfaceFunction26(l, d); + // Ext_SurfaceFunction27(l, d); + // Ext_SurfaceFunction28(l, d); + // Ext_SurfaceFunction29(l, d); + } + +#if !_DECALSHADER + + void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time) + { + ExtraV2F d; + + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + // due to motion vectors in HDRP, we need to use the last + // time in certain spots. So if you are going to use _Time to adjust vertices, + // you need to use this time or motion vectors will break. + d.time = time; + + Ext_ModifyVertex0(v, d); + // Ext_ModifyVertex1(v, d); + // Ext_ModifyVertex2(v, d); + // Ext_ModifyVertex3(v, d); + // Ext_ModifyVertex4(v, d); + // Ext_ModifyVertex5(v, d); + // Ext_ModifyVertex6(v, d); + // Ext_ModifyVertex7(v, d); + // Ext_ModifyVertex8(v, d); + // Ext_ModifyVertex9(v, d); + // Ext_ModifyVertex10(v, d); + // Ext_ModifyVertex11(v, d); + // Ext_ModifyVertex12(v, d); + // Ext_ModifyVertex13(v, d); + // Ext_ModifyVertex14(v, d); + // Ext_ModifyVertex15(v, d); + // Ext_ModifyVertex16(v, d); + // Ext_ModifyVertex17(v, d); + // Ext_ModifyVertex18(v, d); + // Ext_ModifyVertex19(v, d); + // Ext_ModifyVertex20(v, d); + // Ext_ModifyVertex21(v, d); + // Ext_ModifyVertex22(v, d); + // Ext_ModifyVertex23(v, d); + // Ext_ModifyVertex24(v, d); + // Ext_ModifyVertex25(v, d); + // Ext_ModifyVertex26(v, d); + // Ext_ModifyVertex27(v, d); + // Ext_ModifyVertex28(v, d); + // Ext_ModifyVertex29(v, d); + + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p) + { + ExtraV2F d; + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = v2p.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = v2p.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = v2p.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = v2p.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = v2p.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = v2p.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = v2p.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = v2p.extraV2F7; + // #endif + + + // Ext_ModifyTessellatedVertex0(v, d); + // Ext_ModifyTessellatedVertex1(v, d); + // Ext_ModifyTessellatedVertex2(v, d); + // Ext_ModifyTessellatedVertex3(v, d); + // Ext_ModifyTessellatedVertex4(v, d); + // Ext_ModifyTessellatedVertex5(v, d); + // Ext_ModifyTessellatedVertex6(v, d); + // Ext_ModifyTessellatedVertex7(v, d); + // Ext_ModifyTessellatedVertex8(v, d); + // Ext_ModifyTessellatedVertex9(v, d); + // Ext_ModifyTessellatedVertex10(v, d); + // Ext_ModifyTessellatedVertex11(v, d); + // Ext_ModifyTessellatedVertex12(v, d); + // Ext_ModifyTessellatedVertex13(v, d); + // Ext_ModifyTessellatedVertex14(v, d); + // Ext_ModifyTessellatedVertex15(v, d); + // Ext_ModifyTessellatedVertex16(v, d); + // Ext_ModifyTessellatedVertex17(v, d); + // Ext_ModifyTessellatedVertex18(v, d); + // Ext_ModifyTessellatedVertex19(v, d); + // Ext_ModifyTessellatedVertex20(v, d); + // Ext_ModifyTessellatedVertex21(v, d); + // Ext_ModifyTessellatedVertex22(v, d); + // Ext_ModifyTessellatedVertex23(v, d); + // Ext_ModifyTessellatedVertex24(v, d); + // Ext_ModifyTessellatedVertex25(v, d); + // Ext_ModifyTessellatedVertex26(v, d); + // Ext_ModifyTessellatedVertex27(v, d); + // Ext_ModifyTessellatedVertex28(v, d); + // Ext_ModifyTessellatedVertex29(v, d); + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color) + { + // Ext_FinalColorForward0(l, d, color); + // Ext_FinalColorForward1(l, d, color); + // Ext_FinalColorForward2(l, d, color); + // Ext_FinalColorForward3(l, d, color); + // Ext_FinalColorForward4(l, d, color); + // Ext_FinalColorForward5(l, d, color); + // Ext_FinalColorForward6(l, d, color); + // Ext_FinalColorForward7(l, d, color); + // Ext_FinalColorForward8(l, d, color); + // Ext_FinalColorForward9(l, d, color); + // Ext_FinalColorForward10(l, d, color); + // Ext_FinalColorForward11(l, d, color); + // Ext_FinalColorForward12(l, d, color); + // Ext_FinalColorForward13(l, d, color); + // Ext_FinalColorForward14(l, d, color); + // Ext_FinalColorForward15(l, d, color); + // Ext_FinalColorForward16(l, d, color); + // Ext_FinalColorForward17(l, d, color); + // Ext_FinalColorForward18(l, d, color); + // Ext_FinalColorForward19(l, d, color); + // Ext_FinalColorForward20(l, d, color); + // Ext_FinalColorForward21(l, d, color); + // Ext_FinalColorForward22(l, d, color); + // Ext_FinalColorForward23(l, d, color); + // Ext_FinalColorForward24(l, d, color); + // Ext_FinalColorForward25(l, d, color); + // Ext_FinalColorForward26(l, d, color); + // Ext_FinalColorForward27(l, d, color); + // Ext_FinalColorForward28(l, d, color); + // Ext_FinalColorForward29(l, d, color); + } + + void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask) + { + // Ext_FinalGBufferStandard0(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard1(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard2(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard3(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard4(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard5(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard6(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard7(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard8(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard9(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard10(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard11(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard12(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard13(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard14(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard15(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard16(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard17(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard18(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard19(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard20(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard21(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard22(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard23(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard24(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard25(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard26(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard27(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard28(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard29(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + } +#endif + + + + + +#if _DECALSHADER + + ShaderData CreateShaderData(SurfaceDescriptionInputs IN) + { + ShaderData d = (ShaderData)0; + d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal); + d.worldSpaceNormal = IN.WorldSpaceNormal; + d.worldSpaceTangent = IN.WorldSpaceTangent; + + d.worldSpacePosition = IN.WorldSpacePosition; + d.texcoord0 = IN.uv0.xyxy; + d.screenPos = IN.ScreenPosition; + + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(d.worldSpacePosition), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(d.worldSpacePosition, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenUV = (IN.ScreenPosition.xy / max(0.01, IN.ScreenPosition.w)); + // #endif + + return d; + } +#else + + ShaderData CreateShaderData(VertexToPixel i + #if NEED_FACING + , bool facing + #endif + ) + { + ShaderData d = (ShaderData)0; + d.clipPos = i.pos; + d.worldSpacePosition = i.worldPos; + + d.worldSpaceNormal = normalize(i.worldNormal); + d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz); + + d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w; + float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign; + + d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal); + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + d.texcoord0 = i.texcoord0; + // d.texcoord1 = i.texcoord1; + // d.texcoord2 = i.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // d.texcoord3 = i.texcoord3; + // #endif + + // d.isFrontFace = facing; + // #if %VERTEXCOLORREQUIREKEY% + d.vertexColor = i.vertexColor; + // #endif + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(i.worldPos), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(i.worldPos, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenPos = i.screenPos; + d.screenUV = (i.screenPos.xy / i.screenPos.w); + // #endif + + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = i.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = i.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = i.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = i.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = i.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = i.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = i.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = i.extraV2F7; + // #endif + + return d; + } + +#endif + + + #if defined(_PASSSHADOW) + float3 _LightDirection; + float3 _LightPosition; + #endif + + #if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + + #define GetWorldToViewMatrix() _ViewMatrix + #define UNITY_MATRIX_I_V _InvViewMatrix + #define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix) + #define UNITY_MATRIX_I_P _InvProjMatrix + #define GetWorldToHClipMatrix() _ViewProjMatrix + #define UNITY_MATRIX_I_VP _InvViewProjMatrix + #define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix + #define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix + #define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix + + void MotionVectorPositionZBias(VertexToPixel input) + { + #if UNITY_REVERSED_Z + input.pos.z -= unity_MotionVectorsParams.z * input.pos.w; + #else + input.pos.z += unity_MotionVectorsParams.z * input.pos.w; + #endif + } + + #endif + + // vertex shader + VertexToPixel Vert (VertexData v) + { + VertexToPixel o = (VertexToPixel)0; + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + VertexData previousMesh = v; + #endif + #if !_TESSELLATION_ON + ChainModifyVertex(v, o, _Time); + #endif + + o.texcoord0 = v.texcoord0; + // o.texcoord1 = v.texcoord1; + // o.texcoord2 = v.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // o.texcoord3 = v.texcoord3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + o.vertexColor = v.vertexColor; + // #endif + + // This return the camera relative position (if enable) + float3 positionWS = TransformObjectToWorld(v.vertex.xyz); + float3 normalWS = TransformObjectToWorldNormal(v.normal); + float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + o.worldPos = positionWS; + o.worldNormal = normalWS; + o.worldTangent = tangentWS; + + + // For some very odd reason, in 2021.2, we can't use Unity's defines, but have to use our own.. + #if _PASSSHADOW + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - o.worldPos); + #else + float3 lightDirectionWS = _LightDirection; + #endif + // Define shadow pass specific clip position for Universal + o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS)); + #if UNITY_REVERSED_Z + o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #else + o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #endif + #elif _PASSMETA + o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); + #else + o.pos = TransformWorldToHClip(o.worldPos); + #endif + + // #if %SCREENPOSREQUIREKEY% + o.screenPos = ComputeScreenPos(o.pos, _ProjectionParams.x); + // #endif + + + #if _PASSFORWARD || _PASSGBUFFER + float2 uv1 = v.texcoord1.xy; + OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV); + // o.texcoord1.xy = uv1; + #if UNITY_VERSION < 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + + #if defined(DYNAMICLIGHTMAP_ON) + o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #if UNITY_VERSION >= 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + #elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009 + OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion); + #endif + #endif + + #ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + half fogFactor = 0; + #if defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(o.pos.z); + #endif + #if _BAKEDLIT + o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0); + #else + half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal); + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + #endif + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + o.shadowCoord = GetShadowCoord(vertexInput); + #endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + #if !defined(TESSELLATION_ON) + MotionVectorPositionZBias(o); + #endif + + o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0); + // Note: unity_MotionVectorsParams.y is 0 is forceNoMotion is enabled + bool forceNoMotion = unity_MotionVectorsParams.y == 0.0; + + if (!forceNoMotion) + { + #if defined(HAVE_VFX_MODIFICATION) + float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS; + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + const bool applyDeformation = false; + #else + const bool applyDeformation = true; + #endif + #else + const bool hasDeformation = unity_MotionVectorsParams.x == 1; // Mesh has skinned deformation + float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz; + + #if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT) + const bool applyDeformation = true; + #else + const bool applyDeformation = hasDeformation; + #endif + #endif + // TODO + #if defined(FEATURES_GRAPH_VERTEX) + if (applyDeformation) + previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS); + else + previousPositionOS = previousMesh.positionOS; + + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + #endif + + #if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED) + // Deformed vertices in DOTS are not cumulative with built-in Unity skinning/blend shapes + // Needs to be called after vertex modification has been applied otherwise it will be + // overwritten by Compute Deform node + ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS); + #endif + #if defined (_ADD_PRECOMPUTED_VELOCITY) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f)); + + #if defined(HAVE_VFX_MODIFICATION) + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY) + #error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards. + #endif + o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS); + #else + #if VFX_WORLD_SPACE + //previousPositionOS is already in world space + const float3 previousPositionWS = previousPositionOS; + #else + const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz; + #endif + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f)); + #endif + #else + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1))); + #endif + } + #endif + + return o; + } + + + + + // fragment shader + void Frag (VertexToPixel IN + , out half4 outNormalWS : SV_Target0 + #ifdef _WRITE_RENDERING_LAYERS + , out float4 outRenderingLayers : SV_Target1 + #endif + #ifdef _DEPTHOFFSET_ON + , out float outputDepth : SV_Depth + #endif + #if NEED_FACING + , bool facing : SV_IsFrontFace + #endif + ) + { + UNITY_SETUP_INSTANCE_ID(IN); + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(IN); + + #if defined(LOD_FADE_CROSSFADE) + LODFadeCrossFade(IN.pos); + #endif + + ShaderData d = CreateShaderData(IN + #if NEED_FACING + , facing + #endif + ); + Surface l = (Surface)0; + + #ifdef _DEPTHOFFSET_ON + l.outputDepth = outputDepth; + #endif + + l.Albedo = half3(0.5, 0.5, 0.5); + l.Normal = float3(0,0,1); + l.Occlusion = 1; + l.Alpha = 1; + + ChainSurfaceFunction(l, d); + + #ifdef _DEPTHOFFSET_ON + outputDepth = l.outputDepth; + #endif + + #if defined(_GBUFFER_NORMALS_OCT) + float3 normalWS = d.worldSpaceNormal; + float2 octNormalWS = PackNormalOctQuadEncode(normalWS); // values between [-1, +1], must use fp32 on some platforms + float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); // values between [ 0, 1] + half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); // values between [ 0, 1] + outNormalWS = half4(packedNormalWS, 0.0); + #else + float3 wsn = l.Normal; + #if !_WORLDSPACENORMAL + wsn = TangentToWorldSpace(d, l.Normal); + #endif + outNormalWS = half4(NormalizeNormalPerPixel(wsn), 0.0); + #endif + + #ifdef _WRITE_RENDERING_LAYERS + uint renderingLayers = GetMeshRenderingLayer(); + outRenderingLayers = float4(EncodeMeshRenderingLayer(renderingLayers), 0, 0, 0); + #endif + + + } + + ENDHLSL + + } + + + + Pass + { + Name "MotionVectors" + Tags + { + "LightMode" = "MotionVectors" + } + + // Render State + Cull Back + ZTest LEqual + ZWrite On + ColorMask RG + + Tags + { + "RenderType" = "Opaque" "Queue" = "Geometry" "PreviewType" = "Sphere" + } + Cull [_CullingOption] + ZWrite [_ZWrite] + ZTest [_ZTestMode] + ColorMask [_ColorMask] +Lighting Off + + + HLSLPROGRAM + + #pragma vertex Vert + #pragma fragment Frag + + #define _PASSMOTIONVECTOR 1 + + #pragma target 3.5 + #pragma multi_compile_instancing + #pragma vertex vert + #pragma fragment frag + + #define SHADERPASS SHADERPASS_MOTION_VECTORS + #define RAYTRACING_SHADER_GRAPH_DEFAULT + #define VARYINGS_NEED_PASS + #define _PASSMOTIONVECTOR 1 + + + #pragma shader_feature_local TIMEISCUSTOM_ON + #pragma shader_feature_local ADDITIVECONFIG_ON + #pragma shader_feature_local PREMULTIPLYALPHA_ON + #pragma shader_feature_local PREMULTIPLYCOLOR_ON + #pragma shader_feature_local SPLITRGBA_ON + #pragma shader_feature_local SHAPEADD_ON + + #pragma shader_feature_local SHAPE1SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE2SCREENUV_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local SHAPE3SCREENUV_ON /////////////////Pipeline specific implementation + + #pragma shader_feature_local SHAPEDEBUG_ON + + #pragma shader_feature_local SHAPE1CONTRAST_ON + #pragma shader_feature_local SHAPE1DISTORT_ON + #pragma shader_feature_local SHAPE1ROTATE_ON + #pragma shader_feature_local SHAPE1SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE2_ON + #pragma shader_feature_local SHAPE2CONTRAST_ON + #pragma shader_feature_local SHAPE2DISTORT_ON + #pragma shader_feature_local SHAPE2ROTATE_ON + #pragma shader_feature_local SHAPE2SHAPECOLOR_ON + + #pragma shader_feature_local SHAPE3_ON + #pragma shader_feature_local SHAPE3CONTRAST_ON + #pragma shader_feature_local SHAPE3DISTORT_ON + #pragma shader_feature_local SHAPE3ROTATE_ON + #pragma shader_feature_local SHAPE3SHAPECOLOR_ON + + #pragma shader_feature_local GLOW_ON + #pragma shader_feature_local GLOWTEX_ON + #pragma shader_feature_local DEPTHGLOW_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local MASK_ON + #pragma shader_feature_local COLORRAMP_ON + #pragma shader_feature_local COLORRAMPGRAD_ON + #pragma shader_feature_local COLORGRADING_ON + #pragma shader_feature_local HSV_ON + #pragma shader_feature_local POSTERIZE_ON + #pragma shader_feature_local PIXELATE_ON + #pragma shader_feature_local DISTORT_ON + #pragma shader_feature_local SHAKEUV_ON + #pragma shader_feature_local WAVEUV_ON + #pragma shader_feature_local ROUNDWAVEUV_ON + #pragma shader_feature_local TWISTUV_ON + #pragma shader_feature_local DOODLE_ON + #pragma shader_feature_local OFFSETSTREAM_ON + #pragma shader_feature_local TEXTURESCROLL_ON + #pragma shader_feature_local VERTOFFSET_ON + #pragma shader_feature_local RIM_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local BACKFACETINT_ON /////////////////Pipeline specific implementation + #pragma shader_feature_local POLARUV_ON + #pragma shader_feature_local POLARUVDISTORT_ON + #pragma shader_feature_local SHAPE1MASK_ON + #pragma shader_feature_local TRAILWIDTH_ON + #pragma shader_feature_local LIGHTANDSHADOW_ON + #pragma shader_feature_local SHAPETEXOFFSET_ON + #pragma shader_feature_local SHAPEWEIGHTS_ON + + #pragma shader_feature_local ALPHACUTOFF_ON + #pragma shader_feature_local ALPHASMOOTHSTEP_ON + #pragma shader_feature_local FADE_ON + #pragma shader_feature_local FADEBURN_ON + #pragma shader_feature_local ALPHAFADE_ON + #pragma shader_feature_local ALPHAFADEUSESHAPE1_ON + #pragma shader_feature_local ALPHAFADEUSEREDCHANNEL_ON + #pragma shader_feature_local ALPHAFADETRANSPARENCYTOO_ON + #pragma shader_feature_local ALPHAFADEINPUTSTREAM_ON + #pragma shader_feature_local CAMDISTFADE_ON + + #pragma shader_feature NORMALMAP_ON + + + #define _URP 1 +#define REQUIRE_DEPTH_TEXTURE + + + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DOTS.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.universal/ShaderLibrary/RenderingLayers.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Texture.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureStack.hlsl" + #include_with_pragmas "Packages/com.unity.render-pipelines.core/ShaderLibrary/FoveatedRenderingKeywords.hlsl" + #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/DebugMipmapStreamingMacros.hlsl" + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" + #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" + + #undef WorldNormalVector + #define WorldNormalVector(data, normal) mul(normal, data.TBNMatrix) + + #define UnityObjectToWorldNormal(normal) mul(GetObjectToWorldMatrix(), normal) + + #define _WorldSpaceLightPos0 _MainLightPosition + + #define UNITY_DECLARE_TEX2D(name) TEXTURE2D(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2D_NOSAMPLER(name) TEXTURE2D(name); + #define UNITY_DECLARE_TEX2DARRAY(name) TEXTURE2D_ARRAY(name); SAMPLER(sampler##name); + #define UNITY_DECLARE_TEX2DARRAY_NOSAMPLER(name) TEXTURE2D_ARRAY(name); + + #define UNITY_SAMPLE_TEX2DARRAY(tex,coord) SAMPLE_TEXTURE2D_ARRAY(tex, sampler##tex, coord.xy, coord.z) + #define UNITY_SAMPLE_TEX2DARRAY_LOD(tex,coord,lod) SAMPLE_TEXTURE2D_ARRAY_LOD(tex, sampler##tex, coord.xy, coord.z, lod) + #define UNITY_SAMPLE_TEX2D(tex, coord) SAMPLE_TEXTURE2D(tex, sampler##tex, coord) + #define UNITY_SAMPLE_TEX2D_SAMPLER(tex, samp, coord) SAMPLE_TEXTURE2D(tex, sampler##samp, coord) + + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) SAMPLE_TEXTURE2D_LOD(tex, sampler_##tex, coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) SAMPLE_TEXTURE2D_LOD (tex, sampler##samplertex,coord, lod) + + #if defined(UNITY_COMPILER_HLSL) + #define UNITY_INITIALIZE_OUTPUT(type,name) name = (type)0; + #else + #define UNITY_INITIALIZE_OUTPUT(type,name) + #endif + + #define sampler2D_float sampler2D + #define sampler2D_half sampler2D + + + + // data across stages, stripped like the above. + struct VertexToPixel + { + float4 pos : SV_POSITION; + float3 worldPos : TEXCOORD0; + float3 worldNormal : TEXCOORD1; + float4 worldTangent : TEXCOORD2; + float4 texcoord0 : TEXCOORD3; + // float4 texcoord1 : TEXCOORD4; + // float4 texcoord2 : TEXCOORD5; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD6; + // #endif + + // #if %SCREENPOSREQUIREKEY% + float4 screenPos : TEXCOORD7; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + half4 vertexColor : COLOR; + // #endif + + #if defined(LIGHTMAP_ON) + float2 lightmapUV : TEXCOORD8; + #endif + #if defined(DYNAMICLIGHTMAP_ON) + float2 dynamicLightmapUV : TEXCOORD9; + #endif + #if !defined(LIGHTMAP_ON) + float4 probeOcclusion : TEXCOORD8; + float3 sh : TEXCOORD10; + #endif + + #if defined(VARYINGS_NEED_FOG_AND_VERTEX_LIGHT) + float4 fogFactorAndVertexLight : TEXCOORD11; + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + float4 shadowCoord : TEXCOORD12; + #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD13; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD14; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD15; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD16; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD17; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD18; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD19; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD20; + // #endif + + #if UNITY_ANY_INSTANCING_ENABLED + uint instanceID : CUSTOM_INSTANCE_ID; + #endif + #if (defined(UNITY_STEREO_MULTIVIEW_ENABLED)) || (defined(UNITY_STEREO_INSTANCING_ENABLED) && (defined(SHADER_API_GLES3) || defined(SHADER_API_GLCORE))) + uint stereoTargetEyeIndexAsBlendIdx0 : BLENDINDICES0; + #endif + #if (defined(UNITY_STEREO_INSTANCING_ENABLED)) + uint stereoTargetEyeIndexAsRTArrayIdx : SV_RenderTargetArrayIndex; + #endif + #if defined(SHADER_STAGE_FRAGMENT) && defined(VARYINGS_NEED_CULLFACE) + FRONT_FACE_TYPE cullFace : FRONT_FACE_SEMANTIC; + #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float4 previousPositionCS : TEXCOORD21; // Contain previous transform position (in case of skinning for example) + float4 positionCS : TEXCOORD22; + #endif + }; + + + + + // data describing the user output of a pixel + struct Surface + { + half3 Albedo; + half Height; + half3 Normal; + half Smoothness; + half3 Emission; + half Metallic; + half3 Specular; + half Occlusion; + half SpecularPower; // for simple lighting + half Alpha; + float outputDepth; // if written, SV_Depth semantic is used. ShaderData.clipPos.z is unused value + // HDRP Only + half SpecularOcclusion; + half SubsurfaceMask; + half Thickness; + half CoatMask; + half CoatSmoothness; + half Anisotropy; + half IridescenceMask; + half IridescenceThickness; + int DiffusionProfileHash; + float SpecularAAThreshold; + float SpecularAAScreenSpaceVariance; + // requires _OVERRIDE_BAKEDGI to be defined, but is mapped in all pipelines + float3 DiffuseGI; + float3 BackDiffuseGI; + float3 SpecularGI; + float ior; + float3 transmittanceColor; + float atDistance; + float transmittanceMask; + // requires _OVERRIDE_SHADOWMASK to be defines + float4 ShadowMask; + + // for decals + float NormalAlpha; + float MAOSAlpha; + + + }; + + // Data the user declares in blackboard blocks + struct Blackboard + { + + float blackboardDummyData; + }; + + // data the user might need, this will grow to be big. But easy to strip + struct ShaderData + { + float4 clipPos; // SV_POSITION + float3 localSpacePosition; + float3 localSpaceNormal; + float3 localSpaceTangent; + + float3 worldSpacePosition; + float3 worldSpaceNormal; + float3 worldSpaceTangent; + float tangentSign; + + float3 worldSpaceViewDir; + float3 tangentSpaceViewDir; + + float4 texcoord0; + float4 texcoord1; + float4 texcoord2; + float4 texcoord3; + + float2 screenUV; + float4 screenPos; + + float4 vertexColor; + bool isFrontFace; + + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + + float3x3 TBNMatrix; + Blackboard blackboard; + }; + + struct VertexData + { + #if SHADER_TARGET > 30 + // uint vertexID : SV_VertexID; + #endif + float4 vertex : POSITION; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + + // optimize out mesh coords when not in use by user or lighting system + #if _URP && (_USINGTEXCOORD1 || _PASSMETA || _PASSFORWARD || _PASSGBUFFER) + float4 texcoord1 : TEXCOORD1; + #endif + + #if _URP && (_USINGTEXCOORD2 || _PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && defined(DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + #if _STANDARD && (_USINGTEXCOORD1 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER || _PASSFORWARDADD) && LIGHTMAP_ON))) + float4 texcoord1 : TEXCOORD1; + #endif + #if _STANDARD && (_USINGTEXCOORD2 || (_PASSMETA || ((_PASSFORWARD || _PASSGBUFFER) && DYNAMICLIGHTMAP_ON))) + float4 texcoord2 : TEXCOORD2; + #endif + + + #if _HDRP + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + #endif + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD4; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD5; // Add Precomputed Velocity (Alembic computes velocities on runtime side). + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct TessVertex + { + float4 vertex : INTERNALTESSPOS; + float3 normal : NORMAL; + float4 tangent : TANGENT; + float4 texcoord0 : TEXCOORD0; + float4 texcoord1 : TEXCOORD1; + float4 texcoord2 : TEXCOORD2; + + // #if %TEXCOORD3REQUIREKEY% + // float4 texcoord3 : TEXCOORD3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + float4 vertexColor : COLOR; + // #endif + + // #if %EXTRAV2F0REQUIREKEY% + float4 extraV2F0 : TEXCOORD5; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + float4 extraV2F1 : TEXCOORD6; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + float4 extraV2F2 : TEXCOORD7; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + float4 extraV2F3 : TEXCOORD8; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // float4 extraV2F4 : TEXCOORD9; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // float4 extraV2F5 : TEXCOORD10; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // float4 extraV2F6 : TEXCOORD11; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // float4 extraV2F7 : TEXCOORD12; + // #endif + + #if _PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR)) + float3 previousPositionOS : TEXCOORD13; // Contain previous transform position (in case of skinning for example) + #if defined (_ADD_PRECOMPUTED_VELOCITY) + float3 precomputedVelocity : TEXCOORD14; + #endif + #endif + + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + struct ExtraV2F + { + float4 extraV2F0; + float4 extraV2F1; + float4 extraV2F2; + float4 extraV2F3; + float4 extraV2F4; + float4 extraV2F5; + float4 extraV2F6; + float4 extraV2F7; + Blackboard blackboard; + float4 time; + }; + + + float3 WorldToTangentSpace(ShaderData d, float3 normal) + { + return mul(d.TBNMatrix, normal); + } + + float3 TangentToWorldSpace(ShaderData d, float3 normal) + { + return mul(normal, d.TBNMatrix); + } + + // in this case, make standard more like SRPs, because we can't fix + // unity_WorldToObject in HDRP, since it already does macro-fu there + + #if _STANDARD + float3 TransformWorldToObject(float3 p) { return mul(unity_WorldToObject, float4(p, 1)); }; + float3 TransformObjectToWorld(float3 p) { return mul(unity_ObjectToWorld, float4(p, 1)); }; + float4 TransformWorldToObject(float4 p) { return mul(unity_WorldToObject, p); }; + float4 TransformObjectToWorld(float4 p) { return mul(unity_ObjectToWorld, p); }; + float4x4 GetWorldToObjectMatrix() { return unity_WorldToObject; } + float4x4 GetObjectToWorldMatrix() { return unity_ObjectToWorld; } + #if (defined(SHADER_API_D3D11) || defined(SHADER_API_XBOXONE) || defined(UNITY_COMPILER_HLSLCC) || defined(SHADER_API_PSSL) || (SHADER_TARGET_SURFACE_ANALYSIS && !SHADER_TARGET_SURFACE_ANALYSIS_MOJOSHADER)) + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord, lod) tex.SampleLevel (sampler##tex,coord, lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord, lod) tex.SampleLevel (sampler##samplertex,coord, lod) + #else + #define UNITY_SAMPLE_TEX2D_LOD(tex,coord,lod) tex2D (tex,coord,0,lod) + #define UNITY_SAMPLE_TEX2D_SAMPLER_LOD(tex,samplertex,coord,lod) tex2D (tex,coord,0,lod) + #endif + + #undef GetWorldToObjectMatrix() + + #define GetWorldToObjectMatrix() unity_WorldToObject + + + #endif + + float3 GetCameraWorldPosition() + { + #if _HDRP + return GetCameraRelativePositionWS(_WorldSpaceCameraPos); + #else + return _WorldSpaceCameraPos; + #endif + } + + #if _GRABPASSUSED + #if _STANDARD + TEXTURE2D(%GRABTEXTURE%); + SAMPLER(sampler_%GRABTEXTURE%); + #endif + + half3 GetSceneColor(float2 uv) + { + #if _STANDARD + return SAMPLE_TEXTURE2D(%GRABTEXTURE%, sampler_%GRABTEXTURE%, uv).rgb; + #else + return SHADERGRAPH_SAMPLE_SCENE_COLOR(uv); + #endif + } + #endif + + + + #if _STANDARD + UNITY_DECLARE_DEPTH_TEXTURE(_CameraDepthTexture); + float GetSceneDepth(float2 uv) { return SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv)); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv)); } + #else + float GetSceneDepth(float2 uv) { return SHADERGRAPH_SAMPLE_SCENE_DEPTH(uv); } + float GetLinear01Depth(float2 uv) { return Linear01Depth(GetSceneDepth(uv), _ZBufferParams); } + float GetLinearEyeDepth(float2 uv) { return LinearEyeDepth(GetSceneDepth(uv), _ZBufferParams); } + #endif + + float3 GetWorldPositionFromDepthBuffer(float2 uv, float3 worldSpaceViewDir) + { + float eye = GetLinearEyeDepth(uv); + float3 camView = mul((float3x3)GetObjectToWorldMatrix(), transpose(mul(GetWorldToObjectMatrix(), UNITY_MATRIX_I_V)) [2].xyz); + + float dt = dot(worldSpaceViewDir, camView); + float3 div = worldSpaceViewDir/dt; + float3 wpos = (eye * div) + GetCameraWorldPosition(); + return wpos; + } + + #if _HDRP + float3 ObjectToWorldSpacePosition(float3 pos) + { + return GetAbsolutePositionWS(TransformObjectToWorld(pos)); + } + #else + float3 ObjectToWorldSpacePosition(float3 pos) + { + return TransformObjectToWorld(pos); + } + #endif + + #if _STANDARD + UNITY_DECLARE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture); + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + float4 depthNorms = UNITY_SAMPLE_SCREENSPACE_TEXTURE(_CameraDepthNormalsTexture, uv); + float3 norms = DecodeViewNormalStereo(depthNorms); + norms = mul((float3x3)GetWorldToViewMatrix(), norms) * 0.5 + 0.5; + return norms; + } + #elif _HDRP && !_DECALSHADER + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + NormalData nd; + DecodeFromNormalBuffer(_ScreenSize.xy * uv, nd); + return nd.normalWS; + } + #elif _URP + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/DeclareNormalsTexture.hlsl" + #endif + + float3 GetSceneNormal(float2 uv, float3 worldSpaceViewDir) + { + #if (SHADER_LIBRARY_VERSION_MAJOR >= 10) + return SampleSceneNormals(uv); + #else + float3 wpos = GetWorldPositionFromDepthBuffer(uv, worldSpaceViewDir); + return normalize(-cross(ddx(wpos), ddy(wpos))) * 0.5 + 0.5; + #endif + + } + #endif + + #if _HDRP + + half3 UnpackNormalmapRGorAG(half4 packednormal) + { + // This do the trick + packednormal.x *= packednormal.w; + + half3 normal; + normal.xy = packednormal.xy * 2 - 1; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + half3 UnpackNormal(half4 packednormal) + { + #if defined(UNITY_NO_DXT5nm) + return packednormal.xyz * 2 - 1; + #else + return UnpackNormalmapRGorAG(packednormal); + #endif + } + #endif + #if _HDRP || _URP + + half3 UnpackScaleNormal(half4 packednormal, half scale) + { + #ifndef UNITY_NO_DXT5nm + // Unpack normal as DXT5nm (1, y, 1, x) or BC5 (x, y, 0, 1) + // Note neutral texture like "bump" is (0, 0, 1, 1) to work with both plain RGB normal and DXT5nm/BC5 + packednormal.x *= packednormal.w; + #endif + half3 normal; + normal.xy = (packednormal.xy * 2 - 1) * scale; + normal.z = sqrt(1 - saturate(dot(normal.xy, normal.xy))); + return normal; + } + + #endif + + + void GetSun(out float3 lightDir, out float3 color) + { + lightDir = float3(0.5, 0.5, 0); + color = 1; + #if _HDRP + if (_DirectionalLightCount > 0) + { + DirectionalLightData light = _DirectionalLightDatas[0]; + lightDir = -light.forward.xyz; + color = light.color; + } + #elif _STANDARD + lightDir = normalize(_WorldSpaceLightPos0.xyz); + color = _LightColor0.rgb; + #elif _URP + Light light = GetMainLight(); + lightDir = light.direction; + color = light.color; + #endif + } + + + + CBUFFER_START(UnityPerMaterial) + + + half4 _Color; + half _Alpha; + half _AlphaCutoffValue; + + half _TimingSeed; + + #if TIMEISCUSTOM_ON + float4 globalCustomTime; + #endif + + half4 _MainTex_ST, _ShapeColor; + half _ShapeXSpeed, _ShapeYSpeed, _ShapeColorWeight, _ShapeAlphaWeight; + + #if SHAPE1CONTRAST_ON + half _ShapeContrast, _ShapeBrightness; + #endif + + #if SHAPE1DISTORT_ON + half4 _ShapeDistortTex_ST; + half _ShapeDistortAmount, _ShapeDistortXSpeed, _ShapeDistortYSpeed; + #endif + + #if SHAPE1ROTATE_ON + half _ShapeRotationOffset, _ShapeRotationSpeed; + #endif + + #if OFFSETSTREAM_ON + half _OffsetSh1; + #endif + + #if SHAPEWEIGHTS_ON + half _Sh1BlendOffset; + #endif + + #if SHAPE2_ON + half4 _Shape2Tex_ST, _Shape2Color; + half _Shape2XSpeed, _Shape2YSpeed, _Shape2ColorWeight, _Shape2AlphaWeight; + #if SHAPE2CONTRAST_ON + half _Shape2Contrast, _Shape2Brightness; + #endif + #if SHAPE2DISTORT_ON + half4 _Shape2DistortTex_ST; + half _Shape2DistortAmount, _Shape2DistortXSpeed, _Shape2DistortYSpeed; + #endif + #if SHAPE2ROTATE_ON + half _Shape2RotationOffset, _Shape2RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh2; + #endif + #if SHAPEWEIGHTS_ON + half _Sh2BlendOffset; + #endif + #endif + + #if SHAPE3_ON + half4 _Shape3Tex_ST, _Shape3Color; + half _Shape3XSpeed, _Shape3YSpeed, _Shape3ColorWeight, _Shape3AlphaWeight; + #if SHAPE3CONTRAST_ON + half _Shape3Contrast, _Shape3Brightness; + #endif + #if SHAPE3DISTORT_ON + half4 _Shape3DistortTex_ST; + half _Shape3DistortAmount, _Shape3DistortXSpeed, _Shape3DistortYSpeed; + #endif + #if SHAPE3ROTATE_ON + half _Shape3RotationOffset, _Shape3RotationSpeed; + #endif + #if OFFSETSTREAM_ON + half _OffsetSh3; + #endif + #if SHAPEWEIGHTS_ON + half _Sh3BlendOffset; + #endif + #endif + + #if GLOW_ON + half4 _GlowColor; + half _Glow, _GlowGlobal; + #if GLOWTEX_ON + half4 _GlowTex_ST; + #endif + #endif + + #if MASK_ON + half4 _MaskTex_ST; + half _MaskPow; + #endif + + #if COLORRAMP_ON + half _ColorRampLuminosity, _ColorRampBlend; + #endif + + #if ALPHASMOOTHSTEP_ON + half _AlphaStepMin, _AlphaStepMax; + #endif + + #if ALPHAFADE_ON + half _AlphaFadeAmount, _AlphaFadeSmooth, _AlphaFadePow; + #endif + + #if HSV_ON + half _HsvShift, _HsvSaturation, _HsvBright; + #endif + + #if POSTERIZE_ON + half _PosterizeNumColors; + #endif + + #if PIXELATE_ON + half _PixelateSize; + #endif + + #if DISTORT_ON + half4 _DistortTex_ST; + half _DistortTexXSpeed, _DistortTexYSpeed, _DistortAmount; + #endif + + #if TEXTURESCROLL_ON + half _TextureScrollXSpeed, _TextureScrollYSpeed; + #endif + + #if SHAKEUV_ON + half _ShakeUvSpeed, _ShakeUvX, _ShakeUvY; + #endif + + #if WAVEUV_ON + half _WaveAmount, _WaveSpeed, _WaveStrength, _WaveX, _WaveY; + #endif + + #if ROUNDWAVEUV_ON + half _RoundWaveStrength, _RoundWaveSpeed; + #endif + + #if TWISTUV_ON + half _TwistUvAmount, _TwistUvPosX, _TwistUvPosY, _TwistUvRadius; + #endif + + #if DOODLE_ON + half _HandDrawnAmount, _HandDrawnSpeed; + #endif + + #if ROUNDWAVEUV_ON || PIXELATE_ON + half4 _MainTex_TexelSize; + #endif + + #if VERTOFFSET_ON + half4 _VertOffsetTex_ST; + half _VertOffsetAmount, _VertOffsetPower, _VertOffsetTexXSpeed, _VertOffsetTexYSpeed; + #endif + + #if FADE_ON + half4 _FadeTex_ST; + half _FadeAmount, _FadeTransition, _FadePower, _FadeScrollXSpeed, _FadeScrollYSpeed; + #if FADEBURN_ON + half4 _FadeBurnColor, _FadeBurnTex_ST; + half _FadeBurnWidth, _FadeBurnGlow; + #endif + #endif + + #if COLORGRADING_ON + half3 _ColorGradingLight, _ColorGradingMiddle, _ColorGradingDark; + half _ColorGradingMidPoint; + #endif + + #if CAMDISTFADE_ON + half _CamDistFadeStepMin, _CamDistFadeStepMax, _CamDistProximityFade; + #endif + + #if RIM_ON + half _RimBias, _RimScale, _RimPower, _RimIntensity, _RimAddAmount, _RimErodesAlpha; + half4 _RimColor; + #endif + + #if BACKFACETINT_ON + half4 _BackFaceTint, _FrontFaceTint; + #endif + + #if SHAPEDEBUG_ON + half _DebugShape; + #endif + + #if SHAPE1MASK_ON + half4 _Shape1MaskTex_ST; + half _Shape1MaskPow; + #endif + + #if TRAILWIDTH_ON + half _TrailWidthPower; + #endif + + #if LIGHTANDSHADOW_ON + half3 _All1VfxLightDir; + half _ShadowAmount, _ShadowStepMin, _ShadowStepMax, _LightAmount; + half4 _LightColor; + #endif + + #if SHAPETEXOFFSET_ON + half _RandomSh1Mult, _RandomSh2Mult, _RandomSh3Mult; + #endif + + #if DEPTHGLOW_ON + half _DepthGlowDist, _DepthGlowPow, _DepthGlow, _DepthGlowGlobal; + half4 _DepthGlowColor; + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half _ScreenUvShDistScale,_ScreenUvSh2DistScale, _ScreenUvSh3DistScale; + #endif + + #if NORMALMAP_ON + half _NormalStrength; + #endif + + + + + CBUFFER_END + + + + + + + + TEXTURE2D(_MainTex); + SAMPLER(sampler_MainTex); + + #if SHAPE1DISTORT_ON + TEXTURE2D(_ShapeDistortTex); + SAMPLER(sampler_ShapeDistortTex); + #endif + + #if SHAPE2_ON + TEXTURE2D(_Shape2Tex); + SAMPLER(sampler_Shape2Tex); + #if SHAPE2DISTORT_ON + TEXTURE2D(_Shape2DistortTex); + SAMPLER(sampler_Shape2DistortTex); + #endif + #endif + + #if SHAPE3_ON + TEXTURE2D(_Shape3Tex); + SAMPLER(sampler_Shape3Tex); + #if SHAPE3DISTORT_ON + TEXTURE2D(_Shape3DistortTex); + SAMPLER(sampler_Shape3DistortTex); + #endif + #endif + + #if GLOW_ON + #if GLOWTEX_ON + TEXTURE2D(_GlowTex); + SAMPLER(sampler_GlowTex); + #endif + #endif + + #if MASK_ON + TEXTURE2D(_MaskTex); + SAMPLER(sampler_MaskTex); + #endif + + #if COLORRAMP_ON + TEXTURE2D(_ColorRampTex); + SAMPLER(sampler_ColorRampTex); + #endif + + #if COLORRAMPGRAD_ON + TEXTURE2D(_ColorRampTexGradient); + SAMPLER(sampler_ColorRampTexGradient); + #endif + + #if DISTORT_ON + TEXTURE2D(_DistortTex); + SAMPLER(sampler_DistortTex); + #endif + + #if VERTOFFSET_ON + TEXTURE2D(_VertOffsetTex); + SAMPLER(sampler_VertOffsetTex); + #endif + + #if FADE_ON + TEXTURE2D(_FadeTex); + SAMPLER(sampler_FadeTex); + #if FADEBURN_ON + TEXTURE2D(_FadeBurnTex); + SAMPLER(sampler_FadeBurnTex); + #endif + #endif + + #if SHAPE1MASK_ON + TEXTURE2D(_Shape1MaskTex); + SAMPLER(sampler_Shape1MaskTex); + #endif + + #if TRAILWIDTH_ON + TEXTURE2D(_TrailWidthGradient); + SAMPLER(sampler_TrailWidthGradient); + #endif + + #if NORMALMAP_ON + TEXTURE2D(_NormalMap); + SAMPLER(sampler_NormalMap); + #endif + + half4 SampleTextureWithScroll(in Texture2D _tex, in SamplerState _sampler, in float2 uv, in half scrollXSpeed, in half scrollYSpeed, in float time) + { + half2 _uv = uv; + _uv.x += (time * scrollXSpeed) % 1; + _uv.y += (time * scrollYSpeed) % 1; + return SAMPLE_TEXTURE2D(_tex, _sampler, _uv); + } + + half EaseOutQuint(half x) + { + return 1 - pow(1 - x, 5); + } + + half RemapFloat(half inValue, half inMin, half inMax, half outMin, half outMax) + { + return outMin + (inValue - inMin) * (outMax - outMin) / (inMax - inMin); + } + + float2 RotateUvs(float2 uv, half rotation, half4 scaleAndTranslate) + { + half2 center = half2(0.5 * scaleAndTranslate.x + scaleAndTranslate.z, 0.5 * scaleAndTranslate.y + scaleAndTranslate.w); + half cosAngle = cos(rotation); + half sinAngle = sin(rotation); + uv -= center; + uv = mul(half2x2(cosAngle, -sinAngle, sinAngle, cosAngle), uv); + uv += center; + return uv; + } + + half4 GetDebugColor(float4 resColor, half4 shape1, half4 shape2, half4 shape3) + { + half4 res = resColor; + + //MAKE SURE THE FOLLOWING CODE BLOCK IS UNCOMMENTED------------------------------------------- + #if SHAPEDEBUG_ON + if(_DebugShape < 1.5) return shape1; + #if SHAPE2_ON + else if (_DebugShape < 2.5) return shape2; + #endif + #if SHAPE3_ON + else return shape3; + #endif + #endif + + return res; + } + + void Ext_ModifyVertex0 (inout VertexData v, inout ExtraV2F d) + { + //uvDistTex --> extraV2F0 + //uvSh1DistTex --> extraV2F1 + //uvSh2DistTex --> extraV2F2 + //uvSh3DistTex --> extraV2F3 + + #if VERTOFFSET_ON + #if TIMEISCUSTOM_ON + const half time = v.texcoord0.z + globalCustomTime.y; + #else + const half time = v.texcoord0.z + _Time.y; + #endif + half4 offsetUv = half4(TRANSFORM_TEX(v.texcoord0.xy, _VertOffsetTex), 0, 0); + offsetUv.x += (time * _VertOffsetTexXSpeed) % 1; + offsetUv.y += (time * _VertOffsetTexYSpeed) % 1; + v.vertex.xyz += v.normal * _VertOffsetAmount * pow(SAMPLE_TEXTURE2D_LOD(_VertOffsetTex, sampler_VertOffsetTex, offsetUv, 0).r, _VertOffsetPower); + #endif + + #if DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F0.xy = TRANSFORM_TEX(v.texcoord0.xy, _DistortTex); + #endif + + #if SHAPE1DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F1.xy = TRANSFORM_TEX(v.texcoord0.xy, _ShapeDistortTex); + #endif + + #if SHAPE2_ON + #if SHAPE2DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F2.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape2DistortTex);; + #endif + #endif + + #if SHAPE3_ON + #if SHAPE3DISTORT_ON && !POLARUVDISTORT_ON + d.extraV2F3.xy = TRANSFORM_TEX(v.texcoord0.xy, _Shape3DistortTex); + #endif + #endif + } + + void Ext_SurfaceFunction0 (inout Surface o, ShaderData d) + { + //i.uvSeed -> d.texcoord0.xy + + float seed = d.texcoord0.z + _TimingSeed; + #if TIMEISCUSTOM_ON + const float4 shaderTime = globalCustomTime; + #else + const float4 shaderTime = _Time; + #endif + float time = shaderTime.y + seed; + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 originalUvs = d.texcoord0.xy; + #endif + + #if PIXELATE_ON + half aspectRatio = _MainTex_TexelSize.x / _MainTex_TexelSize.y; + half2 pixelSize = float2(_PixelateSize, _PixelateSize * aspectRatio); + d.texcoord0.xy = floor(d.texcoord0.xy * pixelSize) / pixelSize; + #endif + + #if NORMALMAP_ON + half4 normalSample = SAMPLE_TEXTURE2D(_NormalMap, sampler_NormalMap, d.texcoord0.xy); + half3 normalTS = UnpackNormal(normalSample); + normalTS.xy *= _NormalStrength; + o.Normal = normalTS; + #endif + + #if TWISTUV_ON + half2 tempUv = d.texcoord0.xy - half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + _TwistUvRadius *= (_MainTex_ST.x + _MainTex_ST.y) / 2; + half percent = (_TwistUvRadius - length(tempUv)) / _TwistUvRadius; + half theta = percent * percent * (2.0 * sin(_TwistUvAmount)) * 8.0; + half s = sin(theta); + half c = cos(theta); + half beta = max(sign(_TwistUvRadius - length(tempUv)), 0.0); + tempUv = half2(dot(tempUv, half2(c, -s)), dot(tempUv, half2(s, c))) * beta + tempUv * (1 - beta); + tempUv += half2(_TwistUvPosX * _MainTex_ST.x, _TwistUvPosY * _MainTex_ST.y); + d.texcoord0.xy = tempUv; + #endif + + #if DOODLE_ON + half2 uvCopy = d.texcoord0.xy; + _HandDrawnSpeed = (floor((shaderTime.x + seed) * 20 * _HandDrawnSpeed) / _HandDrawnSpeed) * _HandDrawnSpeed; + uvCopy.x = sin((uvCopy.x * _HandDrawnAmount + _HandDrawnSpeed) * 4); + uvCopy.y = cos((uvCopy.y * _HandDrawnAmount + _HandDrawnSpeed) * 4); + d.texcoord0.xy = lerp(d.texcoord0.xy, d.texcoord0.xy + uvCopy, 0.0005 * _HandDrawnAmount); + #endif + + #if SHAKEUV_ON + half xShake = sin((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvX; + half yShake = cos((shaderTime.x + seed) * _ShakeUvSpeed * 50) * _ShakeUvY; + d.texcoord0.xy += half2(xShake * 0.012, yShake * 0.01); + #endif + + #if WAVEUV_ON + half2 uvWave = half2(_WaveX * _MainTex_ST.x, _WaveY * _MainTex_ST.y) - d.texcoord0.xy; + #if ATLAS_ON + uvWave = half2(_WaveX, _WaveY) - uvRect; + #endif + uvWave.x *= _ScreenParams.x / _ScreenParams.y; + half angWave = (sqrt(dot(uvWave, uvWave)) * _WaveAmount) - ((time * _WaveSpeed) % 360.0); + d.texcoord0.xy = d.texcoord0.xy + normalize(uvWave) * sin(angWave) * (_WaveStrength / 1000.0); + #endif + + #if ROUNDWAVEUV_ON + half xWave = ((0.5 * _MainTex_ST.x) - d.texcoord0.x); + half yWave = ((0.5 * _MainTex_ST.y) - d.texcoord0.y) * (_MainTex_TexelSize.w / _MainTex_TexelSize.z); + half ripple = -sqrt(xWave*xWave + yWave* yWave); + d.texcoord0.xy += (sin((ripple + time * (_RoundWaveSpeed/10.0)) / 0.015) * (_RoundWaveStrength/10.0)) % 1; + #endif + + #if POLARUV_ON + half2 prePolarUvs = d.texcoord0.xy; + d.texcoord0.xy = d.texcoord0.xy - half2(0.5, 0.5); + d.texcoord0.xy = half2(atan2(d.texcoord0.y, d.texcoord0.x) / (1.0 * 6.28318530718), length(d.texcoord0.xy) * 2.0); + d.texcoord0.xy *= _MainTex_ST.xy; + #endif + + #if DISTORT_ON + #if POLARUVDISTORT_ON + half2 distortUvs = TRANSFORM_TEX(d.texcoord0.xy, _DistortTex); + #else + half2 distortUvs = d.extraV2F0.xy; + #endif + distortUvs.x += ((shaderTime.x + seed) * _DistortTexXSpeed) % 1; + distortUvs.y += ((shaderTime.x + seed) * _DistortTexYSpeed) % 1; + #if ATLAS_ON + d.extraV2F0.xy = half2((d.extraV2F0.x - _MinXUV) / (_MaxXUV - _MinXUV), (d.extraV2F0.y - _MinYUV) / (_MaxYUV - _MinYUV)); + #endif + half distortAmnt = (SAMPLE_TEXTURE2D(_DistortTex, sampler_DistortTex, distortUvs).r - 0.5) * 0.2 * _DistortAmount; + d.texcoord0.x += distortAmnt; + d.texcoord0.y += distortAmnt; + #endif + + #if TEXTURESCROLL_ON + d.texcoord0.x += (time * _TextureScrollXSpeed) % 1; + d.texcoord0.y += (time * _TextureScrollYSpeed) % 1; + #endif + + #if TRAILWIDTH_ON + half width = pow(SAMPLE_TEXTURE2D(_TrailWidthGradient, sampler_TrailWidthGradient, d.texcoord0).r, _TrailWidthPower); + d.texcoord0.y = (d.texcoord0.y * 2 - 1) / width * 0.5 + 0.5; + clip(d.texcoord0.y); + clip(1 - d.texcoord0.y); + #endif + + float2 shape1Uv = d.texcoord0.xy; + #if SHAPE2_ON + float2 shape2Uv = shape1Uv; + #endif + #if SHAPE3_ON + float2 shape3Uv = shape1Uv; + #endif + + #if CAMDISTFADE_ON || SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half camDistance = distance(d.worldSpacePosition, _WorldSpaceCameraPos); + #endif + + #if SHAPE1SCREENUV_ON || SHAPE2SCREENUV_ON || SHAPE3SCREENUV_ON + half2 uvOffsetPostFx = d.texcoord0.xy - originalUvs; + d.texcoord0.xy = d.screenPos.xy / d.screenPos.w; + d.texcoord0.x = d.texcoord0.x * (_ScreenParams.x / _ScreenParams.y); + d.texcoord0.x -= 0.5; + d.texcoord0.xy -= uvOffsetPostFx; + originalUvs += uvOffsetPostFx; + half distanceZoom = camDistance * 0.1; + half2 scaleWithDistUvs = d.texcoord0.xy * distanceZoom + ((-distanceZoom * 0.5) + 0.5); + #if SHAPE1SCREENUV_ON + shape1Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvShDistScale); + #else + shape1Uv = originalUvs; + #endif + #if SHAPE2SCREENUV_ON && SHAPE2_ON + shape2Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh2DistScale); + #else + #if SHAPE2_ON + shape2Uv = originalUvs; + #endif + #endif + #if SHAPE3SCREENUV_ON && SHAPE3_ON + shape3Uv = lerp(d.texcoord0.xy, scaleWithDistUvs, _ScreenUvSh3DistScale); + #else + #if SHAPE3_ON + shape3Uv = originalUvs; + #endif + #endif + #endif + + shape1Uv = TRANSFORM_TEX(shape1Uv, _MainTex); + #if OFFSETSTREAM_ON + shape1Uv.x += i.offsetCustomData.x * _OffsetSh1; + shape1Uv.y += i.offsetCustomData.y * _OffsetSh1; + #endif + #if SHAPETEXOFFSET_ON + shape1Uv += seed * _RandomSh1Mult; + #endif + + #if SHAPE1DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh1DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _ShapeDistortTex); + #else + half2 sh1DistortUvs = d.extraV2F1.xy; + #endif + + sh1DistortUvs.x += ((time + seed) * _ShapeDistortXSpeed) % 1; + sh1DistortUvs.y += ((time + seed) * _ShapeDistortYSpeed) % 1; + half distortAmount = (SAMPLE_TEXTURE2D(_ShapeDistortTex, sampler_ShapeDistortTex, sh1DistortUvs).r - 0.5) * 0.2 * _ShapeDistortAmount; + shape1Uv.x += distortAmount; + shape1Uv.y += distortAmount; + #endif + #if SHAPE1ROTATE_ON + shape1Uv = RotateUvs(shape1Uv, _ShapeRotationOffset + ((_ShapeRotationSpeed * time) % 6.28318530718), _MainTex_ST); + #endif + + half4 shape1 = SampleTextureWithScroll(_MainTex, sampler_MainTex, shape1Uv, _ShapeXSpeed, _ShapeYSpeed, time); + #if SHAPE1SHAPECOLOR_ON + shape1.a = shape1.r; + shape1.rgb = _ShapeColor.rgb; + #else + shape1 *= _ShapeColor; + #endif + #if SHAPE1CONTRAST_ON + #if SHAPE1SHAPECOLOR_ON + shape1.a = saturate((shape1.a - 0.5) * _ShapeContrast + 0.5 + _ShapeBrightness); + #else + shape1.rgb = max(0, (shape1.rgb - half3(0.5, 0.5, 0.5)) * _ShapeContrast + half3(0.5, 0.5, 0.5) + _ShapeBrightness); + #endif + #endif + + half4 shape2 = 1.0; + #if SHAPE2_ON + shape2Uv = TRANSFORM_TEX(shape2Uv, _Shape2Tex); + #if OFFSETSTREAM_ON + shape2Uv.x += i.offsetCustomData.x * _OffsetSh2; + shape2Uv.y += i.offsetCustomData.y * _OffsetSh2; + #endif + #if SHAPETEXOFFSET_ON + shape2Uv += seed * _RandomSh2Mult; + #endif + #if SHAPE2DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh2DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape2DistortTex); + #else + half2 sh2DistortUvs = d.extraV2F2.xy; + #endif + sh2DistortUvs.x += ((time + seed) * _Shape2DistortXSpeed) % 1; + sh2DistortUvs.y += ((time + seed) * _Shape2DistortYSpeed) % 1; + half distortAmnt2 = (SAMPLE_TEXTURE2D(_Shape2DistortTex, sampler_Shape2DistortTex, sh2DistortUvs).r - 0.5) * 0.2 * _Shape2DistortAmount; + shape2Uv.x += distortAmnt2; + shape2Uv.y += distortAmnt2; + #endif + #if SHAPE2ROTATE_ON + shape2Uv = RotateUvs(shape2Uv, _Shape2RotationOffset + ((_Shape2RotationSpeed * time) % 6.28318530718), _Shape2Tex_ST); + #endif + + shape2 = SampleTextureWithScroll(_Shape2Tex, sampler_Shape2Tex, shape2Uv, _Shape2XSpeed, _Shape2YSpeed, time); + #if SHAPE2SHAPECOLOR_ON + shape2.a = shape2.r; + shape2.rgb = _Shape2Color.rgb; + #else + shape2 *= _Shape2Color; + #endif + #if SHAPE2CONTRAST_ON + #if SHAPE2SHAPECOLOR_ON + shape2.a = max(0, (shape2.a - 0.5) * _Shape2Contrast + 0.5 + _Shape2Brightness); + #else + shape2.rgb = max(0, (shape2.rgb - half3(0.5, 0.5, 0.5)) * _Shape2Contrast + half3(0.5, 0.5, 0.5) + _Shape2Brightness); + #endif + #endif + #endif + + half4 shape3 = 1.0; + #if SHAPE3_ON + shape3Uv = TRANSFORM_TEX(shape3Uv, _Shape3Tex); + + #if OFFSETSTREAM_ON + shape3Uv.x += i.offsetCustomData.x * _OffsetSh3; + shape3Uv.y += i.offsetCustomData.y * _OffsetSh3; + #endif + #if SHAPETEXOFFSET_ON + shape3Uv += seed * _RandomSh3Mult; + #endif + #if SHAPE3DISTORT_ON + #if POLARUVDISTORT_ON + half2 sh3DistortUvs = TRANSFORM_TEX(d.texcoord0.xy, _Shape3DistortTex); + #else + half2 sh3DistortUvs = d.extraV2F3.xy; + #endif + sh3DistortUvs.x += ((time + seed) * _Shape3DistortXSpeed) % 1; + sh3DistortUvs.y += ((time + seed) * _Shape3DistortYSpeed) % 1; + half distortAmnt3 = (SAMPLE_TEXTURE2D(_Shape3DistortTex, sampler_Shape3DistortTex, sh3DistortUvs).r - 0.5) * 0.3 * _Shape3DistortAmount; + shape3Uv.x += distortAmnt3; + shape3Uv.y += distortAmnt3; + #endif + #if SHAPE3ROTATE_ON + shape3Uv = RotateUvs(shape3Uv, _Shape3RotationOffset + ((_Shape3RotationSpeed * time) % 6.28318530718), _Shape3Tex_ST); + #endif + shape3 = SampleTextureWithScroll(_Shape3Tex, sampler_Shape3Tex, shape3Uv, _Shape3XSpeed, _Shape3YSpeed, time); + #if SHAPE3SHAPECOLOR_ON + shape3.a = shape3.r; + shape3.rgb = _Shape3Color.rgb; + #else + shape3 *= _Shape3Color; + #endif + #if SHAPE3CONTRAST_ON + #if SHAPE3SHAPECOLOR_ON + shape3.a = max(0, (shape3.a - 0.5) * _Shape3Contrast + 0.5 + _Shape3Brightness); + #else + shape3.rgb = max(0, (shape3.rgb - half3(0.5, 0.5, 0.5)) * _Shape3Contrast + half3(0.5, 0.5, 0.5) + _Shape3Brightness); + #endif + #endif + #endif + + half4 col = shape1; + //Mix all shapes pre: change weights if custom vertex effect active + #if SHAPEWEIGHTS_ON + half shapeWeightOffset; + #if SHAPE2_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh1BlendOffset; + _ShapeColorWeight = max(0, _ShapeColorWeight + shapeWeightOffset); + _ShapeAlphaWeight = max(0, _ShapeAlphaWeight + shapeWeightOffset); + shapeWeightOffset = i.offsetCustomData.z * _Sh2BlendOffset; + _Shape2ColorWeight = max(0, _Shape2ColorWeight + shapeWeightOffset); + _Shape2AlphaWeight = max(0, _Shape2AlphaWeight + shapeWeightOffset); + #endif + #if SHAPE3_ON + shapeWeightOffset = i.offsetCustomData.z * _Sh3BlendOffset; + _Shape3ColorWeight = max(0, _Shape3ColorWeight + shapeWeightOffset); + _Shape3AlphaWeight = max(0, _Shape3AlphaWeight + shapeWeightOffset); + #endif + #endif + + //Mix all shapes + #if SHAPE2_ON + #if !SPLITRGBA_ON + _ShapeAlphaWeight = _ShapeColorWeight; + _Shape2AlphaWeight = _Shape2ColorWeight; + #endif + #if SHAPE3_ON //Shape3 On + #if !SPLITRGBA_ON + _Shape3AlphaWeight = _Shape3ColorWeight; + #endif + #if SHAPEADD_ON + col.rgb = ((shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight)) + (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(max(shape3.a * _Shape3AlphaWeight, max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight))); + #else + col.rgb = ((shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight)) * (shape3.rgb * _Shape3ColorWeight); + col.a = saturate(((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)) * (shape3.a * _Shape3AlphaWeight)); + #endif + #else //Shape3 Off + #if SHAPEADD_ON + col.rgb = (shape1.rgb * _ShapeColorWeight) + (shape2.rgb * _Shape2ColorWeight); + col.a = saturate(max(shape1.a * _ShapeAlphaWeight, shape2.a * _Shape2AlphaWeight)); + #else + col.rgb = (shape1.rgb * _ShapeColorWeight) * (shape2.rgb * _Shape2ColorWeight); + col.a = saturate((shape1.a * _ShapeAlphaWeight) * (shape2.a * _Shape2AlphaWeight)); + #endif + #endif + #endif + + #if SHAPE1MASK_ON + col = lerp(col, shape1, pow(SAMPLE_TEXTURE2D(_Shape1MaskTex, sampler_Shape1MaskTex, TRANSFORM_TEX(i.uvSeed.xy, _Shape1MaskTex)).r, _Shape1MaskPow)); + #endif + + #if PREMULTIPLYCOLOR_ON + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + col.a = min(luminance, col.a); + #endif + + col.rgb *= _Color.rgb * d.vertexColor.rgb; + #if PREMULTIPLYALPHA_ON + col.rgb *= col.a; + #endif + + #if !PREMULTIPLYCOLOR_ON && (COLORRAMP_ON || ALPHAFADE_ON || COLORGRADING_ON || FADE_ON || (ADDITIVECONFIG_ON && (GLOW_ON || DEPTHGLOW_ON))) + half luminance = 0; + luminance = 0.3 * col.r + 0.59 * col.g + 0.11 * col.b; + luminance *= col.a; + #endif + + #if (FADE_ON || ALPHAFADE_ON) && ALPHAFADEINPUTSTREAM_ON + col.a *= d.vertexColor.a; + d.vertexColor.a = d.texcoord0.w; + #endif + + #if FADE_ON + half preFadeAlpha = col.a; + _FadeAmount = saturate(_FadeAmount + (1 - d.vertexColor.a)); + _FadeTransition = max(0.01, _FadeTransition * EaseOutQuint(saturate(_FadeAmount))); + half2 fadeUv; + fadeUv = d.texcoord0.xy + seed; + fadeUv.x += (time * _FadeScrollXSpeed) % 1; + fadeUv.y += (time * _FadeScrollYSpeed) % 1; + half2 tiledUvFade1 = TRANSFORM_TEX(fadeUv, _FadeTex); + #if ADDITIVECONFIG_ON && !PREMULTIPLYCOLOR_ON + preFadeAlpha *= luminance; + #endif + _FadeAmount = saturate(pow(_FadeAmount, _FadePower)); + #if FADEBURN_ON + half2 tiledUvFade2 = TRANSFORM_TEX(fadeUv, _FadeBurnTex); + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + half fadeNaturalEdge = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fadeNaturalEdge; + half fadeBurn = saturate(smoothstep(0.0 , _FadeTransition + _FadeBurnWidth, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + fadeBurn = fadeNaturalEdge - fadeBurn; + _FadeBurnColor.rgb *= _FadeBurnGlow; + col.rgb += fadeBurn * SAMPLE_TEXTURE2D(_FadeBurnTex, sampler_FadeBurnTex, tiledUvFade2).rgb * _FadeBurnColor.rgb * preFadeAlpha; + #else + half fadeSample = SAMPLE_TEXTURE2D(_FadeTex, sampler_FadeTex, tiledUvFade1).r; + float fade = saturate(smoothstep(0.0 , _FadeTransition, RemapFloat(1.0 - _FadeAmount, 0.0, 1.0, -1.0, 1.0) + fadeSample)); + col.a *= fade; + #endif + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _FadeAmount; + #endif + #endif + + #if ALPHAFADE_ON + half alphaFadeLuminance; + _AlphaFadeAmount = saturate(_AlphaFadeAmount + (1 - d.vertexColor.a)); + _AlphaFadeAmount = saturate(pow(_AlphaFadeAmount, _AlphaFadePow)); + _AlphaFadeSmooth = max(0.01, _AlphaFadeSmooth * EaseOutQuint(saturate(_AlphaFadeAmount))); + #if ALPHAFADEUSESHAPE1_ON + alphaFadeLuminance = shape1.r; + #else + alphaFadeLuminance = luminance; + #endif + alphaFadeLuminance = saturate(alphaFadeLuminance - 0.001); + #if ALPHAFADEUSEREDCHANNEL_ON + col.a *= col.r; + #endif + col.a = saturate(col.a); + float alphaFade = saturate(smoothstep(0.0 , _AlphaFadeSmooth, RemapFloat(1.0 - _AlphaFadeAmount, 0.0, 1.0, -1.0, 1.0) + alphaFadeLuminance)); + col.a *= alphaFade; + #if ALPHAFADETRANSPARENCYTOO_ON + col.a *= 1 - _AlphaFadeAmount; + #endif + #endif + + #if BACKFACETINT_ON + col.rgb = lerp(col.rgb * _BackFaceTint, col.rgb * _FrontFaceTint, step(0, dot(d.worldSpaceNormal, d.worldSpaceViewDir))); + #endif + + //#if LIGHTANDSHADOW_ON + //half NdL = saturate(dot(d.worldSpaceNormal, -_All1VfxLightDir)); + //col.rgb += _LightColor * _LightAmount * NdL; + //NdL = max(_ShadowAmount, NdL); + //NdL = smoothstep(_ShadowStepMin, _ShadowStepMax, NdL); + //col.rgb *= NdL; + //#endif + + #if COLORGRADING_ON + col.rgb *= lerp(lerp(_ColorGradingDark, _ColorGradingMiddle, luminance/_ColorGradingMidPoint), + lerp(_ColorGradingMiddle, _ColorGradingLight, (luminance - _ColorGradingMidPoint)/(1.0 - _ColorGradingMidPoint)), step(_ColorGradingMidPoint, luminance)); + #endif + + #if COLORRAMP_ON + half colorRampLuminance = saturate(luminance + _ColorRampLuminosity); + #if COLORRAMPGRAD_ON + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTexGradient, sampler_ColorRampTexGradient, half2(colorRampLuminance, 0)); + #else + half4 colorRampRes = SAMPLE_TEXTURE2D(_ColorRampTex, sampler_ColorRampTex, half2(colorRampLuminance, 0)); + #endif + col.rgb = lerp(col.rgb, colorRampRes.rgb, _ColorRampBlend); + col.a = lerp(col.a, saturate(col.a * colorRampRes.a), _ColorRampBlend); + #endif + + #if POSTERIZE_ON && !POSTERIZEOUTLINE_ON + col.rgb = floor(col.rgb / (1.0 / _PosterizeNumColors)) * (1.0 / _PosterizeNumColors); + #endif + + #if DEPTHGLOW_ON + half sceneDepthDiff = GetLinearEyeDepth(d.screenUV) - d.screenPos.w; + #endif + + #if RIM_ON + half NdV = 1 - abs(dot(d.worldSpaceNormal, d.worldSpaceViewDir)); + half rimFactor = saturate(_RimBias + _RimScale * pow(NdV, _RimPower)); + half4 rimCol = _RimColor * rimFactor; + rimCol.rgb *= _RimIntensity; + col.rgb = lerp(col.rgb * (rimCol.rgb + half3(1,1,1)), col.rgb + rimCol.rgb, _RimAddAmount); + col.a = saturate(col.a * (1 - rimFactor * _RimErodesAlpha)); + #endif + + #if DEPTHGLOW_ON + half depthGlowMask = saturate(_DepthGlowDist * pow((1 - sceneDepthDiff), _DepthGlowPow)); + col.rgb = lerp(col.rgb, _DepthGlowGlobal * col.rgb, depthGlowMask); + half depthGlowMult = 1; + #if ADDITIVECONFIG_ON + depthGlowMult = luminance; + #endif + col.rgb += _DepthGlowColor.rgb * _DepthGlow * depthGlowMask * col.a * depthGlowMult; + #endif + + #if GLOW_ON + half glowMask = 1; + #if GLOWTEX_ON + glowMask = SAMPLE_TEXTURE2D(_GlowTex, sampler_GlowTex, TRANSFORM_TEX(d.texcoord0.xy, _GlowTex)); + #endif + col.rgb *= _GlowGlobal * glowMask; + half glowMult = 1; + #if ADDITIVECONFIG_ON + glowMult = luminance; + #endif + + col.rgb += _GlowColor.rgb * _Glow * glowMask * col.a * glowMult; + #endif + + #if HSV_ON + half3 resultHsv = half3(col.rgb); + half cosHsv = _HsvBright * _HsvSaturation * cos(_HsvShift * 3.14159265 / 180); + half sinHsv = _HsvBright * _HsvSaturation * sin(_HsvShift * 3.14159265 / 180); + resultHsv.x = (.299 * _HsvBright + .701 * cosHsv + .168 * sinHsv) * col.x + + (.587 * _HsvBright - .587 * cosHsv + .330 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv - .497 * sinHsv) * col.z; + resultHsv.y = (.299 * _HsvBright - .299 * cosHsv - .328 * sinHsv) *col.x + + (.587 * _HsvBright + .413 * cosHsv + .035 * sinHsv) * col.y + + (.114 * _HsvBright - .114 * cosHsv + .292 * sinHsv) * col.z; + resultHsv.z = (.299 * _HsvBright - .3 * cosHsv + 1.25 * sinHsv) * col.x + + (.587 * _HsvBright - .588 * cosHsv - 1.05 * sinHsv) * col.y + + (.114 * _HsvBright + .886 * cosHsv - .203 * sinHsv) * col.z; + col.rgb = resultHsv; + #endif + + #if CAMDISTFADE_ON + col.a *= 1 - saturate(smoothstep(_CamDistFadeStepMin, _CamDistFadeStepMax, camDistance)); + col.a *= smoothstep(0.0, _CamDistProximityFade, camDistance); + #endif + + #if MASK_ON + half2 maskUv = d.texcoord0.xy; + #if POLARUV_ON + maskUv = prePolarUvs; + #endif + half4 maskSample = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, TRANSFORM_TEX(maskUv, _MaskTex)); + half mask = pow(min(maskSample.r, maskSample.a), _MaskPow); + col.a *= mask; + #endif + + #if ALPHASMOOTHSTEP_ON + col.a = smoothstep(_AlphaStepMin, _AlphaStepMax, col.a); + #endif + + half4 debugColor = col; + #if SHAPEDEBUG_ON + debugColor = GetDebugColor(col, shape1, shape2, shape3); + #endif + + clip(debugColor.a - _AlphaCutoffValue - 0.01); + + //#if FOG_ON + //UNITY_APPLY_FOG(i.fogCoord, col); + //#endif + + //Don't use a starting i.color.a lower than 1 unless using vertex stream dissolve when using a FADE effect + #if !FADE_ON && !ALPHAFADE_ON + col.a *= _Alpha * d.vertexColor.a; + #endif + #if FADE_ON || ALPHAFADE_ON + col.a *= _Alpha; + #endif + #if ADDITIVECONFIG_ON + col.rgb *= col.a; + #endif + + + #if SHAPEDEBUG_ON + o.Albedo = debugColor.rgb; + o.Alpha = debugColor.a; + #else + o.Albedo = col.rgb; + o.Alpha = col.a; + #endif + } + + + + + + void ChainSurfaceFunction(inout Surface l, inout ShaderData d) + { + Ext_SurfaceFunction0(l, d); + // Ext_SurfaceFunction1(l, d); + // Ext_SurfaceFunction2(l, d); + // Ext_SurfaceFunction3(l, d); + // Ext_SurfaceFunction4(l, d); + // Ext_SurfaceFunction5(l, d); + // Ext_SurfaceFunction6(l, d); + // Ext_SurfaceFunction7(l, d); + // Ext_SurfaceFunction8(l, d); + // Ext_SurfaceFunction9(l, d); + // Ext_SurfaceFunction10(l, d); + // Ext_SurfaceFunction11(l, d); + // Ext_SurfaceFunction12(l, d); + // Ext_SurfaceFunction13(l, d); + // Ext_SurfaceFunction14(l, d); + // Ext_SurfaceFunction15(l, d); + // Ext_SurfaceFunction16(l, d); + // Ext_SurfaceFunction17(l, d); + // Ext_SurfaceFunction18(l, d); + // Ext_SurfaceFunction19(l, d); + // Ext_SurfaceFunction20(l, d); + // Ext_SurfaceFunction21(l, d); + // Ext_SurfaceFunction22(l, d); + // Ext_SurfaceFunction23(l, d); + // Ext_SurfaceFunction24(l, d); + // Ext_SurfaceFunction25(l, d); + // Ext_SurfaceFunction26(l, d); + // Ext_SurfaceFunction27(l, d); + // Ext_SurfaceFunction28(l, d); + // Ext_SurfaceFunction29(l, d); + } + +#if !_DECALSHADER + + void ChainModifyVertex(inout VertexData v, inout VertexToPixel v2p, float4 time) + { + ExtraV2F d; + + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + // due to motion vectors in HDRP, we need to use the last + // time in certain spots. So if you are going to use _Time to adjust vertices, + // you need to use this time or motion vectors will break. + d.time = time; + + Ext_ModifyVertex0(v, d); + // Ext_ModifyVertex1(v, d); + // Ext_ModifyVertex2(v, d); + // Ext_ModifyVertex3(v, d); + // Ext_ModifyVertex4(v, d); + // Ext_ModifyVertex5(v, d); + // Ext_ModifyVertex6(v, d); + // Ext_ModifyVertex7(v, d); + // Ext_ModifyVertex8(v, d); + // Ext_ModifyVertex9(v, d); + // Ext_ModifyVertex10(v, d); + // Ext_ModifyVertex11(v, d); + // Ext_ModifyVertex12(v, d); + // Ext_ModifyVertex13(v, d); + // Ext_ModifyVertex14(v, d); + // Ext_ModifyVertex15(v, d); + // Ext_ModifyVertex16(v, d); + // Ext_ModifyVertex17(v, d); + // Ext_ModifyVertex18(v, d); + // Ext_ModifyVertex19(v, d); + // Ext_ModifyVertex20(v, d); + // Ext_ModifyVertex21(v, d); + // Ext_ModifyVertex22(v, d); + // Ext_ModifyVertex23(v, d); + // Ext_ModifyVertex24(v, d); + // Ext_ModifyVertex25(v, d); + // Ext_ModifyVertex26(v, d); + // Ext_ModifyVertex27(v, d); + // Ext_ModifyVertex28(v, d); + // Ext_ModifyVertex29(v, d); + + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainModifyTessellatedVertex(inout VertexData v, inout VertexToPixel v2p) + { + ExtraV2F d; + ZERO_INITIALIZE(ExtraV2F, d); + ZERO_INITIALIZE(Blackboard, d.blackboard); + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = v2p.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = v2p.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = v2p.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = v2p.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = v2p.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = v2p.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = v2p.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = v2p.extraV2F7; + // #endif + + + // Ext_ModifyTessellatedVertex0(v, d); + // Ext_ModifyTessellatedVertex1(v, d); + // Ext_ModifyTessellatedVertex2(v, d); + // Ext_ModifyTessellatedVertex3(v, d); + // Ext_ModifyTessellatedVertex4(v, d); + // Ext_ModifyTessellatedVertex5(v, d); + // Ext_ModifyTessellatedVertex6(v, d); + // Ext_ModifyTessellatedVertex7(v, d); + // Ext_ModifyTessellatedVertex8(v, d); + // Ext_ModifyTessellatedVertex9(v, d); + // Ext_ModifyTessellatedVertex10(v, d); + // Ext_ModifyTessellatedVertex11(v, d); + // Ext_ModifyTessellatedVertex12(v, d); + // Ext_ModifyTessellatedVertex13(v, d); + // Ext_ModifyTessellatedVertex14(v, d); + // Ext_ModifyTessellatedVertex15(v, d); + // Ext_ModifyTessellatedVertex16(v, d); + // Ext_ModifyTessellatedVertex17(v, d); + // Ext_ModifyTessellatedVertex18(v, d); + // Ext_ModifyTessellatedVertex19(v, d); + // Ext_ModifyTessellatedVertex20(v, d); + // Ext_ModifyTessellatedVertex21(v, d); + // Ext_ModifyTessellatedVertex22(v, d); + // Ext_ModifyTessellatedVertex23(v, d); + // Ext_ModifyTessellatedVertex24(v, d); + // Ext_ModifyTessellatedVertex25(v, d); + // Ext_ModifyTessellatedVertex26(v, d); + // Ext_ModifyTessellatedVertex27(v, d); + // Ext_ModifyTessellatedVertex28(v, d); + // Ext_ModifyTessellatedVertex29(v, d); + + // #if %EXTRAV2F0REQUIREKEY% + v2p.extraV2F0 = d.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + v2p.extraV2F1 = d.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + v2p.extraV2F2 = d.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + v2p.extraV2F3 = d.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // v2p.extraV2F4 = d.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // v2p.extraV2F5 = d.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // v2p.extraV2F6 = d.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // v2p.extraV2F7 = d.extraV2F7; + // #endif + } + + void ChainFinalColorForward(inout Surface l, inout ShaderData d, inout half4 color) + { + // Ext_FinalColorForward0(l, d, color); + // Ext_FinalColorForward1(l, d, color); + // Ext_FinalColorForward2(l, d, color); + // Ext_FinalColorForward3(l, d, color); + // Ext_FinalColorForward4(l, d, color); + // Ext_FinalColorForward5(l, d, color); + // Ext_FinalColorForward6(l, d, color); + // Ext_FinalColorForward7(l, d, color); + // Ext_FinalColorForward8(l, d, color); + // Ext_FinalColorForward9(l, d, color); + // Ext_FinalColorForward10(l, d, color); + // Ext_FinalColorForward11(l, d, color); + // Ext_FinalColorForward12(l, d, color); + // Ext_FinalColorForward13(l, d, color); + // Ext_FinalColorForward14(l, d, color); + // Ext_FinalColorForward15(l, d, color); + // Ext_FinalColorForward16(l, d, color); + // Ext_FinalColorForward17(l, d, color); + // Ext_FinalColorForward18(l, d, color); + // Ext_FinalColorForward19(l, d, color); + // Ext_FinalColorForward20(l, d, color); + // Ext_FinalColorForward21(l, d, color); + // Ext_FinalColorForward22(l, d, color); + // Ext_FinalColorForward23(l, d, color); + // Ext_FinalColorForward24(l, d, color); + // Ext_FinalColorForward25(l, d, color); + // Ext_FinalColorForward26(l, d, color); + // Ext_FinalColorForward27(l, d, color); + // Ext_FinalColorForward28(l, d, color); + // Ext_FinalColorForward29(l, d, color); + } + + void ChainFinalGBufferStandard(inout Surface s, inout ShaderData d, inout half4 GBuffer0, inout half4 GBuffer1, inout half4 GBuffer2, inout half4 outEmission, inout half4 outShadowMask) + { + // Ext_FinalGBufferStandard0(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard1(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard2(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard3(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard4(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard5(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard6(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard7(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard8(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard9(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard10(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard11(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard12(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard13(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard14(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard15(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard16(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard17(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard18(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard19(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard20(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard21(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard22(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard23(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard24(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard25(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard26(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard27(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard28(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + // Ext_FinalGBufferStandard29(s, d, GBuffer0, GBuffer1, GBuffer2, outEmission, outShadowMask); + } +#endif + + + + + +#if _DECALSHADER + + ShaderData CreateShaderData(SurfaceDescriptionInputs IN) + { + ShaderData d = (ShaderData)0; + d.TBNMatrix = float3x3(IN.WorldSpaceTangent, IN.WorldSpaceBiTangent, IN.WorldSpaceNormal); + d.worldSpaceNormal = IN.WorldSpaceNormal; + d.worldSpaceTangent = IN.WorldSpaceTangent; + + d.worldSpacePosition = IN.WorldSpacePosition; + d.texcoord0 = IN.uv0.xyxy; + d.screenPos = IN.ScreenPosition; + + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - d.worldSpacePosition); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(d.worldSpacePosition), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(d.worldSpacePosition, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), d.worldSpaceTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenUV = (IN.ScreenPosition.xy / max(0.01, IN.ScreenPosition.w)); + // #endif + + return d; + } +#else + + ShaderData CreateShaderData(VertexToPixel i + #if NEED_FACING + , bool facing + #endif + ) + { + ShaderData d = (ShaderData)0; + d.clipPos = i.pos; + d.worldSpacePosition = i.worldPos; + + d.worldSpaceNormal = normalize(i.worldNormal); + d.worldSpaceTangent.xyz = normalize(i.worldTangent.xyz); + + d.tangentSign = i.worldTangent.w * unity_WorldTransformParams.w; + float3 bitangent = cross(d.worldSpaceTangent.xyz, d.worldSpaceNormal) * d.tangentSign; + + d.TBNMatrix = float3x3(d.worldSpaceTangent, -bitangent, d.worldSpaceNormal); + d.worldSpaceViewDir = normalize(_WorldSpaceCameraPos - i.worldPos); + + d.tangentSpaceViewDir = mul(d.TBNMatrix, d.worldSpaceViewDir); + d.texcoord0 = i.texcoord0; + // d.texcoord1 = i.texcoord1; + // d.texcoord2 = i.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // d.texcoord3 = i.texcoord3; + // #endif + + // d.isFrontFace = facing; + // #if %VERTEXCOLORREQUIREKEY% + d.vertexColor = i.vertexColor; + // #endif + + // these rarely get used, so we back transform them. Usually will be stripped. + #if _HDRP + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(GetCameraRelativePositionWS(i.worldPos), 1)).xyz; + #else + // d.localSpacePosition = mul(GetWorldToObjectMatrix(), float4(i.worldPos, 1)).xyz; + #endif + // d.localSpaceNormal = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldNormal)); + // d.localSpaceTangent = normalize(mul((float3x3)GetWorldToObjectMatrix(), i.worldTangent.xyz)); + + // #if %SCREENPOSREQUIREKEY% + d.screenPos = i.screenPos; + d.screenUV = (i.screenPos.xy / i.screenPos.w); + // #endif + + + // #if %EXTRAV2F0REQUIREKEY% + d.extraV2F0 = i.extraV2F0; + // #endif + + // #if %EXTRAV2F1REQUIREKEY% + d.extraV2F1 = i.extraV2F1; + // #endif + + // #if %EXTRAV2F2REQUIREKEY% + d.extraV2F2 = i.extraV2F2; + // #endif + + // #if %EXTRAV2F3REQUIREKEY% + d.extraV2F3 = i.extraV2F3; + // #endif + + // #if %EXTRAV2F4REQUIREKEY% + // d.extraV2F4 = i.extraV2F4; + // #endif + + // #if %EXTRAV2F5REQUIREKEY% + // d.extraV2F5 = i.extraV2F5; + // #endif + + // #if %EXTRAV2F6REQUIREKEY% + // d.extraV2F6 = i.extraV2F6; + // #endif + + // #if %EXTRAV2F7REQUIREKEY% + // d.extraV2F7 = i.extraV2F7; + // #endif + + return d; + } + +#endif + + + #if defined(_PASSSHADOW) + float3 _LightDirection; + float3 _LightPosition; + #endif + + #if (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + + #define GetWorldToViewMatrix() _ViewMatrix + #define UNITY_MATRIX_I_V _InvViewMatrix + #define GetViewToHClipMatrix() OptimizeProjectionMatrix(_ProjMatrix) + #define UNITY_MATRIX_I_P _InvProjMatrix + #define GetWorldToHClipMatrix() _ViewProjMatrix + #define UNITY_MATRIX_I_VP _InvViewProjMatrix + #define UNITY_MATRIX_UNJITTERED_VP _NonJitteredViewProjMatrix + #define UNITY_MATRIX_PREV_VP _PrevViewProjMatrix + #define UNITY_MATRIX_PREV_I_VP _PrevInvViewProjMatrix + + void MotionVectorPositionZBias(VertexToPixel input) + { + #if UNITY_REVERSED_Z + input.pos.z -= unity_MotionVectorsParams.z * input.pos.w; + #else + input.pos.z += unity_MotionVectorsParams.z * input.pos.w; + #endif + } + + #endif + + // vertex shader + VertexToPixel Vert (VertexData v) + { + VertexToPixel o = (VertexToPixel)0; + + UNITY_SETUP_INSTANCE_ID(v); + UNITY_TRANSFER_INSTANCE_ID(v, o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + VertexData previousMesh = v; + #endif + #if !_TESSELLATION_ON + ChainModifyVertex(v, o, _Time); + #endif + + o.texcoord0 = v.texcoord0; + // o.texcoord1 = v.texcoord1; + // o.texcoord2 = v.texcoord2; + + // #if %TEXCOORD3REQUIREKEY% + // o.texcoord3 = v.texcoord3; + // #endif + + // #if %VERTEXCOLORREQUIREKEY% + o.vertexColor = v.vertexColor; + // #endif + + // This return the camera relative position (if enable) + float3 positionWS = TransformObjectToWorld(v.vertex.xyz); + float3 normalWS = TransformObjectToWorldNormal(v.normal); + float4 tangentWS = float4(TransformObjectToWorldDir(v.tangent.xyz), v.tangent.w); + + VertexPositionInputs vertexInput = GetVertexPositionInputs(v.vertex.xyz); + o.worldPos = positionWS; + o.worldNormal = normalWS; + o.worldTangent = tangentWS; + + + // For some very odd reason, in 2021.2, we can't use Unity's defines, but have to use our own.. + #if _PASSSHADOW + #if _CASTING_PUNCTUAL_LIGHT_SHADOW + float3 lightDirectionWS = normalize(_LightPosition - o.worldPos); + #else + float3 lightDirectionWS = _LightDirection; + #endif + // Define shadow pass specific clip position for Universal + o.pos = TransformWorldToHClip(ApplyShadowBias(o.worldPos, o.worldNormal, lightDirectionWS)); + #if UNITY_REVERSED_Z + o.pos.z = min(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #else + o.pos.z = max(o.pos.z, UNITY_NEAR_CLIP_VALUE); + #endif + #elif _PASSMETA + o.pos = MetaVertexPosition(float4(v.vertex.xyz, 0), v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); + #else + o.pos = TransformWorldToHClip(o.worldPos); + #endif + + // #if %SCREENPOSREQUIREKEY% + o.screenPos = ComputeScreenPos(o.pos, _ProjectionParams.x); + // #endif + + + #if _PASSFORWARD || _PASSGBUFFER + float2 uv1 = v.texcoord1.xy; + OUTPUT_LIGHTMAP_UV(uv1, unity_LightmapST, o.lightmapUV); + // o.texcoord1.xy = uv1; + #if UNITY_VERSION < 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + + #if defined(DYNAMICLIGHTMAP_ON) + o.dynamicLightmapUV.xy = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; + #if UNITY_VERSION >= 60000009 + OUTPUT_SH(o.worldNormal, o.sh); + #endif + #elif (defined(PROBE_VOLUMES_L1) || defined(PROBE_VOLUMES_L2)) && UNITY_VERSION >= 60000009 + OUTPUT_SH4(vertexInput.positionWS, o.worldNormal.xyz, GetWorldSpaceNormalizeViewDir(vertexInput.positionWS), o.sh, o.probeOcclusion); + #endif + #endif + + #ifdef VARYINGS_NEED_FOG_AND_VERTEX_LIGHT + half fogFactor = 0; + #if defined(_FOG_FRAGMENT) + fogFactor = ComputeFogFactor(o.pos.z); + #endif + #if _BAKEDLIT + o.fogFactorAndVertexLight = half4(fogFactor, 0, 0, 0); + #else + half3 vertexLight = VertexLighting(o.worldPos, o.worldNormal); + o.fogFactorAndVertexLight = half4(fogFactor, vertexLight); + #endif + #endif + + #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) + o.shadowCoord = GetShadowCoord(vertexInput); + #endif + + #if _URP && (_PASSMOTIONVECTOR || ((_PASSFORWARD || _PASSUNLIT) && defined(_WRITE_TRANSPARENT_MOTION_VECTOR))) + #if !defined(TESSELLATION_ON) + MotionVectorPositionZBias(o); + #endif + + o.previousPositionCS = float4(0.0, 0.0, 0.0, 1.0); + // Note: unity_MotionVectorsParams.y is 0 is forceNoMotion is enabled + bool forceNoMotion = unity_MotionVectorsParams.y == 0.0; + + if (!forceNoMotion) + { + #if defined(HAVE_VFX_MODIFICATION) + float3 previousPositionOS = currentFrameMvData.vfxParticlePositionOS; + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + const bool applyDeformation = false; + #else + const bool applyDeformation = true; + #endif + #else + const bool hasDeformation = unity_MotionVectorsParams.x == 1; // Mesh has skinned deformation + float3 previousPositionOS = hasDeformation ? previousMesh.previousPositionOS : previousMesh.vertex.xyz; + + #if defined(AUTOMATIC_TIME_BASED_MOTION_VECTORS) && defined(GRAPH_VERTEX_USES_TIME_PARAMETERS_INPUT) + const bool applyDeformation = true; + #else + const bool applyDeformation = hasDeformation; + #endif + #endif + // TODO + #if defined(FEATURES_GRAPH_VERTEX) + if (applyDeformation) + previousPositionOS = GetLastFrameDeformedPosition(previousMesh, currentFrameMvData, previousPositionOS); + else + previousPositionOS = previousMesh.positionOS; + + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + #endif + + #if defined(UNITY_DOTS_INSTANCING_ENABLED) && defined(DOTS_DEFORMED) + // Deformed vertices in DOTS are not cumulative with built-in Unity skinning/blend shapes + // Needs to be called after vertex modification has been applied otherwise it will be + // overwritten by Compute Deform node + ApplyPreviousFrameDeformedVertexPosition(previousMesh.vertexID, previousPositionOS); + #endif + #if defined (_ADD_PRECOMPUTED_VELOCITY) + previousPositionOS -= previousMesh.precomputedVelocity; + #endif + o.positionCS = mul(UNITY_MATRIX_UNJITTERED_VP, float4(positionWS, 1.0f)); + + #if defined(HAVE_VFX_MODIFICATION) + #if defined(VFX_FEATURE_MOTION_VECTORS_VERTS) + #if defined(FEATURES_GRAPH_VERTEX_MOTION_VECTOR_OUTPUT) || defined(_ADD_PRECOMPUTED_VELOCITY) + #error Unexpected fast path rendering VFX motion vector while there are vertex modification afterwards. + #endif + o.previousPositionCS = VFXGetPreviousClipPosition(previousMesh, currentFrameMvData.vfxElementAttributes, o.positionCS); + #else + #if VFX_WORLD_SPACE + //previousPositionOS is already in world space + const float3 previousPositionWS = previousPositionOS; + #else + const float3 previousPositionWS = mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1.0f)).xyz; + #endif + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, float4(previousPositionWS, 1.0f)); + #endif + #else + o.previousPositionCS = mul(UNITY_MATRIX_PREV_VP, mul(UNITY_PREV_MATRIX_M, float4(previousPositionOS, 1))); + #endif + } + #endif + + return o; + } + + + + + // Using parts of com.unity.render-pipelines.universal\Editor\ShaderGraph\Includes\MotionVectorPass.hlsl + // com.unity.render-pipelines.universal\ShaderLibrary\MotionVectorsCommon.hlsl + // com.unity.render-pipelines.universal\Editor\ShaderGraph\Includes\Varyings.hlsl + + float2 CalcNdcMotionVectorFromCsPositions(float4 posCS, float4 prevPosCS) + { + // Note: unity_MotionVectorsParams.y is 0 is forceNoMotion is enabled + bool forceNoMotion = unity_MotionVectorsParams.y == 0.0; + if (forceNoMotion) + return float2(0.0, 0.0); + + // Non-uniform raster needs to keep the posNDC values in float to avoid additional conversions + // since uv remap functions use floats + float2 posNDC = posCS.xy * rcp(posCS.w); + float2 prevPosNDC = prevPosCS.xy * rcp(prevPosCS.w); + + float2 velocity; + #if defined(SUPPORTS_FOVEATED_RENDERING_NON_UNIFORM_RASTER) + UNITY_BRANCH if (_FOVEATED_RENDERING_NON_UNIFORM_RASTER) + { + // Convert velocity from NDC space (-1..1) to screen UV 0..1 space since FoveatedRendering remap needs that range. + float2 posUV = RemapFoveatedRenderingResolve(posNDC * 0.5 + 0.5); + float2 prevPosUV = RemapFoveatedRenderingPrevFrameLinearToNonUniform(prevPosNDC * 0.5 + 0.5); + + // Calculate forward velocity + velocity = (posUV - prevPosUV); + #if UNITY_UV_STARTS_AT_TOP + velocity.y = -velocity.y; + #endif + } + else + #endif + { + // Calculate forward velocity + velocity = (posNDC.xy - prevPosNDC.xy); + #if UNITY_UV_STARTS_AT_TOP + velocity.y = -velocity.y; + #endif + + // Convert velocity from NDC space (-1..1) to UV 0..1 space + // Note: It doesn't mean we don't have negative values, we store negative or positive offset in UV space. + // Note: ((posNDC * 0.5 + 0.5) - (prevPosNDC * 0.5 + 0.5)) = (velocity * 0.5) + velocity.xy *= 0.5; + } + + return velocity; + } + + float4 Frag( + VertexToPixel input) : SV_Target + { + UNITY_SETUP_INSTANCE_ID(input); + + float4 motionVector = float4(CalcNdcMotionVectorFromCsPositions(input.positionCS, input.previousPositionCS), 0, 0); + + return motionVector; + } + + ENDHLSL + } + } diff --git a/Assets/Scenes/CatBorg Studio/3D Pirates Lowpoly Pack/Materials/M_Imphenzia_LowPollyStyle.mat b/Assets/Scenes/CatBorg Studio/3D Pirates Lowpoly Pack/Materials/M_Imphenzia_LowPollyStyle.mat index 82bfe0119..3868d33c2 100644 --- a/Assets/Scenes/CatBorg Studio/3D Pirates Lowpoly Pack/Materials/M_Imphenzia_LowPollyStyle.mat +++ b/Assets/Scenes/CatBorg Studio/3D Pirates Lowpoly Pack/Materials/M_Imphenzia_LowPollyStyle.mat @@ -9,8 +9,8 @@ Material: m_PrefabAsset: {fileID: 0} m_Name: M_Imphenzia_LowPollyStyle m_Shader: {fileID: -6465566751694194690, guid: 940d79357fd7a4f01a49e7247aeaa4da, type: 3} - m_Parent: {fileID: 2100000, guid: 1b3f34f5008ab3a449cd0ca7ae41a30e, type: 2} - m_ModifiedSerializedProperties: 4 + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 m_ValidKeywords: [] m_InvalidKeywords: [] m_LightmapFlags: 4 @@ -32,19 +32,99 @@ Material: m_Texture: {fileID: 2800000, guid: c33cf37a22f010e4cb6a2c2279ee2896, type: 3} 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: 2800000, guid: c33cf37a22f010e4cb6a2c2279ee2896, type: 3} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} m_Ints: [] m_Floats: + - _AddPrecomputedVelocity: 0 - _Alpha: 1 + - _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: 1 + - _Glossiness: 0 - _GlossyReflections: 1 + - _Metallic: 0 + - _OcclusionStrength: 1 - _Parallax: 0.02 + - _QueueControl: 0 + - _QueueOffset: 0 + - _ReceiveShadows: 1 - _Smoothness: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _ZWrite: 1 m_Colors: - Vector2_6A93A1CF: {r: 1, g: 1, b: 0, a: 0} + - _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 --- !u!114 &5522020866035113095 diff --git a/Assets/Toon Water URP/Toon Water Material 1.mat b/Assets/Toon Water URP/Toon Water Material 1.mat index cb7cdbfbc..7154a9f2e 100644 --- a/Assets/Toon Water URP/Toon Water Material 1.mat +++ b/Assets/Toon Water URP/Toon Water Material 1.mat @@ -74,9 +74,9 @@ Material: - Vector1_20DB7652: 0.158 - Vector1_24CAEF48: 1 - Vector1_301E02E2: 240 - - Vector1_31894ABB: 0.0158 + - Vector1_31894ABB: 0.005 - Vector1_3632ABA2: 0 - - Vector1_45F25267: 1.14 + - Vector1_45F25267: 5.84 - Vector1_738B39CF: 0 - Vector1_854A7D8C: 0.51 - Vector1_9C73072A: 0.88 @@ -107,10 +107,10 @@ Material: - _WorkflowMode: 1 - _ZWrite: 1 m_Colors: - - Color_1139F668: {r: 0.22241013, g: 0.80931354, b: 0.9622642, a: 0.5254902} - - Color_198818EE: {r: 0, g: 0.37919012, b: 1.498, a: 1} + - Color_1139F668: {r: 0.22241013, g: 0.9843137, b: 1, a: 0.6862745} + - Color_198818EE: {r: 0, g: 0.25882354, b: 1, a: 0.6745098} - Color_626750DD: {r: 2, g: 2, b: 2, a: 1} - - Color_77A2EDE9: {r: 31.626795, g: 31.626795, b: 31.626795, a: 1} + - Color_77A2EDE9: {r: 31.626795, g: 31.626795, b: 31.626795, a: 0.21960784} - Vector2_1E1B6943: {r: 1, g: 5, b: 0, a: 0} - Vector2_D06E76BC: {r: 0.1, g: 0.05, b: 0, a: 0} - Vector2_D26C9C89: {r: 1, g: 0, b: 0, a: 0}

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%0DH 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 VpnLDv%6ray3(!SUfudM0N`#WRz6>s~gmCHd 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 WG#@dj;A~ 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 aUIOoEKmQaqu8Z6Z0I4gO%=5n8TE@CW8I=> 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