BLOKS Shader Bulletin Board
raymarch lighting
Shader Preview Unavailable
This realtime shader may be too intensive for your current device or browser.
Shader Code
float map(vec3 p)
{
return length(p) - 1.0;
}
vec3 getNormal(vec3 p)
{
vec2 e = vec2(0.001, 0.0);
return normalize(vec3(
map(p + e.xyy) - map(p - e.xyy),
map(p + e.yxy) - map(p - e.yxy),
map(p + e.yyx) - map(p - e.yyx)
));
}
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, -4.0);
vec3 rd = normalize(vec3(p, 1.5));
float d = 0.0;
vec3 color = vec3(0.02, 0.04, 0.08);
for(int i = 0; i < 64; i++)
{
vec3 pos = ro + rd * d;
float ds = map(pos);
if(ds < 0.001)
{
vec3 normal = getNormal(pos);
vec3 lightDir =
normalize(vec3(1.0, 1.0, -1.0));
float diff =
max(dot(normal, lightDir), 0.0);
color += vec3(0.1, 0.7, 1.0) * diff;
break;
}
d += ds;
}
fragColor = vec4(color, 1.0);
}
