BLOKS Shader Bulletin Board
raymarch step comparison
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);
}
