|
@ -49,13 +49,13 @@ vec3 estimate_scene_normal(vec3 p) { |
|
|
vec3 raymarch(vec3 o, vec3 d, float start, float end) { |
|
|
vec3 raymarch(vec3 o, vec3 d, float start, float end) { |
|
|
float t = start; |
|
|
float t = start; |
|
|
for (int i = 0; i < MAX_STEPS; i++) { |
|
|
for (int i = 0; i < MAX_STEPS; i++) { |
|
|
float dist = scene_f(o + d*t); |
|
|
|
|
|
if (dist < EPSILON || t > end) |
|
|
|
|
|
return vec3(t, i, 0.); |
|
|
|
|
|
|
|
|
SceneResult sr = scene_f(o + d*t); |
|
|
|
|
|
if (sr.d < EPSILON || t > end) |
|
|
|
|
|
return vec3(t, sr.mat_idx, i); |
|
|
|
|
|
|
|
|
t += dist; |
|
|
|
|
|
|
|
|
t += sr.d; |
|
|
} |
|
|
} |
|
|
return vec3(end, MAX_STEPS, 0.); |
|
|
|
|
|
|
|
|
return vec3(end, -1., MAX_STEPS); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
vec4 shade(vec3 p) { |
|
|
vec4 shade(vec3 p) { |
|
@ -77,7 +77,8 @@ void main() { |
|
|
|
|
|
|
|
|
vec3 result = raymarch(eye, dir, NEAR_D, FAR_D); |
|
|
vec3 result = raymarch(eye, dir, NEAR_D, FAR_D); |
|
|
float depth = result.x; |
|
|
float depth = result.x; |
|
|
float iters = result.y; |
|
|
|
|
|
|
|
|
float mat_idx = result.y; |
|
|
|
|
|
float iters = result.z; |
|
|
if (depth >= FAR_D) { |
|
|
if (depth >= FAR_D) { |
|
|
color = vec4(1.0, 0.5, 1.0, 1.0); |
|
|
color = vec4(1.0, 0.5, 1.0, 1.0); |
|
|
return; |
|
|
return; |
|
|