GraphicsProgrammingRoadmap
This roadmap's sole purpose is to remind myself/anyone of what is needed to learn in order to become a graphics engineer.
Install / Use
/learn @j-2k/GraphicsProgrammingRoadmapREADME
My Computer Graphics Programming Roadmap
This project's sole purpose is for me to remind myself of what I need to do in order to become a graphics engineer. If you plan to use this for yourself please take some time to read the sections of each stage in this graphics programming roadmap, to make sure it fits with what you want to do! ~~I might also make the same roadmap on my Website WIP.~~
VERY IMPORTANT NOTE! Since this repository is gaining some stars, I feel the need to address the fact that this roadmap is how I plan to venture through graphics programming AS A LEARNER, I AM NOT an already established expert in the field! So for this reason you might actually prefer this over other roadmaps as we are both learners(?)! Anyways these graphics roadmaps are pretty much very close/the same.
In order to not waste your time, I want to say that graphics is heavy in mathematics & computer science, and is very punishing to people that dont bother with the math! If you are a person that hates & doesn't like math, then graphics engineering probably isn't for you, but if you like math but see it as difficult you can become a graphics engineer with enough effort! Additionally later on if you dont like graphics engineering anymore & want to do something still related but is more lenient in the math section, you can become a technical artist instead! (This role is still challenging but much more fun!) Technical Artist roadmap when? I will maybe make one later...
Finally, if I make a spelling/grammar mistake feel free to make a pull request.
Stars Appreciation
- Thank you all for the support & the 25 stars achieved - 8/23/2024! 🥳
- Thank you all for the 50 stars & Happy late new year! The graphics journey is challenging, may you overcome all obstacles-Godspeed, my brothers & sisters! - 1/6/2025! 🎊
Contents
- Pre-Roadmap advice from me as a learner! My honest advice, I suggest you read if you are new to graphics!
- Roadmap start & Graphics advice from professionals
- Math & C++
- Raytracing
- Software Renderer
- Graphics Specialization
- Diving Deep
- Miscellaneous Notes & Life Advice
- My personal progression with graphics!
<a name="pregraphics">Pre-Roadmap honest advice!</a>
- Firstly, Learn the Math it's the one and only thing important, especially when it comes to graphics programming. Even more so than C++. Learn it to the point where you can understand almost exactly what is happening, because if you do, you will have an easier time in everything, from problem-solving to debugging, & etc, especially in the future.
If you are not interested in my personal advice before starting graphics engineering (I suggest you continue reading since I am a learner like you!), skip to the graphics advice of professionals by clicking here or start the graphics pre-requisites section by clicking here.
Advice from me after I did some graphics projects!
- After doing some graphics, I realized math is insane and beautiful... and really fucking hard. Additonally, slowly try to learn some math notation when you are bored, since graphics concepts (especially on wikipedia) are mostly shown in ugly and scary math symbols. Example: Do you know what sigma or product do & what they look like? What does the cross product and dot product do/look like? Integrals??? Rendering equation?!?!? What the fuck is Calculus??? 🗣🗣🗣🔥🔥🔥
Jokes aside, here are some answers to the previous questions:
$$\large \sum_{sigma}^{im} | \prod_{product}^{im} | \int_{integral}^{im}$$
$$\large Rendering \ Equation\Rightarrow L_o(\mathbf{x}, \omega_o) = L_e(\mathbf{x}, \omega_o) + \int_\Omega f_r(\mathbf{x}, \omega_i, \omega_o) L_i(\mathbf{x}, \omega_i) (\omega_i \cdot \mathbf{n}) , d\omega_i$$
An example of what you will see on wikipedia! (Literally STOLEN from wikipedia btw!)
Try to guess what this is if you have done some game development previously! Spoilers below!
$$ \large R = R_{z}(\gamma) , R_{y}(\beta) , R_{x}(\alpha) = \begin{bmatrix} \cos \gamma & -\sin \gamma & 0 \ \sin \gamma & \cos \gamma & 0 \ 0 & 0 & 1 \ \end{bmatrix} \begin{bmatrix} \cos \beta & 0 & \sin \beta \ 0 & 1 & 0 \ -\sin \beta & 0 & \cos \beta \ \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \ 0 & \cos \alpha & -\sin \alpha \ 0 & \sin \alpha & \cos \alpha \ \end{bmatrix} $$
$$ \large = \begin{bmatrix} \cos \beta \cos \gamma & \sin \alpha \sin \beta \cos \gamma - \cos \alpha \sin \gamma & \cos \alpha \sin \beta \cos \gamma + \sin \alpha \sin \gamma \ \cos \beta \sin \gamma & \sin \alpha \sin \beta \sin \gamma + \cos \alpha \cos \gamma & \cos \alpha \sin \beta \sin \gamma - \sin \alpha \cos \gamma \ -\sin \beta & \sin \alpha \cos \beta & \cos \alpha \cos \beta \ \end{bmatrix} $$
An example of Sigma being used, in a VERY popular math operation! (Literally STOLEN from Google btw!)
Again! Try to guess what this formula is being used in! Spoilers below!
<img src="imgs/dotprod.google.png"><img src="imgs/dotprod.nvidiacg.png" width=50%>
</details>$$ \large ? = \sum_{i=1}^{n} a_i b_i $$
<a name="graphics">Graphics Roadmap</a>
START OF THE GRAPHICS ROADMAP, THE ORDER IS IMPORTANT & IT'S OKAY TO DEVIATE BUT NOT TOO FAR FROM EACH INDEX.
<a name="ga0">0. Graphics Advice</a>
You can skip this as I list my resources in order according to many sources when it comes to learning CG
- Beginner Computer Graphics Starter Guide Erkaman's guide on starting Computer Graphics.
- Graphics Programming Github Page Made up from people of the Graphics Programming Discord Server.
<a name="m&c1">1. Math & C++ (Prerequisite Resources!)</a>
As I said previously, math is THE most important section of all graphics, Good Luck!
Learn these 3 topics > Linear Algebra, Trigonometry, C++.
- MathIsFun.com Trigonometry For Learning Trigonometry & MathIsFun can be used to learn almost everything needed!
- Immersive Mathemathics, Learn math needed through a website that shows mathematics in an immersive 3D environment.
- Essence of linear algebra Learning Linear Transformations, & see how they move in space via video (3blue1brown).
- Cherno C++ Series Chernos C++ Series for the pre-requisite section (Video Format)
- Learn CPP Website Learn C++ website, literally everything covered (Reading Format)
- Scratchapixel You can learn all math prerequisites in here (Geometry Section) & other computer graphics topics!
- 3D Graphics Overview - Mathematics for Graphics Underrated videos that explain the mathematics behind 3D graphics concepts, you dont have to go through all the videos if you know some topics but make sure to watch something you struggled to understand! (Video format)
<a name="raytracing2">2. Raytracing</a>
<div align="center"> <img src="imgs/rt.diagram.wiki.png" width=31%><img src="imgs/rt.wiki.png" width=31%><img src="imgs/rt.myrt.png" width=31%> </div>First graphics project will be simple raytracing! (Basically 1 math formula, understand it!)
All resources below will cover the math & implementation, pick your poison.
- Cherno Raytracing Series (REAL TIME RAYTRACER) Cherno Raytracing Guide that im following.
- Raytracing in 1 Weekend (OFFLINE RAYTRACER) Infamous book for learning raytracing.
- Scratchapixel, Intro to Raytracing (OFFLINE RAYTRACER) Scratchapixel raytracer, but personally, I would go with 1 of the other ones above for raytracing. You should also go over scratch a pixels math lessons though for real graphics programming!
- Ssloy Tiny Raytracer (OFFLINE RAYTRACER) SSloy Raytracer (again id personally go with 1 of the top 2 in this section, you will do ssloy renderer instead which is much more important!).
<a name="rasterizer3">3. Software Renderer & Graphics Pipeline Foundations</a>
<div align="center"> <img src="imgs/rast.blend.quaker.png" width=48%><img src="imgs/rast.blend.wraith.png" width=48%> <br> <img src="imgs/rast.wireframe.quaker.png" width=19%><img src="imgs/rast.rast.quaker.png" width=19%><img src="imgs/rast.depth.quaker.png" width=19%><img src="imgs/rast.presproj.depth.quaker.png" width=19%><img src="imgs/rast.prespproj.texture.quaker.png" width=19%> </div>IMPORTANT! THIS STEP IS SKIPPABLE BUT READ BEFORE DECIDING!
Diving directly into a GFX API while just previously writing just a raytracer is usually possible, however nothing related the the graphics pipeline & the foundations of graphics programming has been taught yet, usually at this stage if you skip that means you will be learning how the GFX Pipeline works AND a graphics specification. That is the main problem, & thats why this section exists and is heavily recommended to first learn how the graphics pipeline work because knowing this inside out will make everything easier in the
Security Score
Audited on Mar 23, 2026
