Difficulty |
3 |
Prerequisites |
|
def material(color) {
Materials.uniform( [ "ambient": color * 0.1,
"diffuse": color * 0.8,
"specular": Colors.black(),
"specular_exponent": 0,
"reflectivity": 0,
"transparency": 0,
"refractive_index": 0 ] )
}
def scene_at(now)
{
var camera = Cameras.perspective( [ "eye": pos(0, 5, 5),
"look_at": pos(0, 0, 0),
"up": vec(0, 1, 0),
"distance": 1,
"aspect_ratio": 1 ] )
var primitives = []
primitives.push_back(group(1, decorate(material(Colors.red()),
translate(Animations.circular(pos(0,0,2),
pos(0,0,0),
vec(0,1,0),
interval(degrees(0), degrees(360)),
seconds(5))[now] - pos(0,0,0),
sphere()))))
primitives.push_back(group(2, decorate(material(Colors.green()),
translate(Animations.circular(pos(0,0,2),
pos(0,0,0),
vec(0,1,0),
interval(degrees(120), degrees(480)),
seconds(5))[now] - pos(0,0,0),
sphere()))))
primitives.push_back(group(3, decorate(material(Colors.blue()),
translate(Animations.circular(pos(0,0,2),
pos(0,0,0),
vec(0,1,0),
interval(degrees(240), degrees(360+240)),
seconds(5))[now] - pos(0,0,0),
sphere()))))
primitives.push_back(decorate(material(Colors.white()), translate(vec(0,-5,0), xz_plane())))
var root = union(primitives)
var lights = [ Lights.omnidirectional( pos(0, 5, 0), Colors.white() ) ]
create_scene(camera, root, lights)
}
var raytracer = Raytracers.v6()
var renderer1 = Renderers.cartoon( [ "width": 500,
"height": 500,
"sampler": Samplers.multijittered(2),
"ray_tracer": raytracer,
"shade_count": 5 ] )
var renderer2 = Renderers.edge( [ "width": 500,
"height": 500,
"sampler": Samplers.multijittered(2),
"ray_tracer": raytracer,
"stroke_thickness": 0.0075,
"stroke_color": Colors.black(),
"background_color": Colors.white() ] )
var renderer = Renderers.masking(renderer1, renderer2);
pipeline( scene_animation(scene_at, seconds(5)),
[ Pipeline.animation(30),
Pipeline.renderer(renderer),
Pipeline.studio() ] )
1. Evaluation
TODO