Students study and apply the core concepts of photorealistic rendering algorithms and physics-based animation systems. Monte Carlo methods for global illumination, core algorithms for particle systems, rigid body simulation, fluid animation, and performance-based character animation, are discussed.
This course covers advanced topics in computer graphics. We will focus on two specific questions: How to create photo-realistic renderings and how to create physically plausible animations? To answer the first question, we will first discuss and analyze the classical raytracing algorithm. With an understanding of the limitations of raytracing, we will look at a more principled way of image synthesis based on the physics of light transport. After studying the basic physical quantities of light transport and corresponding local illumination models, we will derive the global rendering equation as a model for image synthesis. We then discuss Monte Carlo methods for evaluating this integral equation leading to several Monte Carlo rendering algorithms such as path tracing or photon mapping. In the second part of the course we will study concepts and algorithms for the animation of solids and fluids, and discuss principles of performance-driven character animation. Starting with simple particle systems and mass-spring networks, we will discuss numerical time integration methods commonly applied for computer animation. Rigid body simulation and elastic materials will also be covered. We then look at how the approximate solutions of the Navier-Stokes equations can be computed to simulate fluid flow. Finally, we study advanced methods for animating 3D characters based on recorded performances.
At the end of the course students will be able to:
Programming assignments will help you translate theoretical concepts to practical applications. All exercises will be in C++. Exercises are done in groups of three and all group members will receive the same grade.
Introduction to Computer Graphics is recommended. Experience with programming is helpful.