Fork me on GitHub

CIS 700/003: Real-Time Rendering

Spring 2014
Patrick Cozzi

University of Pennsylvania
Computer Graphics @ Penn

Student Projects

University of Pennsylvania

This pragmatic course prepares you to be an engine or tools developer in games or any industry using real-time graphics. As a class, we will build a graphics engine from the ground up designed for today's GPUs with programmable vertex, fragment, geometry, tessellation, and compute shaders. In addition to graphics, we'll learn software design, teamwork, source control (git), profiling tools (web tracing framework), and software development best practices (code reviews in particular).

This course is run like a startup with the students as founders, the teaching assistant as CTO, and the instructor as the board of directors.

Expect a ton of work. We will write a lot of code, read lots of papers, and give talks.


This course is limited to 10 students, who must have:

  • Passion for computer graphics.
  • Strong C++ and basic familiarly with OpenGL.
  • CIS 460/560: Introduction to Computer Graphics. Preferably received an A.


Patrick Cozzi,
Office Hours: By appointment

Teaching Assistant

Cheng-Tso Lin,
Office Hours: By appointment


Monday, 6-9pm, SIG lab conference room

Guest Lectures


We will build:

  • A content pipeline for optimizing geometry and texture assets
  • A traditional forward shading engine in WebGL targeting the web and mobile devices
  • A deferred shading engine in OpenGL 4.3 targeting desktops
  • Engines will include
    • Asset important
    • Visibility system for efficient culling
    • Shadows (shadow map pass)
    • Reflections and refractions (cube map pass)
    • Sorting opaque geometry for performance
    • Order-independent translucency
    • Script-driven particle system for smoke, fire, etc.
    • Script-driven PostFX system for depth of field, motion blur, etc.
    • Anti-aliasing

    We will also have an open-ended project where we each extend the engine. Potential projects include:

    • Deep shadow maps for translucent shadows with compute shaders
    • Forward+ shading with compute shaders
    • Terrain and ocean rendering with tessellation shaders
    • Animation system with vertex-shader skinning and compute-shader flocking
    • Non-photorealistic rendering
    • Volumetric clouds
    • Major optimizations such as instancing
    • GPU-accelerated collision detection and physics
    • Input devices such as leap motion controller and Kinect
    • Foliage system, tools + engine
    • Decal system
    • Skin, hair, and fur
    • Building an app on the engine

    Papers and Talks

    To support our engine development, we'll read selected

    See the reading list.

    Each student will give a couple 40-minute talks throughout the semester to bring the rest of the team up to speed on a topic so we can collectively decide how it will fit into our engine. Every week a student will either be preparing a talk or writing engine code.


    We will have a major focus on performance. In addition to our topic talks, we will each select an open-source WebGL engine/app to profile with Web Tracing Framework. We will give a 10-minute talk on our analysis including optimization recommendations.


    • 40% engine development: 20% class and 20% individual
    • 30% final project (engine extension)
    • 30% talks, including profiling analysis

    Academic Integrity

    An academic integrity violation will result in an F in this course. See Academic Integrity at the University of Pennsylvania: A Guide for Students.


    You must have a video card that supports OpenGL 4.3. These cards have been available since 2009 starting with the NVIDIA GeForce 400 series and Radeon HD 5000 series.

    Visual Studio is also required for our C++ development. Our JavaScript and WebGL development can be done on any platform.

    Relationship to CIS 565

    This course and CIS 565 (GPU Programming and Architecture) both cover graphics development using the GPU. The difference is that CIS 565 covers more GPU architecture and GPU computing (general massively parallel programming) and has several smaller projects. This course focuses purely on graphics, using WebGL and OpenGL, and engine development in general.

    This course is recommended for students who can't take CIS 565 in Fall 2014.