Free retro-style camera shader for Unity
Published by Pavel Nakonechnyy on (updated: ) in GameDev. Tags: c#, free code, shader, snippet, unity.Small shader for Unity, which I use in my games for drawing minimap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
Shader "Camera/MapShader" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { // No culling or depth Cull Off ZWrite Off ZTest Always Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; fixed4 frag (v2f i) : SV_Target { fixed4 col = tex2D(_MainTex, i.uv); // i.uv[0]**2 + i.uv[1]**2 = 1 float2 coordfromcenter = i.uv - float2(0.5, 0.5); float pixelWidth = 1 / _ScreenParams.x; float pixelHeight = 1 / _ScreenParams.y; float4 deltacolor = (tex2D(_MainTex, i.uv + float2(pixelWidth,0)) + tex2D(_MainTex, i.uv + float2(-pixelWidth,0)) + tex2D(_MainTex, i.uv + float2(0,pixelHeight)) + tex2D(_MainTex, i.uv + float2(0,-pixelHeight))) / 4 - col; if (deltacolor.r + deltacolor.g + deltacolor.b > 0.04) { return float4(0,1,0,1); } else { return float4(0,0,0,1); } } ENDCG } } } |
Add the component script below to GameObject with Camera and assign Material with the shader above to it.
1 2 3 4 5 6 7 8 9 10 11 12 |
using UnityEngine; [ExecuteInEditMode] public class PostEffect : MonoBehaviour { public Material ShaderMaterial; private void OnRenderImage(RenderTexture src, RenderTexture dest) { Graphics.Blit(src, dest, ShaderMaterial); } } |
468