

Discussion summary
The discussion covers essential topics for becoming a graphics programmer, including API knowledge, shader development, and math skills. Resources like Scratchapixel and UC Davis lectures are recommended, with some emphasizing the importance of understanding APIs like OpenGL and DirectX.
What the discussion says
- Focus on learning graphics APIs like OpenGL, DirectX, or Vulkan.
- Develop strong math skills, especially in linear algebra and calculus.
- Create shaders and understand GPU programming fundamentals.
- Utilize resources such as Scratchapixel and university lectures.
“Familiarity with all GL APIs, but deep focus on 1 or 2.”
“Make awesome shaders. Check this out: https://fragcoord.xyz”
Comments
Hacker News
by conartist6
by 725686
If you want to work with Windows, probably DirectX.
2. Make awesome shaders. Check this out: https://fragcoord.xyz
I would say being a long-time user of Photoshop and Blender helps a lot. It's not a main tool, but supplemental. Maybe AI will take over some of this though.
Hell, maybe that other stuff too, hahaha!
by playorizaya
by SirHackalot
The most useful resources I've found for graphics are scratchapixel, UC Davis' graphics lectures, songho's articles, and Essential Math for Games and Interactive Applications. I highly recommend you read this last resource front to back. Seriously, its the best freaking math reference for graphics out there.
But knowing theory is not sufficient. You also need to get your hands dirty by writing code: learn how to build a software rasterizer (check out Tiny renderer) and a ray tracer (Ray Tracing in One Weekend series). Preferably in a language like C++. Then move onto APIs. I recommend you learn OpenGL, but if you're okay with being confused as all hell try Vulkan. Or WebGPU if you're a hipster (/s).
Finally, try to build some stuff. A simple engine. A non-trivial technique. A game. Whatever.
Unfortunately, you're unlikely to get hired working as a rendering engineer without having serious connections, or by having adjacent experience in the industry. Doubly so now that everyone is convinced junior engineers are unnecessary.
by jplusequalt
I will definitely check out Essential Math for Games and Interactive Applications, I feel I need some solid understanding of theory to see how it all fits together.
by sph
by wizzerking
by love0972
by stefangordon
by smetannik
by purple-leafy
Perhaps I'll write such a book... after I finish my game (dry laughter).
by raincole
I’m going to revisit raycasting with a browser based raycaster from scratch.
I’m just finishing up a webgl + canvas game engine and game for a 2D top down grid strategy game first
by purple-leafy
by pcmaffey
by Cthulhu_
Linear Alegbra Done Right Calculus Better Explained Concrete Mathmetics.
Then you can move on to the low level APIs.
by dimitrios1
Once you have that intuition, the rest is all figuring out the stages of the graphics pipeline and the frameworks like opengl and their constituent data structures.
by psram1986
by nicebyte
I come from reading about CRDTs from Evan Wallace and also having built a product used by >40M users.
It applies to software products too!
In their words…
If you want to build products, use React or even vibecode; you will learn higher-level issues of solutions to problems (i.e. people problems rather than machine problems), not how to push data/state/computation around. The problem is solving a need.
Neither is good nor bad; just be clear about your goals and then it’ll be easy to decide if you want to follow Zynga’s cofounder, Jonathan Blow, or Notch! And before you rush to answer… consider whether any of them are happy.
For people who recommend against learning these skills because “what Carmack did is not possible anymore.”… well, if what you look for is money then yeah! But, if you just want to learn for the love of the game, then that would be a very bad advice!
by dvrp
If you just want to make a game, use a game engine like Unity, Godot or Unreal.
If you want to do graphics, like making engines, simulations, renderers then you should learn a low-level language and a graphics API. For the language I recommend C++, you can also use C or Rust but C might be a bit too difficult and you don't want to fight the language since graphics APIs are already hard. Rust might also be a good choice but I personally find the compile times very slow and the syntax to be ugly.
As for the API, go with OpenGL, it's cross-platform, old (which is good and bad at the same time) and is the easiest of them all.
learnopengl.com is by far the best tutorial on opengl, so I suggest following that.
After using opengl for a while you can branch out and use something like Vulkan or a graphics library that implements all of them, or even keep using opengl if its fine for you.
It's definetly not easy but it's one of the most fascinating parts of CS imo
by Mierenik
by satnhak
For learning graphics programming, in my opinion, writing software renderers is much more enjoyable path. Code is less, the code you write touches fundamental and not boilerplate. Downside is that code will be slower as you will lose HW acceleration.
by deliciousturkey
Good article on color management in general, which has a great intersection with foundations needed for graphics programming: https://chrisbrejon.com/cg-cinematography/chapter-1-color-ma...
by ivanjermakov
by teddyh
sometimes is an understatement there. It took me like a decade to get that shit right. Graphics in general seems to suffer from bad explanations repeated everywhere. We need more authoritative textbooks.
by yunnpp
https://chrisbrejon.com/articles/ocio-display-transforms-and...
by ivanjermakov
by qingcharles
This guy has some good art: https://www.khanacademy.org/profile/kaid_1019042693170894950...
by sudo_cowsay
by sudo_cowsay
by sudo_cowsay
Join the discussion
Write your take first — we'll ask for email only when you're ready to publish.
- Hacker News
- Immutability. Semantics.by conartist6
- Claude Codeby 725686
- 1. Familiarity with all GL APIs, but deep focus on 1 or 2.
If you want to work with Windows, probably DirectX.
2. Make awesome shaders. Check this out: https://fragcoord.xyz
I would say being a long-time user of Photoshop and Blender helps a lot. It's not a main tool, but supplemental. Maybe AI will take over some of this though.
Hell, maybe that other stuff too, hahaha!
by playorizaya - Why outsource my learning to Al? The whole point is the joy of the process. I could easily take a photo of a scene (since the inception of photography) instead of learning to paint it, but I would gain no skills through that. People still paint. I'm just tired, boss... I yearn for a past when we didn't have to end every conversation with a disclaimer about Al taking over.by SirHackalot
- I'm a graphics programmer.
The most useful resources I've found for graphics are scratchapixel, UC Davis' graphics lectures, songho's articles, and Essential Math for Games and Interactive Applications. I highly recommend you read this last resource front to back. Seriously, its the best freaking math reference for graphics out there.
But knowing theory is not sufficient. You also need to get your hands dirty by writing code: learn how to build a software rasterizer (check out Tiny renderer) and a ray tracer (Ray Tracing in One Weekend series). Preferably in a language like C++. Then move onto APIs. I recommend you learn OpenGL, but if you're okay with being confused as all hell try Vulkan. Or WebGPU if you're a hipster (/s).
Finally, try to build some stuff. A simple engine. A non-trivial technique. A game. Whatever.
Unfortunately, you're unlikely to get hired working as a rendering engineer without having serious connections, or by having adjacent experience in the industry. Doubly so now that everyone is convinced junior engineers are unnecessary.
by jplusequalt - Thank you! I started recently as a greybeard engineer, and I found SDL3 GPU to be modern enough yet not too low level for a newbie compared to Vulkan. SDL in general is a fantastic framework. And if you use it from Odin, the dev experience is so smooth and enjoyable as everything you need to create graphical applications is builtin.
I will definitely check out Essential Math for Games and Interactive Applications, I feel I need some solid understanding of theory to see how it all fits together.
by sph - white background makes this page unreadable for meby wizzerking
- Is it okay if I only learn Python?by love0972
- I would learn both Claude and ChatGPT just to be safe.by stefangordon
- For some reason, graphics is one of most popular topics for recreational programming.by smetannik
- Because it’s fun as hell and a super deep rabbit hole?by purple-leafy
- I still have a gripe over the fact The Book of Shaders which never gets finished [0].
Perhaps I'll write such a book... after I finish my game (dry laughter).
by raincole - I’m not a graphics programmer but had alot of fun building a raycaster in C. Fun math and actually really simple relatively.
I’m going to revisit raycasting with a browser based raycaster from scratch.
I’m just finishing up a webgl + canvas game engine and game for a 2D top down grid strategy game first
by purple-leafy - I think the advent of world models is going to open up a lot of interesting 3D applications with related graphics & rendering challenges. That intersecting with WebGPU general availability across browsers IMO makes graphics programming a very interesting domain to get into now. I certainly see the need in my dayjob.by pcmaffey
- I just opened up that ray tracing tutorial and am slowly going through it, I've always been interested but never got around to it. Today I learned about the PPM image format, very accessible for this kind of thing! I mean writing a bitmap isn't rocket science but PPM is even easier.by Cthulhu_
- My focus area in college was Computer Graphics. There is not enough focus about the math in this article, it just kind of passively mentions it. "Well you can get by with just a little bit of this and that" -- Linear Algebra is huge! So is an Engineering style Calculus course -- not your business calc. Those two require a year of their own to gain mastery. IMO, pick up:
Linear Alegbra Done Right Calculus Better Explained Concrete Mathmetics.
Then you can move on to the low level APIs.
by dimitrios1 - trigonometry->Coordinate Geometry -> Linear Algebra applied to graphics
Once you have that intuition, the rest is all figuring out the stages of the graphics pipeline and the frameworks like opengl and their constituent data structures.
by psram1986 - My only additions to the article would be to study your probability/statistics (can't do efficient path tracing without it) and get comfortable with integrals, especially integrals on a sphere (physically based rendering will be a lot easier to understand).by nicebyte
- I love @Animats comment!
I come from reading about CRDTs from Evan Wallace and also having built a product used by >40M users.
It applies to software products too!
In their words…
If you want to build products, use React or even vibecode; you will learn higher-level issues of solutions to problems (i.e. people problems rather than machine problems), not how to push data/state/computation around. The problem is solving a need.
Neither is good nor bad; just be clear about your goals and then it’ll be easy to decide if you want to follow Zynga’s cofounder, Jonathan Blow, or Notch! And before you rush to answer… consider whether any of them are happy.
For people who recommend against learning these skills because “what Carmack did is not possible anymore.”… well, if what you look for is money then yeah! But, if you just want to learn for the love of the game, then that would be a very bad advice!
by dvrp - Depends on what you want to do.
If you just want to make a game, use a game engine like Unity, Godot or Unreal.
If you want to do graphics, like making engines, simulations, renderers then you should learn a low-level language and a graphics API. For the language I recommend C++, you can also use C or Rust but C might be a bit too difficult and you don't want to fight the language since graphics APIs are already hard. Rust might also be a good choice but I personally find the compile times very slow and the syntax to be ugly.
As for the API, go with OpenGL, it's cross-platform, old (which is good and bad at the same time) and is the easiest of them all.
learnopengl.com is by far the best tutorial on opengl, so I suggest following that.
After using opengl for a while you can branch out and use something like Vulkan or a graphics library that implements all of them, or even keep using opengl if its fine for you.
It's definetly not easy but it's one of the most fascinating parts of CS imo
by Mierenik - Should also include be under 25 and have lots of time to dedicate to it. I've always been interested in the idea of graphics programming and a few years ago I started teaching myself vulkan. Not sure quite how long I spent in total, 6 months of free evenings, maybe a bit less. I'm close to having a rendering framework. But it's one of those things where the further you get with it the more you realise how little you know. You feel like you're sort of happy with how things work and then you discover, no that's not the right architecture. I guess it's basically the mathematics of applied lighting. That's what your doing. The rest of it is the plumbing. Oops, why do my spotlights shine straight through the cube? Oh, I need to calculate shadows. Spend a couple of weeks working out how to get that into the render pipeline. But it is a lot of "fun" if you're into that sort of thing.by satnhak
- Sadly, Vulkan is really painful way of learning graphics programming. Doing almost anything requires large amounts of boilerplate. Almost everything you need to do, for example to make shadows, requires just 10x more code than the technique fundamentally requires.
For learning graphics programming, in my opinion, writing software renderers is much more enjoyable path. Code is less, the code you write touches fundamental and not boilerplate. Downside is that code will be slower as you will lose HW acceleration.
by deliciousturkey - I had some difficulties making sense of _color_ in context of graphics programming, especially transfer functions (sometimes misleadingly called tone mapping).
Good article on color management in general, which has a great intersection with foundations needed for graphics programming: https://chrisbrejon.com/cg-cinematography/chapter-1-color-ma...
by ivanjermakov - I again feel compelled to link to the quite excellent Color FAQ: <https://poynton.ca/pdf/ColourFAQ.pdf>by teddyh
- > sometimes misleadingly called tone mapping
sometimes is an understatement there. It took me like a decade to get that shit right. Graphics in general seems to suffer from bad explanations repeated everywhere. We need more authoritative textbooks.
by yunnpp - Update: and this one, with more on display transforms
https://chrisbrejon.com/articles/ocio-display-transforms-and...
by ivanjermakov - Color is so difficult. That's a good article. A graphics programmer should absolutely have an understanding of color. It's getting really hard now that games also implement HDR features, which few can understand. Great video on the problems here:by qingcharles
- I think that Khan Academy has a lot of graphics programmers that you might be interested in seeing. They use processing js. https://www.khanacademy.org/computing/computer-programming/b...
This guy has some good art: https://www.khanacademy.org/profile/kaid_1019042693170894950...
by sudo_cowsay - And this person: https://www.khanacademy.org/profile/kaid_9428127706426004539...by sudo_cowsay
- unfortunately, khan academy has been deleting old accounts: https://kap-archive.bhavjit.com/view?p=6177161966469120by sudo_cowsay
Related stories
AI Meets Cryptography 1: What AI Found in Cloudflare's Circl
blog.zksecurity.xyz · 111 points · 12 comments
Decoding the obfuscated bash script on a Uniqlo t-shirt
tris.sherliker.net · 1072 points · 181 comments
StreetComplete: Fixing OpenStreetMap, one tiny quest at a time
streetcomplete.app · 761 points · 182 comments
Every new car sold in the European Union must include a driver monitoring camera
allaboutcookies.org · 737 points · 969 comments
Chat Control 1.0 and 2.0 Explained
fightchatcontrol.eu · 645 points · 238 comments
Microsoft fire idTech team at Id software
gamefromscratch.com · 597 points · 533 comments