A hand-picked list of graphics programming resources maintained by graphics programming virtual meetup attendees.
- Meetup page: https://www.meetup.com/Graphics-Programming-Virtual-Meetup
- Join our Discord: https://discord.gg/TsTDb4uYfR
- Follow us on Twitter: https://twitter.com/GraphicsMeetup
- YouTube channel: https://www.youtube.com/channel/UCbX05PBAE-582PYaRXdjRnw
Table of Contents
- Beginner friendly
- Meta-links
- Overview
- Advice
- Math
- Ray Tracing
- Rasterization
- Graphics Effects
- PBR
- Textures
- Shader Programming
- Compute
- Color, HDR, and Tone Mapping
- Sampling and anti-aliasing
- Animation
- Geometry
- Physics and Simulation
- APIs
- System Design
- Scene Description
- General Programming
- Tools/libraries
- Assets
Here is a list of resources suitable for beginners, though intermediate or advanced folks can also benefit from them.
- Learn OpenGL - Learn OpenGL is the definitive resource for learning real-time renderer techniques as beginners. Even though it is an OpenGL tutorial, it also teaches rendering techniques at the same time.
- Ray Tracing in One Weekend series - Those three short books explain basic concepts of path tracing and implement a software renderer from scratch.
- 🎥 CMU's introductory to Computer Graphics course - A comprehensive introduction to various topics in computer graphics.
- Catlike Coding - Focuses on C# and shaders in Unity.
- Book Of Shaders - The author introduces shaders from an artistic perspective, and the book covers many topics that more engineering-focused resources such as "Learn OpenGL" won't cover.
Resources that curate other resources. Some meta links are omitted here if they are mentioned in other categories.
- GPU Optimization for GameDev
- Volumetric Clouds Resources List
- graphics resources
- Awesome Computer Graphics
- Fun with Computer Graphics
- Awesome Graphics Libraries - engines & frameworks
- Awesome Computer Vision
- Awesome Gamedev - Lots of graphics-related stuff.
- Physics-Based Animation - Contains learning resources and papers.
- Digital Morphogenesis Resources - Info About Some Different Simulation Techniques
- Graphics Programming Weekly - Article Database
- Graphics Studies Compilation - Adrian Courrèges - Handy compilation of frame breakdown articles
- Readings on Physically Based Rendering - A collection of resources related to PBR rendering
- Graphics Codex - Free book that contains chapters on physically-based shading and rendering, coding projects, and reference pages.
- Real-Time Rendering, Fourth Edition
- Fundamentals of Computer Graphics 5th Edition
- CMU's introductory to Computer Graphics course
- 6.837: Introduction to Computer Graphics (fall 2020)
- Introduction to Computer Graphics - Cem Yuksel
- How to learn graphics programming (but not in a hurry): self-study edition - A Twitter thread on how to learn graphics programming
- Finding Your Home in Game Graphics Programming - Presents a high-level overview of the rendering world and resources for getting started in the different specializations
- Insider guide to tech interviews - An in-depth analysis of the interview process for experienced developers
- 🎥 Math For Game Devs - Video Series from Freya Holmér
- immersive linear algebra - Free online book with interactive figures.
- Mathematics for Computer Graphics
- Mathematics for 3D Game Programming and Computer Graphics, 3rd Edition
- Foundations of Game Engine Development, Volume 1: Mathematics - Introduces math routines with implementations. It also touches Grassman algebra.
- Let's remove Quaternions from every 3D Engine - Introduces Rotors in Geometric Algebra.
- On Vector Math Libraries
- GDC18 - Linear Algebra Upgraded - Designs an affine space type library with distinct vector and point types, and also uses template and union hacks to implement vector swizzling in C++.
- 🎥 CppCon 2018: Valentin Galea “Rapid Prototyping of Graphics Shaders in Modern C++” - Also implemented swizzling with similar techniques.
- Circular Harmonics: Digging in circles
- Spherical Harmonics for Beginners - Cover the fundamentals of using Spherical Harmonics without delving into the math deeply
- Spherical Harmonics in Graphics: A Brief Overview
- Spherical Harmonics - Insights And Fundamentals
- Spherical Harmonic Lighting
- Stupid Spherical Harmonics (SH) Tricks
- Spherical Harmonic Lighting: The Gritty Details
- Ray Tracing in One Weekend series
- An Improved Illumination Model for Shaded Display - Turner Whitted's original Ray Tracing paper.
- 🎥 Lecture 18: Monte Carlo Rendering (CMU 15-462/662) - Including a very good introduction to importance sampling.
- Global Illumination Compendium - overview of ray tracing/path tracing techniques.
- Creating a physically-based path tracer
- Physically Based Rendering: From Theory To Implementation Third Edition - The definitive book for offline rendering.
- Ray Tracing Gems - Like other "gems" books, it contains standalone chapters on various ray tracing topics.
- Ray Tracing Gems II
- Advanced Global Illumination - An advanced book that focuses on light transport theory.
- Dartmouth Rendering Algorithms (Fall21) - The course nicely fills the gap between a Ray Tracing in One Weekend style toy renderer to a more general and fully-fledged renderer that PBRT describes.
- Bidirectional Estimators for Light Transport - Introduces bidirectional path tracing.
- Monte Carlo Methods for Light Transport Simulation - the Academy Award-winning Ph.D. thesis by Eric Veach. It starts from bidirectional light transport algorithms and introduces multiple importance sampling and Metropolis light transport
- A Survey on Bounding Volume Hierarchies for Ray Tracing - Excellent overview paper on BVH.
- bvh - A modern C++ BVH construction and traversal library - Implements various algorithms for BVH traversal and construction.
- 🎥 Lecture 19: Variance Reduction (CMU 15-462/662)
- Flavors of Sampling in Ray Tracing
- Stratified Sampling of Spherical Triangles
- Distributing Monte Carlo Errors as a Blue Noise in Screen Space by Permuting Pixel Seeds Between Frames
- A Low-Discrepancy Sampler that Distributes Monte Carlo Errors as a Blue Noise in Screen Space
- Rendering in Real Time with Spatiotemporal Blue Noise Textures series
- What is direct lighting (next event estimation) in a ray tracer?
- Much Ado About Sampling
- Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting - combines RIS+MIS with reservoir sampling and demonstrates the reservoir merging capability to perform resampling across space and time
- Static Object Intersections - Real-Time Rendering Resource Page - A collection of intersection algorithms.
- Ray Tracing Denoising - Alain.xyz
- Ray Tracing Filtering - Alain.xyz
- Edge-Avoiding À-Trous Wavelet Transform for fast Global Illumination Filtering - Classic paper that introduces a fast and simple filter for real-time ray tracing denoising
See also APIs
- Graphics Pipelines for Young Bloods - Discuss various tradeoffs between different graphics pipeline techniques
- A Primer On Efficient Rendering Algorithms & Clustered Shading - Same as the above article but delves deeper with clustered shading
- ssloy/tinyrenderer - A short tutorial on writing a software rasterizer. Be careful that the tutorial has some rough edges.
- A Parallel Algorithm for Polygon Rasterization
- Scratchapixel: Rasterization Stage
- Triangle rasterization in practice
- Optimizing the basic rasterizer
- High-Performance Software Rasterization on GPUs
- Line Rasterization slides, MIT EECS 6.837, Teller and Durand
- Three Normal Mapping Techniques Explained For the Mathematically Uninclined
- Normal Mapping - Learn OpenGL
- Shadow Mapping - LearnOpenGL
- Percentage-Closer Soft Shadows
- Efficient Shadows from Many Lights
- Reflective Shadow Maps
- Experiments in Hybrid Raytraced Shadows
- 🎥 Michał Olejnik - Raytraced Shadows in Call of Duty: Modern Warfare video presentation
- Using Blue Noise For Raytraced Soft Shadows
- Learn OpenGL: SSAO
- John Chapman SSAO Tutorial
- Screen Space Ambient Occlusion - Louis Bavoil, Miguel Sainz
- Know your SSAO artifacts
- Practical Realtime Strategies for Accurate Indirect Occlusion
- Learn OpenGL: OIT
- Compositing digital images
- Visual glBlendFunc + glBlendEquation Tool
- Order independent transparency blog series
- Graphics Codex: Ray Marching
- Distant functions for primitives - Inigo Quilez
- soft shadows in raymarched SDFs - 2010
- Drawing Lines is Hard - Summarizes the problem of GPU line primitives and introduces techniques for drawing triangulated lines.
- Instanced Line Rendering Part I - Builds on the foundation from "Drawing Lines is Hard" and uses instance rendering to draw lines.
- Instanced Line Rendering Part II: Alpha blending - Continue of the above article, and introduces a way to do alpha-blending with triangulated lines.
- Structured Volume Sampling - MIT-licensed implementation of the Structured Volume Sampling technique, along with a simple framework for comparing other techniques.
- Dithering on the GPU - describe a novel algorithm for ordered dithering based on an arbitrary palette
- Responsive Real-Time Grass Rendering for General 3D Scenes
- Procedural grass rendering - Outerra - Is an inspiration of the following talk
- 🎥 Procedural Grass in 'Ghost of Tsushima'
See also Assets/Materials for PBR materials
- Physically Based Rendering in Filament
- PBR - Learn OpenGL
- Everything (or most things) wrong with learnopengl.com/PBR/Theory
- Crash Course in BRDF Implementation
- Physically Based Shading at Disney
- Deriving Lambertian BRDF from first principles
- Pyramidal Parametrics - The original Mipmap paper.
- Understanding BCn Texture Compression Formats - describes a family of lossy hardware-based texture compression formats called BCn
- GPU Gems Chapter 20. Texture Bombing
- Texture bombing 3 samples - a shader from Inigo Quilez (modified by huwb) that shows how to perform the GPU Gems technique using 3 texture samples instead of 4!
- On Histogram-Preserving Blending for Randomized Texture Tiling - attempts to resolve artifacts you get when blending two textures together (also only using 3 texture samples, plus a lookup table per texture
- The Book of Shaders
- shadertoy smoothstep demo
- Shader Derivative Functions - Useful for normals.
- How to read shader assembly
- ShaderToy Advanced Tricks
- Introduction to Compute Shaders
- More Compute Shaders
- Even more Compute Shaders
- Compute Shader Glossary
- 🎥 CIS 565 GPU Programming and Architecture - A course that introduce parallel programming with a Computer Graphics flavor.
- Gentle introduction to GPUs inner workings - This article summarizes some lower-level aspects of how GPU executes. It uses the Vulkan API terminology, but the concept is largely platform-independent.
- GCN – two ways of latency hiding and wave occupancy
- Breaking Down Barriers
- How does a GPU Shader work?
- Compute Shaders: Optimize your engine using compute / Lou Kramer, AMD
- RDNA Architecture Whitepaper
- AMU RDNA2 Performance guide
- The Peak-Performance-Percentage Analysis Method for Optimizing Any GPU Workload
- [video] All the Pipelines - Journey through the GPU
- Parallel Prefix Sum (Scan) with CUDA
- Thinking Parallel, Part I: Collision Detection on the GPU
- Thinking Parallel, Part II: Tree Traversal on the GPU
- Thinking Parallel, Part III: Tree Construction on the GPU
- Supporting Native HDR Monitors - OurMachinery
- Introduction to Color Theory for Games, Art and Tech - Shahriar Shahrabi
- Tone Mapping - Introduces the theory of Tone Mapping and talks about some commonly used Tone Mapping Operators
See also Ray Tracing/Sampling & Variance Reduction
- A Pixel is not a Little Square! - Classic paper on misconception of "a pixel is a little square." It also serves as an introduction to sampling.
- Basics of Image Resampling
- Computing the Discrepancy with Applications to Supersampling Patterns
- Generating Antialiased Images at Low Sampling Densities
- Temporal Anti Aliasing – Step by Step
- 🎥 Lecture 10: Meshes and Manifolds (CMU 15-462/662) - Great overview, and also spend significant time on the half-edge data structure
- Interactive explanation of marching cubes and dual contouring
- Polygonising a scalar field (Marching Cubes)
- Dual Contouring Tutorial
- The Transvoxel Algorithm
- Geometry Central - A modern C++ library of data structures and algorithms for geometry processing, with a particular focus on surface meshes.
- 🎥 SIGGRAPH University 2019 Course - An Introduction to Physics-Based Animation - A three-hour fast-paced introduction to Physics-Based Animation
- 🎥 CSC417/CSC2549-Physics-based Animation Fall 2021 - Introductory lecture for a course in physics-based animation.
- The RTX Shader Binding Table Three Ways - Talks about shader binding table with RX12, Vulkan, and Optix
- Chapter 15 "The Shader Binding Table Demystified" of Ray Tracing Gems II - An extension for the above article
- docs.gl - OpenGL API Documentation.
- GLConstantsTranslator - This page has the names of most OpenGL constants with their respective decimal and hex values. It is useful when certain functions return GL constants.
- Learn OpenGL - The highly recommended tutorial.
- Awesome OpenGL - Curated List for OpenGL.
- Using Modern OpenGL to Avoid Common Errors - Talks about using features of post-4.2 OpenGL
- Spec - It is a good idea to keep it open while doing Vulkan Programming.
- Vulkan Guide - The best "Vulkan Tutorial" available.
- 🎥 TU Wien: Vulkan Lecture Series
- vk_mini_path_tracer tutorial - A relatively small tutorial that focuses on path tracing using Vulkan's ray tracing API.
- 3D Graphics Rendering Cookbook
- API without Secrets: The Practical Approach to Vulkan* - Part 1 (there is no part 2)
- VK_KHR_dynamic_rendering tutorial - A tutorial to Vulkan's dynamic rendering extension
- Khronos: Streamlining Render Passes - Introduces the VK_KHR_dynamic_rendering extension.
- 🎥 Khronos Talk on Descriptor Indexing
- Vulkan Descriptor Indexing for Mobile
- OurMachinery's Moving The Machinery to Bindless
- Wicked Engine: Bindless Descriptors
- DethRaid's Vulkan Descriptor Indexing
- A note on Descriptor Indexing
- Vulkan Pills 1: Bindless Textures
- TheMaister's Yet another blog explaining Vulkan synchronization
- Understanding Vulkan Synchronization
- Vulkan Timeline Semaphores
- vk-bootstrap - Library that simplifies the Vulkan initialization boilerplate.
- VulkanMemoryAllocator - Memory allocation library that simplifies Vulkan memory allocation and provides decent performance.
- volk - Meta-loader for Vulkan that allows you to dynamically load entry points required to use Vulkan. It also simplifies the use of Vulkan extensions.
- SPIRV-Reflect - Can be used to extract descriptors and push constant information from SPIRV.
- Reader Question Answered 1 - Learning D3D12 - A roadmap for learning DirectX 12
- Raw DirectX 12 - An introduction to writing a simple Hello Triangle DirectX 12 application.
- Learning DirectX 12
- Direct3D 12 programming guide
- Resource Binding - Direct3D 12 Programming Guide
- Bindless Texturing for Deferred Rendering and Decals
- Binding Bindlessly
- Wicked Engine: Bindless Descriptors
- Learn wgpu - Tutorial of WebGPU API using Rust and the wgpu library.
- 🎥 SIGGRAPH 2021 REAC: Unity Rendering Architecture
- Efficiently rendering glTF models - A case study on how to design a renderer under modern graphics APIs that can take diverse input
- Siggraph 2019 Hydra - Presentation slides for Hydra, which is an open-source framework to transport live scene graph data to renderers.
- Game Engine Architecture (paid book)
- The Shader Permutation Problem - Part 1: How Did We Get Here?
- The Shader Permutation Problem - Part 2: How Do We Fix It?
- Algorithms for Modern Hardware - This book contains great info on getting the best performance by looking at the actual hardware.
- Game Loop - Game Programming Patterns
- Fix Your Timestep!
- Chapter 8 "The Game Loop and Real-Time Simulation" of Game Engine Architecture
- Memory Allocation Strategies series
- Memory Management section on Pbrt
- The Memory chapter of Game Engine Architecture
- Object Pool chapter of Game Programming Pattern.
- 🎥 CppCon 2017: John Lakos “Local ('Arena') Memory Allocators” [Part1] [Part2]
- 🎥 CppCon 2017: Bob Steagall “How to Write a Custom Allocator”
A bunch of graphics debuggers above also have profiling capabilities.
- McGuire Computer Graphics Archive - OBJ format scenes.
- ORCA: Open Research Content Archive - Free large graphics scene samples.
- Rendering Resources - Benedikt Bitterli - Scenes in Tungsten, Mitsuba, and pbrt-v3 formats.
- NASA 3D Resources - Some assets of satellites, celestial bodies, etc. Various formats.
- Three Dimensional Scans - some three-dimensional scans of animals and statues.
- Stanford 3D Scanning Repository - a bunch of scanned reconstructions
- The Base Mesh - CC0 mesh collection
- PolyHaven - Public 3d asset library, also CC0
- MIT CSAIL Sample OBJ Models - A couple of models provided by MIT
- Intel Sponza and Graphics Research Samples Library - Intel's revamped high-resolution Sponza model and a couple of related pieces
- KhronosGroup glTF Sample Models
- ambientCG - Public Domain materials for Physically Based Rendering.
- Physically Based - A database of physically based values for CG artists
- TU Wien Volume Data - Listed in their collection of publications.
- Open Scientific Visualization Datasets - Large collection of CT scans of various objects.
- Stanford Volume Archive - Several volume datasets (CT/MRI).
- NIH Visible Human Dataset - Cryosection and MRI/CT data of a male and female cadaver.
- MorphoSource - Enormous library of 2D and 3D data, mesh and voxel, of biological samples and cultural objects.
- Osirix MANIX and other test DICOMs