Chrono Karts

Chrono Karts is a 3D kart racing game my group made in our Fundamentals of 3D Graphics Programming course at RIT. We used DirectX 11 and the Havok vehicle API to build a competitive single/multiplayer arcade-style racing game. We even made a sweet user’s manual! [PDF, 660kb]

kart image
Chrono Karts

Hop into the driver’s seat and race to the finish! Players will put their skills to the test against intelligent agents and up to three friends, making use of powerful items and crazy time mechanics while traveling through exotic locales. Fans of Mario Kart and Diddy Kong Racing will feel right at home with its simple controls and light-hearted, arcade-style gameplay.

Computer Graphics II Project Proposal

“Investigation Into Raytracer Performance Improvements”

Evan Montembeault
Warren R. Carithers

4003-571 Computer Graphics II
Project Page:


One of the disadvantages of raytracing versus other rendering techniques is that it can be very slow. In raytracing, however, rather than being tied together each pixel has its own independent operations which means raytracing can lend itself to parallelism very well.

Because of this, the main focus of my project will be to test and compare the use of several different threading models for the raytracer I am already building for the class. I will also be exploring the use of different spatial partitioning structures for both the scene and the rendered image (e.g. sending a tile to a thread rather than individual pixels).

The scene I use for this project could really be any scene or multiple scenes, but to make accurate comparisons I will have to be consistent and use the same scene for the different tests.

Project Objectives:

  • Extend my raytracer to incorporate performance improvements
  • Build a user interface for scene rendering and setting options for both the scene and performance tests.

System and Software:

I’ll be using C# and either WPF or WinForms. I’ll also be working with Windows 7, but in theory this should work on XP and Vista.


  • GUI: The UI will have a viewport for rendering the scene. There will be a panel to modify render settings. This includes which threading model to use, any relevant thread settings, the spatial partitioning structure to use, and settings such as the number of samples per pixel, the number of threads to use and tree depth.
  • Renderer: Because of the nature of the tests I’ll be doing, I’ll have to design the program in such a way that I can swap out different customizable components for certain parts of the render pipeline. This will likely be the second most difficult part of the project, after implementing multithreading.


I am responsible for the entire project.

Project Timeline:

Since this is an extension of the raytracer being built in class, project development will be somewhat tied to the raytracer development. The basic milestones will be the following:

  • Basic program structure and UI capable of starting and displaying a render
  • Ability to add components to render pipeline
  • At least one tweakable threading component and one spatial partitioning implementation
  • Additional render optimizations as time permits
  • Final user interface for tweaking settings and rendering
  • Perform tests with many different settings; prepare a report and postmortem

Final Presentation:

My presentation will simultaneously be a postmortem explaining what went right and what went wrong during the project and a presentation of the results of my tests.4003-571 Computer Graphics II

Raytracer Project – Part I

The goal of our raytracing project is to reproduce this historical image: Image from Turner Whitted's 1980 paperThis first exercise is just to roughly figure out all the positions of the objects in the scene: The floor, the two spheres, the camera and the light. Since all we’re really doing is getting some data, I decided to just quickly use Blender to get a rough version of the picture (just the positioning, basically). This is what I came up with in a few seconds: My initial reproduction of the Whitted imageHere are the object positions:

  1. Camera: Position: <0.655, -5.807, 1.720> Rotation: <83.212°, 0°, 0°>
  2. Light: Position: <2.208, -6.018, 6.668> Energy 1.00, Distance 25, InvSq falloff
  3. Floor: Position: <0, 0, -0.205> Dimensions: <5.439, 10.602, 0>
  4. Big Sphere: Position: <0.831, 0.034, 1.129> Radius: 1.000
  5. Little Sphere: Position: <-0.605, 0.892, 0.543> Radius: 0.638