// Made with Amplify Shader Editor // Available at the Unity Asset Store - http://u3d.as/y3X // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)' Shader "Hidden/PostProcess/Pixelize/ScreenAndMask" { Properties { _MainTex ( "Screen", 2D ) = "black" {} } SubShader { ZTest Always Cull Off ZWrite Off Pass { CGPROGRAM #pragma vertex vert_img_custom #pragma fragment frag #pragma target 3.0 #include "UnityCG.cginc" #include "UnityShaderVariables.cginc" struct appdata_img_custom { float4 vertex : POSITION; half2 texcoord : TEXCOORD0; }; struct v2f_img_custom { float4 pos : SV_POSITION; half2 uv : TEXCOORD0; half2 stereoUV : TEXCOORD2; #if UNITY_UV_STARTS_AT_TOP half4 uv2 : TEXCOORD1; half4 stereoUV2 : TEXCOORD3; #endif float4 ase_texcoord4 : TEXCOORD4; }; uniform sampler2D _MainTex; uniform half4 _MainTex_TexelSize; uniform half4 _MainTex_ST; uniform float3 _SpherePosition; uniform sampler2D _CameraDepthTexture; uniform float _SphereRadius; uniform float _MaskDensity; uniform float _MaskExponent; v2f_img_custom vert_img_custom ( appdata_img_custom v ) { v2f_img_custom o; float4 ase_clipPos = UnityObjectToClipPos(v.vertex); float4 screenPos = ComputeScreenPos(ase_clipPos); o.ase_texcoord4 = screenPos; o.pos = UnityObjectToClipPos ( v.vertex ); o.uv = float4( v.texcoord.xy, 1, 1 ); #if UNITY_UV_STARTS_AT_TOP o.uv2 = float4( v.texcoord.xy, 1, 1 ); o.stereoUV2 = UnityStereoScreenSpaceUVAdjust ( o.uv2, _MainTex_ST ); if ( _MainTex_TexelSize.y < 0.0 ) o.uv.y = 1.0 - o.uv.y; #endif o.stereoUV = UnityStereoScreenSpaceUVAdjust ( o.uv, _MainTex_ST ); return o; } half4 frag ( v2f_img_custom i ) : SV_Target { #ifdef UNITY_UV_STARTS_AT_TOP half2 uv = i.uv2; half2 stereoUV = i.stereoUV2; #else half2 uv = i.uv; half2 stereoUV = i.stereoUV; #endif half4 finalColor; // ase common template code float3 CamPosition11_g2 = _WorldSpaceCameraPos; float3 SphereCenter4_g2 = _SpherePosition; float3 SphereToCam17_g2 = ( CamPosition11_g2 - SphereCenter4_g2 ); float4 screenPos = i.ase_texcoord4; float4 ase_screenPosNorm = screenPos / screenPos.w; ase_screenPosNorm.z = ( UNITY_NEAR_CLIP_VALUE >= 0 ) ? ase_screenPosNorm.z : ase_screenPosNorm.z * 0.5 + 0.5; float4 tex2DNode36_g1 = tex2D( _CameraDepthTexture, ase_screenPosNorm.xy ); #ifdef UNITY_REVERSED_Z float4 staticSwitch38_g1 = ( 1.0 - tex2DNode36_g1 ); #else float4 staticSwitch38_g1 = tex2DNode36_g1; #endif float3 appendResult39_g1 = (float3(ase_screenPosNorm.x , ase_screenPosNorm.y , staticSwitch38_g1.r)); float4 appendResult42_g1 = (float4((appendResult39_g1*2.0 + -1.0) , 1.0)); float4 temp_output_43_0_g1 = mul( unity_CameraInvProjection, appendResult42_g1 ); float4 appendResult49_g1 = (float4(( ( (temp_output_43_0_g1).xyz / (temp_output_43_0_g1).w ) * float3( 1,1,-1 ) ) , 1.0)); float3 WorldPosition122_g2 = mul( unity_CameraToWorld, appendResult49_g1 ).xyz; float3 temp_output_9_0_g2 = ( _WorldSpaceCameraPos - WorldPosition122_g2 ); float3 normalizeResult10_g2 = normalize( temp_output_9_0_g2 ); float3 ViewDirection12_g2 = normalizeResult10_g2; float dotResult20_g2 = dot( SphereToCam17_g2 , ViewDirection12_g2 ); float DirectionsSimilarity21_g2 = dotResult20_g2; float dotResult24_g2 = dot( SphereToCam17_g2 , SphereToCam17_g2 ); float SphereRadius5_g2 = _SphereRadius; float Ratio25_g2 = ( ( DirectionsSimilarity21_g2 * DirectionsSimilarity21_g2 ) - ( dotResult24_g2 - ( SphereRadius5_g2 * SphereRadius5_g2 ) ) ); float SqrtRatio37_g2 = sqrt( Ratio25_g2 ); float temp_output_40_0_g2 = ( SqrtRatio37_g2 + -DirectionsSimilarity21_g2 ); float DistanceToPixel114_g2 = -length( temp_output_9_0_g2 ); float RejectionValue162_g2 = (( temp_output_40_0_g2 < DistanceToPixel114_g2 ) ? -1.0 : Ratio25_g2 ); float temp_output_41_0_g2 = ( -DirectionsSimilarity21_g2 - SqrtRatio37_g2 ); float3 ExitPoint44_g2 = ( CamPosition11_g2 + ( ViewDirection12_g2 * max( temp_output_41_0_g2 , DistanceToPixel114_g2 ) ) ); float DistanceToEntryPoint139_g2 = temp_output_40_0_g2; float3 EntryPoint45_g2 = ( ( DistanceToEntryPoint139_g2 * ViewDirection12_g2 ) + CamPosition11_g2 ); float temp_output_170_0_g2 = ( 1.0 - ( distance( SphereCenter4_g2 , ( ( ExitPoint44_g2 + EntryPoint45_g2 ) * float3( 0.5,0.5,0.5 ) ) ) / SphereRadius5_g2 ) ); float LinearDensity173_g2 = temp_output_170_0_g2; float4 appendResult136 = (float4(tex2D( _MainTex, i.uv.xy ).rgb , pow( ( (( RejectionValue162_g2 < 0.0 ) ? 0.0 : LinearDensity173_g2 ) * _MaskDensity ) , _MaskExponent ))); finalColor = appendResult136; return finalColor; } ENDCG } } CustomEditor "ASEMaterialInspector" } /*ASEBEGIN Version=16304 1722;92;1161;923;-154.8722;649.91;1.449605;True;False Node;AmplifyShaderEditor.Vector3Node;4;380.8583,44.91288;Float;False;Global;_SpherePosition;_SpherePosition;7;0;Create;True;0;0;False;0;0,0,0;0,1.5,0;0;4;FLOAT3;0;FLOAT;1;FLOAT;2;FLOAT;3 Node;AmplifyShaderEditor.RangedFloatNode;10;379.863,211.7047;Float;False;Global;_SphereRadius;_SphereRadius;2;0;Create;True;0;0;False;0;1;6;0;0;0;1;FLOAT;0 Node;AmplifyShaderEditor.FunctionNode;140;220.753,-42.58594;Float;False;Reconstruct World Position From Depth;0;;1;e7094bcbcc80eb140b2a3dbe6a861de8;0;0;1;FLOAT4;0 Node;AmplifyShaderEditor.RangedFloatNode;8;993.168,198.614;Float;False;Global;_MaskDensity;_MaskDensity;2;0;Create;True;0;0;False;0;1;4.9;0;3;0;1;FLOAT;0 Node;AmplifyShaderEditor.FunctionNode;141;724.8454,-38.27131;Float;False;Compute Volumetric Sphere;-1;;2;21b394060dee4e24d99ea8f6db991160;2,164,1,154,1;3;3;FLOAT3;0,0,0;False;1;FLOAT3;0,0,0;False;2;FLOAT;1;False;7;FLOAT;97;FLOAT;178;FLOAT;88;FLOAT;0;FLOAT3;68;FLOAT3;75;INT;53 Node;AmplifyShaderEditor.SimpleMultiplyOpNode;9;1362.593,152.5419;Float;False;2;2;0;FLOAT;0;False;1;FLOAT;0;False;1;FLOAT;0 Node;AmplifyShaderEditor.RangedFloatNode;137;1240.171,296.0089;Float;False;Global;_MaskExponent;_MaskExponent;2;0;Create;True;0;0;False;0;3;3;0.2;5;0;1;FLOAT;0 Node;AmplifyShaderEditor.TemplateShaderPropertyNode;131;752.8643,-365.0398;Float;False;0;0;_MainTex;Shader;0;5;SAMPLER2D;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.TexCoordVertexDataNode;1;673.2322,-285.6174;Float;False;0;2;0;5;FLOAT2;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.PowerNode;139;1581.171,162.0089;Float;False;2;0;FLOAT;0;False;1;FLOAT;1;False;1;FLOAT;0 Node;AmplifyShaderEditor.SamplerNode;132;937.8646,-362.0398;Float;True;Property;_TextureSample0;Texture Sample 0;4;0;Create;True;0;0;False;0;None;None;True;0;False;white;Auto;False;Object;-1;Auto;Texture2D;6;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;5;COLOR;0;FLOAT;1;FLOAT;2;FLOAT;3;FLOAT;4 Node;AmplifyShaderEditor.DynamicAppendNode;136;1872.132,-94.7847;Float;False;FLOAT4;4;0;FLOAT3;0,0,0;False;1;FLOAT;0;False;2;FLOAT;0;False;3;FLOAT;0;False;1;FLOAT4;0 Node;AmplifyShaderEditor.TemplateMultiPassMasterNode;0;2109.486,-96.0928;Float;False;True;2;Float;ASEMaterialInspector;0;2;Hidden/PostProcess/Pixelize/ScreenAndMask;c71b220b631b6344493ea3cf87110c93;True;SubShader 0 Pass 0;0;0;SubShader 0 Pass 0;1;False;False;False;True;2;False;-1;False;False;True;2;False;-1;True;7;False;-1;False;True;0;False;0;False;False;False;False;False;False;False;False;False;False;True;2;0;;0;0;Standard;0;0;1;True;False;1;0;FLOAT4;0,0,0,0;False;0 WireConnection;141;3;140;0 WireConnection;141;1;4;0 WireConnection;141;2;10;0 WireConnection;9;0;141;97 WireConnection;9;1;8;0 WireConnection;139;0;9;0 WireConnection;139;1;137;0 WireConnection;132;0;131;0 WireConnection;132;1;1;0 WireConnection;136;0;132;0 WireConnection;136;3;139;0 WireConnection;0;0;136;0 ASEEND*/ //CHKSM=6B2FEFF5038291CDD78AE92807ECD78FC43BB37D