Shader "Custom/Pixelgon" { Properties { _MainTex ("Texture", 2D) = "" {} _Shade ("Shade", Float) = 1 } SubShader { Tags { "RenderType"="Transparent" } Cull Off Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" sampler2D _MainTex; float4 _MainTex_ST; float _Shade; struct meshdata { float4 vertex : POSITION; float3 normal : NORMAL; float2 uv : TEXCOORD0; float4 color : COLOR; }; struct v2f { float4 vertex : SV_POSITION; float4 worldPos : TEXCOORD1; float3 normal : TEXCOORD2; float2 uv : TEXCOORD0; float4 color : COLOR; }; float DeRez(float value) { return float(round(value * 420)) / 420; } float3 hsv2rgb(float3 c) { c = float3(c.x, clamp(c.yz, 0.0, 1.0)); float4 K = float4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); float3 p = abs(frac(c.xxx + K.xyz) * 6.0 - K.www); return c.z * lerp(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); } v2f vert (meshdata v) { v2f o; v.vertex.x = DeRez(v.vertex.x); v.vertex.y = DeRez(v.vertex.y); v.vertex.z = DeRez(v.vertex.z); o.vertex = UnityObjectToClipPos(v.vertex); o.worldPos = mul(unity_ObjectToWorld, v.vertex); o.normal = UnityObjectToWorldNormal(v.normal); o.uv = TRANSFORM_TEX(v.uv, _MainTex); o.color = v.color * _Shade; return o; } float4 frag (v2f i) : SV_Target { float4 col = tex2D(_MainTex, i.uv); clip(col.a - 0.5); // float shade = clamp(1.5 + dot(i.normal, float3(0, -1, 0)), 0, 1); // col.r *= 1.5 - shade; // col.g *= 1.5 - shade; // col.b *= shade; if (saturate(dot(normalize(UnityWorldSpaceViewDir(i.worldPos)), i.normal)) < 0.333) { col *= 0.9; } // col *= float4(hsv2rgb(float3(saturate(dot(normalize(UnityWorldSpaceViewDir(i.worldPos)), i.normal)), 1, 1)), 1); return col * i.color; } ENDCG } } Fallback "Legacy Shaders/Transparent/Cutout/Soft Edge Unlit" }