Test scenes for the raytracer

Here are a few test scenes for use with trace. I recommend you start with these scenes and once you're sure they work fine, try the more complicated scenes bundled with the raytracer.

Download these as a single group.


cyl_emissive.ray

This scene is designed to test the emissive shading term.

SBT-raytracer 1.0

// cyl_emissive.ray
// Test for the emissive term

camera
{
    position = (5, 0, 0);
    viewdir = (-1, 0, 0);
    updir = (0, 1, 0);
}

// The cylinder should turn out a solid red.
rotate( 1, 0, 0, 1.6, 
    rotate( 0, 1, 0, -0.5,
        cylinder {
            material = { emissive = (0.5, 0, 0); 
            }
        } ) )
cyl_ambient.ray

This scene is designed to test the ambient shading model.

SBT-raytracer 1.0

// cyl_ambient.ray
// Test for the ambient term

ambient_light
{
    color = (1.0, 1.0, 1.0);
}

camera
{
    position = (5, 0, 0);
    viewdir = (-1, 0, 0);
    updir = (0, 1, 0);
}

// This scene doesn't need any directional/point 
// lights since the material on the cylinder has 
// an ambient color.  

// The cylinder should turn out a solid red.
rotate( 1, 0, 0, 1.6, 
    rotate( 0, 1, 0, -0.5,
        cylinder {
            material = { ambient = (0.5, 0, 0); 
            }
        } ) )
cyl_diffuse.ray

This scene is designed to test for the diffuse term.

SBT-raytracer 1.0

// cyl_diffuse.ray
// Test for the diffuse term

camera
{
    position = (5, 0, 0);
    viewdir = (-1, 0, 0);
    updir = (0, 1, 0);
}

// This is a directional light coming from the
// left of the scene.
directional_light
{
    // Direction is automatically normalized
    direction = (-1, -0.5, -1);
    color = (1, 0, 1);
}

// The cylinder should turn out a shaded blue.
rotate( 1, 0, 0, 1.6, 
    rotate( 0, 1, 0, -0.5,
        cylinder {
            material = { diffuse = (0, 0, 0.8); 
        }
    } ) )
cyl_diff_spec.ray

This scene tests for the specular term
in addition to the diffuse term.

SBT-raytracer 1.0

// cyl_diff_spec.ray
// Test for specular term added to diffuse

camera
{
    position = (5, 0, 0);
    viewdir = (-1, 0, 0);
    updir = (0, 1, 0);
}

// This is a directional light coming from behind us
directional_light
{
    direction = (-1, 0, 0);
    color = (1, 0, 1);
}

// The cylinder should have a specular highlight
// in the middle.
rotate( 1, 0, 0, 1.6, 
        cylinder {
            material = { 
                diffuse = (0, 0, 1); 
                specular = (1, 0, 1); 
                shininess = 1.0;
            }
    } )
box_dist_atten.ray

This scene tests for distance attenuation of lights.

SBT-raytracer 1.0

// box_dist_atten.ray
// Test for distance attenuation

camera
{
    position = (7, 0, 0);
    viewdir = (-1, 0, 0);
    updir = (0, 0, 1);
}

// Point light just above the center of the box.
point_light
{
    position = (0, 0, 1);
    color = (1, 1, 1);
    constant_attenuation_coeff= 0.2;
    linear_attenuation_coeff = 0.3;
    quadratic_attenuation_coeff = 0.0;
}

// The box forms a plane, which should be noticably 
// brighter in the middle than on the edges
translate( 0, 0, -2,
    scale( 15, 15, 1, 
        box {
            material = { diffuse = (0, 1, 0); }
    } ) )
box_cyl_reflect.ray

This scene tests for reflection.

SBT-raytracer 1.0

// box_cyl_reflect.ray
// Test the reflection term
// Don't forget to increase the trace depth to >= 2!

camera
{
    position = (15, 0, 5);
    viewdir = (-1, 0, -.3);
    updir = (0, 0, 1);
}

// Using ambient intensity of 0.25
ambient_light
{
	color = (0.25, 0.25, 0.25);
}

// Directional light which shouldn't
// cast any shadows
directional_light
{
    direction = (-1, 0, -0.2);
    color = (1, 1, 1);
}

// The box forms a plane, which should reflect the cylinder
translate( 0, 0, -2,
    scale( 15, 15, 1, 
        box {
            material = { 
                diffuse = (0.5, 0, 0); 
                specular = (0.5, 0.5, 0.5);
                reflective = (1, 1, 1);
                shininess = 0.2;
            }
        } ) )

// We'll give this a little ambient intensity to ensure
// that the bottom, which doesn't face the light, is still 
// reflected properly (this is a common hack, since with 
// raytracing you don't have diffuse-diffuse reflections)
translate( 0, 0, 1,
    cylinder {
        material = {
            ambient = (0, 1, 0);
            diffuse = (0, 0.5, 0);
            specular = (0.5, 0.5, 0.5);
            reflective = (1, 1, 1);
            shininess = 0.2;
        }
    } )
