trace = () => `
vec3 trace(Ray ray) {
Sphere s = sceneIntersection(ray);
if(s.dist >= 1000.) return vec3(0.);
vec3 pointAtTime = ray.point + ray.vector * s.dist;
vec3 normal = normalize(light - pointAtTime);
vec3 b = s.color;
vec3 c = vec3(0.);
float lambertAmount = 0.;
if(s.lambert > 0. && isLightVisible(pointAtTime)) {
float contrib = dot(normal, sphereNormal(s, pointAtTime));
if(contrib > 0.) lambertAmount += contrib;
}
lambertAmount = min(1., lambertAmount);
/*if (s.specular > 0.) {
Ray reflectedRay;
reflectedRay.point = pointAtTime;
reflectedRay.vector = normal * dot(ray.vector, normal) * 2. - ray.vector;
Sphere rs = sceneIntersection(reflectedRay);
if(rs.dist > -0.005) c += rs.color * s.specular;
}*/
return c + b * lambertAmount * s.lambert + b * s.ambient;
}`