|
| 1 | +Shader "Unlit/Cellular" |
| 2 | +{ |
| 3 | + Properties |
| 4 | + { |
| 5 | + _MainTex ("Texture", 2D) = "white" {} |
| 6 | + } |
| 7 | + SubShader |
| 8 | + { |
| 9 | + Tags { "RenderType"="Opaque" } |
| 10 | + LOD 100 |
| 11 | + |
| 12 | + Pass |
| 13 | + { |
| 14 | + CGPROGRAM |
| 15 | + #pragma vertex vert |
| 16 | + #pragma fragment frag |
| 17 | + // make fog work |
| 18 | + #pragma multi_compile_fog |
| 19 | + |
| 20 | + #include "UnityCG.cginc" |
| 21 | + |
| 22 | + struct appdata |
| 23 | + { |
| 24 | + float4 vertex : POSITION; |
| 25 | + float2 uv : TEXCOORD0; |
| 26 | + }; |
| 27 | + |
| 28 | + struct v2f |
| 29 | + { |
| 30 | + float2 uv : TEXCOORD0; |
| 31 | + UNITY_FOG_COORDS(1) |
| 32 | + float4 vertex : SV_POSITION; |
| 33 | + }; |
| 34 | + |
| 35 | + sampler2D _MainTex; |
| 36 | + float4 _MainTex_ST; |
| 37 | + |
| 38 | + float3 mod_emu(float3 x, float y) |
| 39 | + { |
| 40 | + return x - y * floor(x / y); |
| 41 | + } |
| 42 | + |
| 43 | + float3 f_permute(in float3 _x) |
| 44 | + { |
| 45 | + return mod_emu((((34.0 * _x) + 1.0) * _x), 289.0); |
| 46 | + } |
| 47 | + |
| 48 | + float2 f_cellular(in float3 _P) |
| 49 | + { |
| 50 | + float3 _Pi = mod_emu(floor(_P), 289.0); |
| 51 | + float3 _Pf = (frac(_P) - 0.5); |
| 52 | + float3 _Pfx = (_Pf.x + float3(1.0, 0.0, -1.0)); |
| 53 | + float3 _Pfy = (_Pf.y + float3(1.0, 0.0, -1.0)); |
| 54 | + float3 _Pfz = (_Pf.z + float3(1.0, 0.0, -1.0)); |
| 55 | + float3 _p = f_permute((_Pi.x + float3(-1.0, 0.0, 1.0))); |
| 56 | + float3 _p1 = f_permute(((_p + _Pi.y) - 1.0)); |
| 57 | + float3 _p2 = f_permute((_p + _Pi.y)); |
| 58 | + float3 _p3 = f_permute(((_p + _Pi.y) + 1.0)); |
| 59 | + float3 _p11 = f_permute(((_p1 + _Pi.z) - 1.0)); |
| 60 | + float3 _p12 = f_permute((_p1 + _Pi.z)); |
| 61 | + float3 _p13 = f_permute(((_p1 + _Pi.z) + 1.0)); |
| 62 | + float3 _p21 = f_permute(((_p2 + _Pi.z) - 1.0)); |
| 63 | + float3 _p22 = f_permute((_p2 + _Pi.z)); |
| 64 | + float3 _p23 = f_permute(((_p2 + _Pi.z) + 1.0)); |
| 65 | + float3 _p31 = f_permute(((_p3 + _Pi.z) - 1.0)); |
| 66 | + float3 _p32 = f_permute((_p3 + _Pi.z)); |
| 67 | + float3 _p33 = f_permute(((_p3 + _Pi.z) + 1.0)); |
| 68 | + float3 _ox11 = (frac((_p11 * 0.14285715)) - 0.42857143); |
| 69 | + float3 _oy11 = ((mod_emu(floor((_p11 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 70 | + float3 _oz11 = ((floor((_p11 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 71 | + float3 _ox12 = (frac((_p12 * 0.14285715)) - 0.42857143); |
| 72 | + float3 _oy12 = ((mod_emu(floor((_p12 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 73 | + float3 _oz12 = ((floor((_p12 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 74 | + float3 _ox13 = (frac((_p13 * 0.14285715)) - 0.42857143); |
| 75 | + float3 _oy13 = ((mod_emu(floor((_p13 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 76 | + float3 _oz13 = ((floor((_p13 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 77 | + float3 _ox21 = (frac((_p21 * 0.14285715)) - 0.42857143); |
| 78 | + float3 _oy21 = ((mod_emu(floor((_p21 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 79 | + float3 _oz21 = ((floor((_p21 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 80 | + float3 _ox22 = (frac((_p22 * 0.14285715)) - 0.42857143); |
| 81 | + float3 _oy22 = ((mod_emu(floor((_p22 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 82 | + float3 _oz22 = ((floor((_p22 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 83 | + float3 _ox23 = (frac((_p23 * 0.14285715)) - 0.42857143); |
| 84 | + float3 _oy23 = ((mod_emu(floor((_p23 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 85 | + float3 _oz23 = ((floor((_p23 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 86 | + float3 _ox31 = (frac((_p31 * 0.14285715)) - 0.42857143); |
| 87 | + float3 _oy31 = ((mod_emu(floor((_p31 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 88 | + float3 _oz31 = ((floor((_p31 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 89 | + float3 _ox32 = (frac((_p32 * 0.14285715)) - 0.42857143); |
| 90 | + float3 _oy32 = ((mod_emu(floor((_p32 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 91 | + float3 _oz32 = ((floor((_p32 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 92 | + float3 _ox33 = (frac((_p33 * 0.14285715)) - 0.42857143); |
| 93 | + float3 _oy33 = ((mod_emu(floor((_p33 * 0.14285715)), 7.0) * 0.14285715) - 0.42857143); |
| 94 | + float3 _oz33 = ((floor((_p33 * 0.020408163)) * 0.16666667) - 0.41666666); |
| 95 | + float3 _dx11 = (_Pfx + (1.0 * _ox11)); |
| 96 | + float3 _dy11 = (_Pfy.x + (1.0 * _oy11)); |
| 97 | + float3 _dz11 = (_Pfz.x + (1.0 * _oz11)); |
| 98 | + float3 _dx12 = (_Pfx + (1.0 * _ox12)); |
| 99 | + float3 _dy12 = (_Pfy.x + (1.0 * _oy12)); |
| 100 | + float3 _dz12 = (_Pfz.y + (1.0 * _oz12)); |
| 101 | + float3 _dx13 = (_Pfx + (1.0 * _ox13)); |
| 102 | + float3 _dy13 = (_Pfy.x + (1.0 * _oy13)); |
| 103 | + float3 _dz13 = (_Pfz.z + (1.0 * _oz13)); |
| 104 | + float3 _dx21 = (_Pfx + (1.0 * _ox21)); |
| 105 | + float3 _dy21 = (_Pfy.y + (1.0 * _oy21)); |
| 106 | + float3 _dz21 = (_Pfz.x + (1.0 * _oz21)); |
| 107 | + float3 _dx22 = (_Pfx + (1.0 * _ox22)); |
| 108 | + float3 _dy22 = (_Pfy.y + (1.0 * _oy22)); |
| 109 | + float3 _dz22 = (_Pfz.y + (1.0 * _oz22)); |
| 110 | + float3 _dx23 = (_Pfx + (1.0 * _ox23)); |
| 111 | + float3 _dy23 = (_Pfy.y + (1.0 * _oy23)); |
| 112 | + float3 _dz23 = (_Pfz.z + (1.0 * _oz23)); |
| 113 | + float3 _dx31 = (_Pfx + (1.0 * _ox31)); |
| 114 | + float3 _dy31 = (_Pfy.z + (1.0 * _oy31)); |
| 115 | + float3 _dz31 = (_Pfz.x + (1.0 * _oz31)); |
| 116 | + float3 _dx32 = (_Pfx + (1.0 * _ox32)); |
| 117 | + float3 _dy32 = (_Pfy.z + (1.0 * _oy32)); |
| 118 | + float3 _dz32 = (_Pfz.y + (1.0 * _oz32)); |
| 119 | + float3 _dx33 = (_Pfx + (1.0 * _ox33)); |
| 120 | + float3 _dy33 = (_Pfy.z + (1.0 * _oy33)); |
| 121 | + float3 _dz33 = (_Pfz.z + (1.0 * _oz33)); |
| 122 | + float3 _d11 = (((_dx11 * _dx11) + (_dy11 * _dy11)) + (_dz11 * _dz11)); |
| 123 | + float3 _d12 = (((_dx12 * _dx12) + (_dy12 * _dy12)) + (_dz12 * _dz12)); |
| 124 | + float3 _d13 = (((_dx13 * _dx13) + (_dy13 * _dy13)) + (_dz13 * _dz13)); |
| 125 | + float3 _d21 = (((_dx21 * _dx21) + (_dy21 * _dy21)) + (_dz21 * _dz21)); |
| 126 | + float3 _d22 = (((_dx22 * _dx22) + (_dy22 * _dy22)) + (_dz22 * _dz22)); |
| 127 | + float3 _d23 = (((_dx23 * _dx23) + (_dy23 * _dy23)) + (_dz23 * _dz23)); |
| 128 | + float3 _d31 = (((_dx31 * _dx31) + (_dy31 * _dy31)) + (_dz31 * _dz31)); |
| 129 | + float3 _d32 = (((_dx32 * _dx32) + (_dy32 * _dy32)) + (_dz32 * _dz32)); |
| 130 | + float3 _d33 = (((_dx33 * _dx33) + (_dy33 * _dy33)) + (_dz33 * _dz33)); |
| 131 | + float3 _d1a = min(_d11, _d12); |
| 132 | + (_d12 = max(_d11, _d12)); |
| 133 | + (_d11 = min(_d1a, _d13)); |
| 134 | + (_d13 = max(_d1a, _d13)); |
| 135 | + (_d12 = min(_d12, _d13)); |
| 136 | + float3 _d2a = min(_d21, _d22); |
| 137 | + (_d22 = max(_d21, _d22)); |
| 138 | + (_d21 = min(_d2a, _d23)); |
| 139 | + (_d23 = max(_d2a, _d23)); |
| 140 | + (_d22 = min(_d22, _d23)); |
| 141 | + float3 _d3a = min(_d31, _d32); |
| 142 | + (_d32 = max(_d31, _d32)); |
| 143 | + (_d31 = min(_d3a, _d33)); |
| 144 | + (_d33 = max(_d3a, _d33)); |
| 145 | + (_d32 = min(_d32, _d33)); |
| 146 | + float3 _da = min(_d11, _d21); |
| 147 | + (_d21 = max(_d11, _d21)); |
| 148 | + (_d11 = min(_da, _d31)); |
| 149 | + (_d31 = max(_da, _d31)); |
| 150 | + float2 s452 = {0, 0}; |
| 151 | + if ((_d11.x < _d11.y)) |
| 152 | + { |
| 153 | + (s452 = _d11.xy); |
| 154 | + } |
| 155 | + else |
| 156 | + { |
| 157 | + (s452 = _d11.yx); |
| 158 | + } |
| 159 | + (_d11.xy = s452); |
| 160 | + float2 s453 = {0, 0}; |
| 161 | + if ((_d11.x < _d11.z)) |
| 162 | + { |
| 163 | + (s453 = _d11.xz); |
| 164 | + } |
| 165 | + else |
| 166 | + { |
| 167 | + (s453 = _d11.zx); |
| 168 | + } |
| 169 | + (_d11.xz = s453); |
| 170 | + (_d12 = min(_d12, _d21)); |
| 171 | + (_d12 = min(_d12, _d22)); |
| 172 | + (_d12 = min(_d12, _d31)); |
| 173 | + (_d12 = min(_d12, _d32)); |
| 174 | + (_d11.yz = min(_d11.yz, _d12.xy)); |
| 175 | + (_d11.y = min(_d11.y, _d12.z)); |
| 176 | + (_d11.y = min(_d11.y, _d11.z)); |
| 177 | + return sqrt(_d11.xy); |
| 178 | + } |
| 179 | + |
| 180 | + v2f vert (appdata v) |
| 181 | + { |
| 182 | + v2f o; |
| 183 | + o.vertex = UnityObjectToClipPos(v.vertex); |
| 184 | + o.uv = TRANSFORM_TEX(v.uv, _MainTex); |
| 185 | + UNITY_TRANSFER_FOG(o,o.vertex); |
| 186 | + return o; |
| 187 | + } |
| 188 | + |
| 189 | + fixed4 frag (v2f i) : SV_Target |
| 190 | + { |
| 191 | + // sample the texture |
| 192 | + //fixed4 col = tex2D(_MainTex, i.uv); |
| 193 | + // apply fog |
| 194 | + //UNITY_APPLY_FOG(i.fogCoord, col); |
| 195 | + |
| 196 | + float2 _st = i.uv; |
| 197 | + (_st *= 10.0); |
| 198 | + float2 _F = f_cellular(float3(_st, _Time.y)); |
| 199 | + float _dots = smoothstep(0.050000001, 0.1, _F.x); |
| 200 | + float _n = (_F.y - _F.x); |
| 201 | + (_n *= _dots); |
| 202 | + |
| 203 | + return fixed4(_n, _n, _n, 1.0); |
| 204 | + } |
| 205 | + ENDCG |
| 206 | + } |
| 207 | + } |
| 208 | +} |
0 commit comments