Shader "Ciconia Studio/CS_Ghost/URP/CS_Advanced Ghost (XRay See Through)" { Properties { [HideInInspector] _EmissionColor("Emission Color", Color) = (1,1,1,1) [HideInInspector] _AlphaCutoff("Alpha Cutoff ", Range(0, 1)) = 0.5 [Space(15)][Header(Main Properties)][Space(15)]_Color("Color ", Color) = (0,0,0,1) _MainTex("Base Color", 2D) = "white" {} [Space(15)][Toggle(_ENABLESPECULARLIGHT_ON)] _EnableSpecularLight("Enable Specular Light", Float) = 0 _Glossiness("Smoothness", Range( 0 , 1)) = 0.75 [Space(35)]_BumpMap("Normal Map", 2D) = "bump" {} _BumpScale("Scale", Range( 0 , 4)) = 0.3 [Space(15)][Header(Fresnel Properties)][Space(15)]_FresnelColor("Color", Color) = (0.6933962,1,0.9814353,1) _SelfIllumination("Self Illumination", Range( 1 , 10)) = 1 [Space(15)]_FresnelIntensity("Fresnel Intensity", Float) = 4 _FresnelPower("Fresnel Power", Float) = 4 _FresnelBias("Bias", Range( 0 , 1)) = 0 [Toggle]_Invert("Invert", Float) = 0 [Space(15)][Header(Animation Properties)][Space(15)]_MinValueAmplitude("Min Value", Float) = 1 _MaxValueAmplitude("Max Value", Float) = 2 [TextArea(1)]_AmplitudeSpeed("Speed", Float) = 1 [Space(15)][Header(Details Properties)][Space(15)]_DetailMap("Detail Map", 2D) = "white" {} _ContrastDetailMap("Contrast", Float) = 1 _SpreadDetailMap("Spread", Float) = 0 [Space(15)]_DetailScale("Intensity", Float) = 1 [Toggle(_DUPLICATEDETAILS_ON)] _DuplicateDetails("Duplicate Details", Float) = 1 [Space(15)]_TranslationSpeed("Translation Speed", Float) = 0 _RotationSpeed("Rotation Speed", Float) = 0 _RotationAngle("Rotation Angle", Float) = 0 [Space(15)][KeywordEnum(UVProjection,ScreenProjection)] _UVScreenProjection("UV/Screen Projection", Float) = 0 _TexturesScale("Textures Scale", Float) = 1 [Space(15)][KeywordEnum(None,NormalMap,DetailMap,Both)] _MapContribution("Map Contribution", Float) = 0 _Refraction("Refraction", Range( 0 , 2)) = 1.1 [Space(15)][Header(Transparency Properties)][Space(15)]_FillColorBackground("Fill Color Background", Color) = (0,0,0,0) _DesaturateBackground("Desaturate Background", Range( 0 , 1)) = 0 [Space(10)]_Opacity("Opacity", Range( 0 , 1)) = 1 _ShadowOpacity("Shadow Opacity", Range( 0 , 1)) = 0 [Space(15)][Header(XRay Properties)][Space(15)]_XRayColor("Color -->(Transparency A)", Color) = (0,1,0.980212,0.1019608) _XRayFresnelIntensity("Intensity", Range( 0 , 2)) = 1 _XRayFresnelPower("Power", Float) = 1 _XRayBias("Bias", Range( 0 , 1)) = 0.04 //_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 } SubShader { LOD 0 Tags { "RenderPipeline"="UniversalPipeline" "RenderType"="Transparent" "Queue"="Transparent" } Cull Back HLSLINCLUDE #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; } ENDHLSL Pass { Name "Main Pass" Blend One Zero Cull Back ZWrite On ZTest LEqual Offset 0 , 0 ColorMask RGBA HLSLPROGRAM #pragma multi_compile_instancing #define ASE_SRP_VERSION 70301 #define REQUIRE_OPAQUE_TEXTURE 1 #pragma prefer_hlslcc gles #pragma exclude_renderers d3d11_9x #pragma vertex vert #pragma fragment frag #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.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #if ASE_SRP_VERSION <= 70108 #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR #endif #define ASE_NEEDS_VERT_NORMAL #define ASE_NEEDS_FRAG_WORLD_POSITION #define ASE_NEEDS_FRAG_SHADOWCOORDS #pragma multi_compile _ _MAIN_LIGHT_SHADOWS #pragma multi_compile _ _MAIN_LIGHT_SHADOWS_CASCADE #pragma multi_compile _ _SHADOWS_SOFT #pragma multi_compile _ DIRLIGHTMAP_COMBINED #pragma multi_compile _ LIGHTMAP_ON #pragma shader_feature_local _ENABLESPECULARLIGHT_ON #pragma shader_feature_local _MAPCONTRIBUTION_NONE _MAPCONTRIBUTION_NORMALMAP _MAPCONTRIBUTION_DETAILMAP _MAPCONTRIBUTION_BOTH #pragma shader_feature_local _DUPLICATEDETAILS_ON #pragma shader_feature_local _UVSCREENPROJECTION_UVPROJECTION _UVSCREENPROJECTION_SCREENPROJECTION #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS struct VertexInput { float4 vertex : POSITION; float3 ase_normal : NORMAL; float4 ase_texcoord : TEXCOORD0; float4 ase_tangent : TANGENT; float4 texcoord1 : TEXCOORD1; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct VertexOutput { float4 clipPos : SV_POSITION; #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) float3 worldPos : TEXCOORD0; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord : TEXCOORD1; #endif #ifdef ASE_FOG float fogFactor : TEXCOORD2; #endif float4 ase_texcoord3 : TEXCOORD3; float4 ase_texcoord4 : TEXCOORD4; float4 ase_texcoord5 : TEXCOORD5; float4 ase_texcoord6 : TEXCOORD6; float4 lightmapUVOrVertexSH : TEXCOORD7; float4 ase_texcoord8 : TEXCOORD8; float4 ase_texcoord9 : TEXCOORD9; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _Color; float4 _XRayColor; float4 _FresnelColor; float4 _DetailMap_ST; float4 _FillColorBackground; float4 _BumpMap_ST; float4 _MainTex_ST; float _SelfIllumination; float _XRayFresnelIntensity; float _XRayBias; float _AmplitudeSpeed; float _MinValueAmplitude; float _MaxValueAmplitude; float _DetailScale; float _FresnelPower; float _FresnelIntensity; float _FresnelBias; float _Invert; float _BumpScale; float _Opacity; float _XRayFresnelPower; float _DesaturateBackground; float _Refraction; float _SpreadDetailMap; float _RotationAngle; float _RotationSpeed; float _TexturesScale; float _TranslationSpeed; float _ContrastDetailMap; float _Glossiness; float _ShadowOpacity; #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END sampler2D _MainTex; sampler2D _BumpMap; sampler2D _DetailMap; float3 AdditionalLightsLambert( float3 WorldPosition , float3 WorldNormal ) { float3 Color = 0; #ifdef _ADDITIONAL_LIGHTS int numLights = GetAdditionalLightsCount(); for(int i = 0; i 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, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _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")] VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { VertexInput o = (VertexInput) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; o.ase_texcoord = patch[0].ase_texcoord * bary.x + patch[1].ase_texcoord * bary.y + patch[2].ase_texcoord * bary.z; o.ase_tangent = patch[0].ase_tangent * bary.x + patch[1].ase_tangent * bary.y + patch[2].ase_tangent * bary.z; o.texcoord1 = patch[0].texcoord1 * bary.x + patch[1].texcoord1 * bary.y + patch[2].texcoord1 * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_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 VertexOutput vert ( VertexInput v ) { return VertexFunction( v ); } #endif half4 frag ( VertexOutput IN ) : SV_Target { UNITY_SETUP_INSTANCE_ID( IN ); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) float3 WorldPosition = IN.worldPos; #endif float4 ShadowCoords = float4( 0, 0, 0, 0 ); #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) ShadowCoords = IN.shadowCoord; #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); #endif #endif float2 uv0_MainTex = IN.ase_texcoord3.xy * _MainTex_ST.xy + _MainTex_ST.zw; float2 uv0_BumpMap = float4(IN.ase_texcoord3.xy,0,0).xy * _BumpMap_ST.xy + _BumpMap_ST.zw; float3 NormalmapXYZ572 = UnpackNormalScale( tex2D( _BumpMap, uv0_BumpMap ), _BumpScale ); float3 ase_worldTangent = IN.ase_texcoord4.xyz; float3 ase_worldNormal = IN.ase_texcoord5.xyz; float3 ase_worldBitangent = IN.ase_texcoord6.xyz; float3 tanToWorld0 = float3( ase_worldTangent.x, ase_worldBitangent.x, ase_worldNormal.x ); float3 tanToWorld1 = float3( ase_worldTangent.y, ase_worldBitangent.y, ase_worldNormal.y ); float3 tanToWorld2 = float3( ase_worldTangent.z, ase_worldBitangent.z, ase_worldNormal.z ); float3 tanNormal574 = NormalmapXYZ572; float3 worldNormal574 = float3(dot(tanToWorld0,tanNormal574), dot(tanToWorld1,tanNormal574), dot(tanToWorld2,tanNormal574)); float dotResult577 = dot( worldNormal574 , _MainLightPosition.xyz ); float ase_lightAtten = 0; Light ase_lightAtten_mainLight = GetMainLight( ShadowCoords ); ase_lightAtten = ase_lightAtten_mainLight.distanceAttenuation * ase_lightAtten_mainLight.shadowAttenuation; float3 WorldPosition5_g1 = WorldPosition; float3 tanNormal12_g1 = NormalmapXYZ572; float3 worldNormal12_g1 = float3(dot(tanToWorld0,tanNormal12_g1), dot(tanToWorld1,tanNormal12_g1), dot(tanToWorld2,tanNormal12_g1)); float3 WorldNormal5_g1 = worldNormal12_g1; float3 localAdditionalLightsLambert5_g1 = AdditionalLightsLambert( WorldPosition5_g1 , WorldNormal5_g1 ); float3 tanNormal585 = NormalmapXYZ572; float3 bakedGI585 = ASEIndirectDiffuse( IN.lightmapUVOrVertexSH.xy, float3(dot(tanToWorld0,tanNormal585), dot(tanToWorld1,tanNormal585), dot(tanToWorld2,tanNormal585))); float3 ase_worldViewDir = ( _WorldSpaceCameraPos.xyz - WorldPosition ); ase_worldViewDir = normalize(ase_worldViewDir); float3 tanNormal594 = NormalmapXYZ572; half3 reflectVector594 = reflect( -ase_worldViewDir, float3(dot(tanToWorld0,tanNormal594), dot(tanToWorld1,tanNormal594), dot(tanToWorld2,tanNormal594)) ); float3 indirectSpecular594 = GlossyEnvironmentReflection( reflectVector594, 1.0 - _Glossiness, 1.0 ); float3 tanNormal584 = NormalmapXYZ572; float fresnelNdotV584 = dot( float3(dot(tanToWorld0,tanNormal584), dot(tanToWorld1,tanNormal584), dot(tanToWorld2,tanNormal584)), ase_worldViewDir ); float fresnelNode584 = ( 0.04 + 1.0 * pow( 1.0 - fresnelNdotV584, 1.11 ) ); float clampResult591 = clamp( fresnelNode584 , 0.0 , 1.0 ); #ifdef _ENABLESPECULARLIGHT_ON float staticSwitch592 = clampResult591; #else float staticSwitch592 = 0.0; #endif float4 lerpResult595 = lerp( ( ( _Color * tex2D( _MainTex, uv0_MainTex ) ) * float4( ( ( ( max( dotResult577 , 0.0 ) * ( ase_lightAtten * _MainLightColor.rgb ) ) + localAdditionalLightsLambert5_g1 ) + bakedGI585 ) , 0.0 ) ) , float4( indirectSpecular594 , 0.0 ) , staticSwitch592); float4 CustomLight596 = lerpResult595; float4 screenPos = IN.ase_texcoord8; float4 ase_grabScreenPos = ASE_ComputeGrabScreenPos( screenPos ); float4 ase_grabScreenPosNorm = ase_grabScreenPos / ase_grabScreenPos.w; float3 normalizedWorldNormal = normalize( ase_worldNormal ); float3 temp_output_271_0 = mul( float4( normalizedWorldNormal , 0.0 ), UNITY_MATRIX_V ).xyz; float3 temp_output_272_0 = ( temp_output_271_0 + NormalmapXYZ572 ); float TranslationSpeed329 = _TranslationSpeed; float2 temp_cast_14 = (TranslationSpeed329).xx; float2 uv0_DetailMap = float4(IN.ase_texcoord3.xy,0,0).xy * _DetailMap_ST.xy + _DetailMap_ST.zw; float TexturesScale451 = _TexturesScale; float4 unityObjectToClipPos420 = TransformWorldToHClip(TransformObjectToWorld(IN.ase_texcoord9.xyz)); float4 computeScreenPos421 = ComputeScreenPos( unityObjectToClipPos420 ); float4 unityObjectToClipPos437 = TransformWorldToHClip(TransformObjectToWorld(float3(0,0,0))); float4 computeScreenPos438 = ComputeScreenPos( unityObjectToClipPos437 ); float4 transform428 = mul(GetObjectToWorldMatrix(),float4( WorldPosition , 0.0 )); float4 WorldProjection345 = ( ( ( ( computeScreenPos421 / (computeScreenPos421).w ) - ( computeScreenPos438 / (computeScreenPos438).w ) ) * _TexturesScale ) * distance( ( float4( _WorldSpaceCameraPos , 0.0 ) - transform428 ) , float4( 0,0,0,0 ) ) ); #if defined(_UVSCREENPROJECTION_UVPROJECTION) float4 staticSwitch394 = float4( ( uv0_DetailMap * TexturesScale451 ), 0.0 , 0.0 ); #elif defined(_UVSCREENPROJECTION_SCREENPROJECTION) float4 staticSwitch394 = WorldProjection345; #else float4 staticSwitch394 = float4( ( uv0_DetailMap * TexturesScale451 ), 0.0 , 0.0 ); #endif float RotationSpeed330 = _RotationSpeed; float mulTime304 = _TimeParameters.x * RotationSpeed330; float RotationAngle331 = _RotationAngle; float cos301 = cos( ( mulTime304 + radians( RotationAngle331 ) ) ); float sin301 = sin( ( mulTime304 + radians( RotationAngle331 ) ) ); float2 rotator301 = mul( staticSwitch394.xy - float2( 0.5,0.5 ) , float2x2( cos301 , -sin301 , sin301 , cos301 )) + float2( 0.5,0.5 ); float2 panner282 = ( ( _TimeParameters.x * 0.05 ) * temp_cast_14 + rotator301); float4 tex2DNode295 = tex2D( _DetailMap, panner282 ); float2 temp_cast_20 = (-TranslationSpeed329).xx; float mulTime317 = _TimeParameters.x * -RotationSpeed330; float cos322 = cos( ( mulTime317 + radians( -RotationAngle331 ) ) ); float sin322 = sin( ( mulTime317 + radians( -RotationAngle331 ) ) ); float2 rotator322 = mul( staticSwitch394.xy - float2( 0.5,0.5 ) , float2x2( cos322 , -sin322 , sin322 , cos322 )) + float2( 0.5,0.5 ); float2 panner325 = ( ( _TimeParameters.x * 0.05 ) * temp_cast_20 + rotator322); #ifdef _DUPLICATEDETAILS_ON float4 staticSwitch341 = ( CalculateContrast(_ContrastDetailMap,( tex2D( _DetailMap, ( 1.0 - panner325 ) ) + tex2DNode295 )) + _SpreadDetailMap ); #else float4 staticSwitch341 = ( CalculateContrast(( _ContrastDetailMap * 1.25 ),tex2DNode295) + _SpreadDetailMap ); #endif float4 NoiseMapRefraction484 = staticSwitch341; float4 temp_output_482_0 = ( float4( temp_output_271_0 , 0.0 ) + NoiseMapRefraction484 ); #if defined(_MAPCONTRIBUTION_NONE) float4 staticSwitch480 = float4( temp_output_271_0 , 0.0 ); #elif defined(_MAPCONTRIBUTION_NORMALMAP) float4 staticSwitch480 = float4( temp_output_272_0 , 0.0 ); #elif defined(_MAPCONTRIBUTION_DETAILMAP) float4 staticSwitch480 = temp_output_482_0; #elif defined(_MAPCONTRIBUTION_BOTH) float4 staticSwitch480 = ( float4( temp_output_272_0 , 0.0 ) + temp_output_482_0 ); #else float4 staticSwitch480 = float4( temp_output_271_0 , 0.0 ); #endif float4 fetchOpaqueVal15 = float4( SHADERGRAPH_SAMPLE_SCENE_COLOR( ( (ase_grabScreenPosNorm).xyzw + (( staticSwitch480 * (-1.0 + (_Refraction - 0.0) * (1.0 - -1.0) / (2.0 - 0.0)) )).rgba ).xy ), 1.0 ); float3 desaturateInitialColor278 = fetchOpaqueVal15.rgb; float desaturateDot278 = dot( desaturateInitialColor278, float3( 0.299, 0.587, 0.114 )); float3 desaturateVar278 = lerp( desaturateInitialColor278, desaturateDot278.xxx, _DesaturateBackground ); float OpacitySlider208 = ( 1.0 - _Opacity ); float4 lerpResult258 = lerp( float4( desaturateVar278 , 0.0 ) , _FillColorBackground , OpacitySlider208); float4 GrabSreenRefraction16 = lerpResult258; float clampResult80 = clamp( _FresnelIntensity , 0.0 , 200.0 ); float fresnelNdotV72 = dot( ase_worldNormal, ase_worldViewDir ); float fresnelNode72 = ( _FresnelBias + clampResult80 * pow( 1.0 - fresnelNdotV72, _FresnelPower ) ); float4 NoiseMap288 = ( staticSwitch341 * _DetailScale ); float mulTime562 = _TimeParameters.x * _AmplitudeSpeed; float lerpResult564 = lerp( _MaxValueAmplitude , _MinValueAmplitude , sin( mulTime562 )); float4 clampResult35 = clamp( ( (( _Invert )?( ( 1.0 - fresnelNode72 ) ):( fresnelNode72 )) * NoiseMap288 * lerpResult564 ) , float4( 0,0,0,0 ) , float4( 1,1,1,0 ) ); float4 FresnelMask197 = clampResult35; float4 lerpResult225 = lerp( GrabSreenRefraction16 , _FresnelColor , FresnelMask197); float4 Emission263 = ( _SelfIllumination * lerpResult225 ); float3 Color = ( CustomLight596 + Emission263 ).rgb; float Alpha = 1; float AlphaClipThreshold = 0.5; #ifdef _ALPHATEST_ON clip( Alpha - AlphaClipThreshold ); #endif #ifdef LOD_FADE_CROSSFADE LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); #endif #ifdef ASE_FOG Color = MixFog( Color, IN.fogFactor ); #endif return half4( Color, Alpha ); } ENDHLSL } Pass { Name "Forward" Tags { "LightMode"="UniversalForward" } Blend SrcAlpha OneMinusSrcAlpha, One OneMinusSrcAlpha ZWrite Off ZTest Greater Offset 0 , 0 ColorMask RGBA HLSLPROGRAM #pragma multi_compile_instancing #define ASE_SRP_VERSION 70301 #define REQUIRE_OPAQUE_TEXTURE 1 #pragma prefer_hlslcc gles #pragma exclude_renderers d3d11_9x #pragma vertex vert #pragma fragment frag #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.core/ShaderLibrary/Color.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl" #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderGraphFunctions.hlsl" #if ASE_SRP_VERSION <= 70108 #define REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR #endif #define ASE_NEEDS_VERT_NORMAL #define ASE_NEEDS_FRAG_WORLD_POSITION #pragma shader_feature_local _MAPCONTRIBUTION_NONE _MAPCONTRIBUTION_NORMALMAP _MAPCONTRIBUTION_DETAILMAP _MAPCONTRIBUTION_BOTH #pragma shader_feature_local _DUPLICATEDETAILS_ON #pragma shader_feature_local _UVSCREENPROJECTION_UVPROJECTION _UVSCREENPROJECTION_SCREENPROJECTION #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS struct VertexInput { float4 vertex : POSITION; float3 ase_normal : NORMAL; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct VertexOutput { float4 clipPos : SV_POSITION; #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) float3 worldPos : TEXCOORD0; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord : TEXCOORD1; #endif #ifdef ASE_FOG float fogFactor : TEXCOORD2; #endif 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 _Color; float4 _XRayColor; float4 _FresnelColor; float4 _DetailMap_ST; float4 _FillColorBackground; float4 _BumpMap_ST; float4 _MainTex_ST; float _SelfIllumination; float _XRayFresnelIntensity; float _XRayBias; float _AmplitudeSpeed; float _MinValueAmplitude; float _MaxValueAmplitude; float _DetailScale; float _FresnelPower; float _FresnelIntensity; float _FresnelBias; float _Invert; float _BumpScale; float _Opacity; float _XRayFresnelPower; float _DesaturateBackground; float _Refraction; float _SpreadDetailMap; float _RotationAngle; float _RotationSpeed; float _TexturesScale; float _TranslationSpeed; float _ContrastDetailMap; float _Glossiness; float _ShadowOpacity; #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END sampler2D _BumpMap; sampler2D _DetailMap; inline float4 ASE_ComputeGrabScreenPos( float4 pos ) { #if UNITY_UV_STARTS_AT_TOP float scale = -1.0; #else float scale = 1.0; #endif float4 o = pos; o.y = pos.w * 0.5f; o.y = ( pos.y - o.y ) * _ProjectionParams.x * scale + o.y; return o; } 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 ); } VertexOutput VertexFunction ( VertexInput v ) { VertexOutput o = (VertexOutput)0; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); float4 ase_clipPos = TransformObjectToHClip((v.vertex).xyz); float4 screenPos = ComputeScreenPos(ase_clipPos); o.ase_texcoord3 = screenPos; float3 ase_worldNormal = TransformObjectToWorldNormal(v.ase_normal); o.ase_texcoord4.xyz = ase_worldNormal; o.ase_texcoord5.xy = v.ase_texcoord.xy; o.ase_texcoord6 = v.vertex; //setting value to unused interpolator channels and avoid initialization warnings o.ase_texcoord4.w = 0; o.ase_texcoord5.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.ase_normal = v.ase_normal; float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); float4 positionCS = TransformWorldToHClip( positionWS ); #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) o.worldPos = positionWS; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) VertexPositionInputs vertexInput = (VertexPositionInputs)0; vertexInput.positionWS = positionWS; vertexInput.positionCS = positionCS; o.shadowCoord = GetShadowCoord( vertexInput ); #endif #ifdef ASE_FOG o.fogFactor = ComputeFogFactor( positionCS.z ); #endif o.clipPos = positionCS; return o; } #if defined(TESSELLATION_ON) struct VertexControl { float4 vertex : INTERNALTESSPOS; float3 ase_normal : NORMAL; float4 ase_texcoord : TEXCOORD0; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( VertexInput v ) { VertexControl o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = v.vertex; o.ase_normal = v.ase_normal; 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, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _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")] VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { VertexInput o = (VertexInput) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * 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].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_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 VertexOutput vert ( VertexInput v ) { return VertexFunction( v ); } #endif half4 frag ( VertexOutput IN ) : SV_Target { UNITY_SETUP_INSTANCE_ID( IN ); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) float3 WorldPosition = IN.worldPos; #endif float4 ShadowCoords = float4( 0, 0, 0, 0 ); #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) ShadowCoords = IN.shadowCoord; #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); #endif #endif float4 screenPos = IN.ase_texcoord3; float4 ase_grabScreenPos = ASE_ComputeGrabScreenPos( screenPos ); float4 ase_grabScreenPosNorm = ase_grabScreenPos / ase_grabScreenPos.w; float3 ase_worldNormal = IN.ase_texcoord4.xyz; float3 normalizedWorldNormal = normalize( ase_worldNormal ); float3 temp_output_271_0 = mul( float4( normalizedWorldNormal , 0.0 ), UNITY_MATRIX_V ).xyz; float2 uv0_BumpMap = IN.ase_texcoord5.xy * _BumpMap_ST.xy + _BumpMap_ST.zw; float3 NormalmapXYZ572 = UnpackNormalScale( tex2D( _BumpMap, uv0_BumpMap ), _BumpScale ); float3 temp_output_272_0 = ( temp_output_271_0 + NormalmapXYZ572 ); float TranslationSpeed329 = _TranslationSpeed; float2 temp_cast_12 = (TranslationSpeed329).xx; float2 uv0_DetailMap = float4(IN.ase_texcoord5.xy,0,0).xy * _DetailMap_ST.xy + _DetailMap_ST.zw; float TexturesScale451 = _TexturesScale; float4 unityObjectToClipPos420 = TransformWorldToHClip(TransformObjectToWorld(IN.ase_texcoord6.xyz)); float4 computeScreenPos421 = ComputeScreenPos( unityObjectToClipPos420 ); float4 unityObjectToClipPos437 = TransformWorldToHClip(TransformObjectToWorld(float3(0,0,0))); float4 computeScreenPos438 = ComputeScreenPos( unityObjectToClipPos437 ); float4 transform428 = mul(GetObjectToWorldMatrix(),float4( WorldPosition , 0.0 )); float4 WorldProjection345 = ( ( ( ( computeScreenPos421 / (computeScreenPos421).w ) - ( computeScreenPos438 / (computeScreenPos438).w ) ) * _TexturesScale ) * distance( ( float4( _WorldSpaceCameraPos , 0.0 ) - transform428 ) , float4( 0,0,0,0 ) ) ); #if defined(_UVSCREENPROJECTION_UVPROJECTION) float4 staticSwitch394 = float4( ( uv0_DetailMap * TexturesScale451 ), 0.0 , 0.0 ); #elif defined(_UVSCREENPROJECTION_SCREENPROJECTION) float4 staticSwitch394 = WorldProjection345; #else float4 staticSwitch394 = float4( ( uv0_DetailMap * TexturesScale451 ), 0.0 , 0.0 ); #endif float RotationSpeed330 = _RotationSpeed; float mulTime304 = _TimeParameters.x * RotationSpeed330; float RotationAngle331 = _RotationAngle; float cos301 = cos( ( mulTime304 + radians( RotationAngle331 ) ) ); float sin301 = sin( ( mulTime304 + radians( RotationAngle331 ) ) ); float2 rotator301 = mul( staticSwitch394.xy - float2( 0.5,0.5 ) , float2x2( cos301 , -sin301 , sin301 , cos301 )) + float2( 0.5,0.5 ); float2 panner282 = ( ( _TimeParameters.x * 0.05 ) * temp_cast_12 + rotator301); float4 tex2DNode295 = tex2D( _DetailMap, panner282 ); float2 temp_cast_18 = (-TranslationSpeed329).xx; float mulTime317 = _TimeParameters.x * -RotationSpeed330; float cos322 = cos( ( mulTime317 + radians( -RotationAngle331 ) ) ); float sin322 = sin( ( mulTime317 + radians( -RotationAngle331 ) ) ); float2 rotator322 = mul( staticSwitch394.xy - float2( 0.5,0.5 ) , float2x2( cos322 , -sin322 , sin322 , cos322 )) + float2( 0.5,0.5 ); float2 panner325 = ( ( _TimeParameters.x * 0.05 ) * temp_cast_18 + rotator322); #ifdef _DUPLICATEDETAILS_ON float4 staticSwitch341 = ( CalculateContrast(_ContrastDetailMap,( tex2D( _DetailMap, ( 1.0 - panner325 ) ) + tex2DNode295 )) + _SpreadDetailMap ); #else float4 staticSwitch341 = ( CalculateContrast(( _ContrastDetailMap * 1.25 ),tex2DNode295) + _SpreadDetailMap ); #endif float4 NoiseMapRefraction484 = staticSwitch341; float4 temp_output_482_0 = ( float4( temp_output_271_0 , 0.0 ) + NoiseMapRefraction484 ); #if defined(_MAPCONTRIBUTION_NONE) float4 staticSwitch480 = float4( temp_output_271_0 , 0.0 ); #elif defined(_MAPCONTRIBUTION_NORMALMAP) float4 staticSwitch480 = float4( temp_output_272_0 , 0.0 ); #elif defined(_MAPCONTRIBUTION_DETAILMAP) float4 staticSwitch480 = temp_output_482_0; #elif defined(_MAPCONTRIBUTION_BOTH) float4 staticSwitch480 = ( float4( temp_output_272_0 , 0.0 ) + temp_output_482_0 ); #else float4 staticSwitch480 = float4( temp_output_271_0 , 0.0 ); #endif float4 fetchOpaqueVal15 = float4( SHADERGRAPH_SAMPLE_SCENE_COLOR( ( (ase_grabScreenPosNorm).xyzw + (( staticSwitch480 * (-1.0 + (_Refraction - 0.0) * (1.0 - -1.0) / (2.0 - 0.0)) )).rgba ).xy ), 1.0 ); float3 desaturateInitialColor278 = fetchOpaqueVal15.rgb; float desaturateDot278 = dot( desaturateInitialColor278, float3( 0.299, 0.587, 0.114 )); float3 desaturateVar278 = lerp( desaturateInitialColor278, desaturateDot278.xxx, _DesaturateBackground ); float3 ase_worldViewDir = ( _WorldSpaceCameraPos.xyz - WorldPosition ); ase_worldViewDir = normalize(ase_worldViewDir); float clampResult559 = clamp( _XRayFresnelIntensity , 0.0 , 1.0 ); float clampResult560 = clamp( _XRayFresnelPower , 0.0 , 10.0 ); float fresnelNdotV536 = dot( ase_worldNormal, ase_worldViewDir ); float fresnelNode536 = ( _XRayBias + clampResult559 * pow( 1.0 - fresnelNdotV536, clampResult560 ) ); float4 lerpResult643 = lerp( float4( ( _XRayColor.a * desaturateVar278 ) , 0.0 ) , _XRayColor , fresnelNode536); float Opacity250 = (0.5 + (( 1.0 - _ShadowOpacity ) - 0.0) * (1.0 - 0.5) / (1.0 - 0.0)); float3 BakedAlbedo = 0; float3 BakedEmission = 0; float3 Color = lerpResult643.rgb; float Alpha = Opacity250; float AlphaClipThreshold = 0.5; #ifdef _ALPHATEST_ON clip( Alpha - AlphaClipThreshold ); #endif #ifdef LOD_FADE_CROSSFADE LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); #endif #ifdef ASE_FOG Color = MixFog( Color, IN.fogFactor ); #endif return half4( Color, Alpha ); } ENDHLSL } Pass { Name "ShadowCaster" Tags { "LightMode"="ShadowCaster" } ZWrite On ZTest LEqual HLSLPROGRAM #pragma multi_compile_instancing #define ASE_SRP_VERSION 70301 #pragma prefer_hlslcc gles #pragma exclude_renderers d3d11_9x #pragma vertex vert #pragma fragment frag #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/ShaderGraphFunctions.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS struct VertexInput { float4 vertex : POSITION; float3 ase_normal : NORMAL; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct VertexOutput { float4 clipPos : SV_POSITION; #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) float3 worldPos : TEXCOORD0; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord : TEXCOORD1; #endif UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _Color; float4 _XRayColor; float4 _FresnelColor; float4 _DetailMap_ST; float4 _FillColorBackground; float4 _BumpMap_ST; float4 _MainTex_ST; float _SelfIllumination; float _XRayFresnelIntensity; float _XRayBias; float _AmplitudeSpeed; float _MinValueAmplitude; float _MaxValueAmplitude; float _DetailScale; float _FresnelPower; float _FresnelIntensity; float _FresnelBias; float _Invert; float _BumpScale; float _Opacity; float _XRayFresnelPower; float _DesaturateBackground; float _Refraction; float _SpreadDetailMap; float _RotationAngle; float _RotationSpeed; float _TexturesScale; float _TranslationSpeed; float _ContrastDetailMap; float _Glossiness; float _ShadowOpacity; #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END float3 _LightDirection; VertexOutput VertexFunction( VertexInput v ) { VertexOutput o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o ); #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.ase_normal = v.ase_normal; float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) o.worldPos = positionWS; #endif float3 normalWS = TransformObjectToWorldDir( v.ase_normal ); float4 clipPos = TransformWorldToHClip( ApplyShadowBias( positionWS, normalWS, _LightDirection ) ); #if UNITY_REVERSED_Z clipPos.z = min(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); #else clipPos.z = max(clipPos.z, clipPos.w * UNITY_NEAR_CLIP_VALUE); #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) VertexPositionInputs vertexInput = (VertexPositionInputs)0; vertexInput.positionWS = positionWS; vertexInput.positionCS = clipPos; o.shadowCoord = GetShadowCoord( vertexInput ); #endif o.clipPos = clipPos; return o; } #if defined(TESSELLATION_ON) struct VertexControl { float4 vertex : INTERNALTESSPOS; float3 ase_normal : NORMAL; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( VertexInput v ) { VertexControl o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = v.vertex; o.ase_normal = v.ase_normal; 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, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _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")] VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { VertexInput o = (VertexInput) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_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 VertexOutput vert ( VertexInput v ) { return VertexFunction( v ); } #endif half4 frag(VertexOutput IN ) : SV_TARGET { UNITY_SETUP_INSTANCE_ID( IN ); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) float3 WorldPosition = IN.worldPos; #endif float4 ShadowCoords = float4( 0, 0, 0, 0 ); #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) ShadowCoords = IN.shadowCoord; #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); #endif #endif float Opacity250 = (0.5 + (( 1.0 - _ShadowOpacity ) - 0.0) * (1.0 - 0.5) / (1.0 - 0.0)); float Alpha = Opacity250; float AlphaClipThreshold = 0.5; #ifdef _ALPHATEST_ON clip(Alpha - AlphaClipThreshold); #endif #ifdef LOD_FADE_CROSSFADE LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); #endif return 0; } ENDHLSL } Pass { Name "DepthOnly" Tags { "LightMode"="DepthOnly" } ZWrite On ColorMask 0 HLSLPROGRAM #pragma multi_compile_instancing #define ASE_SRP_VERSION 70301 #pragma prefer_hlslcc gles #pragma exclude_renderers d3d11_9x #pragma vertex vert #pragma fragment frag #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/ShaderGraphFunctions.hlsl" #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl" #pragma multi_compile _ _ADDITIONAL_LIGHTS_VERTEX _ADDITIONAL_LIGHTS #pragma multi_compile _ _ADDITIONAL_LIGHT_SHADOWS struct VertexInput { float4 vertex : POSITION; float3 ase_normal : NORMAL; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct VertexOutput { float4 clipPos : SV_POSITION; #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) float3 worldPos : TEXCOORD0; #endif #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) float4 shadowCoord : TEXCOORD1; #endif UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO }; CBUFFER_START(UnityPerMaterial) float4 _Color; float4 _XRayColor; float4 _FresnelColor; float4 _DetailMap_ST; float4 _FillColorBackground; float4 _BumpMap_ST; float4 _MainTex_ST; float _SelfIllumination; float _XRayFresnelIntensity; float _XRayBias; float _AmplitudeSpeed; float _MinValueAmplitude; float _MaxValueAmplitude; float _DetailScale; float _FresnelPower; float _FresnelIntensity; float _FresnelBias; float _Invert; float _BumpScale; float _Opacity; float _XRayFresnelPower; float _DesaturateBackground; float _Refraction; float _SpreadDetailMap; float _RotationAngle; float _RotationSpeed; float _TexturesScale; float _TranslationSpeed; float _ContrastDetailMap; float _Glossiness; float _ShadowOpacity; #ifdef TESSELLATION_ON float _TessPhongStrength; float _TessValue; float _TessMin; float _TessMax; float _TessEdgeLength; float _TessMaxDisp; #endif CBUFFER_END VertexOutput VertexFunction( VertexInput v ) { VertexOutput o = (VertexOutput)0; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); #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.ase_normal = v.ase_normal; float3 positionWS = TransformObjectToWorld( v.vertex.xyz ); #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) o.worldPos = positionWS; #endif o.clipPos = TransformWorldToHClip( positionWS ); #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) && defined(ASE_NEEDS_FRAG_SHADOWCOORDS) VertexPositionInputs vertexInput = (VertexPositionInputs)0; vertexInput.positionWS = positionWS; vertexInput.positionCS = clipPos; o.shadowCoord = GetShadowCoord( vertexInput ); #endif return o; } #if defined(TESSELLATION_ON) struct VertexControl { float4 vertex : INTERNALTESSPOS; float3 ase_normal : NORMAL; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct TessellationFactors { float edge[3] : SV_TessFactor; float inside : SV_InsideTessFactor; }; VertexControl vert ( VertexInput v ) { VertexControl o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); o.vertex = v.vertex; o.ase_normal = v.ase_normal; 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, GetObjectToWorldMatrix(), _WorldSpaceCameraPos ); #elif defined(ASE_LENGTH_TESSELLATION) tf = EdgeLengthBasedTess(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, GetObjectToWorldMatrix(), _WorldSpaceCameraPos, _ScreenParams ); #elif defined(ASE_LENGTH_CULL_TESSELLATION) tf = EdgeLengthBasedTessCull(v[0].vertex, v[1].vertex, v[2].vertex, edgeLength, tessMaxDisp, GetObjectToWorldMatrix(), _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")] VertexOutput DomainFunction(TessellationFactors factors, OutputPatch patch, float3 bary : SV_DomainLocation) { VertexInput o = (VertexInput) 0; o.vertex = patch[0].vertex * bary.x + patch[1].vertex * bary.y + patch[2].vertex * bary.z; o.ase_normal = patch[0].ase_normal * bary.x + patch[1].ase_normal * bary.y + patch[2].ase_normal * bary.z; #if defined(ASE_PHONG_TESSELLATION) float3 pp[3]; for (int i = 0; i < 3; ++i) pp[i] = o.vertex.xyz - patch[i].ase_normal * (dot(o.vertex.xyz, patch[i].ase_normal) - dot(patch[i].vertex.xyz, patch[i].ase_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 VertexOutput vert ( VertexInput v ) { return VertexFunction( v ); } #endif half4 frag(VertexOutput IN ) : SV_TARGET { UNITY_SETUP_INSTANCE_ID(IN); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX( IN ); #if defined(ASE_NEEDS_FRAG_WORLD_POSITION) float3 WorldPosition = IN.worldPos; #endif float4 ShadowCoords = float4( 0, 0, 0, 0 ); #if defined(ASE_NEEDS_FRAG_SHADOWCOORDS) #if defined(REQUIRES_VERTEX_SHADOW_COORD_INTERPOLATOR) ShadowCoords = IN.shadowCoord; #elif defined(MAIN_LIGHT_CALCULATE_SHADOWS) ShadowCoords = TransformWorldToShadowCoord( WorldPosition ); #endif #endif float Opacity250 = (0.5 + (( 1.0 - _ShadowOpacity ) - 0.0) * (1.0 - 0.5) / (1.0 - 0.0)); float Alpha = Opacity250; float AlphaClipThreshold = 0.5; #ifdef _ALPHATEST_ON clip(Alpha - AlphaClipThreshold); #endif #ifdef LOD_FADE_CROSSFADE LODDitheringTransition( IN.clipPos.xyz, unity_LODFade.x ); #endif return 0; } ENDHLSL } } CustomEditor "UnityEditor.ShaderGraph.PBRMasterGUI" Fallback "Hidden/InternalErrorShader" }