Teaching Introductory Computer Graphics Via Ray Tracing



Similar documents
Introduction to Computer Graphics

TEACHING INTRODUCTORY COMPUTER GRAPHICS WITH THE PROCESSING LANGUAGE

COMP-557: Fundamentals of Computer Graphics McGill University, Fall 2010

Course Overview. CSCI 480 Computer Graphics Lecture 1. Administrative Issues Modeling Animation Rendering OpenGL Programming [Angel Ch.

INTRODUCTION TO RENDERING TECHNIQUES

A Short Introduction to Computer Graphics

Computer Applications in Textile Engineering. Computer Applications in Textile Engineering

GUI GRAPHICS AND USER INTERFACES. Welcome to GUI! Mechanics. Mihail Gaianu 26/02/2014 1

Introduction to Computer Graphics. Jürgen P. Schulze, Ph.D. University of California, San Diego Fall Quarter 2012

CPIT-285 Computer Graphics

COMP175: Computer Graphics. Lecture 1 Introduction and Display Technologies

VALLIAMMAI ENGNIEERING COLLEGE SRM Nagar, Kattankulathur

Monash University Clayton s School of Information Technology CSE3313 Computer Graphics Sample Exam Questions 2007

Specular reflection. Dielectrics and Distribution in Ray Tracing. Snell s Law. Ray tracing dielectrics

Introduction Week 1, Lecture 1

Dhiren Bhatia Carnegie Mellon University

CS 371 Project 5: Midterm Meta-Specification

Lecture Notes, CEng 477

Instructor. Goals. Image Synthesis Examples. Applications. Computer Graphics. Why Study 3D Computer Graphics?

Image Processing and Computer Graphics. Rendering Pipeline. Matthias Teschner. Computer Science Department University of Freiburg

Computer Graphics. Introduction. Computer graphics. What is computer graphics? Yung-Yu Chuang

How To Learn To Program In Csc 406 Computer Graphics

Institution : Majmaah University. Academic Department : College of Science at AzZulfi. Programme : Computer Science and Information Course :

How To Teach Computer Graphics

CSE452 Computer Graphics

William Paterson University of New Jersey Department of Computer Science College of Science and Health Course Outline

Computer Graphics Global Illumination (2): Monte-Carlo Ray Tracing and Photon Mapping. Lecture 15 Taku Komura

Lezione 4: Grafica 3D*(II)

PATH TRACING: A NON-BIASED SOLUTION TO THE RENDERING EQUATION

SkillsUSA 2014 Contest Projects 3-D Visualization and Animation

2: Introducing image synthesis. Some orientation how did we get here? Graphics system architecture Overview of OpenGL / GLU / GLUT

CSCD18: Computer Graphics

Using Photorealistic RenderMan for High-Quality Direct Volume Rendering

COMPUTER GRAPHICS Computer Graphics

CS 378: Computer Game Technology

Using 3D Computer Graphics Multimedia to Motivate Teachers Learning of Geometry and Pedagogy

CS 325 Computer Graphics

CS 4810 Introduction to Computer Graphics

Comp 410/510. Computer Graphics Spring Introduction to Graphics Systems

Cork Education and Training Board. Programme Module for. 3 Dimensional Computer Graphics. Leading to. Level 5 FETAC

COMPUTER SCIENCE. FACULTY: Jennifer Bowen, Chair Denise Byrnes, Associate Chair Sofia Visa

Computer Graphics. Anders Hast

Introduction to Computer Graphics. Reading: Angel ch.1 or Hill Ch1.

Thea Omni Light. Thea Spot Light. Light setup & Optimization

Guidelines for Independent Study

Digital 3D Animation

JEFFERSON TOWNSHIP PUBLIC SCHOOLS RELATED ARTS AND TECHNOLOGY CURRICULUM TITLE: 3D COMPUTER GRAPHICS GRADE: 10-12

Interactive Computer Graphics

An introduction to Global Illumination. Tomas Akenine-Möller Department of Computer Engineering Chalmers University of Technology

Chapter 6 - The Scene Graph

CS130 - Intro to computer graphics. Dr. Victor B. Zordan vbz@cs.ucr.edu Objectives

Geant4 Visualization. Andrea Dotti April 19th, 2015 Geant4 M&C+SNA+MC 2015

Photon Mapping Made Easy

Course Syllabus. Tuesday 4 pm to 5 pm & Thursday 4 to 5 pm

Programming 3D Applications with HTML5 and WebGL

GRAFICA - A COMPUTER GRAPHICS TEACHING ASSISTANT. Andreas Savva, George Ioannou, Vasso Stylianou, and George Portides, University of Nicosia Cyprus

The 3D rendering pipeline (our version for this class)

CSC 425 Computer Graphics and Games

3D Math Overview and 3D Graphics Foundations

Kankakee Community College

1. INTRODUCTION Graphics 2

The Use of Computer Animation in Teaching Discrete Structures Course

Carleton University School of Computer Science COMP Computer graphics Fall 2015

B2.53-R3: COMPUTER GRAPHICS. NOTE: 1. There are TWO PARTS in this Module/Paper. PART ONE contains FOUR questions and PART TWO contains FIVE questions.

REAL-TIME IMAGE BASED LIGHTING FOR OUTDOOR AUGMENTED REALITY UNDER DYNAMICALLY CHANGING ILLUMINATION CONDITIONS

Silverlight for Windows Embedded Graphics and Rendering Pipeline 1

Adding Animation With Cinema 4D XL

TEACHING GRAPHICS PROGRAMMING ON MOBILE DEVICES

SAN DIEGO COMMUNITY COLLEGE DISTRICT MESA COLLEGE ASSOCIATE DEGREE COURSE OUTLINE

3D Modeling, Animation, and Special Effects ITP 215x (2 Units)

Video Game Programming ITP 380 (4 Units)

Interactive Visualization of Magnetic Fields

CURRICULUM VITAE EDUCATION:

Surface Curvature from Laser Triangulation Data. John Rugis ELECTRICAL & COMPUTER ENGINEERING

DIABLO VALLEY COLLEGE CATALOG

CUBE-MAP DATA STRUCTURE FOR INTERACTIVE GLOBAL ILLUMINATION COMPUTATION IN DYNAMIC DIFFUSE ENVIRONMENTS

CS 4204 Computer Graphics

Anime Studio Debut 10 Create Your Own Cartoons & Animations!

Introduction to Computer Graphics

MMGD0203 Multimedia Design MMGD0203 MULTIMEDIA DESIGN. Chapter 3 Graphics and Animations

The Car Tutorial Part 1 Creating a Racing Game for Unity

Chapter 6 - The Scene Graph

CSE 564: Visualization. GPU Programming (First Steps) GPU Generations. Klaus Mueller. Computer Science Department Stony Brook University

Using Web-based Tools to Enhance Student Learning and Practice in Data Structures Course

3D Modeling, Animation, Compositing, and Special Effects ITP 215x (2 Units)

The Future Of Animation Is Games

Path Tracing. Michael Doggett Department of Computer Science Lund university Michael Doggett

BAA DigiPen 3D Animation 11

Our One-Year 3D Animation Program is a comprehensive training in 3D using Alias

Transcription:

Teaching Introductory Computer Graphics Via Ray Tracing Helen H. Hu Westminster College, Salt Lake City, UT hhu@westminstercollege.edu Figure 1. Examples of student work. For fun, enthusiastic students created these scenes, which showcase mirror reflections, shadows, texture maps, transparency, and Mandelbrot fractals. Abstract Ray tracing is a computer graphics technique capable of creating visual effects such as realistic soft shadows, reflections, refractions, motion blur, and depth of field. Historically considered computationally expensive, ray tracing is gaining in popularity as computing power (primarily the recent increase in the number of processor cores) continues to increase. This paper details an introductory computer graphics course taught around a Java ray tracer. For most students this was their first exposure to the field of graphics. Having programmed primarily in Java since CS 1, the students preferred Java to C++. Like any other Java program, the ray tracer ran on all platforms, minimizing students frustrations and avoiding investment in a new IDE. For most homework assignments, students added features to a bare-bones ray tracer, converted from the C++ code in Kevin Suffern s textbook Ray Tracing from the Ground Up [13]. Additional non-ray tracing homework was also assigned to expose students to other fundamental areas of computer graphics, such as color models, transformations, viewing and event-driven interactions. 1. Introduction The traditional introductory computer graphics course emphasizes geometric and raster algorithms, such as the Bresenham line drawing algorithm, scan conversion, BSP trees, and clipping. Cunningham describes this course as Computer Graphics Algorithms and Techniques [2]. With the innovation of graphics APIs such as OpenGL and Direct3D in the 1990 s, the priorities of graphics programmers shifted. In response, many instructors transformed their graphics classes to use OpenGL and emphasized interactive camera control over raster line algorithms [12]). Today, most graphics textbooks follow this newer course model and are written for students programming in C++ using OpenGL. Other classic computer graphics textbooks still in print follow the traditional course model ( Computer Graphics Algorithms and Techniques ). What is missing from these textbook options is a computer graphics textbook written for students programming in other languages that emphasizes advanced graphics effects rather than the classic algorithms. The OpenGL course model has many advantages over the traditional computer graphics course. By using an API that provides the fundamentals (such as polygon drawing and occlusion), students quickly progress to writing programs with advanced graphics effects, such as shading and fog. Students are motivated by their results, but OpenGL does have the drawback of being difficult to debug. OpenGL was created with graphics hardware in mind, not for programmer convenience, making it less appropriate for teaching graphics concepts. Larger departments, especially those with graduate programs, often compromise by offering two or more graphics classes, to be taken

