Difficulty  | 
4  | 
def scene_at(now)
{
  var y = Animations.ease(Animations.animate(10, 1, seconds(3)), Easing.quintic_inout())
  var position = pos(0, y[now], 10)
  var camera = Cameras.orthographic( [ "eye": position,
                                       "look_at": pos(0, 0, 0),
                                       "window_width": 10 ] )
  var white = Materials.uniform( [ "ambient": Colors.white() * 0.1,
                                   "diffuse": Colors.white() * 0.8,
                                   "specular": Colors.white(),
                                   "specular_exponent": 20,
                                   "reflectivity": 0,
                                   "transparency": 0,
                                   "refractive_index": 0 ] )
  var black = Materials.uniform( [ "ambient": Colors.black(),
                                   "diffuse": Colors.white() * 0.1,
                                   "specular": Colors.white(),
                                   "specular_exponent": 20,
                                   "reflectivity": 0,
                                   "transparency": 0,
                                   "refractive_index": 0 ] )
  var checkered = Materials.from_pattern(Patterns.checkered(1, 1), black, white)
  var spheres   = []
  for_each([-3..5], bind(fun (i, spheres) {
                     spheres.push_back(translate(vec(-2,0,-i*3), sphere()))
                     spheres.push_back(translate(vec(2,0,-i*3), sphere()))
                   }, _, spheres))
  var spheres_union = decorate(white, union(spheres))
  var plane     = decorate(white, translate(vec(0,-1,0), xz_plane()))
  var root      = union( [spheres_union, plane] )
  var lights    = [ Lights.omnidirectional( pos(0, 5, 10), Colors.white() ) ]
  return create_scene(camera, root, lights)
}
var anim = scene_animation(scene_at, seconds(3))
var raytracer   = Raytracers.v6()
var renderer    = Renderers.standard( [ "width": 500,
                                        "height": 500,
                                        "sampler": Samplers.multijittered(2),
                                        "ray_tracer": raytracer ] )
pipeline( anim,
          [ Pipeline.animation(30),
            Pipeline.renderer(renderer),
            Pipeline.studio() ] )
1. Evaluation
TODO