Test scenes for the raytracer

These simple test files can be found in the scenes directory of your project folder. We recommend you start with these scenes and once you're sure they work fine, try the more complicated scenes bundled with the raytracer. We may be testing your program with some of these files during the grading session.


polymesh/cube.ray

In polymesh folder, displayed below as your code would before shading is implemented as well as with correct shading. This scene tests triangle intersections.

SBT-raytracer 1.0

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

point_light {
	position = (1, 1, -3.0);
	colour = (1.0, 1.0, 1.0);
	constant_attenuation_coeff= 0.25;
	linear_attenuation_coeff = 0.003372407;
	quadratic_attenuation_coeff = 0.000045492;	
}

rotate(1,1,1,1,
	scale(2,
		translate(-0.5,-0.5,-0.5,
			polymesh {
				points = (
					(0,0,0),
					(0,1,0),
					(1,1,0),
					(1,0,0),

					(0,0,1),
					(0,1,1),
					(1,1,1),
					(1,0,1));
				
				faces = (
					(0,1,2),
					(0,2,3),

					(6,5,4),
					(7,6,4),

					(3,2,6),
					(3,6,7),

					(4,5,1),
					(4,1,0),

					(1,5,2),
					(5,6,2),

					(4,0,3),
					(4,3,7)
					);
				
				material = { 
					ambient = (0.0,0.0,0.0); 
					diffuse = (0.1,0.1,1.0);
					specular = (0.0,0.0,0.0) 
				}
			} )))

simple/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); 
        }
    } ) )

simple/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); 
        }
    } ) )

simple/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); 
        }
    } ) )

simple/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 = 128.0;
            }
    } )

simple/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); }
	} ) )

simple/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 = 25.6;
            }
        } ) )

// 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 = 25.6;
        }
    } )

simple/sphere_refract.ray

This scene tests for refraction.

SBT-raytracer 1.0

// sphere_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.

// Note that the reason these are emissive is that otherwise
// you have problems if transparent shadows aren't implemented.
translate( -2, -1, -10,
scale( .2, .2, 20,
	cylinder {
		material = { 
			emissive = (0.8, 0.4, 0); 
		}
	} ) )


translate( 0, 0.5, 0, 
rotate( 1, 0, 0, .6,
translate( -2, -1, -10,
scale( .2, .2, 20,
	cylinder {
		material = { 
			emissive = (0.8, 0.0, 0.4); 
		}
	} ) ) ) )

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);
        }
    } )

simple/box_cyl_transp_shadow.ray

Tests for semi-transparent shadows.

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);
        }
    } )

simple/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 = 25.6;
            }
        } ) )

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 = 256.0;
        }
    }
) )