in series. The first is typically the more traditional course, emphasizing classic graphics algorithms. The follow-up course then introduces students to OpenGL programming. At smaller colleges where only one computer graphics course is offered, an OpenGL course may not be the best choice. Westminster College is a small liberal arts college graduating approximately 10 computer science majors each year. For most students, our single graphics course is their only exposure to computer graphics. Other courses are taught primarily in Java, with little exposure to C++. Because the department does not have its own computer lab, most students program on their own laptops. When OpenGL was used in a previous offering of the graphics course, several students had difficulty installing it. They also were unfamiliar with C++ and struggled debugging their programs. In response to these difficulties, some Java-based departments have had success using Java2D [15], Java3D and/or the JOGL libraries in their graphics courses [17]. Java2D and Java3D are graphics APIs written specifically for the Java language. JOGL allows Java programmers to access the OpenGL API. However few general purpose graphics textbooks exist for either Java3D or JOGL; most Java3D and JOGL books are programming tutorials instead. Furthermore, JOGL has OpenGL s disadvantages as a difficult state machine to debug. To give students the motivation of implementing advanced graphical effects, while avoiding the challenges of OpenGL, I redesigned my introductory graphics class in Spring 2010. For my new course I taught computer graphics within the context of a Java ray tracer, assigning readings from the textbook Ray Tracing from the Ground Up [13]. Although the code accompanying the textbook is in C++, I gave my students a bare bones ray tracer written in Java. For homework assignments, students added features to the Java ray tracer, learning about fundamentals such as perspective projection, shading models, transformations, anti-aliasing, texture mapping and instancing (Figure 1). Ray tracing is an elegant rendering algorithm first introduced in 1980 [14]. Instead of using transformations to create an image of a 3D scene (as with OpenGL and Direct3D), ray tracing reverses the physics of light transport. In the real world, light photons leave the light source and scatter throughout the environment until an extremely small percentage of the light reaches a human eye or a camera lens. To save time, a ray tracer traces rays starting at the eye and scattering throughout the scene. The ray tracer generates at least one ray for each pixel in the image. The color of each pixel is based on the objects the ray hits and the light visible from these hit points. Originally too computationally expensive to be used widely, ray tracing has become a viable rendering method in recent years. It is often used to create visual effects in movies, and some experts speculate that video games will soon be rendered with ray tracing rather than OpenGL and Direct3D [12]. Other instructors have published their experiences using a ray tracer in their computer graphics courses [4, 9, 16], although these ray tracers are typically written in C++ rather than Java. There are also many ray tracing books besides the one assigned in this course, however most are too advanced for an introductory graphics course [5, 8, 11]. Other texts are inappropriate as textbooks because they are too focused on ray tracer programming and not enough on the fundamental graphics algorithms. The next section of this paper provides a detailed description of the course content. The paper then discusses how to cover all essential graphics topics in this type of graphics course. Finally, improvements to the course are suggested. 2. Course Content The computer graphics course at Westminster College is an upper-division class taken by junior and senior computer science majors. While most of the course was structured around the textbook, Ray Tracing from the Ground Up [13], handouts on more general graphics topics were used to supplement the required textbook (Table 1). Providing the students with a bare bones ray tracer was essential to the course. Kevin Suffern s web site http://www.raytracegroundup.com/ provides two versions of a C++ ray tracer. With the author s permission, I converted most of the online C++ code to Java and released the code incrementally to my students. Of the seven programming assignments, four involved extending the ray tracer. The remaining three assignments taught basic graphics concepts that were not covered by the ray tracer.