sphere_refract.ray

This scene tests for refraction.

SBT-raytracer 1.0

// cyl_cyl_refract.ray
// Test the refraction term
// Don't forget to increase the trace depth to >= 2!

camera
{
    position = (5, 0, 0);
    viewdir = (-1, 0, 0);
    updir = (0, 0, 1);
}

directional_light
{
    direction = (-1, -1, -0.2);
    color = (1, 1, 1);
}

// Sphere acts as a lens
scale(.2, 1.5, 1.5, sphere {
    material = { 
        diffuse = (0, 0.12, 0);
        transmissive = (0.7, 0.7, 0.7);
        index = 1.5;
    }
} )

// Add a couple of crossed cylinders behind the sphere to
// see the refractive effect.
translate( -2, -1, -10,
scale( .2, .2, 20,
    cylinder {
        material = { diffuse = (0.8, 0.4, 0); specular = (0.7, 0.7, 0.7); }
    } ) )


translate( 0, 0.5, 0, 
rotate( 1, 0, 0, .6,
translate( -2, -1, -10,
scale( .2, .2, 20,
    cylinder {
        material = { diffuse = (0.8, 0, 0.4); specular = (0.7, 0.7, 0.7); }
    } ) ) ) )
box_cyl_opaque_shadow.ray

Tests for opaque (non-transparent) shadows.

SBT-raytracer 1.0

// box_cyl_opaque_shadow.ray
// Test opaque shadows

camera
{
    position = (15, 0, 5);
    viewdir = (-1, 0, -.3);
    updir = (0, 0, 1);
}

// This light should cast the shadow of the
// cylinder on the box.
point_light
{
    position = (3, 0, 6);
    color = (1, 1, 1);
    constant_attenuation_coeff= 0.25;
    linear_attenuation_coeff = 0.003372407;
    quadratic_attenuation_coeff = 0.000045492;	
}

// The box forms a plane
translate( 0, 0, -2,
    scale( 15, 15, 1, 
        box {
            material = { 
                diffuse = (0.5, 0, 0); 
            }
        } ) )

translate( 0, 0, 1,
    cylinder {
        material = {
            diffuse = (0, 0.9, 0);
            ambient = (0, 0.3, 0);
        }
    } )
box_cyl_transp_shadow.ray

Tests for semi-transparent shadows. Note that the
cylinder's diffuse and ambient terms have also
been reduced to give it a darker appearance.

SBT-raytracer 1.0

// box_cyl_transp_shadow.ray
// Test transparent shadows.

camera
{
    position = (15, 0, 5);
    viewdir = (-1, 0, -.3);
    updir = (0, 0, 1);
}

// This light should cast the shadow of the
// cylinder on the box.
point_light
{
    position = (3, 0, 6);
    color = (1, 1, 1);
    constant_attenuation_coeff= 0.25;
    linear_attenuation_coeff = 0.003372407;
    quadratic_attenuation_coeff = 0.000045492;	
}

// The box forms a plane
translate( 0, 0, -2,
    scale( 15, 15, 1, 
        box {
            material = { 
                diffuse = (0.5, 0, 0);
            }
        } ) )

translate( 0, 0, 1,
    cylinder {
        material = {
            ambient = (0, 0.09, 0);
            diffuse = (0, 0.27, 0);
            transmissive = (0.7, 0.7, 0.7);
        }
    } )
texture_map.ray

Tests texture mapping.

SBT-raytracer 1.0

// texture_map.ray
// Test texture mapping
// Don't forget to increase the trace depth to >= 2!

camera
{
    position = (15, 0, 5);
    viewdir = (-1, 0, -.3);
    updir = (0, 0, 1);
}

directional_light
{
    direction = (-0.2, 0.2, -2);
    color = (.7, .7, .7);
}

directional_light
{
    direction = (-1, -0.5, -0.3);
    color = (.6, .6, .6);
}

// The box forms a plane, which should reflect the cylinder
translate( 0, 0, -2,
    scale( 15, 15, 1, 
        box {
            material = { 
                diffuse = map( "checkerboard.bmp" ); 
                specular = (0.5, 0.5, 0.5);
                reflective = (0, 0, 0);
                shininess = 0.2;
            }
        } ) )

translate( 0, 0, 2,
    scale( 2,
    sphere {
        material = { 
            specular = (0.8, 0.8, 0);
            reflective = (0.7, 0.7, 0);
            diffuse = (0.2, 0.2, 0);
            shininess = 2;
        }
    }
) )
recurse_depth.ray

Tests for larger amounts of recursive depth.

 
Scene file not shown due to length.