Shader "CrispyPin/gol" { Properties { _LastFrame ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 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; }; sampler2D _LastFrame; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } int state(float2 uv, float x,float y){ return tex2D(_LastFrame, uv + float2(x, y)).r > 0; } fixed4 frag (v2f i) : SV_Target { const float d = 1.0/256.0; int count = state(i.uv, -d, -d)+ state(i.uv, 0, -d)+ state(i.uv, d, -d)+ state(i.uv, -d, 0)+ state(i.uv, d, 0)+ state(i.uv, -d, d)+ state(i.uv, 0, d)+ state(i.uv, d, d); float4 this =tex2D(_LastFrame, i.uv); float state; if (this.r > 0){ state = count > 1 && count < 4; // col = count > 0 && count < 6; // mazetric } else { state = count == 3; } float4 col = float4(i.uv, 0.5, 1); col *= state; col.a = 1; return col; } ENDCG } } }