Week Topic Assigned Reading Week Topic Assigned Reading 1 Colors * 9 Shadows Ch. 16 Pixels Ch. 1 Reflections Ch. 24 Transparency Ch. 27 2 Gamma * 10 Viewing Transformations * Modeling Ch. 23 3 Math Background Ch. 2 11 Texture Mapping Ch. 29, 30, 31 4 Bare Bones Ray Tracing Ch. 3 12 Anti-aliasing Ch. 4, 5 Raster Algorithms * 5 Viewing System Ch. 9 13 Ambient Occlusion Ch. 17 Ray Object Intersection Ch. 19, 23 Area Light Sources Ch. 18 Grid Acceleration Ch. 22 6 Lights and Materials Ch. 13, 14, 15 14 Thin Lens Camera Ch. 10 7 Theory Ch. 13 Global Illumination Ch. 26 Smooth Shading Ch. 23 Radiosity * 8 Transformations Ch.s 20, 21 15 Graphics Pipeline * * refers to supplemental handouts from other sources Table 1. Topics Covered in CMPT 360, Spring 2010. Chapter numbers are from Suffern s textbook. 2.1 Homework Assignments The seven homework assignments were: 1. Color Models (2 weeks) Students learned about color models and matrix multiplication. They wrote a utility class that converted between color spaces and unit tests to test their methods. Students then converted a Java Swing GUI into a simple testing program that displayed two colors (the original color and the same color run through two consecutive conversions). 2. Building Orthonormal Basis and Modeling (1 week) Students were given the code for the bare bones ray tracer, and were expected to get it compiling and running on their own systems. They also answered some simple questions about how a ray tracer worked. (Questions from the textbook were assigned for all ray tracing homework assignments.) Separately, they wrote a utility class that built a 3D orthonormal basis. This class relied on two of the ray tracer s classes, which required students to start familiarizing themselves with the ray tracer code. Finally, they used their utility class to complete a 3D model of a barn. They were given the barn s vertices, but were expected to return the polygon faces and their normals. 3. Pinhole Camera and Mesh Geometry (2 weeks) Students converted the bare bones ray tracer (orthographic viewing) to a pinhole camera. They then wrote a method to read in SMF ( Simple Mesh Format ) meshes into their ray tracer. (The online code included C code to read in PLY files.) 4. Phong Materials and Smooth Shading (2 weeks) Java code implementing directional light sources and matte materials was released. Students added point light sources and Phong materials (both the original Phong model and Blinn s modifications). Students implemented smooth shading for their SMF meshes and generated images contrasting flat to smooth shading. 5. Reflections, Shadows and Instancing (2 weeks) Again, more Java code was released. Students added instancing to their ray tracer, allowing them to convert a sphere to an ellipsoid without adding a new geometric primitive to their ray tracer. Students also added reflections and shadows to their ray tracer. These two visual effects required students to make minor modifications to several classes. 6. 3D Viewing (2 weeks)

