const vec3 BLUE = vec3(6.0, 152.0, 193.0) / 255.0;
const vec3 PURPLE = vec3(156.0, 64.0, 214.0) / 255.0;

uniform float iWidth = 0.004;
uniform float iMiddle = 0.5;
uniform float iShell = 1.0;
uniform float iSpeed = 1.0;

vec4 getProceduralColor() {
    float intensity = 0.0;
    float time = iGlobalTime / 5.0 * iSpeed;
    vec3 position = _position.xyz * 1.5 * iWorldScale;
    for (int i = 0; i < 1; ++i) {
        float modifier = pow(2, i);
        vec3 noisePosition = position * modifier;
        float noise = snoise(vec4(noisePosition, time));
        noise /= modifier;
        intensity += noise;
    }
    intensity += 1.0;
    intensity /= 2.0;
    if (intensity > iMiddle + iWidth || intensity < iMiddle - iWidth) {
        discard;
    }
    vec3 COLOR = BLUE;
    return vec4(COLOR * iShell, 1);
}


float getProceduralColors(inout vec3 diffuse, inout vec3 specular, inout float shininess) {
    specular = getProceduralColor().rgb;
    return 1.0;
}