Skip to content

raymarch step comparison

BLOKS Shader Bulletin Board

raymarch step comparison

By RJ Shelton June 9, 2026

Shader Preview Unavailable

This realtime shader may be too intensive for your current device or browser.

Shader Code
float scene(vec3 p)
{
    return length(p) - 1.0;
}

float march(vec3 ro, vec3 rd, int steps)
{
    float t = 0.0;

    for(int i = 0; i < 128; i++)
    {
        if(i >= steps) break;

        vec3 p = ro + rd * t;

        float d = scene(p);

        if(d < 0.001) return 1.0;

        t += d;

        if(t > 20.0) break;
    }

    return 0.0;
}

void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
    vec2 uv = fragCoord.xy / iResolution.xy;

    vec2 p = uv * 2.0 - 1.0;

    p.x *= iResolution.x / iResolution.y;

    vec3 ro = vec3(0.0, 0.0, -3.0);
    vec3 rd = normalize(vec3(p, 1.5));

    vec3 color = vec3(0.02, 0.04, 0.08);

    if(uv.x < 0.5)
    {
        float hit = march(ro, rd, 16);

        color += vec3(0.2, 0.7, 1.0) * hit;
    }
    else
    {
        float hit = march(ro, rd, 96);

        color += vec3(1.0, 0.3, 0.8) * hit;
    }

    float divider =
        1.0 - smoothstep(0.0, 0.003, abs(uv.x - 0.5));

    color += divider * vec3(1.0);

    fragColor = vec4(color, 1.0);
}

← Back to Shader Bulletin Board