﻿Shader "Toman800/Pixel/Extra/Censor"
{
    Properties
    {

		[Header(Pixelation)]
		[Space]
		_Pixelation("Pixelation", Float) = 60
		_PixelOffset("Pixelation Offset", Float) = 0.015
    }

    SubShader
    {

			Tags { "Queue" = "Geometry" "RenderType" = "Opaque" "VRCFallback" = "Hidden" }

		GrabPass{ "_Input" }
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
            };

            struct v2f
            {
                float4 vertex : SV_POSITION;
                float4 uv : TEXCOORD0;
				float distance : TEXCOORD1;
            };

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = ComputeGrabScreenPos(o.vertex);

				float4 objectOrigin = mul(unity_ObjectToWorld, float4(0.0, 0.0, 0.0, 1.0));
				o.distance = distance(objectOrigin, _WorldSpaceCameraPos);

                return o;
            }

            sampler2D _Input;
			float _Pixelation;
			float _PixelOffset;

			fixed4 frag(v2f i) : SV_Target
			{
				//float pixelator = _Pixelation;
				float pixelator = lerp(100*_Pixelation, _Pixelation, (1-(i.distance / 50)) + _PixelOffset);
				float2 uv = i.uv.xy / i.uv.w;
				uv *= pixelator;
				uv = round(uv);
				uv /= pixelator;
				float4 col = tex2D(_Input, uv);

                return col;
				//return i.distance/50;
            }
            ENDCG
        }
    }
}