This non-ray tracing assignment required the students to complete a utility class that built matrices for orthographic and perspective projection. They were given a Java GUI program that read in 3D geometry. They were allowed to use their choice of either the ray tracer s Matrix3D class or the JAMA Matrix class [6]. Students displayed 3D wireframe objects in their programs through matrix multiplications and homogenous coordinates. They also added translation, rotation and zooming interactions of the 3D objects. 7. Transparency, Texture Mapping, Grid Acceleration (2 weeks) Most of the code for transparency was provided, although students wrote a transparency material class. Students also implemented simple texture mapping. Finally, students added a bounding box method to each geometric object class, to make grid acceleration work in their ray tracers. 2.2 In-class Laboratory Exercises In addition to the homework assignments, students participated in a few in-class laboratory exercises. As opposed to the graded homework assignments, students earned credit for simply participating in these exercises. The first exercise walked the students through building a GUI for a Java Swing program. A second exercise required them to complete Bresenham s line algorithm, again in a Java Swing program. Later, students manipulated 2D transformations with Brown University s excellent online exploratories, specifically the Transformation game [1]. Finally, students experimented and displayed noise-based textures in a simple Java program. 3. Conformance to 2004 SIGGRAPH Recommendation In 2004, a working group on computer graphics education [3] proposed that an introductory computer graphics course should teach: 1. Transformations 2. Modeling: Primitives, Surfaces, and Scene Graphs 3. Viewing and Projection 4. Perception and Color Models 5. Lighting and Shading 6. Interaction: Event-Driven and Using Selection 7. Animation and Time-Dependent Behavior 8. Texture Mapping Many but not all of these eight topics can be covered in the context of a ray tracer. By starting with a working bare bones ray tracer, the students were able to quickly implement a pinhole camera (perspective projection), the Phong reflection model, shadows, reflections, transparency and texture mapping. This list of advanced visual effects is similar to the visual effects programmed in many OpenGL computer graphics classes. The three additional non-ray-tracing assignments were used to expand on most of the remaining topics that were not well covered by the ray tracer. Both color models and GUI interactions were explored in the first homework assignment. A second homework introduced modeling and orthonormal bases, to prepare students for camera transformations. Perspective projection was first introduced with the ray tracer s pinhole camera, but was later addressed more thoroughly in the 3D Viewing assignment as part of the graphics pipeline. Transformations were coded as part of instancing in the ray tracer, but were also part of the same 3D Viewing assignment. Two topics from the SIGGRAPH recommendation, animation and scene graphs, were not covered well in the Spring 2010 course. In the future, I would consider replacing a few of the advanced ray tracing topics (e.g., ambient occlusion, area lighting, and the thin lens camera) with a week on scene graphs and animations. Scene graphs could be explored using Brown University s Scenegraph Builder [1], while animation might be explored using a modeling and animation program, as described by [18]. In my next offering of this course, I plan to add an in-class OpenGL exercise to the graphics pipeline week, to allow students to experiment with OpenGL. While the 3D Viewing homework assignment covers the perspective projection aspects of the pipeline sufficiently, students could benefit from seeing everything else that the graphics hardware can now handle.

