// Made with Amplify Shader Editor v1.9.9.3 // Available at the Unity Asset Store - http://u3d.as/y3X Shader "ASE/ASE_StandartBlend" { Properties { [HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5 _BlendContrast( "BlendContrast", Float ) = 1 _AlbedoMapArray( "AlbedoMapArray", 2DArray ) = "white" {} _MetallicMapArray( "MetallicMapArray", 2DArray ) = "white" {} _HeightMapBase( "HeightMapBase", 2D ) = "white" {} _ParalaxOffsetBase( "ParalaxOffsetBase", Float ) = 0.001 _PrlxRefPlaneBase( "PrlxRefPlaneBase", Range( 0, 1 ) ) = 0.001 _NormalMapBase( "NormalMapBase", 2D ) = "bump" {} _NormalMapDepthBase( "NormalMapDepthBase", Float ) = 1 _TillingBase( "TillingBase", Float ) = 1 _AlbedoColorBase( "AlbedoColorBase", Color ) = ( 1, 1, 1, 1 ) _SmoothnessBase( "SmoothnessBase", Float ) = 1 _MetallicBase( "MetallicBase", Float ) = 1 _MetalicBrightnesBase( "MetalicBrightnesBase", Range( 0, 1 ) ) = 0 _HeightMap1( "HeightMap1", 2D ) = "white" {} _ParalaxOffset1( "ParalaxOffset1", Float ) = 0.001 _PrlxRefPlane1( "PrlxRefPlane1", Range( 0, 1 ) ) = 0.001 _Height1( "Height1", Float ) = 2 _NormalMap1( "NormalMap1", 2D ) = "bump" {} _NormalMapDepth1( "NormalMapDepth1", Float ) = 1 _Tilling1( "Tilling1", Float ) = 1 _AlbedoColor1( "AlbedoColor1", Color ) = ( 1, 1, 1, 1 ) _Smoothness1( "Smoothness1", Float ) = 1 _Metallic1( "Metallic1", Float ) = 1 _MetalicBrightnes1( "MetalicBrightnes1", Range( 0, 1 ) ) = 0 _HeightMap2( "HeightMap2", 2D ) = "white" {} _ParalaxOffset2( "ParalaxOffset2", Float ) = 0.001 _PrlxRefPlane2( "PrlxRefPlane2", Range( 0, 1 ) ) = 0.001 _Height2( "Height2", Float ) = 2 _NormalMap2( "NormalMap2", 2D ) = "bump" {} _NormalMapDepth2( "NormalMapDepth2", Float ) = 1 _Tilling2( "Tilling2", Float ) = 1 _AlbedoColor2( "AlbedoColor2", Color ) = ( 1, 1, 1, 1 ) _Smoothness2( "Smoothness2", Float ) = 1 _Metallic2( "Metallic2", Float ) = 1 _MetalicBrightnes2( "MetalicBrightnes2", Range( 0, 1 ) ) = 0 _HeightMap3( "HeightMap3", 2D ) = "white" {} _ParalaxOffset3( "ParalaxOffset3", Float ) = 0.001 _PrlxRefPlane3( "PrlxRefPlane3", Range( 0, 1 ) ) = 0.001 _Height3( "Height3", Float ) = 2 _NormalMap3( "NormalMap3", 2D ) = "bump" {} _NormalMapDepth3( "NormalMapDepth3", Float ) = 1 _Tilling3( "Tilling3", Float ) = 1 _AlbedoColor3( "AlbedoColor3", Color ) = ( 1, 1, 1, 1 ) _Smoothness3( "Smoothness3", Float ) = 1 _Metallic3( "Metallic3", Float ) = 1 _MetalicBrightnes3( "MetalicBrightnes3", Range( 0, 1 ) ) = 0 _EmissionColor( "EmissionColor", Color ) = ( 0, 0, 0, 0 ) _EmissionMultiplayer( "EmissionMultiplayer", Float ) = 0 //_TransmissionShadow( "Transmission Shadow", Range( 0, 1 ) ) = 0.5 //_TransStrength( "Trans Strength", Range( 0, 50 ) ) = 1 //_TransNormal( "Trans Normal Distortion", Range( 0, 1 ) ) = 0.5 //_TransScattering( "Trans Scattering", Range( 1, 50 ) ) = 2 //_TransDirect( "Trans Direct", Range( 0, 1 ) ) = 0.9 //_TransAmbient( "Trans Ambient", Range( 0, 1 ) ) = 0.1 //_TransShadow( "Trans Shadow", Range( 0, 1 ) ) = 0.5 //_TessPhongStrength( "Tess Phong Strength", Range( 0, 1 ) ) = 0.5 //_TessValue( "Tess Max Tessellation", Range( 1, 32 ) ) = 16 //_TessMin( "Tess Min Distance", Float ) = 10 //_TessMax( "Tess Max Distance", Float ) = 25 //_TessEdgeLength ( "Tess Edge length", Range( 2, 50 ) ) = 16 //_TessMaxDisp( "Tess Max Displacement", Float ) = 25 //_InstancedTerrainNormals("Instanced Terrain Normals", Float) = 1.0 [ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0 [ToggleOff] _EnvironmentReflections("Environment Reflections", Float) = 1.0 [ToggleUI] _ReceiveShadows("Receive Shadows", Float) = 1.0 [HideInInspector] _QueueOffset("_QueueOffset", Float) = 0 [HideInInspector] _QueueControl("_QueueControl", Float) = -1 [HideInInspector][NoScaleOffset] unity_Lightmaps("unity_Lightmaps", 2DArray) = "" {} [HideInInspector][NoScaleOffset] unity_LightmapsInd("unity_LightmapsInd", 2DArray) = "" {} [HideInInspector][NoScaleOffset] unity_ShadowMasks("unity_ShadowMasks", 2DArray) = "" {} } SubShader { LOD 0 Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Opaque" "Queue"="Geometry" "UniversalMaterialType"="Lit" } Cull Back ZWrite On ZTest LEqual Offset 0 , 0 AlphaToMask Off HLSLINCLUDE #pragma target 4.5 #pragma prefer_hlslcc gles // ensure rendering platforms toggle list is visible #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Filtering.hlsl" #ifndef ASE_TESS_FUNCS #define ASE_TESS_FUNCS float4 FixedTess( float tessValue ) { return tessValue; } float CalcDistanceTessFactor (float4 vertex, float minDist, float maxDist, float tess, float4x4 o2w, float3 cameraPos ) { float3 wpos = mul(o2w,vertex).xyz; float dist = distance (wpos, cameraPos); float f = clamp(1.0 - (dist - minDist) / (maxDist - minDist), 0.01, 1.0) * tess; return f; } float4 CalcTriEdgeTessFactors (float3 triVertexFactors) { float4 tess; tess.x = 0.5 * (triVertexFactors.y + triVertexFactors.z); tess.y = 0.5 * (triVertexFactors.x + triVertexFactors.z); tess.z = 0.5 * (triVertexFactors.x + triVertexFactors.y); tess.w = (triVertexFactors.x + triVertexFactors.y + triVertexFactors.z) / 3.0f; return tess; } float CalcEdgeTessFactor (float3 wpos0, float3 wpos1, float edgeLen, float3 cameraPos, float4 scParams ) { float dist = distance (0.5 * (wpos0+wpos1), cameraPos); float len = distance(wpos0, wpos1); float f = max(len * scParams.y / (edgeLen * dist), 1.0); return f; } float DistanceFromPlane (float3 pos, float4 plane) { float d = dot (float4(pos,1.0f), plane); return d; } bool WorldViewFrustumCull (float3 wpos0, float3 wpos1, float3 wpos2, float cullEps, float4 planes[6] ) { float4 planeTest; planeTest.x = (( DistanceFromPlane(wpos0, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + (( DistanceFromPlane(wpos1, planes[0]) > -cullEps) ? 1.0f : 0.0f ) + (( DistanceFromPlane(wpos2, planes[0]) > -cullEps) ? 1.0f : 0.0f ); planeTest.y = (( DistanceFromPlane(wpos0, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + (( DistanceFromPlane(wpos1, planes[1]) > -cullEps) ? 1.0f : 0.0f ) + (( DistanceFromPlane(wpos2, planes[1]) > -cullEps) ? 1.0f : 0.0f ); planeTest.z = (( DistanceFromPlane(wpos0, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + (( DistanceFromPlane(wpos1, planes[2]) > -cullEps) ? 1.0f : 0.0f ) + (( DistanceFromPlane(wpos2, planes[2]) > -cullEps) ? 1.0f : 0.0f ); planeTest.w = (( DistanceFromPlane(wpos0, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + (( DistanceFromPlane(wpos1, planes[3]) > -cullEps) ? 1.0f : 0.0f ) + (( DistanceFromPlane(wpos2, planes[3]) > -cullEps) ? 1.0f : 0.0f ); return !all (planeTest); } float4 DistanceBasedTess( float4 v0, float4 v1, float4 v2, float tess, float minDist, float maxDist, float4x4 o2w, float3 cameraPos ) { float3 f; f.x = CalcDistanceTessFactor (v0,minDist,maxDist,tess,o2w,cameraPos); f.y = CalcDistanceTessFactor (v1,minDist,maxDist,tess,o2w,cameraPos); f.z = CalcDistanceTessFactor (v2,minDist,maxDist,tess,o2w,cameraPos); return CalcTriEdgeTessFactors (f); } float4 EdgeLengthBasedTess( float4 v0, float4 v1, float4 v2, float edgeLength, float4x4 o2w, float3 cameraPos, float4 scParams ) { float3 pos0 = mul(o2w,v0).xyz; float3 pos1 = mul(o2w,v1).xyz; float3 pos2 = mul(o2w,v2).xyz; float4 tess; tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); tess.w = (tess.x + tess.y + tess.z) / 3.0f; return tess; } float4 EdgeLengthBasedTessCull( float4 v0, float4 v1, float4 v2, float edgeLength, float maxDisplacement, float4x4 o2w, float3 cameraPos, float4 scParams, float4 planes[6] ) { float3 pos0 = mul(o2w,v0).xyz; float3 pos1 = mul(o2w,v1).xyz; float3 pos2 = mul(o2w,v2).xyz; float4 tess; if (WorldViewFrustumCull(pos0, pos1, pos2, maxDisplacement, planes)) { tess = 0.0f; } else { tess.x = CalcEdgeTessFactor (pos1, pos2, edgeLength, cameraPos, scParams); tess.y = CalcEdgeTessFactor (pos2, pos0, edgeLength, cameraPos, scParams); tess.z = CalcEdgeTessFactor (pos0, pos1, edgeLength, cameraPos, scParams); tess.w = (tess.x + tess.y + tess.z) / 3.0f; } return tess; } #endif //ASE_TESS_FUNCS ENDHLSL Pass { Name "Forward" Tags { "LightMode"="UniversalForward" } Blend One Zero, One Zero ZWrite On ZTest LEqual Offset 0 , 0 ColorMask RGBA HLSLPROGRAM #define ASE_GEOMETRY 1 #pragma multi_compile_local_fragment _ALPHATEST_ON #define _NORMAL_DROPOFF_TS 1 #pragma shader_feature_local_fragment _RECEIVE_SHADOWS_OFF #pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF #pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF #pragma multi_compile_fragment _ _SCREEN_SPACE_OCCLUSION #pragma multi_compile_instancing #pragma instancing_options renderinglayer #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #pragma multi_compile_fog #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma multi_compile _ DOTS_INSTANCING_ON #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 _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _LIGHT_COOKIES #pragma multi_compile _ _CLUSTERED_RENDERING #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile _ DYNAMICLIGHTMAP_ON #pragma vertex vert #pragma fragment frag #if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE) #define _SPECULAR_COLOR 1 #endif #define SHADERPASS SHADERPASS_FORWARD #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 "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" #if defined(UNITY_INSTANCING_ENABLED) && ( defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL) || defined(_INSTANCEDTERRAINNORMALS_PIXEL) ) #define ENABLE_TERRAIN_PERPIXEL_NORMAL #endif #define ASE_NEEDS_FRAG_COLOR #define ASE_NEEDS_TEXTURE_COORDINATES0 #define ASE_NEEDS_FRAG_WORLD_VIEW_DIR #define ASE_NEEDS_WORLD_NORMAL #define ASE_NEEDS_FRAG_WORLD_NORMAL #define ASE_NEEDS_WORLD_POSITION #define ASE_NEEDS_FRAG_WORLD_POSITION #define ASE_NEEDS_WORLD_TANGENT #define ASE_NEEDS_FRAG_WORLD_TANGENT #define ASE_NEEDS_FRAG_WORLD_BITANGENT #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45) #define ASE_SV_DEPTH SV_DepthLessEqual #define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid #else #define ASE_SV_DEPTH SV_Depth #define ASE_SV_POSITION_QUALIFIERS #endif struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 texcoord : TEXCOORD0; #if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1) float4 texcoord1 : TEXCOORD1; #endif #if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2) float4 texcoord2 : TEXCOORD2; #endif float4 ase_color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; half3 normalWS : TEXCOORD1; float4 tangentWS : TEXCOORD2; // holds terrainUV ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL float4 lightmapUVOrVertexSH : TEXCOORD3; #if defined(ASE_FOG) || defined(_ADDITIONAL_LIGHTS_VERTEX) half4 fogFactorAndVertexLight : TEXCOORD4; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV : TEXCOORD5; #endif float4 ase_color : COLOR; float4 ase_texcoord6 : TEXCOORD6; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif sampler2D _HeightMap1; sampler2D _HeightMap2; sampler2D _HeightMap3; TEXTURE2D_ARRAY(_AlbedoMapArray); sampler2D _HeightMapBase; SAMPLER(sampler_AlbedoMapArray); sampler2D _NormalMapBase; sampler2D _NormalMap1; sampler2D _NormalMap2; sampler2D _NormalMap3; TEXTURE2D_ARRAY(_MetallicMapArray); SAMPLER(sampler_MetallicMapArray); inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index ) { float3 result = 0; float stepIndex = 0; float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) ); float layerHeight = 1.0 / numSteps; float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z ); uvs.xy += refPlane * plane; float2 deltaTex = -plane * layerHeight; float2 prevTexOffset = 0; float prevRayZ = 1.0f; float prevHeight = 0.0f; float2 currTexOffset = deltaTex; float currRayZ = 1.0f - layerHeight; float currHeight = 0.0f; float intersection = 0; float2 finalTexOffset = 0; while ( stepIndex < numSteps + 1 ) { currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r; if ( currHeight > currRayZ ) { stepIndex = numSteps + 1; } else { stepIndex++; prevTexOffset = currTexOffset; prevRayZ = currRayZ; prevHeight = currHeight; currTexOffset += deltaTex; currRayZ -= layerHeight; } } float sectionSteps = sidewallSteps; float sectionIndex = 0; float newZ = 0; float newHeight = 0; while ( sectionIndex < sectionSteps ) { intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ ); finalTexOffset = prevTexOffset + intersection * deltaTex; newZ = prevRayZ - intersection * layerHeight; newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r; if ( newHeight > newZ ) { currTexOffset = finalTexOffset; currHeight = newHeight; currRayZ = newZ; deltaTex = intersection * deltaTex; layerHeight = intersection * layerHeight; } else { prevTexOffset = finalTexOffset; prevHeight = newHeight; prevRayZ = newZ; deltaTex = ( 1 - intersection ) * deltaTex; layerHeight = ( 1 - intersection ) * layerHeight; } sectionIndex++; } return uvs.xy + finalTexOffset; } float4 CalculateContrast( float contrastValue, float4 colorTarget ) { float t = 0.5 * ( 1.0 - contrastValue ); return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget ); } PackedVaryings VertexFunction( Attributes input ) { PackedVaryings output = (PackedVaryings)0; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); output.ase_color = input.ase_color; output.ase_texcoord6.xy = input.texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings output.ase_texcoord6.zw = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; input.tangentOS = input.tangentOS; VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz ); VertexNormalInputs normalInput = GetVertexNormalInputs( input.normalOS, input.tangentOS ); #if defined(LIGHTMAP_ON) OUTPUT_LIGHTMAP_UV(input.texcoord1, unity_LightmapST, output.lightmapUVOrVertexSH.xy); #else OUTPUT_SH(normalInput.normalWS.xyz, output.lightmapUVOrVertexSH.xyz); #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV.xy = input.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; #endif #if defined(ASE_FOG) || defined(_ADDITIONAL_LIGHTS_VERTEX) output.fogFactorAndVertexLight = 0; #if defined(ASE_FOG) && !defined(_FOG_FRAGMENT) output.fogFactorAndVertexLight.x = ComputeFogFactor(vertexInput.positionCS.z); #endif #ifdef _ADDITIONAL_LIGHTS_VERTEX half3 vertexLight = VertexLighting( vertexInput.positionWS, normalInput.normalWS ); output.fogFactorAndVertexLight.yzw = vertexLight; #endif #endif output.positionCS = vertexInput.positionCS; output.positionWS = vertexInput.positionWS; output.normalWS = normalInput.normalWS; output.tangentWS = float4( normalInput.tangentWS, ( input.tangentOS.w > 0.0 ? 1.0 : -1.0 ) * GetOddNegativeScale() ); #if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL ) output.tangentWS.zw = input.texcoord.xy; output.tangentWS.xy = input.texcoord.xy * unity_LightmapST.xy + unity_LightmapST.zw; #endif return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 texcoord : TEXCOORD0; #if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1) float4 texcoord1 : TEXCOORD1; #endif #if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2) float4 texcoord2 : TEXCOORD2; #endif float4 ase_color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; output.texcoord = input.texcoord; #if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1) output.texcoord1 = input.texcoord1; #endif #if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2) output.texcoord2 = input.texcoord2; #endif output.ase_color = input.ase_color; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; output.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z; #if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1) output.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; #endif #if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2) output.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z; #endif output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif half4 frag ( PackedVaryings input #if defined( ASE_DEPTH_WRITE_ON ) ,out float outputDepth : ASE_SV_DEPTH #endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); #if defined( _SURFACE_TYPE_TRANSPARENT ) const bool isTransparent = true; #else const bool isTransparent = false; #endif #if defined(LOD_FADE_CROSSFADE) LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x ); #endif #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) float4 shadowCoord = TransformWorldToShadowCoord( input.positionWS ); #else float4 shadowCoord = float4(0, 0, 0, 0); #endif // @diogo: mikktspace compliant float renormFactor = 1.0 / max( FLT_MIN, length( input.normalWS ) ); float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( PositionWS ); float3 ViewDirWS = GetWorldSpaceNormalizeViewDir( PositionWS ); float4 ShadowCoord = shadowCoord; float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw ); float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w; float4 ScreenPos = ComputeScreenPos( ClipPos ); float3 TangentWS = input.tangentWS.xyz * renormFactor; float3 BitangentWS = cross( input.normalWS, input.tangentWS.xyz ) * input.tangentWS.w * renormFactor; float3 NormalWS = input.normalWS * renormFactor; #if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL ) float2 sampleCoords = (input.tangentWS.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy; NormalWS = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1)); TangentWS = -cross(GetObjectToWorldMatrix()._13_23_33, NormalWS); BitangentWS = cross(NormalWS, -TangentWS); #endif float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) ); float4 break170 = clampResult178; float3 appendResult169 = (float3(break170.r , break170.g , break170.b)); float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) ); float2 texCoord17 = input.ase_texcoord6.xy * float2( 1,1 ) + float2( 0,0 ); float fresnelNdotV288 = dot( NormalWS, ViewDirWS ); float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) ); float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 ); float temp_output_291_0 = ( 1.0 - clampResult296 ); float3 tanToWorld0 = float3( TangentWS.x, BitangentWS.x, NormalWS.x ); float3 tanToWorld1 = float3( TangentWS.y, BitangentWS.y, NormalWS.y ); float3 tanToWorld2 = float3( TangentWS.z, BitangentWS.z, NormalWS.z ); float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z; float3 ase_viewDirTS = normalize( ase_viewVectorTS ); float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 ); float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r); float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 ); float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r); float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 ); float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r); float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151)); float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float3 temp_output_167_0 = ( appendResult169 + clampResult182 ); float3 clampResult190 = clamp( temp_output_167_0 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 ); float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 ); float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 ); float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 ); float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 ); float3 layeredBlendVar132 = clampResult190; float4 layeredBlend132 = ( lerp( lerp( lerp( ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_262_0,0.0 ) * _AlbedoColorBase ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_239_0,1.0 ) * _AlbedoColor1 ) , layeredBlendVar132.x ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_243_0,2.0 ) * _AlbedoColor2 ) , layeredBlendVar132.y ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_246_0,3.0 ) * _AlbedoColor3 ) , layeredBlendVar132.z ) ); float3 unpack13 = UnpackNormalScale( tex2D( _NormalMapBase, temp_output_262_0 ), _NormalMapDepthBase ); unpack13.z = lerp( 1, unpack13.z, saturate(_NormalMapDepthBase) ); float3 unpack111 = UnpackNormalScale( tex2D( _NormalMap1, temp_output_239_0 ), _NormalMapDepth1 ); unpack111.z = lerp( 1, unpack111.z, saturate(_NormalMapDepth1) ); float3 unpack171 = UnpackNormalScale( tex2D( _NormalMap2, temp_output_243_0 ), _NormalMapDepth2 ); unpack171.z = lerp( 1, unpack171.z, saturate(_NormalMapDepth2) ); float3 unpack172 = UnpackNormalScale( tex2D( _NormalMap3, temp_output_246_0 ), _NormalMapDepth3 ); unpack172.z = lerp( 1, unpack172.z, saturate(_NormalMapDepth3) ); float3 layeredBlendVar173 = temp_output_167_0; float3 layeredBlend173 = ( lerp( lerp( lerp( unpack13 , unpack111 , layeredBlendVar173.x ) , unpack171 , layeredBlendVar173.y ) , unpack172 , layeredBlendVar173.z ) ); float4 tex2DArrayNode253 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_262_0,0.0 ); float lerpResult223 = lerp( tex2DArrayNode253.r , 1.0 , _MetalicBrightnesBase); float4 tex2DArrayNode254 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_239_0,0.0 ); float lerpResult93 = lerp( tex2DArrayNode254.r , 1.0 , _MetalicBrightnes1); float4 tex2DArrayNode255 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_243_0,0.0 ); float lerpResult206 = lerp( tex2DArrayNode255.r , 1.0 , _MetalicBrightnes2); float4 tex2DArrayNode256 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_246_0,0.0 ); float lerpResult214 = lerp( tex2DArrayNode256.r , 1.0 , _MetalicBrightnes3); float3 layeredBlendVar220 = temp_output_167_0; float layeredBlend220 = ( lerp( lerp( lerp( ( _MetallicBase * lerpResult223 ) , ( _Metallic1 * lerpResult93 ) , layeredBlendVar220.x ) , ( _Metallic2 * lerpResult206 ) , layeredBlendVar220.y ) , ( _Metallic3 * lerpResult214 ) , layeredBlendVar220.z ) ); float3 layeredBlendVar229 = temp_output_167_0; float layeredBlend229 = ( lerp( lerp( lerp( ( tex2DArrayNode253.a * _SmoothnessBase ) , ( tex2DArrayNode254.a * _Smoothness1 ) , layeredBlendVar229.x ) , ( tex2DArrayNode255.a * _Smoothness2 ) , layeredBlendVar229.y ) , ( tex2DArrayNode256.a * _Smoothness3 ) , layeredBlendVar229.z ) ); float clampResult251 = clamp( ( layeredBlend229 + 0.0 ) , 0.0 , 1.0 ); float3 BaseColor = layeredBlend132.rgb; float3 Normal = layeredBlend173; float3 Specular = 0.5; float Metallic = layeredBlend220; float Smoothness = clampResult251; float Occlusion = 1; float3 Emission = ( _EmissionColor * ( _EmissionMultiplayer * layeredBlend132 ) ).rgb; float Alpha = 1; float AlphaClipThreshold = 0.5; float AlphaClipThresholdShadow = 0.5; float3 BakedGI = 0; float3 RefractionColor = 1; float RefractionIndex = 1; float3 Transmission = 1; float3 Translucency = 1; #if defined( ASE_DEPTH_WRITE_ON ) float DeviceDepth = ClipPos.z; #endif #ifdef _CLEARCOAT float CoatMask = 0; float CoatSmoothness = 0; #endif #if defined( _ALPHATEST_ON ) AlphaDiscard( Alpha, AlphaClipThreshold ); #endif #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_CHANGES_WORLD_POS) ShadowCoord = TransformWorldToShadowCoord( PositionWS ); #endif InputData inputData = (InputData)0; inputData.positionWS = PositionWS; inputData.positionCS = float4( input.positionCS.xy, ClipPos.zw / ClipPos.w ); inputData.normalizedScreenSpaceUV = ScreenPosNorm.xy; inputData.viewDirectionWS = ViewDirWS; inputData.shadowCoord = ShadowCoord; #ifdef _NORMALMAP #if _NORMAL_DROPOFF_TS inputData.normalWS = TransformTangentToWorld(Normal, half3x3(TangentWS, BitangentWS, NormalWS)); #elif _NORMAL_DROPOFF_OS inputData.normalWS = TransformObjectToWorldNormal(Normal); #elif _NORMAL_DROPOFF_WS inputData.normalWS = Normal; #endif inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); #else inputData.normalWS = NormalWS; #endif #ifdef ASE_FOG inputData.fogCoord = InitializeInputDataFog(float4(inputData.positionWS, 1.0), input.fogFactorAndVertexLight.x); #endif #ifdef _ADDITIONAL_LIGHTS_VERTEX inputData.vertexLighting = input.fogFactorAndVertexLight.yzw; #endif #if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL ) float3 SH = SampleSH(inputData.normalWS.xyz); #else float3 SH = input.lightmapUVOrVertexSH.xyz; #endif #if defined(DYNAMICLIGHTMAP_ON) inputData.bakedGI = SAMPLE_GI(input.lightmapUVOrVertexSH.xy, input.dynamicLightmapUV.xy, SH, inputData.normalWS); #else inputData.bakedGI = SAMPLE_GI(input.lightmapUVOrVertexSH.xy, SH, inputData.normalWS); #endif #ifdef ASE_BAKEDGI inputData.bakedGI = BakedGI; #endif inputData.shadowMask = SAMPLE_SHADOWMASK(input.lightmapUVOrVertexSH.xy); #if defined(DEBUG_DISPLAY) #if defined(DYNAMICLIGHTMAP_ON) inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy; #endif #if defined(LIGHTMAP_ON) inputData.staticLightmapUV = input.lightmapUVOrVertexSH.xy; #else inputData.vertexSH = SH; #endif #endif SurfaceData surfaceData; surfaceData.albedo = BaseColor; surfaceData.metallic = saturate(Metallic); surfaceData.specular = Specular; surfaceData.smoothness = saturate(Smoothness), surfaceData.occlusion = Occlusion, surfaceData.emission = Emission, surfaceData.alpha = saturate(Alpha); surfaceData.normalTS = Normal; surfaceData.clearCoatMask = 0; surfaceData.clearCoatSmoothness = 1; #ifdef _CLEARCOAT surfaceData.clearCoatMask = saturate(CoatMask); surfaceData.clearCoatSmoothness = saturate(CoatSmoothness); #endif #if defined(_DBUFFER) ApplyDecalToSurfaceData(input.positionCS, surfaceData, inputData); #endif #ifdef ASE_LIGHTING_SIMPLE half4 color = UniversalFragmentBlinnPhong( inputData, surfaceData); #else half4 color = UniversalFragmentPBR( inputData, surfaceData); #endif #ifdef ASE_TRANSMISSION { float shadow = _TransmissionShadow; Light mainLight = GetMainLight( inputData.shadowCoord ); float3 mainAtten = mainLight.color * mainLight.distanceAttenuation; mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow ); half3 mainTransmission = max(0 , -dot(inputData.normalWS, mainLight.direction)) * mainAtten * Transmission; color.rgb += BaseColor * mainTransmission; #ifdef _ADDITIONAL_LIGHTS int transPixelLightCount = GetAdditionalLightsCount(); for (int i = 0; i < transPixelLightCount; ++i) { Light light = GetAdditionalLight(i, inputData.positionWS, inputData.shadowMask); float3 atten = light.color * light.distanceAttenuation; atten = lerp( atten, atten * light.shadowAttenuation, shadow ); half3 transmission = max(0 , -dot(inputData.normalWS, light.direction)) * atten * Transmission; color.rgb += BaseColor * transmission; } #endif } #endif #ifdef ASE_TRANSLUCENCY { float shadow = _TransShadow; float normal = _TransNormal; float scattering = _TransScattering; float direct = _TransDirect; float ambient = _TransAmbient; float strength = _TransStrength; Light mainLight = GetMainLight( inputData.shadowCoord ); float3 mainAtten = mainLight.color * mainLight.distanceAttenuation; mainAtten = lerp( mainAtten, mainAtten * mainLight.shadowAttenuation, shadow ); half3 mainLightDir = mainLight.direction + inputData.normalWS * normal; half mainVdotL = pow( saturate( dot( inputData.viewDirectionWS, -mainLightDir ) ), scattering ); half3 mainTranslucency = mainAtten * ( mainVdotL * direct + inputData.bakedGI * ambient ) * Translucency; color.rgb += BaseColor * mainTranslucency * strength; #ifdef _ADDITIONAL_LIGHTS int transPixelLightCount = GetAdditionalLightsCount(); for (int i = 0; i < transPixelLightCount; ++i) { Light light = GetAdditionalLight(i, inputData.positionWS, inputData.shadowMask); float3 atten = light.color * light.distanceAttenuation; atten = lerp( atten, atten * light.shadowAttenuation, shadow ); half3 lightDir = light.direction + inputData.normalWS * normal; half VdotL = pow( saturate( dot( inputData.viewDirectionWS, -lightDir ) ), scattering ); half3 translucency = atten * ( VdotL * direct + inputData.bakedGI * ambient ) * Translucency; color.rgb += BaseColor * translucency * strength; } #endif } #endif #ifdef ASE_REFRACTION float4 projScreenPos = ScreenPos / ScreenPos.w; float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, float4( NormalWS,0 ) ).xyz * ( 1.0 - dot( NormalWS, ViewDirWS ) ); projScreenPos.xy += refractionOffset.xy; float3 refraction = SHADERGRAPH_SAMPLE_SCENE_COLOR( projScreenPos.xy ) * RefractionColor; color.rgb = lerp( refraction, color.rgb, color.a ); color.a = 1; #endif #ifdef ASE_FINAL_COLOR_ALPHA_MULTIPLY color.rgb *= color.a; #endif #ifdef ASE_FOG #ifdef TERRAIN_SPLAT_ADDPASS color.rgb = MixFogColor(color.rgb, half3(0,0,0), inputData.fogCoord); #else color.rgb = MixFog(color.rgb, inputData.fogCoord); #endif #endif #if defined( ASE_DEPTH_WRITE_ON ) outputDepth = DeviceDepth; #endif return half4( color.rgb, OutputAlpha( color.a, isTransparent ) ); } ENDHLSL } Pass { Name "ShadowCaster" Tags { "LightMode"="ShadowCaster" } ZWrite On ZTest LEqual AlphaToMask Off ColorMask 0 HLSLPROGRAM #define ASE_GEOMETRY 1 #pragma multi_compile_local_fragment _ALPHATEST_ON #define _NORMAL_DROPOFF_TS 1 #pragma multi_compile_instancing #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma multi_compile _ DOTS_INSTANCING_ON #pragma multi_compile_vertex _ _CASTING_PUNCTUAL_LIGHT_SHADOW #pragma vertex vert #pragma fragment frag #if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE) #define _SPECULAR_COLOR 1 #endif #define SHADERPASS SHADERPASS_SHADOWCASTER #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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45) #define ASE_SV_DEPTH SV_DepthLessEqual #define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid #else #define ASE_SV_DEPTH SV_Depth #define ASE_SV_POSITION_QUALIFIERS #endif struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif float3 _LightDirection; float3 _LightPosition; PackedVaryings VertexFunction( Attributes input ) { PackedVaryings output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( output ); #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; input.tangentOS = input.tangentOS; float3 positionWS = TransformObjectToWorld( input.positionOS.xyz ); float3 normalWS = TransformObjectToWorldDir(input.normalOS); #if _CASTING_PUNCTUAL_LIGHT_SHADOW float3 lightDirectionWS = normalize(_LightPosition - positionWS); #else float3 lightDirectionWS = _LightDirection; #endif float4 positionCS = TransformWorldToHClip(ApplyShadowBias(positionWS, normalWS, lightDirectionWS)); #if UNITY_REVERSED_Z positionCS.z = min(positionCS.z, UNITY_NEAR_CLIP_VALUE); #else positionCS.z = max(positionCS.z, UNITY_NEAR_CLIP_VALUE); #endif output.positionCS = positionCS; output.positionWS = positionWS; return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif half4 frag( PackedVaryings input #if defined( ASE_DEPTH_WRITE_ON ) ,out float outputDepth : ASE_SV_DEPTH #endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID( input ); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input ); #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS); #else float4 shadowCoord = float4(0, 0, 0, 0); #endif float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS ); float4 ShadowCoord = shadowCoord; float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw ); float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w; float4 ScreenPos = ComputeScreenPos( ClipPos ); float Alpha = 1; float AlphaClipThreshold = 0.5; float AlphaClipThresholdShadow = 0.5; #if defined( ASE_DEPTH_WRITE_ON ) float DeviceDepth = input.positionCS.z; #endif #if defined( _ALPHATEST_ON ) #if defined( _ALPHATEST_SHADOW_ON ) AlphaDiscard( Alpha, AlphaClipThresholdShadow ); #else AlphaDiscard( Alpha, AlphaClipThreshold ); #endif #endif #if defined(LOD_FADE_CROSSFADE) LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x ); #endif #if defined( ASE_DEPTH_WRITE_ON ) outputDepth = DeviceDepth; #endif return 0; } ENDHLSL } Pass { Name "DepthOnly" Tags { "LightMode"="DepthOnly" } ZWrite On ColorMask 0 AlphaToMask Off HLSLPROGRAM #define ASE_GEOMETRY 1 #pragma multi_compile_local_fragment _ALPHATEST_ON #define _NORMAL_DROPOFF_TS 1 #pragma multi_compile_instancing #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma multi_compile _ DOTS_INSTANCING_ON #pragma vertex vert #pragma fragment frag #if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE) #define _SPECULAR_COLOR 1 #endif #define SHADERPASS SHADERPASS_DEPTHONLY #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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45) #define ASE_SV_DEPTH SV_DepthLessEqual #define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid #else #define ASE_SV_DEPTH SV_Depth #define ASE_SV_POSITION_QUALIFIERS #endif struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif PackedVaryings VertexFunction( Attributes input ) { PackedVaryings output = (PackedVaryings)0; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; input.tangentOS = input.tangentOS; VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz ); output.positionCS = vertexInput.positionCS; output.positionWS = vertexInput.positionWS; return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif half4 frag( PackedVaryings input #if defined( ASE_DEPTH_WRITE_ON ) ,out float outputDepth : ASE_SV_DEPTH #endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input ); #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS); #else float4 shadowCoord = float4(0, 0, 0, 0); #endif float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS ); float4 ShadowCoord = shadowCoord; float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw ); float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w; float4 ScreenPos = ComputeScreenPos( ClipPos ); float Alpha = 1; float AlphaClipThreshold = 0.5; #if defined( ASE_DEPTH_WRITE_ON ) float DeviceDepth = input.positionCS.z; #endif #if defined( _ALPHATEST_ON ) AlphaDiscard( Alpha, AlphaClipThreshold ); #endif #if defined(LOD_FADE_CROSSFADE) LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x ); #endif #if defined( ASE_DEPTH_WRITE_ON ) outputDepth = DeviceDepth; #endif return 0; } ENDHLSL } Pass { Name "Meta" Tags { "LightMode"="Meta" } Cull Off HLSLPROGRAM #define ASE_GEOMETRY 1 #pragma multi_compile_local_fragment _ALPHATEST_ON #define _NORMAL_DROPOFF_TS 1 #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma shader_feature EDITOR_VISUALIZATION #pragma vertex vert #pragma fragment frag #if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE) #define _SPECULAR_COLOR 1 #endif #define SHADERPASS SHADERPASS_META #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 "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" #define ASE_NEEDS_FRAG_COLOR #define ASE_NEEDS_TEXTURE_COORDINATES0 #define ASE_NEEDS_WORLD_POSITION #define ASE_NEEDS_FRAG_WORLD_POSITION #define ASE_NEEDS_VERT_NORMAL #define ASE_NEEDS_VERT_TANGENT struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 texcoord0 : TEXCOORD0; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; #ifdef EDITOR_VISUALIZATION float4 VizUV : TEXCOORD1; float4 LightCoord : TEXCOORD2; #endif float4 ase_color : COLOR; float4 ase_texcoord3 : TEXCOORD3; float4 ase_texcoord4 : TEXCOORD4; float4 ase_texcoord5 : TEXCOORD5; float4 ase_texcoord6 : TEXCOORD6; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif sampler2D _HeightMap1; sampler2D _HeightMap2; sampler2D _HeightMap3; TEXTURE2D_ARRAY(_AlbedoMapArray); sampler2D _HeightMapBase; SAMPLER(sampler_AlbedoMapArray); inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index ) { float3 result = 0; float stepIndex = 0; float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) ); float layerHeight = 1.0 / numSteps; float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z ); uvs.xy += refPlane * plane; float2 deltaTex = -plane * layerHeight; float2 prevTexOffset = 0; float prevRayZ = 1.0f; float prevHeight = 0.0f; float2 currTexOffset = deltaTex; float currRayZ = 1.0f - layerHeight; float currHeight = 0.0f; float intersection = 0; float2 finalTexOffset = 0; while ( stepIndex < numSteps + 1 ) { currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r; if ( currHeight > currRayZ ) { stepIndex = numSteps + 1; } else { stepIndex++; prevTexOffset = currTexOffset; prevRayZ = currRayZ; prevHeight = currHeight; currTexOffset += deltaTex; currRayZ -= layerHeight; } } float sectionSteps = sidewallSteps; float sectionIndex = 0; float newZ = 0; float newHeight = 0; while ( sectionIndex < sectionSteps ) { intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ ); finalTexOffset = prevTexOffset + intersection * deltaTex; newZ = prevRayZ - intersection * layerHeight; newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r; if ( newHeight > newZ ) { currTexOffset = finalTexOffset; currHeight = newHeight; currRayZ = newZ; deltaTex = intersection * deltaTex; layerHeight = intersection * layerHeight; } else { prevTexOffset = finalTexOffset; prevHeight = newHeight; prevRayZ = newZ; deltaTex = ( 1 - intersection ) * deltaTex; layerHeight = ( 1 - intersection ) * layerHeight; } sectionIndex++; } return uvs.xy + finalTexOffset; } float4 CalculateContrast( float contrastValue, float4 colorTarget ) { float t = 0.5 * ( 1.0 - contrastValue ); return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget ); } PackedVaryings VertexFunction( Attributes input ) { PackedVaryings output = (PackedVaryings)0; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); float3 ase_normalWS = TransformObjectToWorldNormal( input.normalOS ); output.ase_texcoord4.xyz = ase_normalWS; float3 ase_tangentWS = TransformObjectToWorldDir( input.tangentOS.xyz ); output.ase_texcoord5.xyz = ase_tangentWS; float ase_tangentSign = input.tangentOS.w * ( unity_WorldTransformParams.w >= 0.0 ? 1.0 : -1.0 ); float3 ase_bitangentWS = cross( ase_normalWS, ase_tangentWS ) * ase_tangentSign; output.ase_texcoord6.xyz = ase_bitangentWS; output.ase_color = input.ase_color; output.ase_texcoord3.xy = input.texcoord0.xy; //setting value to unused interpolator channels and avoid initialization warnings output.ase_texcoord3.zw = 0; output.ase_texcoord4.w = 0; output.ase_texcoord5.w = 0; output.ase_texcoord6.w = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; input.tangentOS = input.tangentOS; #ifdef EDITOR_VISUALIZATION float2 VizUV = 0; float4 LightCoord = 0; UnityEditorVizData(input.positionOS.xyz, input.texcoord0.xy, input.texcoord1.xy, input.texcoord2.xy, VizUV, LightCoord); output.VizUV = float4(VizUV, 0, 0); output.LightCoord = LightCoord; #endif output.positionCS = MetaVertexPosition( input.positionOS, input.texcoord1.xy, input.texcoord1.xy, unity_LightmapST, unity_DynamicLightmapST ); output.positionWS = TransformObjectToWorld( input.positionOS.xyz ); return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 ase_color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; output.ase_color = input.ase_color; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif half4 frag(PackedVaryings input ) : SV_Target { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input ); #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS); #else float4 shadowCoord = float4(0, 0, 0, 0); #endif float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS ); float4 ShadowCoord = shadowCoord; float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) ); float4 break170 = clampResult178; float3 appendResult169 = (float3(break170.r , break170.g , break170.b)); float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) ); float2 texCoord17 = input.ase_texcoord3.xy * float2( 1,1 ) + float2( 0,0 ); float3 ase_viewVectorWS = ( _WorldSpaceCameraPos.xyz - PositionWS ); float3 ase_viewDirWS = normalize( ase_viewVectorWS ); float3 ase_normalWS = input.ase_texcoord4.xyz; float fresnelNdotV288 = dot( ase_normalWS, ase_viewDirWS ); float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) ); float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 ); float temp_output_291_0 = ( 1.0 - clampResult296 ); float3 ase_tangentWS = input.ase_texcoord5.xyz; float3 ase_bitangentWS = input.ase_texcoord6.xyz; float3 tanToWorld0 = float3( ase_tangentWS.x, ase_bitangentWS.x, ase_normalWS.x ); float3 tanToWorld1 = float3( ase_tangentWS.y, ase_bitangentWS.y, ase_normalWS.y ); float3 tanToWorld2 = float3( ase_tangentWS.z, ase_bitangentWS.z, ase_normalWS.z ); float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z; float3 ase_viewDirTS = normalize( ase_viewVectorTS ); float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 ); float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r); float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 ); float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r); float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 ); float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r); float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151)); float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float3 temp_output_167_0 = ( appendResult169 + clampResult182 ); float3 clampResult190 = clamp( temp_output_167_0 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 ); float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 ); float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 ); float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 ); float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 ); float3 layeredBlendVar132 = clampResult190; float4 layeredBlend132 = ( lerp( lerp( lerp( ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_262_0,0.0 ) * _AlbedoColorBase ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_239_0,1.0 ) * _AlbedoColor1 ) , layeredBlendVar132.x ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_243_0,2.0 ) * _AlbedoColor2 ) , layeredBlendVar132.y ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_246_0,3.0 ) * _AlbedoColor3 ) , layeredBlendVar132.z ) ); float3 BaseColor = layeredBlend132.rgb; float3 Emission = ( _EmissionColor * ( _EmissionMultiplayer * layeredBlend132 ) ).rgb; float Alpha = 1; float AlphaClipThreshold = 0.5; #if defined( _ALPHATEST_ON ) AlphaDiscard( Alpha, AlphaClipThreshold ); #endif MetaInput metaInput = (MetaInput)0; metaInput.Albedo = BaseColor; metaInput.Emission = Emission; #ifdef EDITOR_VISUALIZATION metaInput.VizUV = input.VizUV.xy; metaInput.LightCoord = input.LightCoord; #endif return UnityMetaFragment(metaInput); } ENDHLSL } Pass { Name "Universal2D" Tags { "LightMode"="Universal2D" } Blend One Zero, One Zero ZWrite On ZTest LEqual Offset 0 , 0 ColorMask RGBA HLSLPROGRAM #define ASE_GEOMETRY 1 #pragma multi_compile_local_fragment _ALPHATEST_ON #define _NORMAL_DROPOFF_TS 1 #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma vertex vert #pragma fragment frag #if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE) #define _SPECULAR_COLOR 1 #endif #define SHADERPASS SHADERPASS_2D #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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #define ASE_NEEDS_FRAG_COLOR #define ASE_NEEDS_TEXTURE_COORDINATES0 #define ASE_NEEDS_WORLD_POSITION #define ASE_NEEDS_FRAG_WORLD_POSITION #define ASE_NEEDS_VERT_NORMAL #define ASE_NEEDS_VERT_TANGENT struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 ase_color : COLOR; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; float4 ase_color : COLOR; float4 ase_texcoord1 : TEXCOORD1; float4 ase_texcoord2 : TEXCOORD2; float4 ase_texcoord3 : TEXCOORD3; float4 ase_texcoord4 : TEXCOORD4; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif sampler2D _HeightMap1; sampler2D _HeightMap2; sampler2D _HeightMap3; TEXTURE2D_ARRAY(_AlbedoMapArray); sampler2D _HeightMapBase; SAMPLER(sampler_AlbedoMapArray); inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index ) { float3 result = 0; float stepIndex = 0; float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) ); float layerHeight = 1.0 / numSteps; float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z ); uvs.xy += refPlane * plane; float2 deltaTex = -plane * layerHeight; float2 prevTexOffset = 0; float prevRayZ = 1.0f; float prevHeight = 0.0f; float2 currTexOffset = deltaTex; float currRayZ = 1.0f - layerHeight; float currHeight = 0.0f; float intersection = 0; float2 finalTexOffset = 0; while ( stepIndex < numSteps + 1 ) { currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r; if ( currHeight > currRayZ ) { stepIndex = numSteps + 1; } else { stepIndex++; prevTexOffset = currTexOffset; prevRayZ = currRayZ; prevHeight = currHeight; currTexOffset += deltaTex; currRayZ -= layerHeight; } } float sectionSteps = sidewallSteps; float sectionIndex = 0; float newZ = 0; float newHeight = 0; while ( sectionIndex < sectionSteps ) { intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ ); finalTexOffset = prevTexOffset + intersection * deltaTex; newZ = prevRayZ - intersection * layerHeight; newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r; if ( newHeight > newZ ) { currTexOffset = finalTexOffset; currHeight = newHeight; currRayZ = newZ; deltaTex = intersection * deltaTex; layerHeight = intersection * layerHeight; } else { prevTexOffset = finalTexOffset; prevHeight = newHeight; prevRayZ = newZ; deltaTex = ( 1 - intersection ) * deltaTex; layerHeight = ( 1 - intersection ) * layerHeight; } sectionIndex++; } return uvs.xy + finalTexOffset; } float4 CalculateContrast( float contrastValue, float4 colorTarget ) { float t = 0.5 * ( 1.0 - contrastValue ); return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget ); } PackedVaryings VertexFunction( Attributes input ) { PackedVaryings output = (PackedVaryings)0; UNITY_SETUP_INSTANCE_ID( input ); UNITY_TRANSFER_INSTANCE_ID( input, output ); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( output ); float3 ase_normalWS = TransformObjectToWorldNormal( input.normalOS ); output.ase_texcoord2.xyz = ase_normalWS; float3 ase_tangentWS = TransformObjectToWorldDir( input.tangentOS.xyz ); output.ase_texcoord3.xyz = ase_tangentWS; float ase_tangentSign = input.tangentOS.w * ( unity_WorldTransformParams.w >= 0.0 ? 1.0 : -1.0 ); float3 ase_bitangentWS = cross( ase_normalWS, ase_tangentWS ) * ase_tangentSign; output.ase_texcoord4.xyz = ase_bitangentWS; output.ase_color = input.ase_color; output.ase_texcoord1.xy = input.ase_texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings output.ase_texcoord1.zw = 0; output.ase_texcoord2.w = 0; output.ase_texcoord3.w = 0; output.ase_texcoord4.w = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; input.tangentOS = input.tangentOS; VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz ); output.positionCS = vertexInput.positionCS; output.positionWS = vertexInput.positionWS; return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 ase_color : COLOR; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; output.ase_color = input.ase_color; output.ase_texcoord = input.ase_texcoord; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z; output.ase_texcoord = patch[0].ase_texcoord * bary.x + patch[1].ase_texcoord * bary.y + patch[2].ase_texcoord * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif half4 frag(PackedVaryings input ) : SV_Target { UNITY_SETUP_INSTANCE_ID( input ); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input ); #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS); #else float4 shadowCoord = float4(0, 0, 0, 0); #endif float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS ); float4 ShadowCoord = shadowCoord; float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) ); float4 break170 = clampResult178; float3 appendResult169 = (float3(break170.r , break170.g , break170.b)); float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) ); float2 texCoord17 = input.ase_texcoord1.xy * float2( 1,1 ) + float2( 0,0 ); float3 ase_viewVectorWS = ( _WorldSpaceCameraPos.xyz - PositionWS ); float3 ase_viewDirWS = normalize( ase_viewVectorWS ); float3 ase_normalWS = input.ase_texcoord2.xyz; float fresnelNdotV288 = dot( ase_normalWS, ase_viewDirWS ); float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) ); float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 ); float temp_output_291_0 = ( 1.0 - clampResult296 ); float3 ase_tangentWS = input.ase_texcoord3.xyz; float3 ase_bitangentWS = input.ase_texcoord4.xyz; float3 tanToWorld0 = float3( ase_tangentWS.x, ase_bitangentWS.x, ase_normalWS.x ); float3 tanToWorld1 = float3( ase_tangentWS.y, ase_bitangentWS.y, ase_normalWS.y ); float3 tanToWorld2 = float3( ase_tangentWS.z, ase_bitangentWS.z, ase_normalWS.z ); float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z; float3 ase_viewDirTS = normalize( ase_viewVectorTS ); float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 ); float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r); float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 ); float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r); float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 ); float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r); float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151)); float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float3 temp_output_167_0 = ( appendResult169 + clampResult182 ); float3 clampResult190 = clamp( temp_output_167_0 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), ase_normalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 ); float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 ); float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 ); float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 ); float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 ); float3 layeredBlendVar132 = clampResult190; float4 layeredBlend132 = ( lerp( lerp( lerp( ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_262_0,0.0 ) * _AlbedoColorBase ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_239_0,1.0 ) * _AlbedoColor1 ) , layeredBlendVar132.x ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_243_0,2.0 ) * _AlbedoColor2 ) , layeredBlendVar132.y ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_246_0,3.0 ) * _AlbedoColor3 ) , layeredBlendVar132.z ) ); float3 BaseColor = layeredBlend132.rgb; float Alpha = 1; float AlphaClipThreshold = 0.5; half4 color = half4(BaseColor, Alpha ); #if defined( _ALPHATEST_ON ) AlphaDiscard( Alpha, AlphaClipThreshold ); #endif return color; } ENDHLSL } Pass { Name "DepthNormals" Tags { "LightMode"="DepthNormals" } ZWrite On Blend One Zero ZTest LEqual ZWrite On HLSLPROGRAM #define ASE_GEOMETRY 1 #pragma multi_compile_local_fragment _ALPHATEST_ON #define _NORMAL_DROPOFF_TS 1 #pragma multi_compile_instancing #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma multi_compile _ DOTS_INSTANCING_ON #pragma vertex vert #pragma fragment frag #if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE) #define _SPECULAR_COLOR 1 #endif #define SHADERPASS SHADERPASS_DEPTHNORMALSONLY #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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #if defined(UNITY_INSTANCING_ENABLED) && ( defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL) || defined(_INSTANCEDTERRAINNORMALS_PIXEL) ) #define ENABLE_TERRAIN_PERPIXEL_NORMAL #endif #define ASE_NEEDS_FRAG_COLOR #define ASE_NEEDS_TEXTURE_COORDINATES0 #define ASE_NEEDS_WORLD_POSITION #define ASE_NEEDS_FRAG_WORLD_POSITION #define ASE_NEEDS_WORLD_NORMAL #define ASE_NEEDS_FRAG_WORLD_NORMAL #define ASE_NEEDS_WORLD_TANGENT #define ASE_NEEDS_FRAG_WORLD_TANGENT #define ASE_NEEDS_FRAG_WORLD_BITANGENT #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45) #define ASE_SV_DEPTH SV_DepthLessEqual #define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid #else #define ASE_SV_DEPTH SV_Depth #define ASE_SV_POSITION_QUALIFIERS #endif struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; half4 texcoord : TEXCOORD0; float4 ase_color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; half3 normalWS : TEXCOORD1; float4 tangentWS : TEXCOORD2; // holds terrainUV ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL float4 ase_color : COLOR; float4 ase_texcoord3 : TEXCOORD3; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif sampler2D _HeightMap1; sampler2D _HeightMap2; sampler2D _HeightMap3; sampler2D _NormalMapBase; sampler2D _HeightMapBase; sampler2D _NormalMap1; sampler2D _NormalMap2; sampler2D _NormalMap3; inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index ) { float3 result = 0; float stepIndex = 0; float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) ); float layerHeight = 1.0 / numSteps; float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z ); uvs.xy += refPlane * plane; float2 deltaTex = -plane * layerHeight; float2 prevTexOffset = 0; float prevRayZ = 1.0f; float prevHeight = 0.0f; float2 currTexOffset = deltaTex; float currRayZ = 1.0f - layerHeight; float currHeight = 0.0f; float intersection = 0; float2 finalTexOffset = 0; while ( stepIndex < numSteps + 1 ) { currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r; if ( currHeight > currRayZ ) { stepIndex = numSteps + 1; } else { stepIndex++; prevTexOffset = currTexOffset; prevRayZ = currRayZ; prevHeight = currHeight; currTexOffset += deltaTex; currRayZ -= layerHeight; } } float sectionSteps = sidewallSteps; float sectionIndex = 0; float newZ = 0; float newHeight = 0; while ( sectionIndex < sectionSteps ) { intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ ); finalTexOffset = prevTexOffset + intersection * deltaTex; newZ = prevRayZ - intersection * layerHeight; newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r; if ( newHeight > newZ ) { currTexOffset = finalTexOffset; currHeight = newHeight; currRayZ = newZ; deltaTex = intersection * deltaTex; layerHeight = intersection * layerHeight; } else { prevTexOffset = finalTexOffset; prevHeight = newHeight; prevRayZ = newZ; deltaTex = ( 1 - intersection ) * deltaTex; layerHeight = ( 1 - intersection ) * layerHeight; } sectionIndex++; } return uvs.xy + finalTexOffset; } float4 CalculateContrast( float contrastValue, float4 colorTarget ) { float t = 0.5 * ( 1.0 - contrastValue ); return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget ); } PackedVaryings VertexFunction( Attributes input ) { PackedVaryings output = (PackedVaryings)0; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); output.ase_color = input.ase_color; output.ase_texcoord3.xy = input.texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings output.ase_texcoord3.zw = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; input.tangentOS = input.tangentOS; VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz ); VertexNormalInputs normalInput = GetVertexNormalInputs( input.normalOS, input.tangentOS ); output.positionCS = vertexInput.positionCS; output.positionWS = vertexInput.positionWS; output.normalWS = normalInput.normalWS; output.tangentWS = float4( normalInput.tangentWS, ( input.tangentOS.w > 0.0 ? 1.0 : -1.0 ) * GetOddNegativeScale() ); #if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL ) output.tangentWS.zw = input.texcoord.xy; output.tangentWS.xy = input.texcoord.xy * unity_LightmapST.xy + unity_LightmapST.zw; #endif return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 texcoord : TEXCOORD0; float4 ase_color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; output.texcoord = input.texcoord; output.ase_color = input.ase_color; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; output.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z; output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif half4 frag( PackedVaryings input #if defined( ASE_DEPTH_WRITE_ON ) ,out float outputDepth : ASE_SV_DEPTH #endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( input ); #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord = TransformWorldToShadowCoord(input.positionWS); #else float4 shadowCoord = float4(0, 0, 0, 0); #endif // @diogo: mikktspace compliant float renormFactor = 1.0 / max( FLT_MIN, length( input.normalWS ) ); float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( input.positionWS ); float4 ShadowCoord = shadowCoord; float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw ); float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w; float4 ScreenPos = ComputeScreenPos( ClipPos ); float3 TangentWS = input.tangentWS.xyz * renormFactor; float3 BitangentWS = cross( input.normalWS, input.tangentWS.xyz ) * input.tangentWS.w * renormFactor; float3 NormalWS = input.normalWS * renormFactor; #if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL ) float2 sampleCoords = (input.tangentWS.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy; NormalWS = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1)); TangentWS = -cross(GetObjectToWorldMatrix()._13_23_33, NormalWS); BitangentWS = cross(NormalWS, -TangentWS); #endif float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) ); float4 break170 = clampResult178; float3 appendResult169 = (float3(break170.r , break170.g , break170.b)); float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) ); float2 texCoord17 = input.ase_texcoord3.xy * float2( 1,1 ) + float2( 0,0 ); float3 ase_viewVectorWS = ( _WorldSpaceCameraPos.xyz - PositionWS ); float3 ase_viewDirWS = normalize( ase_viewVectorWS ); float fresnelNdotV288 = dot( NormalWS, ase_viewDirWS ); float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) ); float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 ); float temp_output_291_0 = ( 1.0 - clampResult296 ); float3 tanToWorld0 = float3( TangentWS.x, BitangentWS.x, NormalWS.x ); float3 tanToWorld1 = float3( TangentWS.y, BitangentWS.y, NormalWS.y ); float3 tanToWorld2 = float3( TangentWS.z, BitangentWS.z, NormalWS.z ); float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z; float3 ase_viewDirTS = normalize( ase_viewVectorTS ); float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), NormalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 ); float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r); float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), NormalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 ); float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r); float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), NormalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 ); float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r); float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151)); float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float3 temp_output_167_0 = ( appendResult169 + clampResult182 ); float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), NormalWS, ase_viewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 ); float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 ); float3 unpack13 = UnpackNormalScale( tex2D( _NormalMapBase, temp_output_262_0 ), _NormalMapDepthBase ); unpack13.z = lerp( 1, unpack13.z, saturate(_NormalMapDepthBase) ); float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 ); float3 unpack111 = UnpackNormalScale( tex2D( _NormalMap1, temp_output_239_0 ), _NormalMapDepth1 ); unpack111.z = lerp( 1, unpack111.z, saturate(_NormalMapDepth1) ); float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 ); float3 unpack171 = UnpackNormalScale( tex2D( _NormalMap2, temp_output_243_0 ), _NormalMapDepth2 ); unpack171.z = lerp( 1, unpack171.z, saturate(_NormalMapDepth2) ); float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 ); float3 unpack172 = UnpackNormalScale( tex2D( _NormalMap3, temp_output_246_0 ), _NormalMapDepth3 ); unpack172.z = lerp( 1, unpack172.z, saturate(_NormalMapDepth3) ); float3 layeredBlendVar173 = temp_output_167_0; float3 layeredBlend173 = ( lerp( lerp( lerp( unpack13 , unpack111 , layeredBlendVar173.x ) , unpack171 , layeredBlendVar173.y ) , unpack172 , layeredBlendVar173.z ) ); float3 Normal = layeredBlend173; float Alpha = 1; float AlphaClipThreshold = 0.5; #if defined( ASE_DEPTH_WRITE_ON ) float DeviceDepth = input.positionCS.z; #endif #if defined( _ALPHATEST_ON ) AlphaDiscard( Alpha, AlphaClipThreshold ); #endif #if defined(LOD_FADE_CROSSFADE) LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x ); #endif #if defined( ASE_DEPTH_WRITE_ON ) outputDepth = DeviceDepth; #endif #if defined(_GBUFFER_NORMALS_OCT) float2 octNormalWS = PackNormalOctQuadEncode(NormalWS); float2 remappedOctNormalWS = saturate(octNormalWS * 0.5 + 0.5); half3 packedNormalWS = PackFloat2To888(remappedOctNormalWS); return half4(packedNormalWS, 0.0); #else #if defined(_NORMALMAP) #if _NORMAL_DROPOFF_TS float3 normalWS = TransformTangentToWorld(Normal, half3x3(TangentWS, BitangentWS, NormalWS)); #elif _NORMAL_DROPOFF_OS float3 normalWS = TransformObjectToWorldNormal(Normal); #elif _NORMAL_DROPOFF_WS float3 normalWS = Normal; #endif #else float3 normalWS = NormalWS; #endif return half4(NormalizeNormalPerPixel(normalWS), 0.0); #endif } ENDHLSL } Pass { Name "GBuffer" Tags { "LightMode"="UniversalGBuffer" } Blend One Zero, One Zero ZWrite On ZTest LEqual Offset 0 , 0 ColorMask RGBA HLSLPROGRAM #define ASE_GEOMETRY 1 #pragma multi_compile_local_fragment _ALPHATEST_ON #define _NORMAL_DROPOFF_TS 1 #pragma shader_feature_local_fragment _RECEIVE_SHADOWS_OFF #pragma shader_feature_local_fragment _SPECULARHIGHLIGHTS_OFF #pragma shader_feature_local_fragment _ENVIRONMENTREFLECTIONS_OFF #pragma multi_compile_instancing #pragma instancing_options renderinglayer #pragma multi_compile_fragment _ LOD_FADE_CROSSFADE #pragma multi_compile_fog #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma multi_compile _ DOTS_INSTANCING_ON #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 _ _DBUFFER_MRT1 _DBUFFER_MRT2 _DBUFFER_MRT3 #pragma multi_compile_fragment _ _LIGHT_LAYERS #pragma multi_compile_fragment _ _RENDER_PASS_ENABLED #pragma multi_compile _ LIGHTMAP_SHADOW_MIXING #pragma multi_compile _ SHADOWS_SHADOWMASK #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ LIGHTMAP_ON #pragma multi_compile _ DYNAMICLIGHTMAP_ON #pragma multi_compile_fragment _ _GBUFFER_NORMALS_OCT #pragma vertex vert #pragma fragment frag #define SHADERPASS SHADERPASS_GBUFFER #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 "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" #if defined(UNITY_INSTANCING_ENABLED) && ( defined(_TERRAIN_INSTANCED_PERPIXEL_NORMAL) || defined(_INSTANCEDTERRAINNORMALS_PIXEL) ) #define ENABLE_TERRAIN_PERPIXEL_NORMAL #endif #define ASE_NEEDS_FRAG_COLOR #define ASE_NEEDS_TEXTURE_COORDINATES0 #define ASE_NEEDS_FRAG_WORLD_VIEW_DIR #define ASE_NEEDS_WORLD_NORMAL #define ASE_NEEDS_FRAG_WORLD_NORMAL #define ASE_NEEDS_WORLD_POSITION #define ASE_NEEDS_FRAG_WORLD_POSITION #define ASE_NEEDS_WORLD_TANGENT #define ASE_NEEDS_FRAG_WORLD_TANGENT #define ASE_NEEDS_FRAG_WORLD_BITANGENT #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45) #define ASE_SV_DEPTH SV_DepthLessEqual #define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid #else #define ASE_SV_DEPTH SV_Depth #define ASE_SV_POSITION_QUALIFIERS #endif struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 texcoord : TEXCOORD0; #if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1) float4 texcoord1 : TEXCOORD1; #endif #if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2) float4 texcoord2 : TEXCOORD2; #endif float4 ase_color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; half3 normalWS : TEXCOORD1; float4 tangentWS : TEXCOORD2; // holds terrainUV ifdef ENABLE_TERRAIN_PERPIXEL_NORMAL float4 lightmapUVOrVertexSH : TEXCOORD3; #if defined(ASE_FOG) || defined(_ADDITIONAL_LIGHTS_VERTEX) half4 fogFactorAndVertexLight : TEXCOORD4; #endif #if defined(DYNAMICLIGHTMAP_ON) float2 dynamicLightmapUV : TEXCOORD5; #endif float4 ase_color : COLOR; float4 ase_texcoord6 : TEXCOORD6; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif sampler2D _HeightMap1; sampler2D _HeightMap2; sampler2D _HeightMap3; TEXTURE2D_ARRAY(_AlbedoMapArray); sampler2D _HeightMapBase; SAMPLER(sampler_AlbedoMapArray); sampler2D _NormalMapBase; sampler2D _NormalMap1; sampler2D _NormalMap2; sampler2D _NormalMap3; TEXTURE2D_ARRAY(_MetallicMapArray); SAMPLER(sampler_MetallicMapArray); #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityGBuffer.hlsl" inline float2 POM( sampler2D heightMap, float2 uvs, float2 dx, float2 dy, float3 normalWorld, float3 viewWorld, float3 viewDirTan, int minSamples, int maxSamples, int sidewallSteps, float parallax, float refPlane, float2 tilling, float2 curv, int index ) { float3 result = 0; float stepIndex = 0; float numSteps = floor( lerp( (float)maxSamples, (float)minSamples, saturate( dot( normalWorld, viewWorld ) ) ) ); float layerHeight = 1.0 / numSteps; float2 plane = parallax * ( viewDirTan.xy / viewDirTan.z ); uvs.xy += refPlane * plane; float2 deltaTex = -plane * layerHeight; float2 prevTexOffset = 0; float prevRayZ = 1.0f; float prevHeight = 0.0f; float2 currTexOffset = deltaTex; float currRayZ = 1.0f - layerHeight; float currHeight = 0.0f; float intersection = 0; float2 finalTexOffset = 0; while ( stepIndex < numSteps + 1 ) { currHeight = tex2Dgrad( heightMap, uvs + currTexOffset, dx, dy ).r; if ( currHeight > currRayZ ) { stepIndex = numSteps + 1; } else { stepIndex++; prevTexOffset = currTexOffset; prevRayZ = currRayZ; prevHeight = currHeight; currTexOffset += deltaTex; currRayZ -= layerHeight; } } float sectionSteps = sidewallSteps; float sectionIndex = 0; float newZ = 0; float newHeight = 0; while ( sectionIndex < sectionSteps ) { intersection = ( prevHeight - prevRayZ ) / ( prevHeight - currHeight + currRayZ - prevRayZ ); finalTexOffset = prevTexOffset + intersection * deltaTex; newZ = prevRayZ - intersection * layerHeight; newHeight = tex2Dgrad( heightMap, uvs + finalTexOffset, dx, dy ).r; if ( newHeight > newZ ) { currTexOffset = finalTexOffset; currHeight = newHeight; currRayZ = newZ; deltaTex = intersection * deltaTex; layerHeight = intersection * layerHeight; } else { prevTexOffset = finalTexOffset; prevHeight = newHeight; prevRayZ = newZ; deltaTex = ( 1 - intersection ) * deltaTex; layerHeight = ( 1 - intersection ) * layerHeight; } sectionIndex++; } return uvs.xy + finalTexOffset; } float4 CalculateContrast( float contrastValue, float4 colorTarget ) { float t = 0.5 * ( 1.0 - contrastValue ); return mul( float4x4( contrastValue,0,0,t, 0,contrastValue,0,t, 0,0,contrastValue,t, 0,0,0,1 ), colorTarget ); } PackedVaryings VertexFunction( Attributes input ) { PackedVaryings output = (PackedVaryings)0; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); output.ase_color = input.ase_color; output.ase_texcoord6.xy = input.texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings output.ase_texcoord6.zw = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; input.tangentOS = input.tangentOS; VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz ); VertexNormalInputs normalInput = GetVertexNormalInputs( input.normalOS, input.tangentOS ); #if defined(LIGHTMAP_ON) OUTPUT_LIGHTMAP_UV(input.texcoord1, unity_LightmapST, output.lightmapUVOrVertexSH.xy); #else OUTPUT_SH(normalInput.normalWS.xyz, output.lightmapUVOrVertexSH.xyz); #endif #if defined(DYNAMICLIGHTMAP_ON) output.dynamicLightmapUV.xy = input.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; #endif #if defined(ASE_FOG) || defined(_ADDITIONAL_LIGHTS_VERTEX) output.fogFactorAndVertexLight = 0; #if defined(ASE_FOG) && !defined(_FOG_FRAGMENT) // @diogo: no fog applied in GBuffer #endif #ifdef _ADDITIONAL_LIGHTS_VERTEX half3 vertexLight = VertexLighting( vertexInput.positionWS, normalInput.normalWS ); output.fogFactorAndVertexLight.yzw = vertexLight; #endif #endif output.positionCS = vertexInput.positionCS; output.positionWS = vertexInput.positionWS; output.normalWS = normalInput.normalWS; output.tangentWS = float4( normalInput.tangentWS, ( input.tangentOS.w > 0.0 ? 1.0 : -1.0 ) * GetOddNegativeScale() ); #if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL ) output.tangentWS.zw = input.texcoord.xy; output.tangentWS.xy = input.texcoord.xy * unity_LightmapST.xy + unity_LightmapST.zw; #endif return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; float4 texcoord : TEXCOORD0; #if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1) float4 texcoord1 : TEXCOORD1; #endif #if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2) float4 texcoord2 : TEXCOORD2; #endif float4 ase_color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; output.texcoord = input.texcoord; #if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1) output.texcoord1 = input.texcoord1; #endif #if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2) output.texcoord2 = input.texcoord2; #endif output.ase_color = input.ase_color; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; output.texcoord = patch[0].texcoord * bary.x + patch[1].texcoord * bary.y + patch[2].texcoord * bary.z; #if defined(LIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES1) output.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; #endif #if defined(DYNAMICLIGHTMAP_ON) || defined(ASE_NEEDS_TEXTURE_COORDINATES2) output.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z; #endif output.ase_color = patch[0].ase_color * bary.x + patch[1].ase_color * bary.y + patch[2].ase_color * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif FragmentOutput frag ( PackedVaryings input #if defined( ASE_DEPTH_WRITE_ON ) ,out float outputDepth : ASE_SV_DEPTH #endif ) { UNITY_SETUP_INSTANCE_ID(input); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); #if defined(LOD_FADE_CROSSFADE) LODDitheringTransition( input.positionCS.xyz, unity_LODFade.x ); #endif #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) float4 shadowCoord = TransformWorldToShadowCoord( input.positionWS ); #else float4 shadowCoord = float4(0, 0, 0, 0); #endif // @diogo: mikktspace compliant float renormFactor = 1.0 / max( FLT_MIN, length( input.normalWS ) ); float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( PositionWS ); float3 ViewDirWS = GetWorldSpaceNormalizeViewDir( PositionWS ); float4 ShadowCoord = shadowCoord; float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw ); float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w; float4 ScreenPos = ComputeScreenPos( ClipPos ); float3 TangentWS = input.tangentWS.xyz * renormFactor; float3 BitangentWS = cross( input.normalWS, input.tangentWS.xyz ) * input.tangentWS.w * renormFactor; float3 NormalWS = input.normalWS * renormFactor; #if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL ) float2 sampleCoords = (input.tangentWS.zw / _TerrainHeightmapRecipSize.zw + 0.5f) * _TerrainHeightmapRecipSize.xy; NormalWS = TransformObjectToWorldNormal(normalize(SAMPLE_TEXTURE2D(_TerrainNormalmapTexture, sampler_TerrainNormalmapTexture, sampleCoords).rgb * 2 - 1)); TangentWS = -cross(GetObjectToWorldMatrix()._13_23_33, NormalWS); BitangentWS = cross(NormalWS, -TangentWS); #endif float4 clampResult178 = clamp( input.ase_color , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) ); float4 break170 = clampResult178; float3 appendResult169 = (float3(break170.r , break170.g , break170.b)); float4 break166 = ( 2.0 * ( ( 1.0 - input.ase_color ) * input.ase_color ) ); float2 texCoord17 = input.ase_texcoord6.xy * float2( 1,1 ) + float2( 0,0 ); float fresnelNdotV288 = dot( NormalWS, ViewDirWS ); float fresnelNode288 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV288, 10.17 ) ); float clampResult296 = clamp( fresnelNode288 , 0.0 , 1.0 ); float temp_output_291_0 = ( 1.0 - clampResult296 ); float3 tanToWorld0 = float3( TangentWS.x, BitangentWS.x, NormalWS.x ); float3 tanToWorld1 = float3( TangentWS.y, BitangentWS.y, NormalWS.y ); float3 tanToWorld2 = float3( TangentWS.z, BitangentWS.z, NormalWS.z ); float3 ase_viewVectorTS = tanToWorld0 * ( _WorldSpaceCameraPos.xyz - PositionWS ).x + tanToWorld1 * ( _WorldSpaceCameraPos.xyz - PositionWS ).y + tanToWorld2 * ( _WorldSpaceCameraPos.xyz - PositionWS ).z; float3 ase_viewDirTS = normalize( ase_viewVectorTS ); float2 OffsetPOM98 = POM( _HeightMap1, ( texCoord17 * _Tilling1 ), ddx( ( texCoord17 * _Tilling1 ) ), ddy( ( texCoord17 * _Tilling1 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset1 ) * temp_output_291_0 ), _PrlxRefPlane1, _HeightMap1_ST.xy, float2( 0, 0 ), 0 ); float lerpResult134 = lerp( 0.0 , break166.r , CalculateContrast(_BlendContrast,( _Height1 + tex2D( _HeightMap1, OffsetPOM98 ) )).r); float2 OffsetPOM115 = POM( _HeightMap2, ( texCoord17 * _Tilling2 ), ddx( ( texCoord17 * _Tilling2 ) ), ddy( ( texCoord17 * _Tilling2 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset2 ) * temp_output_291_0 ), _PrlxRefPlane2, _HeightMap2_ST.xy, float2( 0, 0 ), 0 ); float lerpResult135 = lerp( 0.0 , break166.g , CalculateContrast(_BlendContrast,( _Height2 + tex2D( _HeightMap2, OffsetPOM115 ) )).r); float2 OffsetPOM257 = POM( _HeightMap3, ( texCoord17 * _Tilling3 ), ddx( ( texCoord17 * _Tilling3 ) ), ddy( ( texCoord17 * _Tilling3 ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffset3 ) * temp_output_291_0 ), _PrlxRefPlane3, _HeightMap3_ST.xy, float2( 0, 0 ), 0 ); float lerpResult151 = lerp( 0.0 , break166.b , CalculateContrast(_BlendContrast,( _Height3 + tex2D( _HeightMap3, OffsetPOM257 ) )).r); float3 appendResult129 = (float3(lerpResult134 , lerpResult135 , lerpResult151)); float3 clampResult182 = clamp( appendResult129 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float3 temp_output_167_0 = ( appendResult169 + clampResult182 ); float3 clampResult190 = clamp( temp_output_167_0 , float3( 0,0,0 ) , float3( 1,1,1 ) ); float2 OffsetPOM261 = POM( _HeightMapBase, ( texCoord17 * _TillingBase ), ddx( ( texCoord17 * _TillingBase ) ), ddy( ( texCoord17 * _TillingBase ) ), NormalWS, ViewDirWS, ase_viewDirTS, 8, 16, 2, ( ( 0.001 * _ParalaxOffsetBase ) * temp_output_291_0 ), _PrlxRefPlaneBase, _HeightMapBase_ST.xy, float2( 0, 0 ), 0 ); float2 temp_output_262_0 = ( OffsetPOM261 * 1.0 ); float2 temp_output_239_0 = ( OffsetPOM98 * 1.0 ); float2 temp_output_243_0 = ( OffsetPOM115 * 1.0 ); float2 temp_output_246_0 = ( OffsetPOM257 * 1.0 ); float3 layeredBlendVar132 = clampResult190; float4 layeredBlend132 = ( lerp( lerp( lerp( ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_262_0,0.0 ) * _AlbedoColorBase ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_239_0,1.0 ) * _AlbedoColor1 ) , layeredBlendVar132.x ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_243_0,2.0 ) * _AlbedoColor2 ) , layeredBlendVar132.y ) , ( SAMPLE_TEXTURE2D_ARRAY( _AlbedoMapArray, sampler_AlbedoMapArray, temp_output_246_0,3.0 ) * _AlbedoColor3 ) , layeredBlendVar132.z ) ); float3 unpack13 = UnpackNormalScale( tex2D( _NormalMapBase, temp_output_262_0 ), _NormalMapDepthBase ); unpack13.z = lerp( 1, unpack13.z, saturate(_NormalMapDepthBase) ); float3 unpack111 = UnpackNormalScale( tex2D( _NormalMap1, temp_output_239_0 ), _NormalMapDepth1 ); unpack111.z = lerp( 1, unpack111.z, saturate(_NormalMapDepth1) ); float3 unpack171 = UnpackNormalScale( tex2D( _NormalMap2, temp_output_243_0 ), _NormalMapDepth2 ); unpack171.z = lerp( 1, unpack171.z, saturate(_NormalMapDepth2) ); float3 unpack172 = UnpackNormalScale( tex2D( _NormalMap3, temp_output_246_0 ), _NormalMapDepth3 ); unpack172.z = lerp( 1, unpack172.z, saturate(_NormalMapDepth3) ); float3 layeredBlendVar173 = temp_output_167_0; float3 layeredBlend173 = ( lerp( lerp( lerp( unpack13 , unpack111 , layeredBlendVar173.x ) , unpack171 , layeredBlendVar173.y ) , unpack172 , layeredBlendVar173.z ) ); float4 tex2DArrayNode253 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_262_0,0.0 ); float lerpResult223 = lerp( tex2DArrayNode253.r , 1.0 , _MetalicBrightnesBase); float4 tex2DArrayNode254 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_239_0,0.0 ); float lerpResult93 = lerp( tex2DArrayNode254.r , 1.0 , _MetalicBrightnes1); float4 tex2DArrayNode255 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_243_0,0.0 ); float lerpResult206 = lerp( tex2DArrayNode255.r , 1.0 , _MetalicBrightnes2); float4 tex2DArrayNode256 = SAMPLE_TEXTURE2D_ARRAY( _MetallicMapArray, sampler_MetallicMapArray, temp_output_246_0,0.0 ); float lerpResult214 = lerp( tex2DArrayNode256.r , 1.0 , _MetalicBrightnes3); float3 layeredBlendVar220 = temp_output_167_0; float layeredBlend220 = ( lerp( lerp( lerp( ( _MetallicBase * lerpResult223 ) , ( _Metallic1 * lerpResult93 ) , layeredBlendVar220.x ) , ( _Metallic2 * lerpResult206 ) , layeredBlendVar220.y ) , ( _Metallic3 * lerpResult214 ) , layeredBlendVar220.z ) ); float3 layeredBlendVar229 = temp_output_167_0; float layeredBlend229 = ( lerp( lerp( lerp( ( tex2DArrayNode253.a * _SmoothnessBase ) , ( tex2DArrayNode254.a * _Smoothness1 ) , layeredBlendVar229.x ) , ( tex2DArrayNode255.a * _Smoothness2 ) , layeredBlendVar229.y ) , ( tex2DArrayNode256.a * _Smoothness3 ) , layeredBlendVar229.z ) ); float clampResult251 = clamp( ( layeredBlend229 + 0.0 ) , 0.0 , 1.0 ); float3 BaseColor = layeredBlend132.rgb; float3 Normal = layeredBlend173; float3 Specular = 0.5; float Metallic = layeredBlend220; float Smoothness = clampResult251; float Occlusion = 1; float3 Emission = ( _EmissionColor * ( _EmissionMultiplayer * layeredBlend132 ) ).rgb; float Alpha = 1; float AlphaClipThreshold = 0.5; float AlphaClipThresholdShadow = 0.5; float3 BakedGI = 0; float3 RefractionColor = 1; float RefractionIndex = 1; float3 Transmission = 1; float3 Translucency = 1; #if defined( ASE_DEPTH_WRITE_ON ) float DeviceDepth = ClipPos.z; #endif #if defined( _ALPHATEST_ON ) AlphaDiscard( Alpha, AlphaClipThreshold ); #endif #if defined(MAIN_LIGHT_CALCULATE_SHADOWS) && defined(ASE_CHANGES_WORLD_POS) ShadowCoord = TransformWorldToShadowCoord( PositionWS ); #endif InputData inputData = (InputData)0; inputData.positionWS = PositionWS; inputData.positionCS = float4( input.positionCS.xy, ClipPos.zw / ClipPos.w ); inputData.normalizedScreenSpaceUV = ScreenPosNorm.xy; inputData.shadowCoord = ShadowCoord; #ifdef _NORMALMAP #if _NORMAL_DROPOFF_TS inputData.normalWS = TransformTangentToWorld(Normal, half3x3( TangentWS, BitangentWS, NormalWS )); #elif _NORMAL_DROPOFF_OS inputData.normalWS = TransformObjectToWorldNormal(Normal); #elif _NORMAL_DROPOFF_WS inputData.normalWS = Normal; #endif #else inputData.normalWS = NormalWS; #endif inputData.normalWS = NormalizeNormalPerPixel(inputData.normalWS); inputData.viewDirectionWS = SafeNormalize( ViewDirWS ); #ifdef ASE_FOG // @diogo: no fog applied in GBuffer #endif #ifdef _ADDITIONAL_LIGHTS_VERTEX inputData.vertexLighting = input.fogFactorAndVertexLight.yzw; #endif #if defined( ENABLE_TERRAIN_PERPIXEL_NORMAL ) float3 SH = SampleSH(inputData.normalWS.xyz); #else float3 SH = input.lightmapUVOrVertexSH.xyz; #endif #if defined(DYNAMICLIGHTMAP_ON) inputData.bakedGI = SAMPLE_GI(input.lightmapUVOrVertexSH.xy, input.dynamicLightmapUV.xy, SH, inputData.normalWS); #else inputData.bakedGI = SAMPLE_GI(input.lightmapUVOrVertexSH.xy, SH, inputData.normalWS); #endif #ifdef ASE_BAKEDGI inputData.bakedGI = BakedGI; #endif inputData.shadowMask = SAMPLE_SHADOWMASK(input.lightmapUVOrVertexSH.xy); #if defined(DEBUG_DISPLAY) #if defined(DYNAMICLIGHTMAP_ON) inputData.dynamicLightmapUV = input.dynamicLightmapUV.xy; #endif #if defined(LIGHTMAP_ON) inputData.staticLightmapUV = input.lightmapUVOrVertexSH.xy; #else inputData.vertexSH = SH; #endif #endif #ifdef _DBUFFER ApplyDecal(input.positionCS, BaseColor, Specular, inputData.normalWS, Metallic, Occlusion, Smoothness); #endif BRDFData brdfData; InitializeBRDFData(BaseColor, Metallic, Specular, Smoothness, Alpha, brdfData); Light mainLight = GetMainLight(inputData.shadowCoord, inputData.positionWS, inputData.shadowMask); half4 color; MixRealtimeAndBakedGI(mainLight, inputData.normalWS, inputData.bakedGI, inputData.shadowMask); color.rgb = GlobalIllumination(brdfData, inputData.bakedGI, Occlusion, inputData.positionWS, inputData.normalWS, inputData.viewDirectionWS); color.a = Alpha; #ifdef ASE_FINAL_COLOR_ALPHA_MULTIPLY color.rgb *= color.a; #endif #if defined( ASE_DEPTH_WRITE_ON ) outputDepth = DeviceDepth; #endif return BRDFDataToGbuffer(brdfData, inputData, Smoothness, Emission + color.rgb, Occlusion); } ENDHLSL } Pass { Name "SceneSelectionPass" Tags { "LightMode"="SceneSelectionPass" } Cull Off AlphaToMask Off HLSLPROGRAM #define ASE_GEOMETRY 1 #define _NORMAL_DROPOFF_TS 1 #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma multi_compile _ DOTS_INSTANCING_ON #pragma vertex vert #pragma fragment frag #if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE) #define _SPECULAR_COLOR 1 #endif #define SCENESELECTIONPASS 1 #define ATTRIBUTES_NEED_NORMAL #define ATTRIBUTES_NEED_TANGENT #define SHADERPASS SHADERPASS_DEPTHONLY #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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45) #define ASE_SV_DEPTH SV_DepthLessEqual #define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid #else #define ASE_SV_DEPTH SV_Depth #define ASE_SV_POSITION_QUALIFIERS #endif struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif struct SurfaceDescription { float Alpha; float AlphaClipThreshold; }; PackedVaryings VertexFunction(Attributes input ) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz ); output.positionCS = vertexInput.positionCS; output.positionWS = vertexInput.positionWS; return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif half4 frag( PackedVaryings input #if defined( ASE_DEPTH_WRITE_ON ) ,out float outputDepth : ASE_SV_DEPTH #endif ) : SV_Target { SurfaceDescription surfaceDescription = (SurfaceDescription)0; float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( PositionWS ); float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw ); float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w; surfaceDescription.Alpha = 1; surfaceDescription.AlphaClipThreshold = 0.5; #if defined( ASE_DEPTH_WRITE_ON ) float DeviceDepth = input.positionCS.z; #endif #if _ALPHATEST_ON float alphaClipThreshold = 0.01f; #if ALPHA_CLIP_THRESHOLD alphaClipThreshold = surfaceDescription.AlphaClipThreshold; #endif clip(surfaceDescription.Alpha - alphaClipThreshold); #endif #if defined( ASE_DEPTH_WRITE_ON ) outputDepth = DeviceDepth; #endif return half4( _ObjectId, _PassValue, 1.0, 1.0 ); } ENDHLSL } Pass { Name "ScenePickingPass" Tags { "LightMode"="Picking" } AlphaToMask Off HLSLPROGRAM #define ASE_GEOMETRY 1 #define _NORMAL_DROPOFF_TS 1 #define ASE_FOG 1 #pragma multi_compile_fragment _ DEBUG_DISPLAY #define _EMISSION #define _NORMALMAP 1 #define ASE_VERSION 19903 #define ASE_SRP_VERSION 120115 #pragma multi_compile _ DOTS_INSTANCING_ON #pragma vertex vert #pragma fragment frag #if defined(_SPECULAR_SETUP) && defined(ASE_LIGHTING_SIMPLE) #define _SPECULAR_COLOR 1 #endif #define SCENEPICKINGPASS 1 #define ATTRIBUTES_NEED_NORMAL #define ATTRIBUTES_NEED_TANGENT #define SHADERPASS SHADERPASS_DEPTHONLY #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 "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #include "Packages/com.unity.render-pipelines.universal/Editor/ShaderGraph/Includes/ShaderPass.hlsl" #if defined(ASE_EARLY_Z_DEPTH_OPTIMIZE) && (SHADER_TARGET >= 45) #define ASE_SV_DEPTH SV_DepthLessEqual #define ASE_SV_POSITION_QUALIFIERS linear noperspective centroid #else #define ASE_SV_DEPTH SV_Depth #define ASE_SV_POSITION_QUALIFIERS #endif struct Attributes { float4 positionOS : POSITION; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct PackedVaryings { ASE_SV_POSITION_QUALIFIERS float4 positionCS : SV_POSITION; float3 positionWS : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _AlbedoColorBase; float4 _AlbedoColor1; float4 _EmissionColor; float4 _HeightMapBase_ST; float4 _HeightMap3_ST; float4 _AlbedoColor2; float4 _HeightMap2_ST; float4 _AlbedoColor3; float4 _HeightMap1_ST; float _MetalicBrightnes2; float _Metallic2; float _MetalicBrightnes3; float _Metallic1; float _MetalicBrightnesBase; float _MetallicBase; float _SmoothnessBase; float _NormalMapDepth3; float _NormalMapDepth2; float _NormalMapDepth1; float _Smoothness1; float _Smoothness2; float _Smoothness3; float _Metallic3; float _MetalicBrightnes1; float _BlendContrast; float _PrlxRefPlaneBase; float _Height1; float _Tilling1; float _ParalaxOffset1; float _PrlxRefPlane1; float _Height2; float _Tilling2; float _NormalMapDepthBase; float _ParalaxOffset2; float _Height3; float _Tilling3; float _ParalaxOffset3; float _PrlxRefPlane3; float _TillingBase; float _ParalaxOffsetBase; float _PrlxRefPlane2; float _EmissionMultiplayer; #ifdef ASE_TRANSMISSION float _TransmissionShadow; #endif #ifdef ASE_TRANSLUCENCY float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef ASE_TESSELLATION float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END #ifdef SCENEPICKINGPASS float4 _SelectionID; #endif #ifdef SCENESELECTIONPASS int _ObjectId; int _PassValue; #endif struct SurfaceDescription { float Alpha; float AlphaClipThreshold; }; PackedVaryings VertexFunction( Attributes input ) { PackedVaryings output; ZERO_INITIALIZE(PackedVaryings, output); UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output); #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = input.positionOS.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS input.positionOS.xyz = vertexValue; #else input.positionOS.xyz += vertexValue; #endif input.normalOS = input.normalOS; VertexPositionInputs vertexInput = GetVertexPositionInputs( input.positionOS.xyz ); output.positionCS = vertexInput.positionCS; output.positionWS = vertexInput.positionWS; return output; } #if defined(ASE_TESSELLATION) struct VertexControl { float4 positionOS : INTERNALTESSPOS; half3 normalOS : NORMAL; half4 tangentOS : TANGENT; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( Attributes input ) { VertexControl output; UNITY_SETUP_INSTANCE_ID(input); UNITY_TRANSFER_INSTANCE_ID(input, output); output.positionOS = input.positionOS; output.normalOS = input.normalOS; output.tangentOS = input.tangentOS; return output; } TessellationFactors TessellationFunction (InputPatch input) { TessellationFactors output; float4 tf = 1; float tessValue = _TessValue; float tessMin = _TessMin; float tessMax = _TessMax; float edgeLength = _TessEdgeLength; float tessMaxDisp = _TessMaxDisp; #if defined(ASE_FIXED_TESSELLATION) tf = FixedTess( tessValue ); #elif defined(ASE_DISTANCE_TESSELLATION) tf = DistanceBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, tessValue, tessMin, tessMax, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(input[0].positionOS, input[1].positionOS, input[2].positionOS, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif output.edge[0] = tf.x; output.edge[1] = tf.y; output.edge[2] = tf.z; output.inside = tf.w; return output; } [domain("tri")] [partitioning("fractional_odd")] [outputtopology("triangle_cw")] [patchconstantfunc("TessellationFunction")] [outputcontrolpoints(3)] VertexControl HullFunction(InputPatch patch, uint id : SV_OutputControlPointID) { return patch[id]; } [domain("tri")] PackedVaryings DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { Attributes output = (Attributes) 0; output.positionOS = patch[0].positionOS * bary.x + patch[1].positionOS * bary.y + patch[2].positionOS * bary.z; output.normalOS = patch[0].normalOS * bary.x + patch[1].normalOS * bary.y + patch[2].normalOS * bary.z; output.tangentOS = patch[0].tangentOS * bary.x + patch[1].tangentOS * bary.y + patch[2].tangentOS * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = output.positionOS.xyz - patch[i].normalOS * (dot(output.positionOS.xyz, patch[i].normalOS) - dot(patch[i].positionOS.xyz, patch[i].normalOS)); float phongStrength = _TessPhongStrength; output.positionOS.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * output.positionOS.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], output); return VertexFunction(output); } #else PackedVaryings vert ( Attributes input ) { return VertexFunction( input ); } #endif half4 frag( PackedVaryings input #if defined( ASE_DEPTH_WRITE_ON ) ,out float outputDepth : ASE_SV_DEPTH #endif ) : SV_Target { SurfaceDescription surfaceDescription = (SurfaceDescription)0; float3 PositionWS = input.positionWS; float3 PositionRWS = GetCameraRelativePositionWS( PositionWS ); float4 ScreenPosNorm = float4( GetNormalizedScreenSpaceUV( input.positionCS ), input.positionCS.zw ); float4 ClipPos = ComputeClipSpacePosition( ScreenPosNorm.xy, input.positionCS.z ) * input.positionCS.w; surfaceDescription.Alpha = 1; surfaceDescription.AlphaClipThreshold = 0.5; #if defined( ASE_DEPTH_WRITE_ON ) float DeviceDepth = input.positionCS.z; #endif #if _ALPHATEST_ON float alphaClipThreshold = 0.01f; #if ALPHA_CLIP_THRESHOLD alphaClipThreshold = surfaceDescription.AlphaClipThreshold; #endif clip(surfaceDescription.Alpha - alphaClipThreshold); #endif #if defined( ASE_DEPTH_WRITE_ON ) outputDepth = DeviceDepth; #endif return _SelectionID; } ENDHLSL } } CustomEditor "UnityEditor.ShaderGraphLitGUI" FallBack "Hidden/Shader Graph/FallbackError" Fallback Off } /*ASEBEGIN Version=19903 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;290;-3883.459,290.1167;Float;False;Constant;_Float4;Float 4;48;0;Create;True;0;0;0;False;0;False;10.17;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.FresnelNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;288;-3547.828,221.1874;Inherit;False;Standard;WorldNormal;ViewDir;False;False;5;0;FLOAT3;0,0,1;False;4;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;1;False;3;FLOAT;5;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;282;-3670.607,90.60851;Float;False;Property;_ParalaxOffset3;ParalaxOffset3;36;0;Create;True;0;0;0;False;0;False;0.001;5.4;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;296;-3303.202,250.5947;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;279;-3656.308,-97.89147;Float;False;Property;_ParalaxOffset2;ParalaxOffset2;25;0;Create;True;0;0;0;False;0;False;0.001;58.53;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;64;-3714.573,-586.684;Float;False;Constant;_ParalaxDepthCorrection;ParalaxDepthCorrection;20;0;Create;True;0;0;0;False;0;False;0.001;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;276;-3642.007,-301.9914;Float;False;Property;_ParalaxOffset1;ParalaxOffset1;14;0;Create;True;0;0;0;False;0;False;0.001;38.29;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;277;-3398.801,-393.7146;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;280;-3413.102,-189.6146;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;283;-3427.401,-1.114647;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.OneMinusNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;291;-3271.738,151.3241;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;248;-2587.025,-227.9156;Float;False;Property;_Tilling2;Tilling2;30;0;Create;True;0;0;0;False;0;False;1;11.2;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;249;-2609.539,8.671144;Float;False;Property;_Tilling3;Tilling3;41;0;Create;True;0;0;0;False;0;False;1;26.22;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.TextureCoordinatesNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;17;-2904.818,-463.0872;Inherit;False;0;-1;2;3;2;SAMPLER2D;;False;0;FLOAT2;1,1;False;1;FLOAT2;0,0;False;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;241;-2586.618,-465.257;Float;False;Property;_Tilling1;Tilling1;19;0;Create;True;0;0;0;False;0;False;1;14.62;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;287;-2658.822,-110.0751;Float;False;Property;_PrlxRefPlane3;PrlxRefPlane3;37;0;Create;True;0;0;0;False;0;False;0.001;0.156;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;286;-2648.422,-333.6752;Float;False;Property;_PrlxRefPlane2;PrlxRefPlane2;26;0;Create;True;0;0;0;False;0;False;0.001;0.58;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;293;-3216.742,-213.7761;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;285;-2653.619,-574.1754;Float;False;Property;_PrlxRefPlane1;PrlxRefPlane1;15;0;Create;True;0;0;0;False;0;False;0.001;0;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;294;-3202.441,-417.8761;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.ViewDirInputsCoordNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;19;-2872.867,-294.6031;Float;False;Tangent;False;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;265;-2290.67,-249.8378;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;267;-2289.794,-458.0731;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;264;-2271.866,-10.85054;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;292;-3231.041,-25.27615;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.TexturePropertyNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;116;-3820.921,-1107.884;Float;True;Property;_HeightMap2;HeightMap2;24;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;False;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1 Node;AmplifyShaderEditor.TexturePropertyNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;143;-3771.311,-904.1208;Float;True;Property;_HeightMap3;HeightMap3;35;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;False;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1 Node;AmplifyShaderEditor.TexturePropertyNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;101;-3821.083,-1306.292;Float;True;Property;_HeightMap1;HeightMap1;13;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;False;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1 Node;AmplifyShaderEditor.ParallaxOcclusionMappingNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;98;-1910.503,-586.5798;Inherit;False;0;8;False;;16;False;;2;0.02;0.5;False;1,1;False;0,0;11;0;FLOAT2;0,0;False;1;SAMPLER2D;;False;7;SAMPLERSTATE;;False;2;FLOAT;0.02;False;3;FLOAT3;0,0,0;False;8;INT;0;False;9;INT;0;False;10;INT;0;False;4;FLOAT;0;False;5;FLOAT2;0,0;False;6;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.ParallaxOcclusionMappingNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;115;-1911.256,-364.6845;Inherit;False;0;8;False;;16;False;;2;0.02;0.5;False;1,1;False;0,0;11;0;FLOAT2;0,0;False;1;SAMPLER2D;;False;7;SAMPLERSTATE;;False;2;FLOAT;0.02;False;3;FLOAT3;0,0,0;False;8;INT;0;False;9;INT;0;False;10;INT;0;False;4;FLOAT;0;False;5;FLOAT2;0,0;False;6;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.ParallaxOcclusionMappingNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;257;-1907.035,-160.4962;Inherit;False;0;8;False;;16;False;;2;0.02;0.5;False;1,1;False;0,0;11;0;FLOAT2;0,0;False;1;SAMPLER2D;;False;7;SAMPLERSTATE;;False;2;FLOAT;0.02;False;3;FLOAT3;0,0,0;False;8;INT;0;False;9;INT;0;False;10;INT;0;False;4;FLOAT;0;False;5;FLOAT2;0,0;False;6;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.VertexColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;119;-3686.579,-2139.288;Inherit;False;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;148;-3400.677,-903.2667;Inherit;True;Property;_TextureSample5;Texture Sample 5;24;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;188;-3238.771,-1820.16;Float;False;Property;_Height2;Height2;27;0;Create;True;0;0;0;False;0;False;2;0.33;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;184;-3248.421,-1900.571;Float;False;Property;_Height1;Height1;16;0;Create;True;0;0;0;False;0;False;2;0.11;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;189;-3252.416,-1727.857;Float;False;Property;_Height3;Height3;38;0;Create;True;0;0;0;False;0;False;2;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;125;-3424.734,-1322.12;Inherit;True;Property;_TextureSample0;Texture Sample 0;24;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;126;-3403.787,-1101.359;Inherit;True;Property;_TextureSample2;Texture Sample 2;24;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.OneMinusNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;162;-3539.181,-1975.778;Inherit;False;1;0;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;193;-2809.38,-1240.837;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;191;-2811.471,-1410.145;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;137;-2896.634,-1857.936;Float;False;Property;_BlendContrast;BlendContrast;0;0;Create;True;0;0;0;False;0;False;1;16.74;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;192;-2826.104,-1623.347;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;161;-3243.217,-2160.498;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;164;-3346.034,-2329.627;Float;False;Constant;_Float1;Float 1;28;0;Create;True;0;0;0;False;0;False;2;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleContrastOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;159;-2496.419,-1600.617;Inherit;False;2;1;COLOR;0,0,0,0;False;0;FLOAT;0;False;1;COLOR;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;163;-3011.556,-2219.248;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;18;-3674.667,-506.7083;Float;False;Property;_ParalaxOffsetBase;ParalaxOffsetBase;4;0;Create;True;0;0;0;False;0;False;0.001;5.7;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleContrastOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;157;-2510.499,-1443.035;Inherit;False;2;1;COLOR;0,0,0,0;False;0;FLOAT;0;False;1;COLOR;0 Node;AmplifyShaderEditor.SimpleContrastOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;154;-2492.806,-1243.64;Inherit;False;2;1;COLOR;0,0,0,0;False;0;FLOAT;0;False;1;COLOR;0 Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;156;-2241.454,-1551.634;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;158;-2243.235,-1245.422;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;166;-2822.625,-2092.846;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;63;-3395.061,-598.4315;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;155;-2243.345,-1389.625;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;240;-2606.882,-681.7051;Float;False;Property;_TillingBase;TillingBase;8;0;Create;True;0;0;0;False;0;False;1;7.35;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;135;-1953.633,-1605.26;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;266;-2409.11,-742.2209;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;134;-1957.491,-1770.829;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;295;-3198.701,-622.593;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;151;-1934.993,-1458.566;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;284;-2687.422,-802.975;Float;False;Property;_PrlxRefPlaneBase;PrlxRefPlaneBase;5;0;Create;True;0;0;0;False;0;False;0.001;1;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;178;-2453.984,-2526.425;Inherit;False;3;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;1,1,1,0;False;1;COLOR;0 Node;AmplifyShaderEditor.TexturePropertyNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;259;-3801.562,-1540.83;Float;True;Property;_HeightMapBase;HeightMapBase;3;0;Create;True;0;0;0;False;0;False;None;None;False;white;Auto;Texture2D;False;-1;0;2;SAMPLER2D;0;SAMPLERSTATE;1 Node;AmplifyShaderEditor.BreakToComponentsNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;170;-2274.408,-2397.194;Inherit;False;COLOR;1;0;COLOR;0,0,0,0;False;16;FLOAT;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT;5;FLOAT;6;FLOAT;7;FLOAT;8;FLOAT;9;FLOAT;10;FLOAT;11;FLOAT;12;FLOAT;13;FLOAT;14;FLOAT;15 Node;AmplifyShaderEditor.DynamicAppendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;129;-1687.052,-1625.119;Inherit;False;FLOAT3;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT3;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;271;-1754.847,-1135.221;Float;False;Constant;_Float3;Float 3;38;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.ParallaxOcclusionMappingNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;261;-1917.706,-806.939;Inherit;False;0;8;False;;16;False;;2;0.02;0.5;False;1,1;False;0,0;11;0;FLOAT2;0,0;False;1;SAMPLER2D;;False;7;SAMPLERSTATE;;False;2;FLOAT;0.02;False;3;FLOAT3;0,0,0;False;8;INT;0;False;9;INT;0;False;10;INT;0;False;4;FLOAT;0;False;5;FLOAT2;0,0;False;6;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;237;-907.7741,-1502.912;Float;False;Constant;_AlbedoIndex3;AlbedoIndex3;37;0;Create;True;0;0;0;False;0;False;3;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;233;-924.3703,-2348.929;Float;False;Constant;_AlbedoIndex1;AlbedoIndex1;37;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;243;-1488.848,-361.5107;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;231;-967.8638,-2759.419;Float;False;Constant;_AlbedoIndex;AlbedoIndex;37;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;182;-1526.307,-1881.479;Inherit;False;3;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;1,1,1;False;1;FLOAT3;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;246;-1470.045,-122.5234;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;235;-909.506,-1873.41;Float;False;Constant;_AlbedoIndex2;AlbedoIndex2;37;0;Create;True;0;0;0;False;0;False;2;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.DynamicAppendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;169;-1987.758,-2365.499;Inherit;False;FLOAT3;4;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT3;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;262;-1495.174,-790.105;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;239;-1487.972,-569.7458;Inherit;False;2;2;0;FLOAT2;0,0;False;1;FLOAT;0;False;1;FLOAT2;0 Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;106;-650.8668,-2173.823;Float;False;Property;_AlbedoColor1;AlbedoColor1;20;0;Create;True;0;0;0;False;0;False;1,1,1,1;1,1,1,1;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;145;-678.6395,-1315.097;Float;False;Property;_AlbedoColor3;AlbedoColor3;42;0;Create;True;0;0;0;False;0;False;1,1,1,1;0.6981132,0.6981132,0.6981132,0;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;4;-669.6706,-2605.136;Float;False;Property;_AlbedoColorBase;AlbedoColorBase;9;0;Create;True;0;0;0;False;0;False;1,1,1,1;1,1,1,1;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;253;-1037.801,148.1044;Inherit;True;Property;_MetallicMapArray;MetallicMapArray;2;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;232;-746.82,-2395.449;Inherit;True;Property;_TextureArray0;Texture Array 0;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;230;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;167;-1368.372,-2197.729;Inherit;False;2;2;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;1;FLOAT3;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;236;-719.7493,-1549.432;Inherit;True;Property;_TextureArray2;Texture Array 2;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;230;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;256;-1015.624,1277.151;Inherit;True;Property;_TextureArray5;Texture Array 5;2;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;253;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;230;-740.726,-2825.902;Inherit;True;Property;_AlbedoMapArray;AlbedoMapArray;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;254;-1042.824,536.3504;Inherit;True;Property;_TextureArray3;Texture Array 3;2;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;253;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;9;-625.6056,684.0491;Float;False;Property;_Smoothness1;Smoothness1;21;0;Create;True;0;0;0;False;0;False;1;0.32;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;215;-600.5758,1434.315;Float;False;Property;_Smoothness3;Smoothness3;43;0;Create;True;0;0;0;False;0;False;1;0.4;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;227;-636.3124,304.4656;Float;False;Property;_SmoothnessBase;SmoothnessBase;10;0;Create;True;0;0;0;False;0;False;1;0.25;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;255;-1028.425,904.3506;Inherit;True;Property;_TextureArray4;Texture Array 4;2;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;253;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;207;-614.1426,1056.536;Float;False;Property;_Smoothness2;Smoothness2;32;0;Create;True;0;0;0;False;0;False;1;0.3;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;234;-721.6922,-1952.12;Inherit;True;Property;_TextureArray1;Texture Array 1;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Instance;230;Auto;Texture2DArray;False;8;0;SAMPLER2DARRAY;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;141;-645.0353,-1742.706;Float;False;Property;_AlbedoColor2;AlbedoColor2;31;0;Create;True;0;0;0;False;0;False;1,1,1,1;1,1,1,0;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;225;-894.4614,-17.24541;Float;False;Constant;_Float2;Float 2;21;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;144;-373.828,-1417.128;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;190;-379.5413,-2045.497;Inherit;False;3;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;1,1,1;False;1;FLOAT3;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;142;-372.7155,-1838.764;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;109;-379.1516,-2585.914;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;210;-998.0695,820.6123;Float;False;Property;_MetalicBrightnes2;MetalicBrightnes2;34;0;Create;True;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;108;-378.5469,-2269.882;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;95;-1015.933,452.9251;Float;False;Property;_MetalicBrightnes1;MetalicBrightnes1;23;0;Create;True;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;205;-391.1477,995.8464;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;211;-895.3912,740.3919;Float;False;Constant;_Float5;Float 5;21;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;219;-888.2244,1112.971;Float;False;Constant;_Float9;Float 9;21;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;97;-891.7546,365.5381;Float;False;Constant;_Float0;Float 0;21;0;Create;True;0;0;0;False;0;False;1;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;10;-409.0113,628.1591;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;228;-1018.639,70.14155;Float;False;Property;_MetalicBrightnesBase;MetalicBrightnesBase;12;0;Create;True;0;0;0;False;0;False;0;0.64;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;213;-383.9808,1368.425;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;218;-990.9027,1193.192;Float;False;Property;_MetalicBrightnes3;MetalicBrightnes3;45;0;Create;True;0;0;0;False;0;False;0;0;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;222;-411.7178,245.3755;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;274;-1242.925,-529.4929;Float;False;Property;_NormalMapDepth3;NormalMapDepth3;40;0;Create;True;0;0;0;False;0;False;1;1.34;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;66;-1259.126,-871.1492;Float;False;Property;_NormalMapDepthBase;NormalMapDepthBase;7;0;Create;True;0;0;0;False;0;False;1;0.64;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;229;-83.37372,172.9181;Inherit;False;6;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;COLOR;0,0,0,0;False;1;FLOAT;0 Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;214;-593.7981,1239.483;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;132;-66.76407,-1565.721;Inherit;False;6;0;FLOAT3;0,0,0;False;1;COLOR;0,0,0,0;False;2;COLOR;0,0,0,0;False;3;COLOR;0,0,0,0;False;4;COLOR;0,0,0,0;False;5;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;38;-8.835178,-1128.632;Float;False;Property;_EmissionMultiplayer;EmissionMultiplayer;47;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;226;-630.488,29.36113;Float;False;Property;_MetallicBase;MetallicBase;11;0;Create;True;0;0;0;False;0;False;1;0.03;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;8;-627.7811,412.1447;Float;False;Property;_Metallic1;Metallic1;22;0;Create;True;0;0;0;False;0;False;1;0.57;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;272;-1264.925,-767.4929;Float;False;Property;_NormalMapDepth1;NormalMapDepth1;18;0;Create;True;0;0;0;False;0;False;1;1.03;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;93;-618.8279,499.2162;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;252;219.8878,198.5585;Float;False;Constant;_SmothnessAdd;SmothnessAdd;41;0;Create;True;0;0;0;False;0;False;0;0;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;273;-1242.925,-635.4929;Float;False;Property;_NormalMapDepth2;NormalMapDepth2;29;0;Create;True;0;0;0;False;0;False;1;0.52;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;223;-619.2131,124.5581;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.LerpOp, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;206;-600.965,866.9034;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;216;-602.7513,1152.411;Float;False;Property;_Metallic3;Metallic3;44;0;Create;True;0;0;0;False;0;False;1;0.57;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;208;-609.9181,779.8319;Float;False;Property;_Metallic2;Metallic2;33;0;Create;True;0;0;0;False;0;False;1;0.57;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;111;-984.6247,-700.4472;Inherit;True;Property;_NormalMap1;NormalMap1;17;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;7;-410.0048,508.3086;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;13;-983.2156,-911.5417;Inherit;True;Property;_NormalMapBase;NormalMapBase;6;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;bump;Auto;True;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;39;303.1523,-1129.245;Inherit;False;2;2;0;FLOAT;0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.SimpleAddOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;250;487.9043,19.18243;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.ColorNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;36;354.2496,-1332.35;Float;False;Property;_EmissionColor;EmissionColor;46;0;Create;True;0;0;0;False;0;False;0,0,0,0;0,0,0,0;False;True;0;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;204;-390.0013,867.4355;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;171;-981.0021,-492.7853;Inherit;True;Property;_NormalMap2;NormalMap2;28;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;221;-422.3225,124.3643;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;212;-384.9745,1248.575;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;172;-981.0021,-272.2191;Inherit;True;Property;_NormalMap3;NormalMap3;39;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;True;bump;Auto;True;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.SimpleContrastOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;177;-2743.4,-2513.37;Inherit;False;2;1;COLOR;0,0,0,0;False;0;FLOAT;0;False;1;COLOR;0 Node;AmplifyShaderEditor.SamplerNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;260;-3435.785,-1539.762;Inherit;True;Property;_TextureSample1;Texture Sample 1;24;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;False;8;0;SAMPLER2D;;False;1;FLOAT2;0,0;False;2;FLOAT;0;False;3;FLOAT2;0,0;False;4;FLOAT2;0,0;False;5;FLOAT;1;False;6;FLOAT;0;False;7;SAMPLERSTATE;;False;6;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4;FLOAT3;5 Node;AmplifyShaderEditor.ClampOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;251;720.2132,-108.4211;Inherit;False;3;0;FLOAT;0;False;1;FLOAT;0;False;2;FLOAT;1;False;1;FLOAT;0 Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;220;-131.8263,-188.9172;Inherit;False;6;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;4;FLOAT;0;False;5;COLOR;0,0,0,0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;37;415.4357,-928.699;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.LayeredBlendNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;173;-242.616,-777.1154;Inherit;False;6;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;3;FLOAT3;0,0,0;False;4;FLOAT3;0,0,0;False;5;COLOR;0,0,0,0;False;1;FLOAT3;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;297;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;ExtraPrePass;0;0;ExtraPrePass;6;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;0;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;298;1031.295,-535.8076;Float;False;True;-1;3;UnityEditor.ShaderGraphLitGUI;0;12;ASE/ASE_StandartBlend;94348b07e5e8bab40bd6c8a1e3df54cd;True;Forward;0;1;Forward;21;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;1;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=UniversalForward;False;False;0;;0;0;Standard;47;Category;0;0; Instanced Terrain Normals;1;0;Lighting Model;0;0;Workflow;1;0;Surface;0;0; Refraction Model;0;0; Blend;0;0;Two Sided;1;0;Alpha Clipping;1;0; Use Shadow Threshold;0;0;Fragment Normal Space,InvertActionOnDeselection;0;0;Forward Only;0;0;Transmission;0;0; Transmission Shadow;0.5,False,;0;Translucency;0;0; Translucency Strength;1,False,;0; Normal Distortion;0.5,False,;0; Scattering;2,False,;0; Direct;0.9,False,;0; Ambient;0.1,False,;0; Shadow;0.5,False,;0;Cast Shadows;1;0;Receive Shadows;2;0;Specular Highlights;2;0;Environment Reflections;2;0;Receive SSAO;1;0;GPU Instancing;1;0;LOD CrossFade;1;0;Built-in Fog;1;0;_FinalColorxAlpha;0;0;Meta Pass;1;0;Override Baked GI;0;0;Extra Pre Pass;0;0;Tessellation;0;0; Phong;0;0; Strength;0.5,False,;0; Type;0;0; Tess;16,False,;0; Min;10,False,;0; Max;25,False,;0; Edge Length;16,False,;0; Max Displacement;25,False,;0;Write Depth;0;0; Early Z;0;0;Vertex Position,InvertActionOnDeselection;1;0;Debug Display;1;0;Clear Coat;0;0;0;10;False;True;True;True;True;True;True;True;True;True;False;;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;299;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;ShadowCaster;0;2;ShadowCaster;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=ShadowCaster;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;300;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;DepthOnly;0;3;DepthOnly;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;True;False;False;False;False;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;False;False;True;1;LightMode=DepthOnly;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;301;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;Meta;0;4;Meta;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Meta;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;302;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;Universal2D;0;5;Universal2D;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;1;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=Universal2D;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;303;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;DepthNormals;0;6;DepthNormals;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;0;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;;True;3;False;;False;True;1;LightMode=DepthNormals;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;304;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;GBuffer;0;7;GBuffer;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;True;1;1;False;;0;False;;1;1;False;;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;True;True;True;True;0;False;;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;1;LightMode=UniversalGBuffer;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;305;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;SceneSelectionPass;0;8;SceneSelectionPass;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;2;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=SceneSelectionPass;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode, AmplifyShaderEditor, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null;306;1031.295,-535.8076;Float;False;False;-1;3;UnityEditor.ShaderGraphLitGUI;0;1;New Amplify Shader;94348b07e5e8bab40bd6c8a1e3df54cd;True;ScenePickingPass;0;9;ScenePickingPass;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;True;0;False;;False;False;False;False;False;False;False;False;False;True;False;0;False;;255;False;;255;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;0;False;;False;True;1;False;;True;3;False;;True;True;0;False;;0;False;;True;4;RenderPipeline=UniversalPipeline;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;UniversalMaterialType=Lit;True;5;True;12;all;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Picking;False;False;0;;0;0;Standard;0;False;0 WireConnection;288;3;290;0 WireConnection;296;0;288;0 WireConnection;277;0;64;0 WireConnection;277;1;276;0 WireConnection;280;0;64;0 WireConnection;280;1;279;0 WireConnection;283;0;64;0 WireConnection;283;1;282;0 WireConnection;291;0;296;0 WireConnection;293;0;280;0 WireConnection;293;1;291;0 WireConnection;294;0;277;0 WireConnection;294;1;291;0 WireConnection;265;0;17;0 WireConnection;265;1;248;0 WireConnection;267;0;17;0 WireConnection;267;1;241;0 WireConnection;264;0;17;0 WireConnection;264;1;249;0 WireConnection;292;0;283;0 WireConnection;292;1;291;0 WireConnection;98;0;267;0 WireConnection;98;1;101;0 WireConnection;98;2;294;0 WireConnection;98;3;19;0 WireConnection;98;4;285;0 WireConnection;115;0;265;0 WireConnection;115;1;116;0 WireConnection;115;2;293;0 WireConnection;115;3;19;0 WireConnection;115;4;286;0 WireConnection;257;0;264;0 WireConnection;257;1;143;0 WireConnection;257;2;292;0 WireConnection;257;3;19;0 WireConnection;257;4;287;0 WireConnection;148;0;143;0 WireConnection;148;1;257;0 WireConnection;125;0;101;0 WireConnection;125;1;98;0 WireConnection;126;0;116;0 WireConnection;126;1;115;0 WireConnection;162;0;119;0 WireConnection;193;0;189;0 WireConnection;193;1;148;0 WireConnection;191;0;188;0 WireConnection;191;1;126;0 WireConnection;192;0;184;0 WireConnection;192;1;125;0 WireConnection;161;0;162;0 WireConnection;161;1;119;0 WireConnection;159;1;192;0 WireConnection;159;0;137;0 WireConnection;163;0;164;0 WireConnection;163;1;161;0 WireConnection;157;1;191;0 WireConnection;157;0;137;0 WireConnection;154;1;193;0 WireConnection;154;0;137;0 WireConnection;156;0;159;0 WireConnection;158;0;154;0 WireConnection;166;0;163;0 WireConnection;63;0;64;0 WireConnection;63;1;18;0 WireConnection;155;0;157;0 WireConnection;135;1;166;1 WireConnection;135;2;155;0 WireConnection;266;0;17;0 WireConnection;266;1;240;0 WireConnection;134;1;166;0 WireConnection;134;2;156;0 WireConnection;295;0;63;0 WireConnection;295;1;291;0 WireConnection;151;1;166;2 WireConnection;151;2;158;0 WireConnection;178;0;119;0 WireConnection;170;0;178;0 WireConnection;129;0;134;0 WireConnection;129;1;135;0 WireConnection;129;2;151;0 WireConnection;261;0;266;0 WireConnection;261;1;259;0 WireConnection;261;2;295;0 WireConnection;261;3;19;0 WireConnection;261;4;284;0 WireConnection;243;0;115;0 WireConnection;243;1;271;0 WireConnection;182;0;129;0 WireConnection;246;0;257;0 WireConnection;246;1;271;0 WireConnection;169;0;170;0 WireConnection;169;1;170;1 WireConnection;169;2;170;2 WireConnection;262;0;261;0 WireConnection;262;1;271;0 WireConnection;239;0;98;0 WireConnection;239;1;271;0 WireConnection;253;1;262;0 WireConnection;232;1;239;0 WireConnection;232;6;233;0 WireConnection;167;0;169;0 WireConnection;167;1;182;0 WireConnection;236;1;246;0 WireConnection;236;6;237;0 WireConnection;256;1;246;0 WireConnection;230;1;262;0 WireConnection;230;6;231;0 WireConnection;254;1;239;0 WireConnection;255;1;243;0 WireConnection;234;1;243;0 WireConnection;234;6;235;0 WireConnection;144;0;236;0 WireConnection;144;1;145;0 WireConnection;190;0;167;0 WireConnection;142;0;234;0 WireConnection;142;1;141;0 WireConnection;109;0;230;0 WireConnection;109;1;4;0 WireConnection;108;0;232;0 WireConnection;108;1;106;0 WireConnection;205;0;255;4 WireConnection;205;1;207;0 WireConnection;10;0;254;4 WireConnection;10;1;9;0 WireConnection;213;0;256;4 WireConnection;213;1;215;0 WireConnection;222;0;253;4 WireConnection;222;1;227;0 WireConnection;229;0;167;0 WireConnection;229;1;222;0 WireConnection;229;2;10;0 WireConnection;229;3;205;0 WireConnection;229;4;213;0 WireConnection;214;0;256;1 WireConnection;214;1;219;0 WireConnection;214;2;218;0 WireConnection;132;0;190;0 WireConnection;132;1;109;0 WireConnection;132;2;108;0 WireConnection;132;3;142;0 WireConnection;132;4;144;0 WireConnection;93;0;254;1 WireConnection;93;1;97;0 WireConnection;93;2;95;0 WireConnection;223;0;253;1 WireConnection;223;1;225;0 WireConnection;223;2;228;0 WireConnection;206;0;255;1 WireConnection;206;1;211;0 WireConnection;206;2;210;0 WireConnection;111;1;239;0 WireConnection;111;5;272;0 WireConnection;7;0;8;0 WireConnection;7;1;93;0 WireConnection;13;1;262;0 WireConnection;13;5;66;0 WireConnection;39;0;38;0 WireConnection;39;1;132;0 WireConnection;250;0;229;0 WireConnection;250;1;252;0 WireConnection;204;0;208;0 WireConnection;204;1;206;0 WireConnection;171;1;243;0 WireConnection;171;5;273;0 WireConnection;221;0;226;0 WireConnection;221;1;223;0 WireConnection;212;0;216;0 WireConnection;212;1;214;0 WireConnection;172;1;246;0 WireConnection;172;5;274;0 WireConnection;177;1;119;0 WireConnection;177;0;137;0 WireConnection;260;0;259;0 WireConnection;260;1;261;0 WireConnection;251;0;250;0 WireConnection;220;0;167;0 WireConnection;220;1;221;0 WireConnection;220;2;7;0 WireConnection;220;3;204;0 WireConnection;220;4;212;0 WireConnection;37;0;36;0 WireConnection;37;1;39;0 WireConnection;173;0;167;0 WireConnection;173;1;13;0 WireConnection;173;2;111;0 WireConnection;173;3;171;0 WireConnection;173;4;172;0 WireConnection;298;0;132;0 WireConnection;298;1;173;0 WireConnection;298;3;220;0 WireConnection;298;4;251;0 WireConnection;298;2;37;0 ASEEND*/ //CHKSM=423131E082840A30AA4536489C82E258900E1E8F