/awesome-computer-graphics

:small_red_triangle::sunglasses: A curated list of awesome stuff to learn computer graphics

Creative Commons Zero v1.0 UniversalCC0-1.0

Awesome Computer Graphics Awesome

The Awesome CG List! A collection of various resources to learn computer graphics, including books, tutorials, online courses, and more. Name a CG topic, chances are this list contains some stuff about it (if not, it will someday!).

If you want to contribute, please read the Contribution Guidelines

Contents

What is computer graphics?

Computer graphics is a knowledge area about how to create images using computers, to put it simply. Generally this is done by processing data representing information what you want to draw, for example: objects, colors, light. Anything about visual and digital creations have used CG in some way: games, movies, etc.

How to get started?

Before showing a lot of books, videos, and materials, first you need to know what is bare-minimum to begin with computer graphics. It boils down to two main topics: programming and math. About programming, learn the basics, it's recommended to learn C/C++ as they are used frequently in this area. Concerning math, learn linear algebra and geometry, there are books in this list focused on math fundamentals for CG, pick one and work on it.

I want to learn more advanced stuff

Assuming you know programming and math, then you can get more practical. It's a good approach to get a project about a topic like global illumination, or GPU programming to deepen your knowledge on this area. Examples of projects are: path tracers, photon mapping, shader programming. Recommended projects are the PBRT, the ray tracer from the Physically Based Rendering book, and the ray tracer with photon mapping, from the Realistic Image Synthesis Using Photon Mapping. Also, watching tutorials for Shader Toy and experimenting on it is a good idea.

Books

  • Real-Time Rendering, by Tomas Akenine-Moller, one of the best on high performance graphical applications, very detailed explanations and contains many examples to illustrate its topics.

  • Ray Tracing in One Weekend, by Peter Shirley, a free book to get you implementing a basic ray tracer in C++, the catch is: this one is very short (about 40 pages), you'll learn the minimum to create a ray tracer to generate amazing images in a very short amount of time!

  • Ray Tracing: The Next Week, by Peter Shirley, builds on top of the first books' project, adding more effects, like textures and motion blur.

  • Ray Tracing: The Rest of Your Life, by Peter Shirley, last book of the series, exposes more mathematical themes necessary to build more complex and complete renderers.

  • Physically Based Rendering: From Theory to Implementation, by Matt Pharr, teaches how to create a ray tracer to render realistic images. A thorough explanation of the technique, with as much code the theory behind it, and has a free online version!

  • 3D Math Primer for Graphics and Game Development, by Fletcher Dunn, this book gives more focus to the math necessary for game development.

  • Fundamentals of Computer Graphics, by Steve Marschner, introduces graphics concepts.

  • Ray Tracing from the Ground Up, by Kevin Suffern, guides you through the task of implement a ray tracer, starting with a bare-bones project, and every chapter introduces a new concept to add to the renderer.

  • Advanced Global Illumination, by Philip Dutre, its focus are fundamentals to understand realistic image synthesis, such as light transport.

  • Realistic Image Synthesis Using Photon Mapping, by Henrik Jensen, teaches math and algorithms to implement the photon mapping rendering process. It even has a complete C++ implementation of the technique!

  • The Book of Shaders, by Patricio Gonzalez and Jen Lowe, a online book focused on pratical teaching of GLSL fragment shaders, full of (editable!) code examples of how they work.

Tools

  • OpenGL, one of the most, if not the most popular graphics API.
  • Vulkan, created by the same guys from OpenGL with the intent to provide an API with better performance than its predecessor.
  • Bonzomatic, live-coding editor for OpenGL pixel shaders, where the results appear on background as you edit the code.

Courses

Sites

Projects/Repositories

  • PBRT, source code for pbrt, the renderer described in the third edition of "Physically Based Rendering: From Theory To Implementation".
  • tinyrenderer, course of computer graphics teaching how Opengl and rendering works, teaching how to build a simpler version of OpenGL.
  • Ray Tracing in One Weekend repository, ray tracer code based on Ray Tracing in One Weekend's book.
  • Fragmentarium, program to edit and visualize GLSL shaders, mainly focused on fractals and generative systems
  • Business Card Ray Tracer, as the name suggests, it's a very small ray tracer, 35 lines (minified) and file size is 1377 bytes.
  • Small PT, path tracer made in 99 lines in C++.
  • Marble Marcher, a game where you get to move a marble through fractal stages as fast as possible to reach the goal. This game is entirely ray marched, giving it a lot of cool visual effects ray tracing is not able to generate.
  • 3D Game Shaders For Beginners, A step-by-step guide on how to implement SSAO, depth of field, lighting, normal mapping, and more for your 3D game.

Miscellaneous

License

CC0

To the extent possible under law, Luís Santos has waived all copyright and related or neighboring rights to this work.