4. Reflection on Course While the textbook, Ray Tracing from the Ground Up, does not assume any prior computer graphics background, it is not a general purpose graphics textbook. It is intended for anyone who wants to learn about ray tracing. Students will need additional references to supplement the textbook in areas such as perception, color models, 2D algorithms, curves and surfaces, 3D viewing transformations, the graphics pipeline, and radiosity (Table 1). Many of these topics are covered well online (e.g., Siggraph s HyperGraph at http://www.siggraph.org/education/materials/hypergraph/toc.htm), but instructors could also assign a more general graphics textbook, possibly as an optional textbook. Fundamentals of Graphics[10] is an excellent graphics textbook that is independent of API, while Computer Graphics: Theory Into Practice[7] presents OpenGL material separately from the other topics, allowing instructors to decide how much OpenGL to cover. To reserve time for other more general graphics topics, I limited the discussion of several topics relevant only to ray tracing that were covered in the textbook. While we discussed sampling in the second half of the semester, my students ray tracers only generated one ray per pixel. They did not code up any visual effects that required more samples, such as area light sources, glossy reflections, depth of field, or path tracing. For students used to working in Java, the C++ code throughout the textbook can be a struggle. While I would prefer the same textbook written in Java, the exposure to C++ code is generally educational for students. As a large collection of over 60 classes, the ray tracer does bring some challenges with it. For some students, the ray tracer was the largest software project they had worked on individually. Many students found the first ray tracing assignment (Homework 3) the most challenging because they had difficulty familiarizing themselves with the packages and classes. In the future, I might assign a UML diagram or some other design project as part of Homework 2 or 3, to help students to learn the ray tracer s classes better. The amount of code provided on the textbook web site was a boon, because it allowed students to create advanced visual effects without too much struggling. The majority of the class did not have to debug the black screen that is usually faced by most programmers writing their first ray tracers. At the same time, the abundance of code provided had some pedagogical disadvantages. Even some students felt too much code was provided, making some parts of the assignments trivial (e.g., reflections and transparency). The textbook was written for a broad audience; the author had to provide enough code for the independent reader. In the Spring 2010 class, I gave two students permission to program in C++. In the future, I will be requiring everyone to write their ray tracers in Java. I can be more selective of the released Java code and require students to do more of the programming for reflections and transparency. The Java code released to my students should be cleaned up and improved. Most importantly, I would like to add the option of saving rendered images to a file. I would be happy to share the Java code with other instructors. Instructors would then be able to customize the difficulty of their assignments by selecting which of the Java classes to release to their students. The bare-bones Java ray tracer can be found on my website http://people.westminstercollege.edu/faculty/hhu. Please contact me by email me for the Java code for the full ray tracer. Students generally gave positive feedback for the course. Every student strongly agreed with the statement This course challenged me (a 5 on a scale of 1-5). A typical comment from a student was Very intense class. Learned a lot of material in the given time. A few students did not like the 3D Viewing assignment, which produced only wireframes, after working on their ray tracers for three consecutive assignments. In the future, I might assign the 3D Viewing assignment closer to the start of the semester (before the Pinhole Camera homework). This scheduling change has the advantage that students would first learn about perspective transformations by matrix multiplications, followed immediately by the perspective projection that happens automatically with a ray tracer s pinhole camera. To reduce the amount of background required for the 3D Viewing assignment, I would assign only orthographic and perspective projection. Students could add rotation and translation interactions to the the 3D Viewing program as an in-class exercise later in the semester. Comparing student performance on the Spring 2010 final exam to those from previous offerings of introductory computer graphics, I believe Spring 2010 students may have had less comprehension of reflection model calcula-

tions. This difference might occur because the calculations were spread out between many different classes in the ray tracer, or perhaps because we programmed only the more complex Phong reflection model (the simpler Gouraud model makes little sense for ray tracing). In the future, I might add an in-class pencil-and-paper exercise on reflection models to help cement student understanding of this topic. This paper has described an introductory graphics course taught within the context of a Java ray tracer. Because the course emphasizes advanced rendering techniques rather than basic graphics algorithms now handled by hardware, many of my students found this graphics course more engaging and relevant. In addition, while a ray tracer can be difficult to debug, many students found it less frustrating programming in Java, a language they were already proficient in. For faculty in Java-based departments, I strongly recommend this ray tracing based approach for teaching introductory computer graphics. 5. Acknowledgements I would like to thank Kevin Suffern for his valuable assistance and my CMPT 360 students for providing constructive feedback on this course redesign. Thanks also to David Weinstein and the reviewers for their helpful comments and edits improving this paper. References [1] BROWN UNIVERSITY COMPUTER GRAPHICS RESEARCH GROUP. Exploratories. http://www.cs.brown.edu/exploratories/freesoftware/home.html. [2] CUNNINGHAM, S. Powers of 10: the case for changing the first course in computer graphics. In SIGCSE 00: Proceedings of the thirty-first SIGCSE technical symposium on Computer science education (New York, NY, USA, 2000), ACM, pp. 46 49. [3] CUNNINGHAM, S., HANSMANN, W., LAXER, C., AND SHI, J. The beginning computer graphics course in computer science. SIGGRAPH Comput. Graph. 38, 4 (2004), 24 25. [4] DICKSON, P. E. Computer graphics taught by building a rendering engine: poster session. J. Comput. Small Coll. 25, 6 (2010), 233 234. [5] GLASSNER, A. S., Ed. An introduction to ray tracing. Academic Press Ltd., London, UK, 1989. [6] MATHWORKS AND THE NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY. Jama: A Java matrix package, July 2005. http://math.nist.gov/javanumerics/jama/. [7] MCCONNELL, J. J. Computer Graphics: Theory Into Practice. Jones and Bartlett Publishers, Inc., USA, 2005. [8] PHARR, M., AND HUMPHREYS, G. Physically Based Rendering: From Theory to Implementation. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2010. [9] SCHALLER, N. C. Graphics education for computer science: panel report. SIGGRAPH Comput. Graph. 27, 1 (1993), 6 10. [10] SHIRLEY, P., AND MARSCHNER, S. Fundamentals of Computer Graphics. A. K. Peters, Ltd., Natick, MA, USA, 2009. [11] SHIRLEY, P., AND MORLEY, R. K. Realistic Ray Tracing. A. K. Peters, Ltd., Natick, MA, USA, 2003. [12] SHIRLEY, P., SUNG, K., BRUNVAND, E., DAVIS, A., PARKER, S., AND BOULOS, S. Rethinking graphics and gaming courses because of fast ray tracing. In SIGGRAPH 07: ACM SIGGRAPH 2007 educators program (New York, NY, USA, 2007), ACM, p. 15. [13] SUFFERN, K. Ray Tracing from the Ground Up. A. K. Peters, Ltd., Natick, MA, USA, 2007. [14] WHITTED, T. An improved illumination model for shaded display. Commun. ACM 23, 6 (1980), 343 349. [15] WILKENS, L. A multi-api course in computer graphics. J. Comput. Small Coll. 16, 4 (2001), 66 73. [16] WOLFE, R. New possibilities in the introductory graphics course for computer science majors. SIGGRAPH Comput. Graph. 33, 2 (1999), 35 39. [17] WOLFF, D. A., SUNG, K., ORR, G., AND WILSON, B. The content and role of the computer graphics course in small, liberal arts colleges: panel discussion. J. Comput. Small Coll. 24, 2 (2008), 20 22. [18] ZHU, Y., AND OWEN, G. S. Integrating modeling and animation tools into an introductory computer science graphics course. In SIGGRAPH 04: ACM SIGGRAPH 2004 Educators program (New York, NY, USA, 2004), ACM, p. 6.