// Made with Amplify Shader Editor // Available at the Unity Asset Store - http://u3d.as/y3X Shader "PBR Alpha material" { Properties { _Tex_D("Tex_D", 2D) = "white" {} _MainCol("MainCol", Color) = (1,1,1,0) _Tex_alpha("Tex_alpha", 2D) = "white" {} [Toggle]_TexAlphaorAlphaMask("TexAlpha or AlphaMask", Float) = 0 _Tex_MRao("Tex_M&R&ao", 2D) = "white" {} _Int_M("Int_M", Range( 0 , 1)) = 1 _Int_R("Int_R", Range( 0 , 1)) = 1 _Int_ao("Int_ao", Range( 0 , 2)) = 1 _Tex_N1("Tex_N1", 2D) = "bump" {} _Int_N1("Int_N1", Range( 0 , 3)) = 1 _Tex_N2("Tex_N2", 2D) = "bump" {} _Int_N2("Int_N2", Range( 0 , 3)) = 1 _Tex_E("Tex_E", 2D) = "black" {} [HDR]_Int_E("Int_E", Color) = (0,0,0,0) [HideInInspector] _texcoord( "", 2D ) = "white" {} //_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 //[ToggleOff] _SpecularHighlights("Specular Highlights", Float) = 1.0 //[ToggleOff] _GlossyReflections("Reflections", Float) = 1.0 } SubShader { Tags { "RenderType"="Transparent" "Queue"="Transparent" "DisableBatching"="False" } LOD 0 Cull Back AlphaToMask Off ZWrite Off ZTest LEqual ColorMask RGBA Blend Off CGINCLUDE #pragma target 3.0 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; } ENDCG Pass { Name "ForwardBase" Tags { "LightMode"="ForwardBase" } Blend SrcAlpha OneMinusSrcAlpha CGPROGRAM #define ASE_NEEDS_FRAG_SHADOWCOORDS #pragma multi_compile_instancing #pragma multi_compile __ LOD_FADE_CROSSFADE #pragma multi_compile_fog #define ASE_FOG 1 #define _ALPHABLEND_ON 1 #define UNITY_STANDARD_USE_DITHER_MASK 1 #pragma vertex vert #pragma fragment frag #pragma multi_compile_fwdbase #ifndef UNITY_PASS_FORWARDBASE #define UNITY_PASS_FORWARDBASE #endif #include "HLSLSupport.cginc" #ifndef UNITY_INSTANCED_LOD_FADE #define UNITY_INSTANCED_LOD_FADE #endif #ifndef UNITY_INSTANCED_SH #define UNITY_INSTANCED_SH #endif #ifndef UNITY_INSTANCED_LIGHTMAPSTS #define UNITY_INSTANCED_LIGHTMAPSTS #endif #include "UnityShaderVariables.cginc" #include "UnityCG.cginc" #include "Lighting.cginc" #include "UnityPBSLighting.cginc" #include "AutoLight.cginc" #include "UnityStandardUtils.cginc" struct appdata { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { #if UNITY_VERSION >= 201810 UNITY_POSITION(pos); #else float4 pos : SV_POSITION; #endif #if defined(LIGHTMAP_ON) || (!defined(LIGHTMAP_ON) && SHADER_TARGET >= 30) float4 lmap : TEXCOORD0; #endif #if !defined(LIGHTMAP_ON) && UNITY_SHOULD_SAMPLE_SH half3 sh : TEXCOORD1; #endif #if defined(UNITY_HALF_PRECISION_FRAGMENT_SHADER_REGISTERS) && UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) UNITY_LIGHTING_COORDS(2,3) #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS) #if UNITY_VERSION >= 201710 UNITY_SHADOW_COORDS(2) #else SHADOW_COORDS(2) #endif #endif #ifdef ASE_FOG UNITY_FOG_COORDS(4) #endif float4 tSpace0 : TEXCOORD5; float4 tSpace1 : TEXCOORD6; float4 tSpace2 : TEXCOORD7; #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) float4 screenPos : TEXCOORD8; #endif float4 ase_texcoord9 : TEXCOORD9; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; #ifdef _TRANSMISSION_ASE float _TransmissionShadow; #endif #ifdef _TRANSLUCENCY_ASE float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif uniform sampler2D _Tex_D; uniform float4 _Tex_D_ST; uniform float4 _MainCol; uniform sampler2D _Tex_N1; uniform float4 _Tex_N1_ST; uniform float _Int_N1; uniform sampler2D _Tex_N2; uniform float4 _Tex_N2_ST; uniform float _Int_N2; uniform sampler2D _Tex_E; uniform float4 _Tex_E_ST; uniform float4 _Int_E; uniform sampler2D _Tex_MRao; uniform float4 _Tex_MRao_ST; uniform float _Int_M; uniform float _Int_R; uniform float _Int_ao; uniform float _TexAlphaorAlphaMask; uniform sampler2D _Tex_alpha; uniform float4 _Tex_alpha_ST; v2f VertexFunction (appdata v ) { UNITY_SETUP_INSTANCE_ID(v); v2f o; UNITY_INITIALIZE_OUTPUT(v2f,o); UNITY_TRANSFER_INSTANCE_ID(v,o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); o.ase_texcoord9.xy = v.ase_texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings o.ase_texcoord9.zw = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = v.vertex.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS v.vertex.xyz = vertexValue; #else v.vertex.xyz += vertexValue; #endif v.vertex.w = 1; v.normal = v.normal; v.tangent = v.tangent; o.pos = UnityObjectToClipPos(v.vertex); float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w; fixed3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign; o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x); o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y); o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z); #ifdef DYNAMICLIGHTMAP_ON o.lmap.zw = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; #endif #ifdef LIGHTMAP_ON o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; #endif #ifndef LIGHTMAP_ON #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL o.sh = 0; #ifdef VERTEXLIGHT_ON o.sh += Shade4PointLights ( unity_4LightPosX0, unity_4LightPosY0, unity_4LightPosZ0, unity_LightColor[0].rgb, unity_LightColor[1].rgb, unity_LightColor[2].rgb, unity_LightColor[3].rgb, unity_4LightAtten0, worldPos, worldNormal); #endif o.sh = ShadeSHPerVertex (worldNormal, o.sh); #endif #endif #if UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) UNITY_TRANSFER_LIGHTING(o, v.texcoord1.xy); #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS) #if UNITY_VERSION >= 201710 UNITY_TRANSFER_SHADOW(o, v.texcoord1.xy); #else TRANSFER_SHADOW(o); #endif #endif #ifdef ASE_FOG UNITY_TRANSFER_FOG(o,o.pos); #endif #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) o.screenPos = ComputeScreenPos(o.pos); #endif return o; } #if defined(TESSELLATION_ON) struct VertexControl { float4 vertex : INTERNALTESSPOS; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( appdata v ) { VertexControl o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = v.vertex; o.tangent = v.tangent; o.normal = v.normal; o.texcoord1 = v.texcoord1; o.texcoord2 = v.texcoord2; o.ase_texcoord = v.ase_texcoord; return o; } TessellationFactors TessellationFunction (InputPatch v) { TessellationFactors o; 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(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; return o; } [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")] v2f DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { appdata o = (appdata) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z; o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z; o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z; o.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] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal)); float phongStrength = _TessPhongStrength; o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], o); return VertexFunction(o); } #else v2f vert ( appdata v ) { return VertexFunction( v ); } #endif fixed4 frag (v2f IN #ifdef _DEPTHOFFSET_ON , out float outputDepth : SV_Depth #endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID(IN); #ifdef LOD_FADE_CROSSFADE UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy); #endif #if defined(_SPECULAR_SETUP) SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0; #else SurfaceOutputStandard o = (SurfaceOutputStandard)0; #endif float3 WorldTangent = float3(IN.tSpace0.x,IN.tSpace1.x,IN.tSpace2.x); float3 WorldBiTangent = float3(IN.tSpace0.y,IN.tSpace1.y,IN.tSpace2.y); float3 WorldNormal = float3(IN.tSpace0.z,IN.tSpace1.z,IN.tSpace2.z); float3 worldPos = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w); float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) UNITY_LIGHT_ATTENUATION(atten, IN, worldPos) #else half atten = 1; #endif #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) float4 ScreenPos = IN.screenPos; #endif float2 uv_Tex_D = IN.ase_texcoord9.xy * _Tex_D_ST.xy + _Tex_D_ST.zw; float4 tex2DNode1 = tex2D( _Tex_D, uv_Tex_D ); float4 BaseTex24 = ( tex2DNode1 * _MainCol ); float2 uv_Tex_N1 = IN.ase_texcoord9.xy * _Tex_N1_ST.xy + _Tex_N1_ST.zw; float3 tex2DNode2 = UnpackNormal( tex2D( _Tex_N1, uv_Tex_N1 ) ); float3 appendResult19 = (float3(( tex2DNode2.r * _Int_N1 ) , ( tex2DNode2.g * _Int_N1 ) , tex2DNode2.b)); float2 uv_Tex_N2 = IN.ase_texcoord9.xy * _Tex_N2_ST.xy + _Tex_N2_ST.zw; float3 tex2DNode3 = UnpackNormal( tex2D( _Tex_N2, uv_Tex_N2 ) ); float3 appendResult47 = (float3(( tex2DNode3.r * _Int_N2 ) , ( tex2DNode3.g * _Int_N2 ) , tex2DNode3.b)); float3 Normal22 = BlendNormals( appendResult19 , appendResult47 ); float2 uv_Tex_E = IN.ase_texcoord9.xy * _Tex_E_ST.xy + _Tex_E_ST.zw; float4 Emission41 = ( tex2D( _Tex_E, uv_Tex_E ) * _Int_E ); float2 uv_Tex_MRao = IN.ase_texcoord9.xy * _Tex_MRao_ST.xy + _Tex_MRao_ST.zw; float4 tex2DNode4 = tex2D( _Tex_MRao, uv_Tex_MRao ); float Metalness28 = ( tex2DNode4.r * _Int_M ); float Smoothness29 = ( ( 1.0 - tex2DNode4.g ) * _Int_R ); float AmbientOcclusion30 = ( tex2DNode4.b * _Int_ao ); float2 uv_Tex_alpha = IN.ase_texcoord9.xy * _Tex_alpha_ST.xy + _Tex_alpha_ST.zw; float AlphaMask64 = (( _TexAlphaorAlphaMask )?( tex2D( _Tex_alpha, uv_Tex_alpha ).r ):( tex2DNode1.a )); o.Albedo = BaseTex24.rgb; o.Normal = Normal22; o.Emission = Emission41.rgb; #if defined(_SPECULAR_SETUP) o.Specular = fixed3( 0, 0, 0 ); #else o.Metallic = Metalness28; #endif o.Smoothness = Smoothness29; o.Occlusion = AmbientOcclusion30; o.Alpha = AlphaMask64; float AlphaClipThreshold = 0.5; float AlphaClipThresholdShadow = 0.5; float3 BakedGI = 0; float3 RefractionColor = 1; float RefractionIndex = 1; float3 Transmission = 1; float3 Translucency = 1; #ifdef _ALPHATEST_ON clip( o.Alpha - AlphaClipThreshold ); #endif #ifdef _DEPTHOFFSET_ON outputDepth = IN.pos.z; #endif #ifndef USING_DIRECTIONAL_LIGHT fixed3 lightDir = normalize(UnityWorldSpaceLightDir(worldPos)); #else fixed3 lightDir = _WorldSpaceLightPos0.xyz; #endif fixed4 c = 0; float3 worldN; worldN.x = dot(IN.tSpace0.xyz, o.Normal); worldN.y = dot(IN.tSpace1.xyz, o.Normal); worldN.z = dot(IN.tSpace2.xyz, o.Normal); worldN = normalize(worldN); o.Normal = worldN; UnityGI gi; UNITY_INITIALIZE_OUTPUT(UnityGI, gi); gi.indirect.diffuse = 0; gi.indirect.specular = 0; gi.light.color = _LightColor0.rgb; gi.light.dir = lightDir; UnityGIInput giInput; UNITY_INITIALIZE_OUTPUT(UnityGIInput, giInput); giInput.light = gi.light; giInput.worldPos = worldPos; giInput.worldViewDir = worldViewDir; giInput.atten = atten; #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) giInput.lightmapUV = IN.lmap; #else giInput.lightmapUV = 0.0; #endif #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL giInput.ambient = IN.sh; #else giInput.ambient.rgb = 0.0; #endif giInput.probeHDR[0] = unity_SpecCube0_HDR; giInput.probeHDR[1] = unity_SpecCube1_HDR; #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) giInput.boxMin[0] = unity_SpecCube0_BoxMin; #endif #ifdef UNITY_SPECCUBE_BOX_PROJECTION giInput.boxMax[0] = unity_SpecCube0_BoxMax; giInput.probePosition[0] = unity_SpecCube0_ProbePosition; giInput.boxMax[1] = unity_SpecCube1_BoxMax; giInput.boxMin[1] = unity_SpecCube1_BoxMin; giInput.probePosition[1] = unity_SpecCube1_ProbePosition; #endif #if defined(_SPECULAR_SETUP) LightingStandardSpecular_GI(o, giInput, gi); #else LightingStandard_GI( o, giInput, gi ); #endif #ifdef ASE_BAKEDGI gi.indirect.diffuse = BakedGI; #endif #if UNITY_SHOULD_SAMPLE_SH && !defined(LIGHTMAP_ON) && defined(ASE_NO_AMBIENT) gi.indirect.diffuse = 0; #endif #if defined(_SPECULAR_SETUP) c += LightingStandardSpecular (o, worldViewDir, gi); #else c += LightingStandard( o, worldViewDir, gi ); #endif #ifdef _TRANSMISSION_ASE { float shadow = _TransmissionShadow; #ifdef DIRECTIONAL float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, shadow ); #else float3 lightAtten = gi.light.color; #endif half3 transmission = max(0 , -dot(o.Normal, gi.light.dir)) * lightAtten * Transmission; c.rgb += o.Albedo * transmission; } #endif #ifdef _TRANSLUCENCY_ASE { float shadow = _TransShadow; float normal = _TransNormal; float scattering = _TransScattering; float direct = _TransDirect; float ambient = _TransAmbient; float strength = _TransStrength; #ifdef DIRECTIONAL float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, shadow ); #else float3 lightAtten = gi.light.color; #endif half3 lightDir = gi.light.dir + o.Normal * normal; half transVdotL = pow( saturate( dot( worldViewDir, -lightDir ) ), scattering ); half3 translucency = lightAtten * (transVdotL * direct + gi.indirect.diffuse * ambient) * Translucency; c.rgb += o.Albedo * translucency * strength; } #endif //#ifdef _REFRACTION_ASE // float4 projScreenPos = ScreenPos / ScreenPos.w; // float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, WorldNormal ).xyz * ( 1.0 - dot( WorldNormal, WorldViewDirection ) ); // projScreenPos.xy += refractionOffset.xy; // float3 refraction = UNITY_SAMPLE_SCREENSPACE_TEXTURE( _GrabTexture, projScreenPos ) * RefractionColor; // color.rgb = lerp( refraction, color.rgb, color.a ); // color.a = 1; //#endif c.rgb += o.Emission; #ifdef ASE_FOG UNITY_APPLY_FOG(IN.fogCoord, c); #endif return c; } ENDCG } Pass { Name "ForwardAdd" Tags { "LightMode"="ForwardAdd" } ZWrite Off Blend SrcAlpha One CGPROGRAM #define ASE_NEEDS_FRAG_SHADOWCOORDS #pragma multi_compile_instancing #pragma multi_compile __ LOD_FADE_CROSSFADE #pragma multi_compile_fog #define ASE_FOG 1 #define _ALPHABLEND_ON 1 #define UNITY_STANDARD_USE_DITHER_MASK 1 #pragma vertex vert #pragma fragment frag #pragma skip_variants INSTANCING_ON #pragma multi_compile_fwdadd_fullshadows #ifndef UNITY_PASS_FORWARDADD #define UNITY_PASS_FORWARDADD #endif #include "HLSLSupport.cginc" #if !defined( UNITY_INSTANCED_LOD_FADE ) #define UNITY_INSTANCED_LOD_FADE #endif #if !defined( UNITY_INSTANCED_SH ) #define UNITY_INSTANCED_SH #endif #if !defined( UNITY_INSTANCED_LIGHTMAPSTS ) #define UNITY_INSTANCED_LIGHTMAPSTS #endif #include "UnityShaderVariables.cginc" #include "UnityCG.cginc" #include "Lighting.cginc" #include "UnityPBSLighting.cginc" #include "AutoLight.cginc" #include "UnityStandardUtils.cginc" struct appdata { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { #if UNITY_VERSION >= 201810 UNITY_POSITION(pos); #else float4 pos : SV_POSITION; #endif #if UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) UNITY_LIGHTING_COORDS(1,2) #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS) #if UNITY_VERSION >= 201710 UNITY_SHADOW_COORDS(1) #else SHADOW_COORDS(1) #endif #endif #ifdef ASE_FOG UNITY_FOG_COORDS(3) #endif float4 tSpace0 : TEXCOORD5; float4 tSpace1 : TEXCOORD6; float4 tSpace2 : TEXCOORD7; #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) float4 screenPos : TEXCOORD8; #endif float4 ase_texcoord9 : TEXCOORD9; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; #ifdef _TRANSMISSION_ASE float _TransmissionShadow; #endif #ifdef _TRANSLUCENCY_ASE float _TransStrength; float _TransNormal; float _TransScattering; float _TransDirect; float _TransAmbient; float _TransShadow; #endif #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif uniform sampler2D _Tex_D; uniform float4 _Tex_D_ST; uniform float4 _MainCol; uniform sampler2D _Tex_N1; uniform float4 _Tex_N1_ST; uniform float _Int_N1; uniform sampler2D _Tex_N2; uniform float4 _Tex_N2_ST; uniform float _Int_N2; uniform sampler2D _Tex_E; uniform float4 _Tex_E_ST; uniform float4 _Int_E; uniform sampler2D _Tex_MRao; uniform float4 _Tex_MRao_ST; uniform float _Int_M; uniform float _Int_R; uniform float _Int_ao; uniform float _TexAlphaorAlphaMask; uniform sampler2D _Tex_alpha; uniform float4 _Tex_alpha_ST; v2f VertexFunction (appdata v ) { UNITY_SETUP_INSTANCE_ID(v); v2f o; UNITY_INITIALIZE_OUTPUT(v2f,o); UNITY_TRANSFER_INSTANCE_ID(v,o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); o.ase_texcoord9.xy = v.ase_texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings o.ase_texcoord9.zw = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = v.vertex.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS v.vertex.xyz = vertexValue; #else v.vertex.xyz += vertexValue; #endif v.vertex.w = 1; v.normal = v.normal; v.tangent = v.tangent; o.pos = UnityObjectToClipPos(v.vertex); float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w; fixed3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign; o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x); o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y); o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z); #if UNITY_VERSION >= 201810 && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) UNITY_TRANSFER_LIGHTING(o, v.texcoord1.xy); #elif defined(ASE_NEEDS_FRAG_SHADOWCOORDS) #if UNITY_VERSION >= 201710 UNITY_TRANSFER_SHADOW(o, v.texcoord1.xy); #else TRANSFER_SHADOW(o); #endif #endif #ifdef ASE_FOG UNITY_TRANSFER_FOG(o,o.pos); #endif #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) o.screenPos = ComputeScreenPos(o.pos); #endif return o; } #if defined(TESSELLATION_ON) struct VertexControl { float4 vertex : INTERNALTESSPOS; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( appdata v ) { VertexControl o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = v.vertex; o.tangent = v.tangent; o.normal = v.normal; o.texcoord1 = v.texcoord1; o.texcoord2 = v.texcoord2; o.ase_texcoord = v.ase_texcoord; return o; } TessellationFactors TessellationFunction (InputPatch v) { TessellationFactors o; 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(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; return o; } [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")] v2f DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { appdata o = (appdata) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z; o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z; o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z; o.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] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal)); float phongStrength = _TessPhongStrength; o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], o); return VertexFunction(o); } #else v2f vert ( appdata v ) { return VertexFunction( v ); } #endif fixed4 frag ( v2f IN #ifdef _DEPTHOFFSET_ON , out float outputDepth : SV_Depth #endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID(IN); #ifdef LOD_FADE_CROSSFADE UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy); #endif #if defined(_SPECULAR_SETUP) SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0; #else SurfaceOutputStandard o = (SurfaceOutputStandard)0; #endif float3 WorldTangent = float3(IN.tSpace0.x,IN.tSpace1.x,IN.tSpace2.x); float3 WorldBiTangent = float3(IN.tSpace0.y,IN.tSpace1.y,IN.tSpace2.y); float3 WorldNormal = float3(IN.tSpace0.z,IN.tSpace1.z,IN.tSpace2.z); float3 worldPos = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w); float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) UNITY_LIGHT_ATTENUATION(atten, IN, worldPos) #else half atten = 1; #endif #if defined(ASE_NEEDS_FRAG_SCREEN_POSITION) float4 ScreenPos = IN.screenPos; #endif float2 uv_Tex_D = IN.ase_texcoord9.xy * _Tex_D_ST.xy + _Tex_D_ST.zw; float4 tex2DNode1 = tex2D( _Tex_D, uv_Tex_D ); float4 BaseTex24 = ( tex2DNode1 * _MainCol ); float2 uv_Tex_N1 = IN.ase_texcoord9.xy * _Tex_N1_ST.xy + _Tex_N1_ST.zw; float3 tex2DNode2 = UnpackNormal( tex2D( _Tex_N1, uv_Tex_N1 ) ); float3 appendResult19 = (float3(( tex2DNode2.r * _Int_N1 ) , ( tex2DNode2.g * _Int_N1 ) , tex2DNode2.b)); float2 uv_Tex_N2 = IN.ase_texcoord9.xy * _Tex_N2_ST.xy + _Tex_N2_ST.zw; float3 tex2DNode3 = UnpackNormal( tex2D( _Tex_N2, uv_Tex_N2 ) ); float3 appendResult47 = (float3(( tex2DNode3.r * _Int_N2 ) , ( tex2DNode3.g * _Int_N2 ) , tex2DNode3.b)); float3 Normal22 = BlendNormals( appendResult19 , appendResult47 ); float2 uv_Tex_E = IN.ase_texcoord9.xy * _Tex_E_ST.xy + _Tex_E_ST.zw; float4 Emission41 = ( tex2D( _Tex_E, uv_Tex_E ) * _Int_E ); float2 uv_Tex_MRao = IN.ase_texcoord9.xy * _Tex_MRao_ST.xy + _Tex_MRao_ST.zw; float4 tex2DNode4 = tex2D( _Tex_MRao, uv_Tex_MRao ); float Metalness28 = ( tex2DNode4.r * _Int_M ); float Smoothness29 = ( ( 1.0 - tex2DNode4.g ) * _Int_R ); float AmbientOcclusion30 = ( tex2DNode4.b * _Int_ao ); float2 uv_Tex_alpha = IN.ase_texcoord9.xy * _Tex_alpha_ST.xy + _Tex_alpha_ST.zw; float AlphaMask64 = (( _TexAlphaorAlphaMask )?( tex2D( _Tex_alpha, uv_Tex_alpha ).r ):( tex2DNode1.a )); o.Albedo = BaseTex24.rgb; o.Normal = Normal22; o.Emission = Emission41.rgb; #if defined(_SPECULAR_SETUP) o.Specular = fixed3( 0, 0, 0 ); #else o.Metallic = Metalness28; #endif o.Smoothness = Smoothness29; o.Occlusion = AmbientOcclusion30; o.Alpha = AlphaMask64; float AlphaClipThreshold = 0.5; float3 Transmission = 1; float3 Translucency = 1; #ifdef _ALPHATEST_ON clip( o.Alpha - AlphaClipThreshold ); #endif #ifdef _DEPTHOFFSET_ON outputDepth = IN.pos.z; #endif #ifndef USING_DIRECTIONAL_LIGHT fixed3 lightDir = normalize(UnityWorldSpaceLightDir(worldPos)); #else fixed3 lightDir = _WorldSpaceLightPos0.xyz; #endif fixed4 c = 0; float3 worldN; worldN.x = dot(IN.tSpace0.xyz, o.Normal); worldN.y = dot(IN.tSpace1.xyz, o.Normal); worldN.z = dot(IN.tSpace2.xyz, o.Normal); worldN = normalize(worldN); o.Normal = worldN; UnityGI gi; UNITY_INITIALIZE_OUTPUT(UnityGI, gi); gi.indirect.diffuse = 0; gi.indirect.specular = 0; gi.light.color = _LightColor0.rgb; gi.light.dir = lightDir; gi.light.color *= atten; #if defined(_SPECULAR_SETUP) c += LightingStandardSpecular( o, worldViewDir, gi ); #else c += LightingStandard( o, worldViewDir, gi ); #endif #ifdef _TRANSMISSION_ASE { float shadow = _TransmissionShadow; #ifdef DIRECTIONAL float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, shadow ); #else float3 lightAtten = gi.light.color; #endif half3 transmission = max(0 , -dot(o.Normal, gi.light.dir)) * lightAtten * Transmission; c.rgb += o.Albedo * transmission; } #endif #ifdef _TRANSLUCENCY_ASE { float shadow = _TransShadow; float normal = _TransNormal; float scattering = _TransScattering; float direct = _TransDirect; float ambient = _TransAmbient; float strength = _TransStrength; #ifdef DIRECTIONAL float3 lightAtten = lerp( _LightColor0.rgb, gi.light.color, shadow ); #else float3 lightAtten = gi.light.color; #endif half3 lightDir = gi.light.dir + o.Normal * normal; half transVdotL = pow( saturate( dot( worldViewDir, -lightDir ) ), scattering ); half3 translucency = lightAtten * (transVdotL * direct + gi.indirect.diffuse * ambient) * Translucency; c.rgb += o.Albedo * translucency * strength; } #endif //#ifdef _REFRACTION_ASE // float4 projScreenPos = ScreenPos / ScreenPos.w; // float3 refractionOffset = ( RefractionIndex - 1.0 ) * mul( UNITY_MATRIX_V, WorldNormal ).xyz * ( 1.0 - dot( WorldNormal, WorldViewDirection ) ); // projScreenPos.xy += refractionOffset.xy; // float3 refraction = UNITY_SAMPLE_SCREENSPACE_TEXTURE( _GrabTexture, projScreenPos ) * RefractionColor; // color.rgb = lerp( refraction, color.rgb, color.a ); // color.a = 1; //#endif #ifdef ASE_FOG UNITY_APPLY_FOG(IN.fogCoord, c); #endif return c; } ENDCG } Pass { Name "Deferred" Tags { "LightMode"="Deferred" } AlphaToMask Off CGPROGRAM #define ASE_NEEDS_FRAG_SHADOWCOORDS #pragma multi_compile_instancing #pragma multi_compile __ LOD_FADE_CROSSFADE #pragma multi_compile_fog #define ASE_FOG 1 #define _ALPHABLEND_ON 1 #define UNITY_STANDARD_USE_DITHER_MASK 1 #pragma vertex vert #pragma fragment frag #pragma target 3.0 #pragma exclude_renderers nomrt #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 #pragma multi_compile_prepassfinal #ifndef UNITY_PASS_DEFERRED #define UNITY_PASS_DEFERRED #endif #include "HLSLSupport.cginc" #if !defined( UNITY_INSTANCED_LOD_FADE ) #define UNITY_INSTANCED_LOD_FADE #endif #if !defined( UNITY_INSTANCED_SH ) #define UNITY_INSTANCED_SH #endif #if !defined( UNITY_INSTANCED_LIGHTMAPSTS ) #define UNITY_INSTANCED_LIGHTMAPSTS #endif #include "UnityShaderVariables.cginc" #include "UnityCG.cginc" #include "Lighting.cginc" #include "UnityPBSLighting.cginc" #include "UnityStandardUtils.cginc" struct appdata { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { #if UNITY_VERSION >= 201810 UNITY_POSITION(pos); #else float4 pos : SV_POSITION; #endif float4 lmap : TEXCOORD2; #ifndef LIGHTMAP_ON #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL half3 sh : TEXCOORD3; #endif #else #ifdef DIRLIGHTMAP_OFF float4 lmapFadePos : TEXCOORD4; #endif #endif float4 tSpace0 : TEXCOORD5; float4 tSpace1 : TEXCOORD6; float4 tSpace2 : TEXCOORD7; float4 ase_texcoord8 : TEXCOORD8; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; #ifdef LIGHTMAP_ON float4 unity_LightmapFade; #endif fixed4 unity_Ambient; #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif uniform sampler2D _Tex_D; uniform float4 _Tex_D_ST; uniform float4 _MainCol; uniform sampler2D _Tex_N1; uniform float4 _Tex_N1_ST; uniform float _Int_N1; uniform sampler2D _Tex_N2; uniform float4 _Tex_N2_ST; uniform float _Int_N2; uniform sampler2D _Tex_E; uniform float4 _Tex_E_ST; uniform float4 _Int_E; uniform sampler2D _Tex_MRao; uniform float4 _Tex_MRao_ST; uniform float _Int_M; uniform float _Int_R; uniform float _Int_ao; uniform float _TexAlphaorAlphaMask; uniform sampler2D _Tex_alpha; uniform float4 _Tex_alpha_ST; v2f VertexFunction (appdata v ) { UNITY_SETUP_INSTANCE_ID(v); v2f o; UNITY_INITIALIZE_OUTPUT(v2f,o); UNITY_TRANSFER_INSTANCE_ID(v,o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); o.ase_texcoord8.xy = v.ase_texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings o.ase_texcoord8.zw = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = v.vertex.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS v.vertex.xyz = vertexValue; #else v.vertex.xyz += vertexValue; #endif v.vertex.w = 1; v.normal = v.normal; v.tangent = v.tangent; o.pos = UnityObjectToClipPos(v.vertex); float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w; fixed3 worldBinormal = cross(worldNormal, worldTangent) * tangentSign; o.tSpace0 = float4(worldTangent.x, worldBinormal.x, worldNormal.x, worldPos.x); o.tSpace1 = float4(worldTangent.y, worldBinormal.y, worldNormal.y, worldPos.y); o.tSpace2 = float4(worldTangent.z, worldBinormal.z, worldNormal.z, worldPos.z); #ifdef DYNAMICLIGHTMAP_ON o.lmap.zw = v.texcoord2.xy * unity_DynamicLightmapST.xy + unity_DynamicLightmapST.zw; #else o.lmap.zw = 0; #endif #ifdef LIGHTMAP_ON o.lmap.xy = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; #ifdef DIRLIGHTMAP_OFF o.lmapFadePos.xyz = (mul(unity_ObjectToWorld, v.vertex).xyz - unity_ShadowFadeCenterAndType.xyz) * unity_ShadowFadeCenterAndType.w; o.lmapFadePos.w = (-UnityObjectToViewPos(v.vertex).z) * (1.0 - unity_ShadowFadeCenterAndType.w); #endif #else o.lmap.xy = 0; #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL o.sh = 0; o.sh = ShadeSHPerVertex (worldNormal, o.sh); #endif #endif return o; } #if defined(TESSELLATION_ON) struct VertexControl { float4 vertex : INTERNALTESSPOS; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( appdata v ) { VertexControl o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = v.vertex; o.tangent = v.tangent; o.normal = v.normal; o.texcoord1 = v.texcoord1; o.texcoord2 = v.texcoord2; o.ase_texcoord = v.ase_texcoord; return o; } TessellationFactors TessellationFunction (InputPatch v) { TessellationFactors o; 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(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; return o; } [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")] v2f DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { appdata o = (appdata) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z; o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z; o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z; o.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] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal)); float phongStrength = _TessPhongStrength; o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], o); return VertexFunction(o); } #else v2f vert ( appdata v ) { return VertexFunction( v ); } #endif void frag (v2f IN , out half4 outGBuffer0 : SV_Target0 , out half4 outGBuffer1 : SV_Target1 , out half4 outGBuffer2 : SV_Target2 , out half4 outEmission : SV_Target3 #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) , out half4 outShadowMask : SV_Target4 #endif #ifdef _DEPTHOFFSET_ON , out float outputDepth : SV_Depth #endif ) { UNITY_SETUP_INSTANCE_ID(IN); #ifdef LOD_FADE_CROSSFADE UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy); #endif #if defined(_SPECULAR_SETUP) SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0; #else SurfaceOutputStandard o = (SurfaceOutputStandard)0; #endif float3 WorldTangent = float3(IN.tSpace0.x,IN.tSpace1.x,IN.tSpace2.x); float3 WorldBiTangent = float3(IN.tSpace0.y,IN.tSpace1.y,IN.tSpace2.y); float3 WorldNormal = float3(IN.tSpace0.z,IN.tSpace1.z,IN.tSpace2.z); float3 worldPos = float3(IN.tSpace0.w,IN.tSpace1.w,IN.tSpace2.w); float3 worldViewDir = normalize(UnityWorldSpaceViewDir(worldPos)); half atten = 1; float2 uv_Tex_D = IN.ase_texcoord8.xy * _Tex_D_ST.xy + _Tex_D_ST.zw; float4 tex2DNode1 = tex2D( _Tex_D, uv_Tex_D ); float4 BaseTex24 = ( tex2DNode1 * _MainCol ); float2 uv_Tex_N1 = IN.ase_texcoord8.xy * _Tex_N1_ST.xy + _Tex_N1_ST.zw; float3 tex2DNode2 = UnpackNormal( tex2D( _Tex_N1, uv_Tex_N1 ) ); float3 appendResult19 = (float3(( tex2DNode2.r * _Int_N1 ) , ( tex2DNode2.g * _Int_N1 ) , tex2DNode2.b)); float2 uv_Tex_N2 = IN.ase_texcoord8.xy * _Tex_N2_ST.xy + _Tex_N2_ST.zw; float3 tex2DNode3 = UnpackNormal( tex2D( _Tex_N2, uv_Tex_N2 ) ); float3 appendResult47 = (float3(( tex2DNode3.r * _Int_N2 ) , ( tex2DNode3.g * _Int_N2 ) , tex2DNode3.b)); float3 Normal22 = BlendNormals( appendResult19 , appendResult47 ); float2 uv_Tex_E = IN.ase_texcoord8.xy * _Tex_E_ST.xy + _Tex_E_ST.zw; float4 Emission41 = ( tex2D( _Tex_E, uv_Tex_E ) * _Int_E ); float2 uv_Tex_MRao = IN.ase_texcoord8.xy * _Tex_MRao_ST.xy + _Tex_MRao_ST.zw; float4 tex2DNode4 = tex2D( _Tex_MRao, uv_Tex_MRao ); float Metalness28 = ( tex2DNode4.r * _Int_M ); float Smoothness29 = ( ( 1.0 - tex2DNode4.g ) * _Int_R ); float AmbientOcclusion30 = ( tex2DNode4.b * _Int_ao ); float2 uv_Tex_alpha = IN.ase_texcoord8.xy * _Tex_alpha_ST.xy + _Tex_alpha_ST.zw; float AlphaMask64 = (( _TexAlphaorAlphaMask )?( tex2D( _Tex_alpha, uv_Tex_alpha ).r ):( tex2DNode1.a )); o.Albedo = BaseTex24.rgb; o.Normal = Normal22; o.Emission = Emission41.rgb; #if defined(_SPECULAR_SETUP) o.Specular = fixed3( 0, 0, 0 ); #else o.Metallic = Metalness28; #endif o.Smoothness = Smoothness29; o.Occlusion = AmbientOcclusion30; o.Alpha = AlphaMask64; float AlphaClipThreshold = 0.5; float3 BakedGI = 0; #ifdef _ALPHATEST_ON clip( o.Alpha - AlphaClipThreshold ); #endif #ifdef _DEPTHOFFSET_ON outputDepth = IN.pos.z; #endif #ifndef USING_DIRECTIONAL_LIGHT fixed3 lightDir = normalize(UnityWorldSpaceLightDir(worldPos)); #else fixed3 lightDir = _WorldSpaceLightPos0.xyz; #endif float3 worldN; worldN.x = dot(IN.tSpace0.xyz, o.Normal); worldN.y = dot(IN.tSpace1.xyz, o.Normal); worldN.z = dot(IN.tSpace2.xyz, o.Normal); worldN = normalize(worldN); o.Normal = worldN; UnityGI gi; UNITY_INITIALIZE_OUTPUT(UnityGI, gi); gi.indirect.diffuse = 0; gi.indirect.specular = 0; gi.light.color = 0; gi.light.dir = half3(0,1,0); UnityGIInput giInput; UNITY_INITIALIZE_OUTPUT(UnityGIInput, giInput); giInput.light = gi.light; giInput.worldPos = worldPos; giInput.worldViewDir = worldViewDir; giInput.atten = atten; #if defined(LIGHTMAP_ON) || defined(DYNAMICLIGHTMAP_ON) giInput.lightmapUV = IN.lmap; #else giInput.lightmapUV = 0.0; #endif #if UNITY_SHOULD_SAMPLE_SH && !UNITY_SAMPLE_FULL_SH_PER_PIXEL giInput.ambient = IN.sh; #else giInput.ambient.rgb = 0.0; #endif giInput.probeHDR[0] = unity_SpecCube0_HDR; giInput.probeHDR[1] = unity_SpecCube1_HDR; #if defined(UNITY_SPECCUBE_BLENDING) || defined(UNITY_SPECCUBE_BOX_PROJECTION) giInput.boxMin[0] = unity_SpecCube0_BoxMin; #endif #ifdef UNITY_SPECCUBE_BOX_PROJECTION giInput.boxMax[0] = unity_SpecCube0_BoxMax; giInput.probePosition[0] = unity_SpecCube0_ProbePosition; giInput.boxMax[1] = unity_SpecCube1_BoxMax; giInput.boxMin[1] = unity_SpecCube1_BoxMin; giInput.probePosition[1] = unity_SpecCube1_ProbePosition; #endif #if defined(_SPECULAR_SETUP) LightingStandardSpecular_GI( o, giInput, gi ); #else LightingStandard_GI( o, giInput, gi ); #endif #ifdef ASE_BAKEDGI gi.indirect.diffuse = BakedGI; #endif #if UNITY_SHOULD_SAMPLE_SH && !defined(LIGHTMAP_ON) && defined(ASE_NO_AMBIENT) gi.indirect.diffuse = 0; #endif #if defined(_SPECULAR_SETUP) outEmission = LightingStandardSpecular_Deferred( o, worldViewDir, gi, outGBuffer0, outGBuffer1, outGBuffer2 ); #else outEmission = LightingStandard_Deferred( o, worldViewDir, gi, outGBuffer0, outGBuffer1, outGBuffer2 ); #endif #if defined(SHADOWS_SHADOWMASK) && (UNITY_ALLOWED_MRT_COUNT > 4) outShadowMask = UnityGetRawBakedOcclusions (IN.lmap.xy, float3(0, 0, 0)); #endif #ifndef UNITY_HDR_ON outEmission.rgb = exp2(-outEmission.rgb); #endif } ENDCG } Pass { Name "Meta" Tags { "LightMode"="Meta" } Cull Off CGPROGRAM #define ASE_NEEDS_FRAG_SHADOWCOORDS #pragma multi_compile_instancing #pragma multi_compile __ LOD_FADE_CROSSFADE #pragma multi_compile_fog #define ASE_FOG 1 #define _ALPHABLEND_ON 1 #define UNITY_STANDARD_USE_DITHER_MASK 1 #pragma vertex vert #pragma fragment frag #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 #pragma shader_feature EDITOR_VISUALIZATION #ifndef UNITY_PASS_META #define UNITY_PASS_META #endif #include "HLSLSupport.cginc" #if !defined( UNITY_INSTANCED_LOD_FADE ) #define UNITY_INSTANCED_LOD_FADE #endif #if !defined( UNITY_INSTANCED_SH ) #define UNITY_INSTANCED_SH #endif #if !defined( UNITY_INSTANCED_LIGHTMAPSTS ) #define UNITY_INSTANCED_LIGHTMAPSTS #endif #include "UnityShaderVariables.cginc" #include "UnityCG.cginc" #include "Lighting.cginc" #include "UnityPBSLighting.cginc" #include "UnityMetaPass.cginc" struct appdata { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { #if UNITY_VERSION >= 201810 UNITY_POSITION(pos); #else float4 pos : SV_POSITION; #endif #ifdef EDITOR_VISUALIZATION float2 vizUV : TEXCOORD1; float4 lightCoord : TEXCOORD2; #endif float4 ase_texcoord3 : TEXCOORD3; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif uniform sampler2D _Tex_D; uniform float4 _Tex_D_ST; uniform float4 _MainCol; uniform sampler2D _Tex_E; uniform float4 _Tex_E_ST; uniform float4 _Int_E; uniform float _TexAlphaorAlphaMask; uniform sampler2D _Tex_alpha; uniform float4 _Tex_alpha_ST; v2f VertexFunction (appdata v ) { UNITY_SETUP_INSTANCE_ID(v); v2f o; UNITY_INITIALIZE_OUTPUT(v2f,o); UNITY_TRANSFER_INSTANCE_ID(v,o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); o.ase_texcoord3.xy = v.ase_texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings o.ase_texcoord3.zw = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = v.vertex.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS v.vertex.xyz = vertexValue; #else v.vertex.xyz += vertexValue; #endif v.vertex.w = 1; v.normal = v.normal; v.tangent = v.tangent; #ifdef EDITOR_VISUALIZATION o.vizUV = 0; o.lightCoord = 0; if (unity_VisualizationMode == EDITORVIZ_TEXTURE) o.vizUV = UnityMetaVizUV(unity_EditorViz_UVIndex, v.texcoord.xy, v.texcoord1.xy, v.texcoord2.xy, unity_EditorViz_Texture_ST); else if (unity_VisualizationMode == EDITORVIZ_SHOWLIGHTMASK) { o.vizUV = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw; o.lightCoord = mul(unity_EditorViz_WorldToLight, mul(unity_ObjectToWorld, float4(v.vertex.xyz, 1))); } #endif o.pos = UnityMetaVertexPosition(v.vertex, v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); return o; } #if defined(TESSELLATION_ON) struct VertexControl { float4 vertex : INTERNALTESSPOS; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( appdata v ) { VertexControl o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = v.vertex; o.tangent = v.tangent; o.normal = v.normal; o.texcoord1 = v.texcoord1; o.texcoord2 = v.texcoord2; o.ase_texcoord = v.ase_texcoord; return o; } TessellationFactors TessellationFunction (InputPatch v) { TessellationFactors o; 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(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; return o; } [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")] v2f DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { appdata o = (appdata) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z; o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z; o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z; o.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] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal)); float phongStrength = _TessPhongStrength; o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], o); return VertexFunction(o); } #else v2f vert ( appdata v ) { return VertexFunction( v ); } #endif fixed4 frag (v2f IN #ifdef _DEPTHOFFSET_ON , out float outputDepth : SV_Depth #endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID(IN); #ifdef LOD_FADE_CROSSFADE UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy); #endif #if defined(_SPECULAR_SETUP) SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0; #else SurfaceOutputStandard o = (SurfaceOutputStandard)0; #endif float2 uv_Tex_D = IN.ase_texcoord3.xy * _Tex_D_ST.xy + _Tex_D_ST.zw; float4 tex2DNode1 = tex2D( _Tex_D, uv_Tex_D ); float4 BaseTex24 = ( tex2DNode1 * _MainCol ); float2 uv_Tex_E = IN.ase_texcoord3.xy * _Tex_E_ST.xy + _Tex_E_ST.zw; float4 Emission41 = ( tex2D( _Tex_E, uv_Tex_E ) * _Int_E ); float2 uv_Tex_alpha = IN.ase_texcoord3.xy * _Tex_alpha_ST.xy + _Tex_alpha_ST.zw; float AlphaMask64 = (( _TexAlphaorAlphaMask )?( tex2D( _Tex_alpha, uv_Tex_alpha ).r ):( tex2DNode1.a )); o.Albedo = BaseTex24.rgb; o.Normal = fixed3( 0, 0, 1 ); o.Emission = Emission41.rgb; o.Alpha = AlphaMask64; float AlphaClipThreshold = 0.5; #ifdef _ALPHATEST_ON clip( o.Alpha - AlphaClipThreshold ); #endif #ifdef _DEPTHOFFSET_ON outputDepth = IN.pos.z; #endif UnityMetaInput metaIN; UNITY_INITIALIZE_OUTPUT(UnityMetaInput, metaIN); metaIN.Albedo = o.Albedo; metaIN.Emission = o.Emission; #ifdef EDITOR_VISUALIZATION metaIN.VizUV = IN.vizUV; metaIN.LightCoord = IN.lightCoord; #endif return UnityMetaFragment(metaIN); } ENDCG } Pass { Name "ShadowCaster" Tags { "LightMode"="ShadowCaster" } ZWrite On ZTest LEqual AlphaToMask Off CGPROGRAM #define ASE_NEEDS_FRAG_SHADOWCOORDS #pragma multi_compile_instancing #pragma multi_compile __ LOD_FADE_CROSSFADE #pragma multi_compile_fog #define ASE_FOG 1 #define _ALPHABLEND_ON 1 #define UNITY_STANDARD_USE_DITHER_MASK 1 #pragma vertex vert #pragma fragment frag #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2 #pragma multi_compile_shadowcaster #ifndef UNITY_PASS_SHADOWCASTER #define UNITY_PASS_SHADOWCASTER #endif #include "HLSLSupport.cginc" #ifndef UNITY_INSTANCED_LOD_FADE #define UNITY_INSTANCED_LOD_FADE #endif #ifndef UNITY_INSTANCED_SH #define UNITY_INSTANCED_SH #endif #ifndef UNITY_INSTANCED_LIGHTMAPSTS #define UNITY_INSTANCED_LIGHTMAPSTS #endif #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN ) #define CAN_SKIP_VPOS #endif #include "UnityShaderVariables.cginc" #include "UnityCG.cginc" #include "Lighting.cginc" #include "UnityPBSLighting.cginc" struct appdata { float4 vertex : POSITION; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { V2F_SHADOW_CASTER; float4 ase_texcoord2 : TEXCOORD2; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; #ifdef UNITY_STANDARD_USE_DITHER_MASK sampler3D _DitherMaskLOD; #endif #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif uniform float _TexAlphaorAlphaMask; uniform sampler2D _Tex_D; uniform float4 _Tex_D_ST; uniform sampler2D _Tex_alpha; uniform float4 _Tex_alpha_ST; v2f VertexFunction (appdata v ) { UNITY_SETUP_INSTANCE_ID(v); v2f o; UNITY_INITIALIZE_OUTPUT(v2f,o); UNITY_TRANSFER_INSTANCE_ID(v,o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); o.ase_texcoord2.xy = v.ase_texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings o.ase_texcoord2.zw = 0; #ifdef ASE_ABSOLUTE_VERTEX_POS float3 defaultVertexValue = v.vertex.xyz; #else float3 defaultVertexValue = float3(0, 0, 0); #endif float3 vertexValue = defaultVertexValue; #ifdef ASE_ABSOLUTE_VERTEX_POS v.vertex.xyz = vertexValue; #else v.vertex.xyz += vertexValue; #endif v.vertex.w = 1; v.normal = v.normal; v.tangent = v.tangent; TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) return o; } #if defined(TESSELLATION_ON) struct VertexControl { float4 vertex : INTERNALTESSPOS; float4 tangent : TANGENT; float3 normal : NORMAL; float4 texcoord1 : TEXCOORD1; float4 texcoord2 : TEXCOORD2; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( appdata v ) { VertexControl o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = v.vertex; o.tangent = v.tangent; o.normal = v.normal; o.texcoord1 = v.texcoord1; o.texcoord2 = v.texcoord2; o.ase_texcoord = v.ase_texcoord; return o; } TessellationFactors TessellationFunction (InputPatch v) { TessellationFactors o; 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(v[0].vertex, v[1].vertex, v[2].vertex, tessValue, tessMin, tessMax, UNITY_MATRIX_M, _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, UNITY_MATRIX_M, _WorldSpaceCameraPos, _ScreenParams, unity_CameraWorldClipPlanes ); #endif o.edge[0] = tf.x; o.edge[1] = tf.y; o.edge[2] = tf.z; o.inside = tf.w; return o; } [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")] v2f DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { appdata o = (appdata) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.tangent = patch[0].tangent * bary.x + patch[1].tangent * bary.y + patch[2].tangent * bary.z; o.normal = patch[0].normal * bary.x + patch[1].normal * bary.y + patch[2].normal * bary.z; o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; o.texcoord2 = patch[0].texcoord2 * bary.x + patch[1].texcoord2 * bary.y + patch[2].texcoord2 * bary.z; o.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] = o.vertex.xyz - patch[i].normal * (dot(o.vertex.xyz, patch[i].normal) - dot(patch[i].vertex.xyz, patch[i].normal)); float phongStrength = _TessPhongStrength; o.vertex.xyz = phongStrength * (pp[0]*bary.x + pp[1]*bary.y + pp[2]*bary.z) + (1.0f-phongStrength) * o.vertex.xyz; #endif UNITY_TRANSFER_INSTANCE_ID(patch[0], o); return VertexFunction(o); } #else v2f vert ( appdata v ) { return VertexFunction( v ); } #endif fixed4 frag (v2f IN #ifdef _DEPTHOFFSET_ON , out float outputDepth : SV_Depth #endif #if !defined( CAN_SKIP_VPOS ) , UNITY_VPOS_TYPE vpos : VPOS #endif ) : SV_Target { UNITY_SETUP_INSTANCE_ID(IN); #ifdef LOD_FADE_CROSSFADE UNITY_APPLY_DITHER_CROSSFADE(IN.pos.xy); #endif #if defined(_SPECULAR_SETUP) SurfaceOutputStandardSpecular o = (SurfaceOutputStandardSpecular)0; #else SurfaceOutputStandard o = (SurfaceOutputStandard)0; #endif float2 uv_Tex_D = IN.ase_texcoord2.xy * _Tex_D_ST.xy + _Tex_D_ST.zw; float4 tex2DNode1 = tex2D( _Tex_D, uv_Tex_D ); float2 uv_Tex_alpha = IN.ase_texcoord2.xy * _Tex_alpha_ST.xy + _Tex_alpha_ST.zw; float AlphaMask64 = (( _TexAlphaorAlphaMask )?( tex2D( _Tex_alpha, uv_Tex_alpha ).r ):( tex2DNode1.a )); o.Normal = fixed3( 0, 0, 1 ); o.Occlusion = 1; o.Alpha = AlphaMask64; float AlphaClipThreshold = 0.5; float AlphaClipThresholdShadow = 0.5; #ifdef _ALPHATEST_SHADOW_ON if (unity_LightShadowBias.z != 0.0) clip(o.Alpha - AlphaClipThresholdShadow); #ifdef _ALPHATEST_ON else clip(o.Alpha - AlphaClipThreshold); #endif #else #ifdef _ALPHATEST_ON clip(o.Alpha - AlphaClipThreshold); #endif #endif #if defined( CAN_SKIP_VPOS ) float2 vpos = IN.pos; #endif #ifdef UNITY_STANDARD_USE_DITHER_MASK half alphaRef = tex3D(_DitherMaskLOD, float3(vpos.xy*0.25,o.Alpha*0.9375)).a; clip(alphaRef - 0.01); #endif #ifdef _DEPTHOFFSET_ON outputDepth = IN.pos.z; #endif SHADOW_CASTER_FRAGMENT(IN) } ENDCG } } CustomEditor "ASEMaterialInspector" } /*ASEBEGIN Version=18935 1920;0;1920;1019;3306.33;1572.706;1.3;True;True Node;AmplifyShaderEditor.CommentaryNode;25;-2753,-1280;Inherit;False;1054.801;606.7173;基础色贴图;7;64;24;97;98;5;6;1;;1,1,1,1;0;0 Node;AmplifyShaderEditor.SamplerNode;97;-2500.966,-878.6834;Inherit;True;Property;_Tex_alpha;Tex_alpha;3;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;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;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.SamplerNode;1;-2705,-1232;Inherit;True;Property;_Tex_D;Tex_D;1;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;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;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.ToggleSwitchNode;98;-2185.776,-965.0074;Inherit;False;Property;_TexAlphaorAlphaMask;TexAlpha or AlphaMask;4;0;Create;True;0;0;0;False;0;False;0;True;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.CommentaryNode;42;-2422.108,152.6998;Inherit;False;815.7507;454.2523;自发光;4;37;39;38;41;;1,1,1,1;0;0 Node;AmplifyShaderEditor.CommentaryNode;49;-2800.933,-630.4335;Inherit;False;1204.286;687.8993;法线;12;2;3;12;18;19;45;46;47;15;48;44;22;;1,1,1,1;0;0 Node;AmplifyShaderEditor.RegisterLocalVarNode;64;-1895.281,-963.6848;Inherit;False;AlphaMask;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.CommentaryNode;36;-2781.237,691.0974;Inherit;False;1169.489;593.5865;金属度&粗糙度&环境光遮蔽;11;14;13;28;16;4;10;29;30;9;11;35;;1,1,1,1;0;0 Node;AmplifyShaderEditor.DynamicAppendNode;47;-2246.797,-200.5342;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;16;-2067.498,1124.588;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.OneMinusNode;35;-2365.138,886.6025;Inherit;False;1;0;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;14;-2139.499,949.5885;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode;4;-2724.767,741.0975;Inherit;True;Property;_Tex_MRao;Tex_M&R&ao;5;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;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;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.SamplerNode;37;-2372.108,202.6998;Inherit;True;Property;_Tex_E;Tex_E;13;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;black;Auto;False;Object;-1;Auto;Texture2D;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;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.SamplerNode;3;-2741.933,-261.6467;Inherit;True;Property;_Tex_N2;Tex_N2;11;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;bump;Auto;True;Object;-1;Auto;Texture2D;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;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.RangedFloatNode;10;-2720.698,948.9886;Inherit;False;Property;_Int_M;Int_M;6;0;Create;True;0;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.DynamicAppendNode;19;-2244.647,-468.8394;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;12;-2405.648,-534.8395;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;18;-2400.648,-384.8391;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.ColorNode;39;-2287.309,394.9519;Inherit;False;Property;_Int_E;Int_E;14;1;[HDR];Create;True;0;0;0;False;0;False;0,0,0,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.BlendNormalsNode;44;-2073.395,-328.8476;Inherit;False;0;3;0;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT3;0,0,0;False;1;FLOAT3;0 Node;AmplifyShaderEditor.RegisterLocalVarNode;41;-1830.356,318.9058;Inherit;False;Emission;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.RegisterLocalVarNode;29;-1837.747,948.7224;Inherit;False;Smoothness;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;38;-2022.433,309.7018;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode;48;-2736.464,-58.53419;Inherit;False;Property;_Int_N2;Int_N2;12;0;Create;True;0;0;0;False;0;False;1;0;0;3;0;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;13;-2141.499,827.5883;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.GetLocalVarNode;33;-610.8406,107.4983;Inherit;False;29;Smoothness;1;0;OBJECT;;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;46;-2402.798,-116.5339;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode;11;-2726.591,1168.685;Inherit;False;Property;_Int_ao;Int_ao;8;0;Create;True;0;0;0;False;0;False;1;1;0;2;0;1;FLOAT;0 Node;AmplifyShaderEditor.GetLocalVarNode;31;-641.8406,190.4985;Inherit;False;30;AmbientOcclusion;1;0;OBJECT;;False;1;FLOAT;0 Node;AmplifyShaderEditor.GetLocalVarNode;89;-601.9426,265.7878;Inherit;False;64;AlphaMask;1;0;OBJECT;;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode;9;-2731.237,1058.652;Inherit;False;Property;_Int_R;Int_R;7;0;Create;True;0;0;0;False;0;False;1;1;0;1;0;1;FLOAT;0 Node;AmplifyShaderEditor.GetLocalVarNode;26;-597.7759,-109.9712;Inherit;False;22;Normal;1;0;OBJECT;;False;1;FLOAT3;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;45;-2407.798,-266.5345;Inherit;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.GetLocalVarNode;32;-601.8406,33.49832;Inherit;False;28;Metalness;1;0;OBJECT;;False;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode;2;-2740.982,-580.4335;Inherit;True;Property;_Tex_N1;Tex_N1;9;0;Create;True;0;0;0;False;0;False;-1;None;None;True;0;False;bump;Auto;True;Object;-1;Auto;Texture2D;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;5;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.RegisterLocalVarNode;28;-1839.178,826.6172;Inherit;False;Metalness;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;6;-2279,-1179;Inherit;False;2;2;0;COLOR;0,0,0,0;False;1;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.ColorNode;5;-2705,-1037;Inherit;False;Property;_MainCol;MainCol;2;0;Create;True;0;0;0;False;0;False;1,1,1,0;0,0,0,0;True;0;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.RegisterLocalVarNode;24;-2095,-1182;Inherit;False;BaseTex;-1;True;1;0;COLOR;0,0,0,0;False;1;COLOR;0 Node;AmplifyShaderEditor.GetLocalVarNode;43;-599.1973,-37.97;Inherit;False;41;Emission;1;0;OBJECT;;False;1;COLOR;0 Node;AmplifyShaderEditor.RangedFloatNode;15;-2736.747,-360.5392;Inherit;False;Property;_Int_N1;Int_N1;10;0;Create;True;0;0;0;False;0;False;1;0;0;3;0;1;FLOAT;0 Node;AmplifyShaderEditor.RegisterLocalVarNode;22;-1833.648,-323.4905;Inherit;False;Normal;-1;True;1;0;FLOAT3;0,0,0;False;1;FLOAT3;0 Node;AmplifyShaderEditor.GetLocalVarNode;27;-599.6052,-181.7178;Inherit;False;24;BaseTex;1;0;OBJECT;;False;1;COLOR;0 Node;AmplifyShaderEditor.RegisterLocalVarNode;30;-1855.747,1102.723;Inherit;False;AmbientOcclusion;-1;True;1;0;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;96;-309.9006,-30.12163;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;ed95fe726fd7b4644bb42f4d1ddd2bcd;True;ShadowCaster;0;5;ShadowCaster;0;False;True;0;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;True;0;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;False;True;3;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;DisableBatching=False=DisableBatching;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;False;-1;True;3;False;-1;False;True;1;LightMode=ShadowCaster;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;91;-309.9006,-30.12163;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;ed95fe726fd7b4644bb42f4d1ddd2bcd;True;ExtraPrePass;0;0;ExtraPrePass;6;False;True;0;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;True;0;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;False;True;3;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;DisableBatching=False=DisableBatching;True;2;False;0;False;True;1;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;True;True;0;False;-1;0;False;-1;True;1;LightMode=ForwardBase;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;93;-309.9006,-30.12163;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;ed95fe726fd7b4644bb42f4d1ddd2bcd;True;ForwardAdd;0;2;ForwardAdd;0;False;True;0;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;True;0;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;False;True;3;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;DisableBatching=False=DisableBatching;True;2;False;0;False;True;4;5;False;-1;1;False;-1;0;1;False;-1;0;False;-1;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;2;False;-1;False;False;True;1;LightMode=ForwardAdd;False;False;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;94;-309.9006,-30.12163;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;ed95fe726fd7b4644bb42f4d1ddd2bcd;True;Deferred;0;3;Deferred;0;False;True;0;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;True;0;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;False;True;3;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;DisableBatching=False=DisableBatching;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;1;LightMode=Deferred;True;2;True;17;d3d9;d3d11_9x;d3d11;glcore;gles;gles3;metal;vulkan;xbox360;xboxone;xboxseries;ps4;playstation;psp2;n3ds;wiiu;switch;0;;0;0;Standard;0;False;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;95;-309.9006,-30.12163;Float;False;False;-1;2;ASEMaterialInspector;0;1;New Amplify Shader;ed95fe726fd7b4644bb42f4d1ddd2bcd;True;Meta;0;4;Meta;0;False;True;0;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;True;0;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;1;False;-1;True;3;False;-1;False;True;3;RenderType=Opaque=RenderType;Queue=Geometry=Queue=0;DisableBatching=False=DisableBatching;True;2;False;0;False;False;False;False;False;False;False;False;False;False;False;False;False;False;True;2;False;-1;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;92;-309.9006,-30.12163;Float;False;True;-1;2;ASEMaterialInspector;0;10;PBR Alpha material;ed95fe726fd7b4644bb42f4d1ddd2bcd;True;ForwardBase;0;1;ForwardBase;18;False;True;0;1;False;-1;0;False;-1;0;1;False;-1;0;False;-1;True;0;False;-1;0;False;-1;False;False;False;False;False;False;False;False;False;True;0;False;-1;False;True;0;False;-1;False;True;True;True;True;True;0;False;-1;False;False;False;False;False;False;False;True;False;255;False;-1;255;False;-1;255;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;7;False;-1;1;False;-1;1;False;-1;1;False;-1;False;True;2;False;-1;True;3;False;-1;False;True;3;RenderType=Transparent=RenderType;Queue=Transparent=Queue=0;DisableBatching=False=DisableBatching;True;2;False;0;False;True;1;5;False;-1;10;False;-1;0;1;False;-1;0;False;-1;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;False;False;True;1;LightMode=ForwardBase;False;False;0;;0;0;Standard;40;Workflow,InvertActionOnDeselection;1;0;Surface;1;638093709745726288; Blend;0;0; Refraction Model;0;0; Dither Shadows;1;0;Two Sided;1;0;Deferred Pass;1;0;Transmission;0;0; Transmission Shadow;0.5,False,-1;0;Translucency;0;0; Translucency Strength;1,False,-1;0; Normal Distortion;0.5,False,-1;0; Scattering;2,False,-1;0; Direct;0.9,False,-1;0; Ambient;0.1,False,-1;0; Shadow;0.5,False,-1;0;Cast Shadows;1;0; Use Shadow Threshold;0;0;Receive Shadows;1;0;GPU Instancing;1;0;LOD CrossFade;1;0;Built-in Fog;1;0;Ambient Light;1;0;Meta Pass;1;0;Add Pass;1;0;Override Baked GI;0;0;Extra Pre Pass;0;0;Tessellation;0;0; Phong;0;0; Strength;0.5,False,-1;0; Type;0;0; Tess;16,False,-1;0; Min;10,False,-1;0; Max;25,False,-1;0; Edge Length;16,False,-1;0; Max Displacement;25,False,-1;0;Fwd Specular Highlights Toggle;0;0;Fwd Reflections Toggle;0;0;Disable Batching;0;0;Vertex Position,InvertActionOnDeselection;1;0;0;6;False;True;True;True;True;True;False;;False;0 WireConnection;98;0;1;4 WireConnection;98;1;97;1 WireConnection;64;0;98;0 WireConnection;47;0;45;0 WireConnection;47;1;46;0 WireConnection;47;2;3;3 WireConnection;16;0;4;3 WireConnection;16;1;11;0 WireConnection;35;0;4;2 WireConnection;14;0;35;0 WireConnection;14;1;9;0 WireConnection;19;0;12;0 WireConnection;19;1;18;0 WireConnection;19;2;2;3 WireConnection;12;0;2;1 WireConnection;12;1;15;0 WireConnection;18;0;2;2 WireConnection;18;1;15;0 WireConnection;44;0;19;0 WireConnection;44;1;47;0 WireConnection;41;0;38;0 WireConnection;29;0;14;0 WireConnection;38;0;37;0 WireConnection;38;1;39;0 WireConnection;13;0;4;1 WireConnection;13;1;10;0 WireConnection;46;0;3;2 WireConnection;46;1;48;0 WireConnection;45;0;3;1 WireConnection;45;1;48;0 WireConnection;28;0;13;0 WireConnection;6;0;1;0 WireConnection;6;1;5;0 WireConnection;24;0;6;0 WireConnection;22;0;44;0 WireConnection;30;0;16;0 WireConnection;92;0;27;0 WireConnection;92;1;26;0 WireConnection;92;2;43;0 WireConnection;92;4;32;0 WireConnection;92;5;33;0 WireConnection;92;6;31;0 WireConnection;92;7;89;0 ASEEND*/ //CHKSM=0630352CF87E1C3334214E8EEB82D295161D9C67