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 Mastodon: https://mastodon.gamedev.place/@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.
- ShaderToy - Huge collection of open source techniques to refer to, ranging from very basic to more advanced topics.
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 (luisnts)
- Awesome Computer Graphics (waitin2010)
- 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
- Computer Graphics Resources Materials for Self Study
- Resources for Beginning Graphics Programming
- 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
- 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
- Graphics Programming ā Where To Start? - Advices and resource recommendation for beginning learner
- š„ 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.
- Visualizing quaternions - A great intereactive introduction/refresher for quaternions. It focuses on intuition rather than mathematical definitions.
- GPUOpen Matrix Compendium
- 3Blue1Brown Youtube Channel - general math topics, good for linear algebra and calculus.
- Let's remove Quaternions from every 3D Engine - Introduces Rotors in Geometric Algebra.
- š„ The Beauty of BĆ©zier Curves
- BĆ©zier Curves - An interactive explanation and exploration of Bezier curves
- 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
- 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
-PCG Family of Hash Functions - Hash Functions for GPU Rendering
-Dithering on the GPU - Dithering for aesthetic purposes. -Anisoptera Games - How to Fix Color Banding with Dithering - Dithering for functional purposes (fixing color banding on gradients).
- 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
- Real Shading in Unreal Engine 4 - discusses the PBR model adopted by Epic Games in their 4th Unreal Engine installment. A large part of Learn OpenGL PBR chapter is adapted from this source
- 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
- The Accumulation Buffer: Hardware Support for High-Quality Rendering (SIGGRAPH 1990)
- Learn OpenGL: Skeletal Animation
- š„ Animation Programming Basics
- š„ Animation Graphs
- Skeletal animation in glTF
- š„ 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
- Onboarding floating-point - A series about floating-point numbers by Mike Acton
- Floating-point in mobile shaders
- 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
- Quaternius Free Game Assets - Low poly models, CC0
- 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).
- MorphoSource - Enormous library of 2D and 3D data, mesh and voxel, of biological samples and cultural objects.
- Osirix MANIX and other test DICOMs