 void main(void) {
     vec2 normCoord = (uv - 0.5) * aspectCorrection;
 
-    float bs = 2048. * pow(2, -5. * iIntensity);
+    //float bs = 2048. * pow(2, -5. * iIntensity);
+    float bs = (1. - iIntensity) / onePixel;
     vec2 bins = bs * aspectCorrection;
     vec2 db = 1. / (bins * aspectCorrection);
     normCoord = round(normCoord * bins) * db + 0.5;


    // Make there be life if there is sufficient input color
    //float lifeFromInput = step(0.5, smoothstep(0., 3., dot(vec3(1.), source.rgb)));
    float lifeFromInput = step(0.9, max(source.r, max(source.g, source.b)));
    alive = max(alive, lifeFromInput);
    alive *= step(0.1, texture(iChannel[2], normCoord).a); // Kill stable life if there is no color

    fragColor.gba = vec3(1.0);
    fragColor.r = alive;

    float alive = texture(iChannel[1], uv).r;
    vec4 under = texture(iInput, uv);
    vec4 over = alive * texture(iChannel[2], uv);
    over *= smoothstep(0., 0.2, iIntensity);
    fragColor = composite(under, over);
}

#buffershader
